PointRend: Image Segmentation as Rendering论文翻译

摘要

通过模拟计算机图形学的方法,针对在语义分割中出现的过拟合和欠拟合问题,将分割问题看做图像渲染问题。基于此,提出了PointRend(基于点渲染)神经网络模块。该模块基于迭代细分算法,在自适应选择的位置进行基于点的分割预测。PointRend模块能够很灵活的被嵌套加载运用于现今存在的各个实例和语义分割模型上。定性的讲,PointRend能够对物体的边缘进行更好的分割(crisp object boundaries);定量的讲,在COCO相关的数据集上均取得了长足的进步,并且其显存的高效利用使得其输出的分辨率是其他现有模型所不能做到的。

代码地址
论文链接

用于图像分割的CNNs网络通常都是在规则的网格上进行操作的,输入的图片会被表征成规则的像素网格,它们的隐藏特征也就是每一个网格点的特征向量,它们的输出就是每一个网格的预测标签结果。常规的网格均匀采样法肯定是最方便有效的,但是对于图像分割问题来说,就不一定是理想的计算方式了。因为该种表征方法,最后生成的标签往往都是已经被平滑处理过了的,比如,相邻的像素点更有可能是相同的标签。因此,从这个角度来看,常规的均匀采样法往往会导致对目标边缘区域的轮廓表述不清晰,而对平滑区域进行了不必要的过度采样,从而导致的结果就是,在分割的边界区域会较为模糊

图像分割处理往往都是在低分辨率上进行低,比如对于语义分割来说,可能只有输入图像的1/8,对于实例分割来说,可能就是,这种处理办法也是在过度采样和欠采样之间做的一种妥协。

因此,很明显,如果我们希望在分割图的边界区域更加准确,那可能我们首先就要改变我们的采样策略,即我们应该更关注于那些处在图像边界区域的点,而不是传统方法中的均匀采样。因此,作者也是借鉴了在计算机图形学的一种图像渲染方法(其实就是类似的采样问题),就是在图像平面内自适应的采样一些点产生计算集合再去进行计算。因此,说白了,本文的核心思想就是设计了一种新的难点(分割问题上的话,可以默认为就是边缘点)采样方法,只不过借鉴了一点“渲染”的思路罢了,所以最后也就取名为了PointRend。而从最终的效果上来看,应该也是非常喜人的,达到了一定的目标,如论文开篇所展示的那样,在这里插入图片描述
PointRend只对少量选择的点进行预测,而不是对输出网格上的所有点进行过度预测。通过内插F提取选定点的逐点特征表示,然后根据每一个点提取出的特征,去预测该点所属的类别。

一个PointRend模块包括三个部分:
1)一种选择少量合适像素点的策略。这种策略能帮助模型尽可能少的去选择那些真正需要去进一步判断的点,从而避免计算量过大的问题。
2)对于每一个被选出来的点,如何对该点构建特征向量(point-wise feature representation)。
3)根据每一个点提取出的特征,去预测该点所属的类别。

接下来分别讨论三个部分:
该方法的核心思想是在图形平面上灵活、自适应的选择点来预测分割标签。因此,这些点应该更密集的位于高频区域附近,比如物体边界。因此整个逻辑分为推理和训练两个部分。
推理
对于每个区域,我们以一种从粗到细的方式反复“渲染”输出掩码。对规则网格上的点进行最粗水平的预测(如使用标准的粗分割预测头)。在每次迭代中,PointRend使用双线性插值对其先前预测的分割进行上采样,然后在这个密度较大的网格上选择N个最不确定的点(例如,对于二进制掩码,概率最接近0.5的点)。PointRend然后计算这N个点的逐点特征表示(在§3.2中简要描述),并预测它们的标签。这个过程重复,直到分割被上采样到一个最终输出的分辨率。推理上采样训练
在训练阶段,就无法进行迭代式的渲染操作了,因此需要采用一种基于随机采样的非迭代式策略。而该策略的实行目标就是在特征图上选取N点,但是呢这N个点又要倾向于那种不确定性高的区域(也就是边界),同时还得保证一定的均匀覆盖。因此,作者提出了3种基本原则,

1)Over generation:从均匀分布中随机选取kN个候选点。
2)Importance sampling:通过插值所有kN个点的粗预测值和计算特定任务的不确定估计,将重点放在粗预测不确定的点上。从kN个候选点中选取最不确定的β*N
3)Coverage:剩下的个点就从剩下的(1-β)*N个候选点均匀采样。在这里插入图片描述
在训练时,除了粗分割外,预测和损失函数只在N个采样点计算。

Point-wise Representation and Point Head

PointRend通过结合(例如,连接)两种特征类型,细粒度和粗粒度预测特征,在选定的点上构建点特征

  1. 细粒度特征

为了允许PointRend呈现精细的分割细节,我们从CNN特征图中提取每个采样点的特征向量。 因为一个点是“实值2D坐标”,所以我们按照标准做法对特征图执行双线性插值,以计算特征向量。 可以从单个特征图中提取特征(例如,ResNet中的res2);也可以按照Hypercolumn方法,从多个特征图(例如res2到res5)中提取并连接它们。

  1. 粗预测特征

细粒度的特征可以解析细节,但在两个方面也有不足:

首先,它们不包含特定区域的信息,因此,两个实例的边界框重叠的相同点将具有相同的细粒度特征。但是,该点只能位于一个实例之中。 因此,对于实例分割的任务,其中不同的区域可能针对同一点预测不同的标签,因此需要其他区域特定的信息。

其次,取决于用于细粒度特征的特征图,这些特征可能只包含相对较低级别的信息(例如,我们将对res2使用DeepLabV3)。 因此,需要有更多具有上下文和语义信息的特征。

基于这两点考虑,第二种特征类型是来自网络的粗分割预测,例如表示k类预测的区域(box)中每个点的k维向量。通过设计,粗分辨率能够提了更加全局的上下文信息,而通道则传递语义类别。这些粗略的预测与现有架构的输出相似,并且在训练过程中以与现有模型相同的方式进行监督。例如,在mask R-CNN中,粗预测可以是一个轻量级的7×7分辨率Mask头的输出。

  1. point head

给定每个选定点的逐点特征表示,PointRend使用简单的多层感知器(MLP)进行逐点分割预测。这个MLP在所有点(和所有区域)上共享权重,类似于图卷积或PointNet。由于MLP会预测每个点的分割标签,因此可以通过特定任务的分割loss进行训练。
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_46343115/article/details/121159865