CVPR2020
论文:PolarMask: Single Shot Instance Segmentation with Polar Representation
代码:https://github.com/xieenze/PolarMask
PolarMask是一种基于FCOS的,单阶段的实例分割框架。它首次证明了实例分割的复杂性,无论是网络设计还是计算复杂度,都可以和bbox目标检测相同,并且具有不错的准确性。
¶1. 框架
实例分割mask的表示方式:
- 像素表示法(图b):对每个像素分类,如Mask R-CNN。
- 轮廓表示法(图c、d):图c中使用轮廓中的点的笛卡尔坐标表示,而本文采用图d所示的极坐标表示,把实例分割问题转化为实例中心点分类(instance center classification)问题和密集距离回归(dense distance regression)问题。
方法的框架如下:
通过backbone和特征金字塔提取特征,头部由中心点分类、Polar Centerness、以及射线长度回归三个分支组成。相比FCOS,只是把FCOS的回归分支的channel=4替换为channel=n, 这里n=36,相当于36根射线的长度。
经过网络,可以得到中心点的位置和类别、n根射线的长度,根据角度和射线长度得到轮廓点的坐标,从0°开始连接这些点,最后得到的连通区域就是实例分割的结果。
¶2. 实现细节
¶2.1 target
- 分类分支:实验对比了框中心和质心,选取效果更好的质心。正样本定义为特征图上质心周围1.5倍步长的区域。
- 回归距离:如果一条射线与实例轮廓有多个交点,选最长的一条。如果没有交点,取最小值如10^{-6}。
- Polar Centerness:text { Polar Centerness }=sqrt{frac{min left(left{d_{1}, d_{2}, ldots, d_{n}right}right)}{max left(left{d_{1}, d_{2}, ldots, d_{n}right}right)}},d为一个实例的n条射线长度。 根据下图可以看到,在实例分割任务中,Polar Centerness比原来FCOS的Centerness定义更好
¶2.2 Loss
分类分支使用Focal loss,Centerness分支使用交叉熵损失,回归分支使用自己定义的Polar IoU Loss:
首先,极坐标系中的IoU表示为:
即极坐标中,两个mask交和并的面积可以表示为无数个dtheta 对应的小扇形面积的积分。上述公式离散化为:
,且实验发现平方去掉对结果影响不大,因此公式简化为:
Polar IoU Loss就是对Polar IoU采用BCE(binary cross entropy)损失,即:
¶2.3 推理阶段
在推理阶段,与FCOS一样,将中心度和分类的结果相乘,作为最终的置信度得分。计算mask的最小bbox,经过IoU阈值为0.5的NMS产生最终结果。
¶3. 遗留问题
- 不能很好解决面包圈样式的实例。(作者指出)
- Polar IoU中的预测d的中心其实并未与真正的中心对齐,因此IoU计算的准确性受中心准确性的影响。(知乎网友)