论文链接: https://arxiv.org/abs/1912.08193. 源码连接: https://github.com/facebookresearch/detectron2/tree/master/projects/PointRend.
作者将图像分割视做渲染问题,并提出了PointRend(基于点的渲染)神经网络模块。这个模块基于迭代细分算法在自适应选择的位置执行基于点的分段预测。它可以灵活地在语义/实例分割模型中使用。
用于图像分割的CNN操作的都是规则的网格,规则网格很方便,但不一定在计算上适合图像分割任务。这些网络预测的标签图应该基本上是平滑的,即,相邻像素经常有相同的标签,因为高频区域受限于对象之间的稀疏边界。规则网格将不必要地对平滑区域进行过度采样,同时对对象边界进行欠采样。 结果导致在平滑区域和轮廓模糊的情况下进行了大量的计算。 本文的中心思想是将图像分割视为一种渲染问题,并使计算机图形学中的经典思想适应有效地“渲染”高质量标签图。作者将这种计算思想封装在一个名为PointRend的新神经网络模块中,该模块使用细分策略来自适应地选择要在其上计算标签的一组非均匀点。它的细分策略使用的浮点运算比直接的密集计算要少一个数量级,从而可以有效地计算高分辨率分割图。
渲染是将模型(例如3D网格)显示为像素的规则网格,即图像。 尽管输出表示形式是规则网格,但是基础物理实体(例如3D模型)是连续的,可以使用物理和几何推理(例如光线跟踪)在图像平面上的任何实值点查询其物理占用率和其他属性。我们可以将图像分割视为基础连续实体的占用图,然后从中“渲染”分割输出,该分割输出是预测标签的规则网格。该实体被编码在网络的特征图中,可以通过在任何点插值进行访问。一个参数化的函数,经过训练可以根据这些内插的点状特征表示法预测占用率,与物理和几何推理相对应。基于此,作者提出了PointRend(基于点的渲染)作为使用点表示的图像分割方法。一个PointRend模块接受一个或多个典型的CNN特征图 f ∈ R C × H × W ) f\in R^{C\times H\times W}) f∈RC×H×W)每一个都定义了一个规则的网格,输出为k类的标签 p ∈ R K × H ′ × W ′ p\in R^{K\times H^{'}\times W^{'}} p∈RK×H′×W′,PointRend包含两种主要组成部分:(1)一个点选择策略,选择一些真值点去进行预测,避免了对高分辨率的输出网格中的所有点进行计算,减少了计算量。(2)对于每一个选择出来的点,提取逐点特征。结果是能够利用以 f f f的信道维度编码的子像素信息来预测具有比 f f f更高的分辨率的分割。 (3)一个point head,一个经过训练的小神经网络,可以针对每个点独立地根据此点的特征来预测标签值。 PointRend可以用在语义和实例分割中。在实例分割中,它应用于每个区域,由粗到细预测腌膜,如下图。对于语义分割,整个图像被当做一个大区域,作者将在实例分段的情况下描述PointRend。
方法的核心是灵活的在图像中选择点进行预测标签。直观上,这些点应更密集地位于高频区域(例如对象边界)附近,类似于光线跟踪中的抗锯齿问题。通过仅在与相邻点值不同的位置进行计算,该技术可用于有效地渲染高分辨率图像(例如,通过光线跟踪);对于其他的位置,通过对已经计算的输出值进行插值来获得这些值。
作者的推理选择策略受到计算机图形学中自适应细分经典技术的启发。对于每个区域,我们以粗糙到精细的方式迭代地“渲染”输出腌膜。最粗糙级别的预测由规则网格的点给出(例如通过使用标准的粗分割预测头部得出)。在每次迭代中,PointRend使用双线性插值向上采样其先前预测的分割结果,然后选择N个最不确定的点(例如,二进制腌膜的概率最接近0.5的那些)。然后PointRend计算逐点特征并预测标签。重复该过程,直到将分割向上采样到所需的分辨率为止。下图说明了此过程的一个步骤: 所需的输出分辨率为 M × M M×M M×M像素,起始分辨率为 M × M 0 M_×M_0 M×M0,PointRend需要不超过 N l o g 2 M M 0 Nlog_2\frac{M}{M_0} Nlog2M0M个点去预测,这比 M × M M×M M×M小得多,这使PointRend可以更有效地进行高分辨率预测。
在训练期间,PointRend还需要选择要在哪些点上去构建特征用来训练point head。原则上,点选择策略可以类似于推理中使用的细分策略。但是,细分引入了顺序步骤,这些步骤对于通过反向传播训练神经网络不太友好。 作为替代,使用了基于随机抽样的非迭代策略。 采样策略在特征图上选择N个点进行训练,它旨在使用三个原理将选择偏向不确定区域,同时还保留一定程度的统一覆盖范围。 原理(1):过度生成:通过从均匀分布中随机采样 k N kN kN个点 ( k > 1 ) (k> 1) (k>1)来过度生成候选点。 原理(2):重要性采样:通过对所有 k N kN kN个点的粗略预测值进行插值并计算特定于任务的不确定性估计值,将重点放在具有不确定性的点上。 从 k N kN kN个候选中选择最不确定的 β N βN βN个点 ( β ∈ [ 0 , 1 ] ) (β∈[0,1]) (β∈[0,1])。 原理(3):覆盖率:从均匀分布中采样剩余的 ( 1 − β ) N (1-β)N (1−β)N 个点。 用不同的设置来说明该过程,并将其与常规网格选择进行比较,如下图: 在训练时,预测和损失函数仅在N个采样点上进行计算(除粗分割外),这比通过细分步骤进行反向传播更简单,更有效。 这种设计类似于在Faster R-CNN系统中对RPN + Fast R-CNN的并行训练,其推理是顺序的。
PointRend通过组合(例如,级联)两种特征类型(细粒度和粗略预测特征)在选定点构造逐点特征,接下来将进行介绍。
为了允许PointRend呈现精细的分割细节,从CNN特征图中提取每个采样点的特征向量。因为一个点是一个实值2D坐标,按照标准做法对特征图执行双线性插值以计算特征向量。可以从单个要素图中提取要素(例如,ResNet中的res2); 还可以按照Hypercolumn方法从多个特征图(例如res2到res5,或它们的特征金字塔对应物)中提取它们并将它们串联起来。
细粒度的功能可以解析细节,但在两个方面也有不足。首先,它们不包含特定于区域的信息,因此被两个实例的边界框重叠的同一点将具有相同的细粒度特征。 但是,该点只能位于一个实例的前景中。 因此,对于实例分割的任务,其中不同的区域可能为同一点预测不同的标签,需要附加的特定于区域的信息。 其次,取决于用哪些特征图来获得于细粒度特征,特征可能仅包含相对较低级别的信息(例如,我们将对res2与DeepLabV3一起使用)。 在这种情况下,具有更多上下文和语义信息的特征源可能会有所帮助。 此问题影响者实例分割和语义分割。 基于这些考虑,第二特征类型是来自网络的粗略分割预测,即,在表示K类预测的区域(框)中的每个点处的K维向量。 通过设计,此结果提供了更多的全局上下文,同时通道表达了语义类别。 这些粗略的预测类似于现有架构的输出,并且在训练过程中以与现有模型相同的方式进行监督。 例如,实例分割中 粗略预测可以是例如Mask R-CNN中Mask Head的输出的轻量级7×7分辨率的特征图。 对于语义分割,它可以是例如来自步长16特征图的预测。
给定每个选定点,PointRend使用简单的多层感知器(MLP)进行逐点的分割预测。该MLP在所有点(和所有区域)上共享权重,类似于图卷积或PointNet。由于MLP会预测每个点的细分标签,因此可以通过标准的特定于任务的细分割损失进行训练。