2020CVPR解读之何恺明新作PointRend:将图像分割视作渲染问题,显著提升语义/实例分割性能

2020CVPR解读之何恺明新作PointRend:将图像分割视作渲染问题,显著提升语义/实例分割性能

论文原文
源码

【导读】Facebook人工智能实验室何恺明团队提出一种高效、高质量的目标和场景图像分割新方法。他们提出了一个独特的视角,将图像分割视为一个渲染问题,提出PointRend神经网络模块。建立在现有的最先进的模型之上,PointRend可以灵活地应用于实例分割和语义分割任务。

摘要

提出了一种有效的高质量图像分割方法。通过将经典的计算机图形学高效渲染问题与像素标记任务中的过采样和欠采样挑战相类比,我们发展了一种独特的图像分割作为渲染问题的观点。从这个角度出发,我们提出了PointRend(Point-based Rendering)神经网络模块:一个基于迭代细分算法,在自适应选择的位置执行基于点的分割预测的模块。PointRend可以通过建立在现有的最新模型之上,灵活地应用于实例和语义分割任务。虽然许多具体实现的总体思路是可能的,我们表明,一个简单的设计已经取得了良好的效果。从质量上讲,PointRend在以前的方法过度平滑的区域中输出清晰的对象边界。从数量上讲,PointRend在COCO和cityscape上都获得了显著的收益,比如语义分割。

1.引言

2020CVPR解读之何恺明新作PointRend:将图像分割视作渲染问题,显著提升语义/实例分割性能_第1张图片
图像分割任务包括将在规则网格上采样的像素映射到同一网格上的标签地图或一组标签地图。对于语义分割,标签映射指示每个像素处的预测类别。在实例分割的情况下,为每个检测到的对象预测二值前景与背景图。这些任务的现代选择工具是建立在卷积神经网络(CNN)上的。用于图像分割的cnn通常在规则网格上工作:输入图像是像素的规则网格,其隐藏表示是规则网格上的特征向量,其输出是规则网格上的标签地图。规则网格很方便,但不一定是图像分割的理想计算模板。由这些网络预测的标签地图应该大部分是平滑的,即相邻像素通常采用相同的标签,因为高频区域仅限于对象之间的稀疏边界。规则网格将不必要地过度采样平滑区域,同时在采样对象边界下。其结果是在平滑区域和模糊轮廓中进行过多的计算(图一左上角)。作为欠采样和过采样之间的折衷,图像分割方法通常在低分辨率规则网格上预测标签,例如,用于语义分割的输入的1/8[35]或28×28[19]进行分割。类似的抽样问题在计算机图形学中已经研究了几十年。例如,渲染器将模型(例如3D网格)映射到光栅化图像,即像素的规则网格。当输出在规则网格上时,计算不会在网格上均匀分配。相反,一种常见的图形策略是在图像平面上自适应选择的点的不规则子集上计算像素值。以文献[48]中的经典细分技术为例,它产生了一种四叉树样的采样模式,可以有效地渲染抗锯齿的高分辨率图像。本文的中心思想是将图像分割视为一个渲染问题,并将计算机图形学中的经典思想应用于高效“渲染”高质量的标签地图(见图1,左下角)。我们将这种计算思想封装在一个新的神经网络模块PointRend中,该模块使用细分策略自适应地选择一组不均匀的点来计算标签。PointRend可以合并到流行的元架构中,用于实例分割(例如Mask R-CNN[19])和语义分割(例如FCN[35])。它的细分策略比直接的、密集的计算少一个数量级的浮点运算,能有效地计算高分辨率的分割图。PointRend是一个通用模块,允许许多可能的实现。从抽象角度看,PointRend模块接受一个或多个典型的CNN特征图谱,这些被定义在常规网格上,并在更精细的网格上输出高分辨率预测P(Xi,Yi)。PointRend没有对输出网格上的所有点进行过多的预测,而是只对精心选择的点进行预测。为了进行这些预测,它通过插值f来提取所选点的逐点特征表示,并使用小的点头子网来预测逐点特征的输出标签。我们将介绍一个简单有效的PointRend实现。我们使用COCO[29]和Cityscapes[9]基准评估实例和语义分段任务的PointRend。定性地,PointRend有效地计算对象之间的尖锐边界。我们也观察到定量上的改进,PointRend显著提高了强 mask R-CNN和DeepLabV3[5]模型的性能。

2.相关的工作

