训练遮罩RCNN,但总是从所有提案中得到0个正边界框吗?

时间:2019-03-31 21:57:53

标签: python machine-learning computer-vision pytorch faster-rcnn

我刚刚从头开始在Pytorch中实现了Mask RCNN,下面是代码:https://github.com/arthurhero/Mask_R-CNN_Pytorch/blob/master/masker_ops.py

我在两台单独的机器上只有一台GTX1080和一台Quadro6000,因此每次迭代只能训练2张img。我的问题是,掩码RCNN通常需要花费多长时间?我怎么知道它是否在正确的轨道上?

现在,我只训练RPN头(所以这是四个“实用步骤”中的第一个)。经过一夜的训练,该模型仍然给我很多“ 0个正bboxes”的通知,即,当它为img的每个bbox分配标签时,它们全都是负的(没有足够大的真实值) bbox)。而且,随着培训的进行,似乎“ 0阳性bbox”通知的数量并没有减少。

我想到了几个原因。

  1. 现在,如果其中一个img具有“ 0个正bboxes”,我将跳过整个批处理,只是因为它将使张量形状对于以后的计算很奇怪。人们通常如何处理这种情况?会给培训带来太多的效率低下吗?

  2. 学习率可能太大?我目前使用的是0.02。但是由于我的批处理量只有2个,这个学习率是否过高?

  3. 我对将偏移量应用于锚点的方式有些疑问...当前,RPN头返回相对于锚点框的dy,dx,logh,logw。将这些偏移量应用于锚框的代码如下:

    center_y = center_y + (dy*height) center_x = center_x + (dx*width) height = height * torch.exp(dh) width = width * torch.exp(dw)

    生成的bbox可能超出了原始锚点的边界(如果dy和dx大)。但是,当将此bbox分配为“负”时,如果原始锚点中心的类标签为正,则将受到惩罚。这对我来说似乎不公平……我在这里误会了吗?还是没关系?我们是否应该对这些偏移量施加一些严格的约束,以使生成的bbox距离锚点不会太远?

  4. for循环太多。这是ROIAlign层和“建议”过滤器层的问题。由于每个img可能具有不同数量的已过滤提议,并且仅仅是因为很难操纵5D张量...我通常只是沿批处理轴拆分批处理bbox或提议,并使用for循环处理集合一次提交一张img的提案。但是从我对OS的有限了解来看,GPU在执行串行工作方面似乎很糟糕。这些循环是否拖累了训练的速度?还有没有更好的方法可以在没有for循环的情况下在5d张量上实现这些计算?

  5. GPU太少。基本问题:是否有可能仅在一个GPU上训练Mask RCNN?如果不是,对于价格便宜的对象遮罩有何建议?我听说YOLO在计算上也非常昂贵...

非常感谢!

-Z

0 个答案:

没有答案