本文是对《PointRend-Image Segmentation as Rendering》一文的浅显翻译与理解,如有侵权即刻删除。
更多相关文章,请移步:
文献阅读总结:计算机视觉
Title
《PointRend: Image Segmentation as Rendering》
——CVPR2020
Author: Alexander Kirillov
总结
文章认为,当前的图像分割取点都是均匀分布,往往过于粗糙,如果对精度提高要求,又会导致计算量过大。文章借鉴计算机图形学领域渲染的思想,提出了非均匀取点的图像分割算法PointRend。具体地,算法对目标的低频中心区域采用粗粒度分割,而对高频边缘区域进行细粒度的细分,从而在减少计算量的基础上,提升了精度。
1 图像分割
图像分割(image segmentation),即将图像按照不同目标进行分割,为像素点分配属于不同目标的标签,一般分为语义分割(semantic segmentation)和实例分割(instance segmentation)。
(Arnab, Anurag, et al. “Conditional Random Fields Meet Deep Neural Networks for Semantic Segmentation: Combining Probabilistic Graphical Models with Deep Learning for Structured Prediction…” 35 (2018): 37-52.)
语义分割往往为同一类目标分配相似的标签,如上图左,人被分配的颜色是很近似的。而实例分割即便是同一类目标,也会分配不同的标签,如上图右,人被分成了不同的颜色。
在现有的图像分割方法中,往往都采用均匀分布的取点方式,即划定一个网格,通常按照相等的比例进行采点,如下图(a)。
文章指出,这种均匀取点的方式存在两个问题:过采样和欠采样。具体而言,对于本身比较平滑的低频中心目标区域,这一区域中像素点的标签都是相似或相同的,不需要取均匀分布那么多的点,就出现了过采样。对于目标与目标之间的高频边缘区域,这一区域中像素点的标签往往大不相同,使用均匀分布取点又会漏掉很多信息。
在计算机图形学的渲染思想中,如图(b)所示,对图像边缘进行渲染时,往往使用的是非均匀分布的取点方式。借鉴这种思路,文章提出了PointRend算法,只对边缘区域加强取点数量进行细粒度细分,而低频中心区域仍然保持粗粒度分割,达到了较好的效果。下图每一组图片,左边代表的都是Mask R-CNN本体的取点方式,右边代表的是加上了PointRend的取点方式,对边缘部分的分割显然更好。
2 PointRend
该算法是一种通用的框架,可以附加在当前图像分割的模型上,其输入是一张或多张CNN的特征图,输出是任意精度的边缘细分图像。所谓任意精度,即算法可以通过多次放缩,将原本粗粒度图像的分辨率扩大。值得注意的是,传统图像分割往往给出的是原图1/8或1/16大小的粗粒度分割图,而使用PointRend,就可以不断迭代提高这个精度,如下图所示。
2.1 推理
对于算法实际运用,文章将其定义为推理(inference),即对边缘区域像素点进行细分推理得到标签。
首先,对一个属于边缘区域的网格,按照粗粒度分割得到的结果,可以选择最难确定的top-N个像素点。所谓难确定,即对一个像素点而言,其属于某一标签的概率趋近于0.5,则说明有一半概率属于该标签,一半不属于。越接近0.5,自然越难以确定。
如上图所示,每次迭代对分辨率进行放大,在这个过程中只对选择的top-N的像素点进行细分,对其他点仍然是粗粒度分割,这样通过几轮迭代,就可以达到提高分辨率的效果。
2.2 训练
上述介绍的是算法模型在训练完成后,实际运用的过程,而在训练过程中,算法分为如下三个部分。
对top-N个难点的选择,算法使用随机采样来过采样KN个点(k>1),从中选择βN个最难确定点(0<β<1),来保证边缘细分的精度,再选择(1-β)N个随机采样点,保证采点范围的广度,如下图所示。
通过实验,文章认为平衡了广度和精度的参数值效果最好,即图©。
特征选择上,文章除了采用细粒度的局部特征,还采用了粗粒度的全局特征。文章认为仅使用细粒度特征存在两方面不足:(1)不包含特定于区域的信息,致使两个目标重叠的一点只会被预测为某一个目标标签。(2)细粒度的特征映射包含信息级别较低,即局部信息,而表达上下文环境的全局信息也同样有价值。
如上图所示,coarse prediction指的就是粗粒度特征,即对图像收缩后的粗略预测,而fine-grained即细粒度特征,只针对边缘部分的一些像素点进行计算。通过结合两种特征,文章使用MLP对边缘的像素点进行标签预测,就最终完成了对图像的分割。