实例分割-PolarMask

2021-03-04 10:49:47 浏览数 (1)

CVPR2020

论文:PolarMask: Single Shot Instance Segmentation with Polar Representation

代码:https://github.com/xieenze/PolarMask

PolarMask是一种基于FCOS的,单阶段的实例分割框架。它首次证明了实例分割的复杂性,无论是网络设计还是计算复杂度,都可以和bbox目标检测相同,并且具有不错的准确性。

¶1. 框架

实例分割mask的表示方式:

  1. 像素表示法(图b):对每个像素分类,如Mask R-CNN。
  2. 轮廓表示法(图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 对应的小扇形面积的积分。上述公式离散化为:

,且实验发现平方去掉对结果影响不大,因此公式简化为:

text { Polar } mathrm{IoU}=frac{sum_{i=1}^{n} d_{mathrm{min}}}{sum_{i=1}^{n} d_{mathrm{max}}}

Polar IoU Loss就是对Polar IoU采用BCE(binary cross entropy)损失,即:

text { Polar IoU Loss }=log frac{sum_{i=1}^{n} d_{max }}{sum_{i=1}^{n} d_{min }}

¶2.3 推理阶段

在推理阶段,与FCOS一样,将中心度和分类的结果相乘,作为最终的置信度得分。计算mask的最小bbox,经过IoU阈值为0.5的NMS产生最终结果。

¶3. 遗留问题

  1. 不能很好解决面包圈样式的实例。(作者指出)
  2. Polar IoU中的预测d的中心其实并未与真正的中心对齐,因此IoU计算的准确性受中心准确性的影响。(知乎网友)

0 人点赞