源代码: https://github.com/dbolya/yolact
num_class是要放背景的类别,例如,假设你的类别是person,请记住此时的num_class应该是2。 因为也有必要算上背景啊。
在YOLACT的网络结构和输出YOLACT的backbone结构中,_make_layer是普通的resnet101中的_make_layer,具体如何操作是源代码https://github
其中浅蓝色的是今后使用的特征图。
YOLACT的FPN结构
FPN选择backbone结构中的1、2、3作为输入,得到新的输出,即橙色三角形0到4。
YOLACT的proto结构
将FPN中的输出0作为proto的输入,最终得到proto的输出(1,138,138,32 )。
YOLACT的pred_heads结构
中心3表示每个位置有3个预设anchor_box,然后对FPN中的所有特征图进行操作,得到对应的bbox、conf、mask、priors、proto。
还有输出segm。 具体操作如下图所示。
因此,网络训练时的输出包含在preds中
每3358www.Sina.com/anchorbox的预测偏移量,形状为(1,19248,4 )
33558www.Sina.com/anchorbox的类别预测,形状为(1,19248,num_class ) ) )。
'loc':为论文中指出的mask系数,形状为(1,19248,32 )
'conf':默认的anchorbox坐标,形状为(19248,4 )
3358与www.Sina.com/mask系数组合使用的分割特性图,形状为(1,138,138,32 )
'mask':获得类似分割的热曲线。 这里的形状是(1,num _ class-1,69,69 ),我认为segm用于快速收敛网络。
YOLACT的损失函数被具体调用的方法是train.py的类别classnetloss(nn.module )
self.criterion(self.net、preds、targets、masks、num_crowds )下面介绍这些参数。
net :上面的网络结构。
preds :是词典。 上面的红色字体部分是preds词典的内容。
targets :一般的形状是[batch,n,5],batch是指输入了普通的batchsize,n表示一张图片中有几个对象物体,5中前四个表示对象物体的坐标,第五个数字是
masks :常见的形式是“[batch,n,550,550”,该n不是固定的。 每个Batch图像得到的目标物体数量不同。 这个mask和maskrcnn的是一样的。
num_crowds:(batch,)表示拥挤的程度,0表示不拥挤,1表示拥挤,通常为0。