(1)渲染
计算机图形学中的渲染算法输出一个规则的像素网格。然而,它们通常在一组非均匀点上计算这些像素值。像细分[48]和自适应采样[38,42]这样的有效程序在像素值具有较大方差的区域中细化粗光栅化。光线跟踪渲染器经常使用过度采样[50],这是一种比输出网格更密集的采样点以避免锯齿效果的技术。在这里,我们将经典细分应用于图像分割。
(2)非均匀网格表示
规则网格计算是二维图像分析的主要模式,但其他视觉任务则不是这样。在三维形状识别中,由于立方尺度的影响,大的三维网格是不可行的。大多数基于CNN的方法不超过64×64×64粗网格。相反,最近的研究考虑了更有效的非均匀表示,如网格[47,14]、有符号距离函数[37]和oc树[46]。与有符号距离函数类似,PointRend可以计算任意点的分段值。最近,Marin等人[36]提出了一种有效的语义分割网络,该网络基于在使用标准语义分割网络进行处理之前对输入图像进行非均匀子采样。相反,PointRend侧重于输出端的非均匀采样。也许可以将这两种方法结合起来,尽管[36]目前还未被证实例如分割。
(3)实例分割
基于Mask R-CNN元结构的实例分割方法[19]在最近的挑战中占据了领先地位[32,3]。这些基于区域的架构通常在28×28网格上预测掩模,而不考虑对象大小。这对于小对象来说已经足够了,但是对于大对象,它会产生不需要的“blobby”输出,从而过度平滑大对象的精细级别细节(参见图1,左上角)。另外,自下而上的方法将像素分组以形成对象掩模[31,1,25]。这些方法可以产生更详细的输出,但是,它们落后于大多数基于区域的实例分割方法[29,9,40]。TensorMask[7]是另一种滑动窗口方法,它使用复杂的网络设计来预测大型物体的高分辨率掩模,但其精度也稍显落后。在本文中,我们证明了一个基于区域的分割模型与PointRend相结合,在提高基于区域的方法精度的同时,可以产生具有精细细节的掩模。
(4)语义分割
完全卷积网络(FCNS)是现代语义处理方法的基础。他们通常预测分辨率低于输入网格的输出,并使用双线性上调幅来恢复剩余的8-16倍分辨率。结果可以通过扩展/萎缩卷积来改进,以牺牲更多的内存和计算量来代替一些子采样层[4,5]。可供选择的方法包括编码器-解码器的实现,其在编码器中对网格表示进行子采样,然后在解码器中对其进行子采样,使用跳过连接[44]来恢复过滤的细节。在应用双线性插值之前,当前的方法结合了扩张卷积和编解码器结构【6,30】在比输入网格更稀疏的网格上产生输出。在我们的工作中,我们提出了一种方法,可以有效地预测与输入网格一样密集的网格上的精细级别细节。

3.方法

