PointRend: Image Segmentation as Rendering

  • PointRend(Point-based Rending) 模块, 将图像分割问题视作图像渲染问题, 基于迭代细分算法,在自适应选择的位置进行基于点的分割预测。
  • PointRend 基于当前模型(如 deeplabv3), 可以灵活的应用于实例分割或语义分割。
  • 优势:PointRend输出清晰的对象边界,而之前方法(如Mask R-CNN)会有边缘过度平滑的现象。

PointRend: Image Segmentation as Rendering_第1张图片

PointRend 模块

  1. 是一个通用模块, 可以合并到SOTA backbone 中,如 MaskR-CNN, Deeplabv3;
  2. 使用subdivision策略自适应地选择一组非均匀的点来计算 label;
  3. subdivision策略使用的浮点运算, 比直接的密集计算要少一个数量级,从而可以有效地计算高分辨率分割图;
  4. PointRend 模块接受一个或多个定义在常规网格上的典型CNN特征图   f ( x 1 , y 1 ) \ f(x_{1}, y_{1})  f(x1,y1) ,并在一个更细的网格上输出高分辨率预测   p ( x i ′ , y i ′ ) \ p(x_{i}^{'}, y_{i}^{'})  p(xi,yi) 。与对输出网格上的所有点进行过度预测不同,PointRend只对精心选择的点进行预测。为了进行这些预测,它通过对   f \ f  f 进行插值来提取所选点的点向特征表示,并使用一个小的point head子网络来预测点向特征的输出标签。

总结: PointRend 可以高效的计算出对象之间的边界。

实例分割: 对每个区域应用PointRend, 通过对一组点进行预测,从粗到精计算mask;
语义分割: 将整个图像视为一个区域。

PointRend: Image Segmentation as Rendering_第2张图片

Point Selection for Inference and Training

算法核心思想:在图像平面中灵活,自适应的选择点(points)来预测分割标签。直观上,这些点应该更密集地位于高频区域附近,如对象边界,类似于光线追踪中的抗锯齿问题(anti-aliasing,也译为边缘柔化、消除混叠等),推理和训练阶段应用了这一思想。
Inference(推理)

   推理选择策略是受到计算机图形学中经典的自适应细分技术(adaptive subdivision)的启发。该技术被用来有效地渲染高分辨率的图像(例如,通过光线追踪),只计算在该值与相邻值有显著差异的位置;对于所有其他位置,通过对已计算的输出值(从粗网格开始)进行插值来获得值。
PointRend: Image Segmentation as Rendering_第3张图片
一个自适应细分步骤的示例。采用双线性插值的方法对4×4网格的预测进行2×上采样。然后,PointRend对N个最模糊的点(黑点)进行预测,以恢复更精细网格上的细节。重复此过程,直到达到所需的网格分辨率。

Train(训练)

    在训练期间,PointRend还需要选择训练点来构造 point-wise features,以训练point head。原则上,点的选择策略可以类似于推理中使用的细分策略。但是, subdivision 引入了顺序步骤,这对使用反向传播训练的神经网络不太友好。相反,对于训练,我们使用基于随机采样的非迭代策略
PointRend: Image Segmentation as Rendering_第4张图片
   训练期间采样点。我们显示了对相同的粗预测 使用不同采样策略的 N = 1 4 2 N = 14^{2} N=142个点。 为了获得高性能,每个区域仅使用少量偏差的采样策略对点进行采样,从而使系统在训练过程中效率更高。

 
 

实验和结果

    加入PointRend 的语义分割和实例分割 性能指标均优于 baseline 方法(具体指标见原文)
 

实现(code)

TODO…
https://github.com/JamesQFreeman/PointRend
https://github.com/zsef123/PointRend-PyTorch

 
 

Question

和CRF的区别?哪个效果更好?

 
 

Reference:

paper: https://arxiv.org/pdf/1912.08193.pdf
https://zhuanlan.zhihu.com/p/98189668

你可能感兴趣的:(深度学习)