PointRend

论文题目:PointRend: Image Segmentation as Rendering
论文链接:https://arxiv.org/pdf/1912.08193.pdf
代码地址:https://github.com/zsef123/PointRend-PyTorch


        语义分割问题。提出一个新型上采样方法,针对物体边缘的图像分割进行优化,使其在难以分割的物体边缘部分有更好的表现。


问题提出

        我们分割网络会存在一个问题,对平滑区域过采样,对边界欠采样。
        类比渲染问题,二者有类似的问题要解决:即物体边缘难以处理。高频区域多采样、低频区域少采样
        在典型的语义分割网络中(如FCN、DeepLab),在CNN内部一般都会相对输入图像进行降采样,然后再想办法上采样回去。实例分割网络中,Mask R-CNN 生成的 Mask 仅 28x28,这显然对物体边缘的预测十分不利。希望可以在低代价下仍然得到精细的分割结果。


大致思路

        模型最容易误判的 pixel基本上都在物体边缘, 边缘只占了整个物体中非常小的一部分。
        所以基于这样的一个想法,作者提出可以每次在预测出来的mask中只选择Top N最不确定的位置进行细分预测。


具体实现

        PointRend 模块包含三个主要组件:
        1、点选择策略:选择少量真值点执行预测,避免对高分辨率输出网格中的所有像素进行过度计算;
        2、对选中的每个点提取逐点特征表示:使用每个选中点在 f 规则网格上的 4 个最近邻点,利用 f 的双线性内插计算真值点的特征。因此,该方法能够利用 f 的通道维度中编码的子像素信息,来预测比 f 分辨率高的分割;
        3、point head:一个小型神经网络,用于基于逐点特征表示预测标签,它独立于每个点。每个细分点的特征可以通过Bilinear插值得到,每个位置上的classifier通过一个简单的MLP来实现。这其实是等价于用一个1*1的conv来预测,但是对于中心很确定的点并不计算。整体的示意图如下:

在这里插入图片描述

  • 预测头

        使用一个轻量级的预测头,对目标框产生一个粗略的掩模预测。对于每个边界框,我们使用双线性插值从FPN的P2层提取14×14特征映射。特征是在边界框内的规则网格上计算的(此操作可以看作是ROIallign的一个简单版本)。接下来,我们使用了一个步长为2×2的卷积层,该卷积层具有256个输出通道,后面跟着ReLU,从而将空间大小减小到7×7。最后,类似于掩模R-CNN的盒形头部,应用两个1024宽的隐藏层的MLP,对每个K类产生7×7的掩模预测。

  • 点选择策略

        推理:
        在每次迭代中,PointRend使用双线性插值对之前预测的分割进行上采样,然后在这个密度更大的网格上选择N个最不确定的点(例如,对于二值预测,概率接近0.5的点)。然后,PointRend为这N个点中的每一个点计算点特征表示,并预测它们的标签。这个过程是重复的,直到分割是上采样到所需的分辨率。一个coarse-to-fine的过程

在这里插入图片描述

        训练:
        在训练期间,PointRend还需要选择训练点来构造 point-wise features,以训练point head。原则上,点的选择策略可以类似于推理中使用的细分策略。但是, subdivision 引入了顺序步骤,这对使用反向传播训练的神经网络不太友好。相反,对于训练,我们使用基于随机采样的非迭代策略。
在这里插入图片描述

        (1)从均匀分布中随机抽取kN点(k>1)来生成候选点。
        (2)通过插值所有kN点的粗预测值,从kN个点中选取βN(β ∈[0,1])个最不确定的点。使用0.5与概率之间的距离作为逐点不确定性度量。
        (3)在从均匀分布中选取 (1 - β)N 个点。

  • 点的特征提取

        PointRend通过组合低层特征 (fine-grained features) 和高层特征 (coarse prediction),在选定的点上构造逐点特征。
        Fine-grained features:对每个采样点从CNN特征图上提取的特征向量。
        Coarse prediction features:来自网络的一个粗略预测。以实例分割为例,coarse prediction可以是Mask R-CNN中 7×7 轻量级mask head的输出。

        细粒度特征虽然可以解析细节,但也存在两方面的不足:
        (1)不包含特定区域信息,对于实例分割任务,就可能在同一点上预测出不同的标签。
        (2)用于细粒度特征的特征映射,可能仅包含相对较低级别的信息。
这就需要粗略分割预测 (coarse prediction features) 来进行补充,提供更多全局背景。

  • 点的分类预测

        通过一个多层感知机(MLP)来对每个被选中的点进行分类预测,所有点共享MLP的权重,MLP可以通过标准的任务特定的分段损失来训练。


实验结果

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述


总结

PointRend 方法要点总结来说是一个迭代上采样的过程:
        while 输出的分辨率 < 图片分辨率:
        1、 对输出结果进行2倍双线性插值上采样得到 coarse prediction_i。
        2、挑选出 N 个“难点”,即结果很有可能和周围点不一样的点(例如物体边缘)。
        3、对于每个难点,获取其“表征向量”,“表征向量”由两个部分组成,其一是低层特征(fine-grained features),通过使用点的坐标,在低层的特征图上进行双线性插值获得(类似 RoI Align),其二是高层特征(coarse prediction),由步骤 1 获得。
        4、使用 MLP 对“表征向量”计算得到新的预测,更新 coarse prediction_i 得到 coarse prediction_i+1。这个 MLP 其实可以看做一个只对“难点”的“表征向量”进行运算的由多个 conv1x1 组成的小网络。


参考

https://blog.csdn.net/huicheng_chen/article/details/103781237
https://zhuanlan.zhihu.com/p/98351269

发布了46 篇原创文章 · 获赞 15 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/sinat_34686158/article/details/104457405