论文笔记-PolarMask: Single Shot Instance Segmentation with Polar Representation

paper: PolarMask: Single Shot Instance Segmentation with Polar Representation

code: https://github.com/xieenze/PolarMask

作者知乎解答

PolarMask是CVPR2020的oral,相当于是FCOS的泛化版,关于FCOS的解读参考FCOS笔记

Abstract

  1. PolarMask算是一个新的实例分割的框架,用极坐标的方式建模实例分割任务,将实例分割任务建模为并行的实例中心点分类、密集距离预测的问题。该框架是单阶段、anchor-free的方式,非常简洁有效。
  2. 本篇论文的几个贡献点如下:
    • 提出一个相当于全新的实例分割的框架,如上所述
    • 为优化实例分割的效果,提出Polar CenterNess和Polar IoU loss两个贡献点。前者是为了获取更高质量的object类别信息,后者是为了优化网络的训练,获得更好的模型效果(论文中有对比Polar IoU loss和smooth l1 loss之间的性能差别)

Details

  1. 整体流程概述

    • 如上图所示,PolarMask由backbone和head两个模块组成,前者是经典网络backbone(ResNeXt等)+FPN的结构,后者是类似于FPN的网络结果预测的head,包括两部分,一个是分类的branch,一个是回归的branch(回归mask),其中,分类的branch由类别分类和polar centerness两个分支组成(polar centerness相当于FCOS中centerness的变形)
    • 经过上述两部分,网络预测出目标的mask,建模方式是:以feature map上的一个点为极坐标中心点,以固定角度增幅产生N条rays(论文角度增量为10度,则N等于36),如此可以计算出每个目标边缘距离中心点的ray线的距离,然后根据这个距离去拟合最优的mask(polar centerness和polar IoU loss都是基于这个距离做的)。
      • 因此,PolarMask其实就是做两方面工作,一个是类别的分类,一个是极坐标下上述距离的回归
    • 最终的网络预测,是在FPN结构的每一层都保留top 1k个样本(按照分类置信度得分和polar centerness的乘积过滤)。这时,相当于知道了样本点\((x_c, y_c)\)以及N个射线的距离\({d_1, d_2, ..., d_n}\),则该物体的边缘的点的坐标为:\(x_i = cos{\theta_i} \times d_i + x_c, y_i = sin{\theta_i} \times d_i + y_c\),然后将这些边缘点从0度开始逐个连接起来,构成该instance的轮廓,如下图
      • 细节1,如果一个射线与多个轮廓相交,即有物体的边缘点,则选择距离最长的那个
      • 细节2,如果一个射线以mask外的center作为起点,同时和该instance没有在特定角度没有交点,则将其回归的目标设置为最小值(此处个人理解是将回归的距离设置为最小值)
  2. 如何筛选并区分正负样本?

    • 对一个点\((x, y)\),如果其落在物体的重心周围,则认为是正样本,否则是负样本。
      • 重心:作者对比过选用bbox center还是mass-center,验证效果是后者更好,见下图。但是对于一些其他特殊形状的物体,可能两种方式都不合适,不过这里没有进一步展开了
        • 这里如何找到mass-center,还没想明白(好像是直接根据标定的gt值计算的),后续补上
      • 重心周围:这个范围的定义,作者是以mass-center上下左右的1.5倍区域作为该范围。相当于,每个样本mass-center周围有9-16个像素的样本会作为正样本,增大了正样本采样量,避免正负样本不均衡
    • PolarMask训练时,classification分支的loss还是focal loss
  3. Polar CenterNess

    • 前面已经阐述了如何进行正负样本的定义。同FCOS一样,PolarMask也希望能够通过centerness这个特性能够对一些low-quality的mask加大惩罚,获取high-quality的mask。见下图:
    • 具体做法是,给定中心点的N条射线的距离,用最短距离除以最长距离,以压缩该点到物体的重心处,公式为
    • 同FCOS一样,物体最终的分类得分是分类置信度得分乘以centerness值,然后和阈值0.05比较
  4. Polar IoU loss

    • 对于不同形状的目标,直接计算IoU并不容易,PolarMask这里提出了一种极坐标下的IoU的计算方式(这是和整个论文的思路相关的,因为PolarMask本身就是想在极坐标下实现目标的分割,所以Polar IoU就像是其自然产物一样),计算方式如下图:
      原图
      个人标注
      • 即,计算个人标注的图上红色区域的面积和绿色区域面积的比值
      • 直观的理解,求红色、绿色区域的面积可以通过积分的方式,如图中所示,不过在极坐标系下,可以将其转为计算距离比值的形式,即,进一步的简化为,最终,结合二分类的交叉熵,组成Polar IoU Loss,如下:
  5. 效果

    • 结果上看虽然mAP有些情况下并没有远高于一些SOTA方法,但是帧率比较可观,如下:
    • 更多的结果这里不再贴出来了

写在后面

  1. PolarMask可以看作是FCOS的泛化,bbox相当于4个点的contours,整体框架上看,PolarMask是相当于把FCOS的centerness改为Polar Centerness,然后对应的引入Polar IoU Loss
  2. 因为ray是根据一定角度筛选的,所以,理论上应该是ray数量越多,分得越细,边缘处理的越好。但是,假如物体的形状比较奇怪,那么这种方式对边缘的处理应该也会有缺陷,这一点作者在知乎也有阐述。
  3. 整体来看,PolarMask的处理方式很简单有效,应该会衍生出一些新的工作。

猜你喜欢

转载自www.cnblogs.com/xiangs/p/12968571.html