YOLACT

论文:https://openaccess.thecvf.com/content_ICCV_2019/papers/Bolya_YOLACT_Real-Time_Instance_Segmentation_ICCV_2019_paper.pdf

论文解读:https://zhuanlan.zhihu.com/p/76470432

NMS非极大值抑制:https://zhuanlan.zhihu.com/p/366201851

网络的名字是You Only Look At Coefficients的缩写。其处理500*500的图像速度可达33fps,而网络上视频常常是30fps的,因此认为real time的。结合下图中与其他模型的对比,可以认为,这篇文章所提出的改进方法的重点不在于提高模型的分割能力,而在于提高图像处理速度,以实现real time instance segment。

该网络用于保证速度的举措是:

  • 让prediction head输出prototype mask的coefficients;
  • 让protonet输出prototype mask。

让prototype mask和coefficients相乘,可以得到图片中每一个class的mask。

1. 网络结构

YOLACT的主要网络结构如下图所示。其最重要的创新点在于prototype和coefficients。

1.1 Prototype Generation

FPN的输出将会输入Protonet(其结构如下图所示):

protonet的最后一层输出是k个通道的。其没有明显的损失,损失是来自与coefficient相乘后得到的pred mask和ground truth mask之间的对比。

1.2 Mask Coefficients

YOLACT的预测头节点结构如下图所示(下图显示了其与传统实例分割网络的不同):

传统的head是进行bbox回归和class分类,而YOLACT的head额外输出一个Mask Coefficient,也是k通道的。

对于得到的prototype(简称P)和Mask Coefficent(简称C),最终的mask输出M可以表示为二者做矩阵乘法后通过一个sigmoid激活函数:

\[M = \sigma(PC^T) \]

最终的mask损失函数采用:

\[L_mask = BCE(M,M_{gt}) \]

2.NMS的改进

2.1 传统NMS

传统NMS算法的一个例子:假设对于一个目标得到6个bbox,分别为ABCDE,这个顺序是按照bbox的confidence进行从小到大排序的。依照下面步骤进行NMS:

  1. 找到confidence最大的bbox E,并计算E与其他bbox的IoU,将得到的4个IoU与某个threshold比较;
  2. 假设B和D与E的IoU都超过了threshold,则标记E为“保留”,并删除B和D;
  3. 对于剩下的bbox AC(与E的IoU低于threshold),重复上述判决,保留最大confidence的C,计算A和C的IoU...
  4. 最终得到保留的bbox。

2.2 Fast NMS

依然举上面ABCDE五个框的例子,假设使用Fast NMS,现在ABCDE五个bbox是按照confidence从大到小排列的结果,可以将IoU列在一个表格中:

A B C D E
A 1 0.8 0.1 0.2 0.3
B 1 0.6 0.4 0.1
C 1 0.6 0.2
D 1 0.4
E 1

此时将对角线以下的部分都删去,得到:

A B C D E
A 0.8 0.1 0.2 0.3
B 0.6 0.4 0.1
C 0.6 0.2
D 0.4
E

假设threshold=0.5,则因为0.8,0.6,0.6超过了阈值,所以在第一轮判决中,将会保留A,舍弃BCD。可以看出与传统NMS的区别在于:因为C、D和A的IoU都小于阈值,所以在传统的NMS中,他们会在这一轮被保留下来。而现在,判决依据从与A的IoU变成了与其他几个bbox的IoU的最大值。

这样做的结果是会降低准确度,但是大大提升了NMS的效率

posted @ 2024-01-31 17:11  PaB式乌龙茶  阅读(16)  评论(0编辑  收藏  举报