YOLACT
论文解读: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激活函数:
最终的mask损失函数采用:
2.NMS的改进
2.1 传统NMS
传统NMS算法的一个例子:假设对于一个目标得到6个bbox,分别为ABCDE,这个顺序是按照bbox的confidence进行从小到大排序的。依照下面步骤进行NMS:
- 找到confidence最大的bbox E,并计算E与其他bbox的IoU,将得到的4个IoU与某个threshold比较;
- 假设B和D与E的IoU都超过了threshold,则标记E为“保留”,并删除B和D;
- 对于剩下的bbox AC(与E的IoU低于threshold),重复上述判决,保留最大confidence的C,计算A和C的IoU...
- 最终得到保留的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的效率。