我们将计算机视觉中的图像分割(对象和/或场景)类比为计算机图形学中的图像绘制。渲染是指将模型(如三维网格)显示为像素的规则网格,即图像。虽然输出表示是规则网格,但底层物理实体(例如,3D模型)是连续的,并且可以使用物理和几何推理(例如光线跟踪)在图像平面上的任何实际值点查询其物理占用率和其他属性。类似地,在计算机视觉中,我们可以把图像分割看作是一个潜在的连续实体的占用图,并且分割输出是一个规则的预测标签网格,从中“呈现”。实体被编码在网络的特征图中,并且可以通过插值在任何点上访问。参数化函数是物理和几何推理的对应函数,它被训练来根据这些插值的点特征表示来预测占用率。
在此基础上,我们提出了点渲染(PointRend)作为一种基于点表示的图像分割方法。PointRend模块接受一个或多个C通道f∈RC×H×W的典型CNN特征映射,每个特征映射定义在一个规则网格上(通常比图像网格粗4×到16×),并输出K类标签p∈RK×H的预测?×W?在不同分辨率(可能更高)的规则网格上。
2020CVPR解读之何恺明新作PointRend:将图像分割视作渲染问题,显著提升语义/实例分割性能_第2张图片
PointRend模块由三个主要部分组成:(i)点选择策略选择少量实值点进行预测,避免了高分辨率输出网格中所有像素的过度计算。(ii)对于每个选定点,提取逐点特征表示。实值点的特征通过f的双线性插值计算,使用f的规则网格上该点的四个最近邻,它能够利用在f的信道维度中编码的亚像素信息来预测比f具有更高分辨率的分段。(iii)点头:一个小的神经网络,训练用于从该点方向特征表示预测标签,独立于每个点。
PointRend体系结构可以应用于实例分割(例如,在Mask R-CNN上[19])和语义分割(例如,在FCNs上[35])任务。对于实例分割,PointRend应用于每个区域。它通过对一组选定的点进行预测,以粗略到精细的方式计算掩膜。对于语义分割,整个图像可以看作是一个单一的区域,因此在不丧失通用性的情况下,我们将在实例分割的上下文中描述PointRend。接下来我们将更详细地讨论这三个主要组件。
(1)推理训练的选点
该方法的核心思想是在图像平面上灵活自适应地选择点来预测分割标签。直观地说,这些点应该更密集地位于高频区域附近,例如对象边界,类似于光线跟踪中的抗锯齿问题。我们发展这个想法是为了推理和训练。
推断:
我们的推理选择策略受到了计算机图形学中经典的自适应细分技术[48]的启发。该技术通过仅在值与其邻域显著不同的高可能性位置进行计算来有效地渲染高分辨率图像(例如,通过光线跟踪);对于所有其他位置,通过插值已计算的输出值(从粗网格开始)来获得值。对于每个区域,我们以一种从粗到细的方式迭代“渲染”输出掩码。对规则网格上的点进行最粗级别的预测(例如,使用标准的粗分段预测头)。在每次迭代中,PointRend使用双线性插值对其先前预测的分割进行上采样,然后在此更密集的网格上选择N个最不确定的点(例如,对于二进制掩码,概率接近0.5的点)。PointRend然后计算这N个点的点特征表示,并预测它们的标签。此过程将重复,直到分段上采样到所需的分辨率。下图示例说明了该过程的一个步骤。
2020CVPR解读之何恺明新作PointRend:将图像分割视作渲染问题,显著提升语义/实例分割性能_第3张图片
训练:
在训练过程中,PointRend还需要选择点来构造点特征,以便训练点头。原则上,点选择策略可以类似于推理中使用的细分策略。然而,细分引入的序贯步骤对反向传播神经网络的训练不太友好。相反,对于训练,我们使用基于随机抽样的非迭代策略。采样策略选择特征地图上的N个点进行训练。
它的目的是偏向不确定区域的选择,同时保持一定程度的均匀覆盖,使用三个原则。(i) 过度生成:我们通过从均匀分布中随机抽样kN点(k>1)来过度生成候选点。(ii)重要性抽样:我们通过插值所有kN点的粗略预测值并计算特定任务的不确定性估计,来关注具有不确定粗略预测的点。从kN候选点中选出最不确定的βN点(β∈[0,1])。(iii)覆盖范围:从均匀分布中取样剩余的(1-β)N点。我们用不同的设置来说明这个过程,并将其与常规的网格选择进行比较,如图5所示。在训练时,预测和损失函数只计算在采样点上(除了粗分割),这比通过细分步骤的反向传播更简单和有效。这种设计类似于快速R-CNN系统中RPN+Fast R-CNN的并行训练[13],其推理是顺序的。
2020CVPR解读之何恺明新作PointRend:将图像分割视作渲染问题,显著提升语义/实例分割性能_第4张图片
(2)逐点表示和点头
PointRend通过组合(例如,连接)两种特征类型,即细粒度和粗预测特征,在选定的点上构建逐点特征,如下所述。
细粒度特征。
为了让PointRend呈现精细的分割细节,我们从CNN特征图中提取每个采样点的特征向量。由于点是实值二维坐标,我们对特征映射执行双线性插值以计算特征向量。特征可以从单个特征映射中提取(例如,在ResNet中的res2);它们也可以从多个特征映射(例如,res2到res5,或其特征金字塔[28]对应项)中提取,并按照超列方法[17]连接。
粗略的预测特征。
细粒度的特性可以解决细节问题,但在两个方面也有不足。首先,它们不包含特定于区域的信息,因此由两个实例的边界框重叠的同一点将具有相同的细粒度特征。然而,这一点只能出现在一个实例的前景中。因此,对于实例分割任务,不同的区域可以预测同一点的不同标签,需要额外的特定于区域的信息。其次,根据用于细粒度特性的特性映射,特性可能只包含相对较低级别的信息(例如,我们将使用res2和DeepLabV3)。在这种情况下,具有更多上下文和语义信息的特征源可能会有所帮助。这个问题影响实例和语义分割。基于这些考虑,第二特征类型是来自网络的粗略分割预测,即区域(框)中每个点处的K维向量表示K类预测。粗略的解析在设计上提供了更全局化的上下文,而通道则传递语义类。这些粗略的预测与现有架构的输出类似,并且在训练期间以与现有模型相同的方式进行监控。对于实例分割,例如,粗预测可以是在mask R-CNN中输出一个轻量级的7×7分辨率掩模头(mask head)。例如,对于语义分割,它可以是来自16步特征映射的预测。
点头。
给定每个选定点的逐点特征表示,PointRend使用简单的多层感知机(MLP)进行逐点分割预测。该MLP在所有点(和所有区域)上共享权重,类似于图卷积[23]或点网[43]。由于MLP预测每个点的分割标签,因此它可以通过标准的特定于任务的分割损失(如第4和第5节所述)进行训练。

