论文关注的是图像分割质量问题。往往图像分割在物体边界处的分割质量很差,不能细致的分割出每个细节。因此作者提出了针对目标轮廓进行细化预测的一个模型:PointRend,其思想是以迭代的方式细化从目标轮廓区域选择的点的分割预测,将优化物体边缘的图像分割,适用于对难以分割的物体边缘,或是对边缘分割精度要求很高的场景下。
论文链接:https://arxiv.org/pdf/1912.08193.pdf
代码地址:https://github.com/facebookresearch/detectron2/blob/master/projects/PointRend
流程概述
- 首先将图像输入CNN backbone,得到细粒度特征(fine-grained features)。
- 然后根据来自网络的一个粗略预测 (coarse prediction)进行点选择。这里涉及了两种点选择策略。
- PointRend通过组合(级联)两种类型特征(细粒度和粗略预测特征),在选定点上构造逐点特征(point-wise features)。
- 最后,每个被选中的点特征,通过一个多层感知机(MLP)来进行分类预测,所有点共享MLP的权重,MLP可以通过标准的任务特定的分段损失来训练。
三大组件
通过概述,PointRend 模块可由三个主要组件构成:
- 点选择策略:选择少量真值点执行预测,避免对高分辨率输出网格中的所有像素进行过度计算;点选择能够有效节省算力,避免对高分辨率输出网格中的所有像素进行过度计算。
- 级联细粒度和粗略预测特征,对选中的每个点提取逐点特征表示:每个选中点的4个最近邻点,利用双线性内插计算真值点的特征;从粗略预测中得到点后,将其映射到细粒度特征图中,如上图所示。细粒度特征图具有原图尺寸,对每一个映射的点采用双线性插值,得到多通道单个点的特征。各个点的多通道细粒度特征具有物体的细节信息。粗预测特征提供更多的上下文信息,同时表达语义类别。最后拼接作为每个点的最终特征表示。
- point head:一个小型神经网络,根据逐点特征表示,PointRend使用一个简单的多层感知机MLP来预测类别标签。
点选择策略
仅仅选用少量的点,而非整个图像(分辨率大小)的点数量,避免了高昂的过度计算代价。
在这些点的选择上,希望能自适应的选择对图像分割最有帮助的点,如图像边缘附近的点。为了达成此目标,提出了inference和traing的点选择策略。
inference(预测分割时使用)
该策略借鉴了adaptive subdivision 的思想,常用语对高分辨率图像的渲染。
主要思想:
- 仅在与其邻域有显著不同的位置进行计算获得值;
- 对于其他位置,通过对已经计算的输出值进行插值来获得值。
对于每个区域,都采用从低分辨率(course)到高分辨率(fine)的方式,不断迭代“render”,输出mask。迭代过程可表示为:
while 输出的分辨率 < 目标分辨率:
对之前的预测结果coarse prediction_i-1 进行2倍双线性插值,扩大分辨率,上采样得到 coarse prediction_i。
挑选出 N 个最难分割的点,即结果很有可能和周围点不一样的点(例如物体边缘),如在二进制掩码中接近0.5的点。
对于每个难点,计算其点“表征向量”。“表征向量”由两个部分组成,其一是低层特征(fine-grained features),通过使用点的坐标,在低层的特征图上进行双线性插值获得(类似 RoI Align),其二是高层特征(coarse prediction),由步骤 1 获得。
使用 MLP 对“表征向量”计算得到新的预测,得到 coarse prediction_i+1。这个 MLP 其实可以看做一个只对“难点”的“表征向量”进行运算的由多个 conv1x1 组成的小网络。
图可表示点选择策略的过程。
training(训练网络时使用)
在训练过程中,PointRend同样需要选择一些点用于训练point head的逐点(point-wise)特征。原则上,点选择策略可以类似于inference中的策略subdivision。但是,subdivision引入了迭代步骤,这些步骤不利于通过反向传播训练神经网络。
因此,为了训练,使用了基于随机采样的非迭代策略。
随机采样策略在特征图上随机选择了N个点进行训练。为了将这些点偏向不确定的区域,成为“难点”,pointrend使用了如下三个步骤,同时还保留一定程度的均匀覆盖。
- 生成更多的点:以均匀分布取kN个候选点(k>1);
- 关注于那些不确定的粗预测点,通过对kN个点进行插值并计算了一个针对特定任务的不确定性估计,然后选择βN(β ∈[0,1])个最不确定的点。
- 从剩下的(1−β)N个点从均匀分布中选取。
上述三个步骤可示意为下图,在k和β变化的情况下,得到了各点对不同的偏向:
对于train和inference,N的值可以不同。
实验验证
该部分待复现pointrend后再写自己的经历。
放几张论文里的效果图:
总结
简而言之,PointRend使用一种非均匀的采样方式。
灵感来源于:因为分割模型最难判断的点基本上都在物体边缘,而边缘只占了整个物体中非常小的一部分。所以作者提出可以每次在预测出来的mask中只选择Top N最不确定的点进行细分预测。目的是在提高分辨率后确定边界上的点,并对这些点进行归类。该方法可以合并到当前主流的分割架构中,如mask r-cnn和FCN,其subdivision策略使用的浮点计算比直接的密集计算要少一个数据量,可以有效的计算得到高分辨率的分割mask。
这种新型的上采样方式,将优化物体边缘的图像分割,适用于对难以分割的物体边缘,或是对边缘分割精度要求很高的场景下。