《YOLACT Real-time Instance Segmentation》的阅读笔记

《YOLACT Real-time Instance Segmentation》的阅读笔记

    • 摘要
      • 实验效果
      • 整体架构
      • YOLACT
        • Mask coefficient
        • Mask Assembly
        • Emergent Behavior
      • YOLACT 检测器
        • FAST NMS
        • Semantic Segmentation Loss
      • Discussion
        • Localization Failure
        • Leakage

摘要

提出一种简单的,全卷积的实时实例分割模型,在coco数据集达到29.8mAP和33fps的效果。只需要在一个GPU上评估,极大的提高了同类方法的速度。该训练在一个GPU上执行的,将实例分割任务分解成两个并行的子任务:
1.生成一个原型掩码集合;
2.预测每个实例的掩码系数。然后通过结合原型与掩码系数的线性组合生成实例掩码。
3.提出了fast nms


实验效果

《YOLACT Real-time Instance Segmentation》的阅读笔记_第1张图片


整体架构

《YOLACT Real-time Instance Segmentation》的阅读笔记_第2张图片


YOLACT

将实例分割任务分解为两部分:
1.利用FCN生成图像大小的原型掩码,不依赖于任何一个instance.
2.添加一个head到目标检测分支来对每一个anchor预测一个“掩码系数”向量,其中每个anchor在原型空间都编码了一个instance的表达。
3.对于每个从NMS中幸存下来的instance通过线性组合两个分支的work来构建一个mask。
原型生成
原型生成分支为每幅图片生成k个原型掩码
《YOLACT Real-time Instance Segmentation》的阅读笔记_第3张图片

这里利用FPN中的P3作为输入,能生成更高质量的mask,对于小目标检测效果更佳。
对于protonet的输出不做限制,使得网络生成更大,更强的激活原型,因此在protonet后面接了RELU。


Mask coefficient

基于anchor的目标检测网络有两个分支,一个预测c个类别的确信度,一个预测bbox的4个回归值。对于mask系数,本文添加了第三个分支,来预测k个mask系数。每个系数对应一个原型。
因此,每个anchor对应了4+c+k个预测值。
《YOLACT Real-time Instance Segmentation》的阅读笔记_第4张图片


Mask Assembly

在这里插入图片描述
将mask系数与原型相结合,生成掩码。其中P是wxhxk,C是nxk,
n是从NMS中幸存下来的instance的个数。
损失函数分三个:
L_box,L_cls,L_mask(不表)
mask的裁剪则利用预测出的bbox
训练中用GT来裁剪mask


Emergent Behavior

FCN是平移不变的,而实例分割要求平移变化。因此FCIS和Mask-RCNN都试图显式的添加平移变化机制。或者利用directional map,或者利用位置敏感重池化,或者在第二阶段放置mask分支,这样就不必
处理实例定位的问题了。
在本文中,添加的唯一的平移变化是利用bbox来裁剪最终的mask。然而,本文发现,即便对于大型和中型的目标不裁剪,本文提出的方法一样有平移变化的效果。
原因是,YOLACT通过不同原型的激活自己学会了如何来定位实例。
通过下图可以看到,不同的原型图,对于不同位置的目标有不同的响应效果。
《YOLACT Real-time Instance Segmentation》的阅读笔记_第5张图片


YOLACT 检测器

ResNet-101,图像大小550x550.

FAST NMS

在许多文献中,NMS是顺序执行的。尽管NMS的速度快达5fps,对于30fps来说是一个障碍。为了解决传统的NMS的顺序执行问题,提出了fast NMS。
在该版本的NMS种,每一个instance都能同时被决定弃留。
首先对每一个类根据降序排列的top n检测结果计算一个cxnxn的IoU矩阵。
接下来,检测是否存在任何更高确信度的检测结果(该结果与当前的检测结果之间的IoU超过某个阈值t)
在这里插入图片描述
上三角矩阵。。。
对于每一个检测计算一个最大IoU值的矩阵K
在这里插入图片描述
最后,对K进行阈值为t的过滤,只留下比阈值小的检测结果。

(此处有些疑惑。。。难道是理解有问题?)
该方法跟传统方法比,存在一个问题,传统方法会保留确信度为最高的detection,而在该方法中,用t来过滤可能会对同一个类留下多个检测结果。。。

Semantic Segmentation Loss

原则是:在训练时利用额外的module,并计算一个额外的损失函数。而在测试时,去掉这个module,这样增加了特征的丰富度,且对速度无损害。(可自行查看。。。)


Discussion

Localization Failure

当在某个点处有过多的目标存在时,网络无法检测出每个目标,这种情况下,网络会输出一个近似前景的掩码而非一个实例的分割。(行1列1的卡车。。。)

Leakage

换句话说,就是不属于当前实例的掩码部分被划分到当前实例掩码中来了。。。
当检测框精准时,leakage不会发生,如行3列4.
例外是行2列4,第三个人的框框中,把第二个人的脚部也划分到了掩码之中,第二个人的框框把第一个人的脚错认为自己的掩码。。。(不仔细看还真看不出来。。。)

其他的就不提啦。。。
有什么问题请指教。。。
谢谢。。。

你可能感兴趣的:(实例分割)