- PointRend(Point-based Rending) 模块, 将图像分割问题视作图像渲染问题, 基于迭代细分算法,在自适应选择的位置进行基于点的分割预测。
- PointRend 基于当前模型(如 deeplabv3), 可以灵活的应用于实例分割或语义分割。
- 优势:PointRend输出清晰的对象边界,而之前方法(如Mask R-CNN)会有边缘过度平滑的现象。
PointRend 模块
- 是一个通用模块, 可以合并到SOTA backbone 中,如 MaskR-CNN, Deeplabv3;
- 使用subdivision策略自适应地选择一组非均匀的点来计算 label;
- subdivision策略使用的浮点运算, 比直接的密集计算要少一个数量级,从而可以有效地计算高分辨率分割图;
- 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;
语义分割: 将整个图像视为一个区域。
Point Selection for Inference and Training
算法核心思想:在图像平面中灵活,自适应的选择点(points)来预测分割标签。直观上,这些点应该更密集地位于高频区域附近,如对象边界,类似于光线追踪中的抗锯齿问题(anti-aliasing,也译为边缘柔化、消除混叠等),推理和训练阶段应用了这一思想。
Inference(推理)
推理选择策略是受到计算机图形学中经典的自适应细分技术(adaptive subdivision)的启发。该技术被用来有效地渲染高分辨率的图像(例如,通过光线追踪),只计算在该值与相邻值有显著差异的位置;对于所有其他位置,通过对已计算的输出值(从粗网格开始)进行插值来获得值。
一个自适应细分步骤的示例。采用双线性插值的方法对4×4网格的预测进行2×上采样。然后,PointRend对N个最模糊的点(黑点)进行预测,以恢复更精细网格上的细节。重复此过程,直到达到所需的网格分辨率。
Train(训练)
在训练期间,PointRend还需要选择训练点来构造 point-wise features,以训练point head。原则上,点的选择策略可以类似于推理中使用的细分策略。但是, subdivision 引入了顺序步骤,这对使用反向传播训练的神经网络不太友好。相反,对于训练,我们使用基于随机采样的非迭代策略。
训练期间采样点。我们显示了对相同的粗预测 使用不同采样策略的
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