4.实验-实例分割

结构
我们的实验使用带有ResNet-50[20]+FPN[28]主干的mask R-CNN。mask R-CNN中的默认掩模头(mask head)是一个按区域划分的FCN,我们用“4×conv”来表示。我们用这个作为比较的基线。对于PointRend,我们对这个基线进行适当的修改,如下所述。
轻巧,粗略的mask预测头
为了计算粗略的预测,我们将4×conv掩模头(mask head)替换为更轻的设计,该设计类似于mask R-CNN的box head,并产生7×7掩模预测。具体来说,对于每个边界框,我们使用双线性插值从FPN的P2层提取14×14特征映射。特征是在边界框内的规则网格上计算的(这个操作可以看作是roiallign的一个简单版本)。接下来,我们使用一个步长为2×2的卷积层,该卷积层具有256个输出通道,后面跟着ReLU,从而将空间大小减小到7×7。最后,类似于mask R-CNN的box头部,应用两个1024宽的隐藏层的MLP,对每个K类产生7×7的掩模预测。ReLU用于MLP的隐藏层,sigmoid激活函数用于其输出。
PointRend
在每个选择的点上,使用双线性插值从粗预测头的输出中提取K维特征向量。PointRend还从FPN的P2级别插值256维特征向量。此级别的跨距为输入图像的4。这些粗预测和细粒度特征向量被连接起来。我们使用3个隐藏层、256个通道的MLP在选定点进行K类预测。在MLP的每一层中,我们用K个粗预测特征对256个输出通道进行补充,以生成下一层的输入向量。我们在MLP内部使用ReLU并将sigmoid应用于其输出。
训练
默认情况下,我们使用Detectron2[49]提供的标准1×训练计划和数据扩充(详细信息见附录)。对于PointRend,我们使用第3.1节中描述的有偏采样策略(k=3和β=0.75)对142个点进行采样。我们使用0.5与从粗略预测中插值的地面真值类的概率之间的距离作为逐点不确定性度量。对于具有地面真值c类的预测盒,我们求出了c-th MLP输出在142个点上的二元交叉熵损失之和。轻量级粗预测头使用针对c类预测的掩模的平均交叉熵损失,即与基线4×conv头相同的损失。我们把所有损失加起来,不作任何重新加权。在训练过程中,Mask R-CNN并行地应用box和mask head,而在推理过程中它们以级联方式运行。我们发现,级联训练并不能改善基线mask R-CNN,但PointRend可以通过在更精确的框中采样点而受益,稍微提高整体性能(绝对AP为0.2%)。
推理 对于预测类别为c的盒上的推理,除非另有说明,否则我们使用自适应细分技术在5个步骤中将c类的粗略7×7预测细化到224×224。在每个步骤中,我们根据预测值与0.5之间的绝对差,选择并更新(最多)N=282个最不确定点。

除了实例分割,作者还进行了语义分割的实验。

实验结果

实例分割和语义分割均优于基线方法。
我们将PointRend与表1中Mask R-CNN中默认的4×conv head进行比较。
2020CVPR解读之何恺明新作PointRend:将图像分割视作渲染问题,显著提升语义/实例分割性能_第5张图片
PointRend在两个数据集上的性能都优于默认的head。即使输出分辨率相同,PointRend的性能也优于baseline。从直观上看,边界质量也差异明显,如下图所示。
2020CVPR解读之何恺明新作PointRend:将图像分割视作渲染问题,显著提升语义/实例分割性能_第6张图片
细分推理允许PointRend产生高分辨率的224×224预测,使用的计算(FLOPs)和内存是默认的4×conv head输出相同分辨率所需的30分之一。
2020CVPR解读之何恺明新作PointRend:将图像分割视作渲染问题,显著提升语义/实例分割性能_第7张图片

你可能感兴趣的:(pyTorch,深度学习,算法)