SOLO: 按位置分割对象
SOLO: Segmenting Objectsby Locations
论文链接:
https://arxiv.org/pdf/1912.04488.pdf
代码链接:
https://github.com/WXinlong/SOLO
摘要
我们提出了一个新的,令人尴尬的简单方法,在图像中的实例分割。与其他许多密集预测任务(如语义分割)相比,任意数量的实例使得实例分割更具挑战性。为了预测每个实例的遮罩,主流方法要么遵循例如mask R-CNN所使用的“检测然后分段”策略,要么首先预测嵌入向量,然后使用聚类技术将像素分组到单个实例中。我们从一个全新的角度来看待实例分割的任务,引入了“实例类别”的概念,它根据实例的位置和大小给实例中的每个像素分配类别,从而很好地将实例掩码分割转化为一个分类可解的问题。现在实例分割被分解为两个分类任务。我们展示了一个简单灵活的实例分割框架,具有很强的性能,达到了与Mask R-CNN同等的精度,并且在精度上优于最近的单镜头实例分割器。我们希望这个非常简单和强大的框架可以作为除实例分割之外的许多实例级识别任务的基线。
1. Introduction
实例分割具有挑战性,因为它需要正确分离图像中的所有对象,同时还要在像素级对每个实例进行语义分割。图像中的对象属于一组固定的语义类别,但是实例的数量不同。因此,语义分割可以很容易地表述为一个密集的每像素分类问题,而直接按照相同的范式预测实例标签则是一个挑战。为了克服这一障碍,目前的实例分割方法可以分为自顶向下和自下而上两类。前一种方法,即“检测到段”,首先检测边界框,然后在每个边界框中分割实例掩码。后一种方法通过推开属于不同实例的像素,并在同一实例中拉近像素,来学习af finity关系,为每个像素分配一个嵌入向量。然后需要分组后处理来分离实例。两者这两种模式是逐步的和间接的,它们要么严重依赖于精确的包围盒检测,要么依赖于每像素的嵌入学习和分组处理。相比之下,我们的目标是在完整实例掩码注释的监督下,直接分割实例掩码,而不是框中的掩码或附加的像素对关系。
我们从重新思考一个问题开始:动物之间的基本区别是什么?以challengms COCO数据集[12]为例。验证子集中共有36780个目标,98.3%的目标对中心距大于30像素。其余1.7%的对象对中,40.5%的对象对大小比大于1.5×。在这里,我们不认为少数情况下像两个物体在'×'形状。总之,在大多数情况下,图像中的两个实例要么具有不同的中心位置,要么具有不同的对象大小。这个观察结果让人怀疑我们是否可以通过中心位置和对象大小直接区分实例?在密切相关的领域,语义分割,现在占主导地位的范式利用一个完全卷积网络(FCN)输出N个通道的密集预测。
每个输出通道负责其中一个语义类别(包括背景)。语义分割的目的是区分不同的语义范畴。类似地,在这项工作中,我们建议通过引入“实例类别”的概念来区分图像中的对象实例,即量化的中心位置和对象大小,从而能够按位置分割对象,因此我们的方法名为SOLO。我们提出的SOLO的核心思想是按位置和大小分离对象实例。位置图像可以分成S×S单元的网格,从而产生S2中心位置类。根据对象中心的坐标,将对象实例指定给其中一个网格单元作为其中心位置类别。
与DeepMask[21]和TensorMask[2]不同,DeepMask[21]和TensorMask[2]将掩码打包到通道轴中,我们将中心位置类别编码为通道轴,类似于语义分割中的语义类别。每个输出通道负责一个中心位置类别,相应的通道映射应该预测属于该类别的对象的实例掩码。因此,结构几何信息自然地保存在空间矩阵中。实际上,实例类别近似于实例的对象中心位置。因此,通过将每个像素分类到其实例类别中,就相当于使用回归从每个像素预测对象中心。在这里,将位置预测任务转换为分类而不是回归的重要性在于,在分类时,使用固定数量的通道对不同数量的实例进行建模更加直接和容易,同时不依赖于分组或学习嵌入等后处理。为了区分具有不同对象大小的实例,我们采用特征金字塔网络(FPN)[11],以便将不同大小的对象分配给不同级别的特征映射,作为对象大小类。
因此,所有的对象实例都是定期分离的,这样就可以按“实例类别”对对象进行分类。请注意,FPN是为检测图像中不同大小的对象而设计的。在后半部分中,我们通过实验证明FPN是我们方法的核心组件之一,它对分割性能有着深远的影响,特别是对不同大小的物体的分割。利用所提出的SOLO框架,我们能够针对单独使用掩码注释的实例分割任务,以端到端的方式优化网络,并且在不受本地盒检测和像素分组限制的情况下,执行像素级的实例分割。注意,到目前为止,大多数实例分割方法都需要框注释作为监视信号之一。第一次,我们展示了一种非常简单的实例分割方法,在具有不同场景和语义类的具有挑战性的COCO数据集[12]上,实现了与主流的“检测然后分割”方法Mask R-CNN[7]相当的结果。
此外,我们通过实例轮廓检测的任务来展示我们框架的通用性,通过将实例边缘轮廓视为一个热的二值掩模,几乎不需要单独修改就可以生成合理的实例轮廓。提出的SOLO算法只需要解决两个像素级的分类任务,类似于语义分割。因此,可以借用语义分割的一些最新进展来改进SOLO。本质上,SOLO通过离散量化将坐标回归转换为分类。这样做的一个优点是避免了启发式的协调规范化和日志转换,通常使用诸如YOLO[22]这样的索引器。这种令人尴尬的简单性和强大的性能可以预测其在广泛的实例级识别任务中的应用。
2. Related Work
我们回顾了一些最接近我们的实例分割工作。
自顶向下的实例分段
在先验包围盒中分割对象实例的方法属于典型的自顶向下范式。FCIS[10]将由区域提议网络(RPN)生成的感兴趣区域(roi)内的位置敏感得分图集合起来,以预测实例掩码。Mask R-CNN[7]通过在检测到的边界框内添加用于分割对象实例的分支,扩展了更快的R-CNN检测器[23]。在Mask R-CNN的基础上,PANet[16]进一步增强了特征表示以提高精度,Mask Scoring R-CNN[8]增加了Mask IoU分支以预测预测的Mask的质量,并对Mask进行评分以提高性能。TensorMask[2]采用密集滑动窗口范式,在本地窗口中为每个像素分割实例,并预先确定窗口数和比例。与上述自上而下的方法相比,我们的SOLO完全无箱,因此不受(锚)箱位置和规模的限制,自然受益于FCN的固有优势。
自下而上的实例分割
这类方法通过将像素分组为图像中呈现的任意数量的对象实例来生成实例掩码。我们简要回顾了最近的几种方法。使用[19]中学习的关联嵌入将像素分组到实例中。判别损失函数[5]通过推开属于不同实例的像素并在同一实例中拉近像素,有效地学习像素级实例嵌入。SGN[15]将实例分割问题分解为一系列子分组问题。SSAP[6]学习一个像素对的单位金字塔,两个像素属于同一个实例的概率,并通过一个不规则的图分区依次生成实例。与自顶向下方法相比,自底向上方法的准确性通常落后,特别是在具有不同场景和语义类的数据集上。SOLO没有利用像素对关系和像素分组,而是在训练过程中直接使用实例掩码注释进行学习,并在不分组后处理的情况下,端到端地预测实例掩码和语义类别。在这个意义上,我们提出的SOLO是一种直接的端到端实例分割方法。
直接实例分割
据我们所知,没有一种先验的方法是直接使用mask注释进行训练,不需要对后处理进行分组,就可以一次预测实例的mask和语义类别。最近提出的几种方法可被视为“半直接”范式。AdaptIS[24]首先预测点建议,然后依次为位于检测到的点建议的对象生成掩码。polar mask[27]建议使用极坐标表示对掩模进行编码,并将每像素掩模预测转换为距离回归。它们都不需要边界框进行训练,但要么是逐步的,要么是建立在折衷的基础上,例如,面具的粗略参数表示。我们的SOLO以图像为输入,直接输出实例掩码 以及相应的类概率,在完全卷积的、无盒子的和无分组的范式中。我们简单的网络可以在不需要监控的情况下进行端到端的优化。为了进行预测,网络直接将输入图像映射到每个实例的遮罩,既不依赖RoI特征裁剪等中间操作,也不依赖分组后处理。
3. Our Method: SOLO
3.1. Problem Formulation
给定任意图像,实例分割系统需要判断是否存在语义对象的实例;如果存在,则系统返回分割掩码。SOLO框架的核心思想是将实例分割转化为两个同时存在的类别感知预测和实例感知掩模生成问题。具体来说,我们的系统将输入图像分割成一个均匀的网格,即S×S。如果一个物体的中心落在一个网格单元中,该网格单元负责 1) 预测语义类别以及
2) 分割该对象实例。
对于每个网格,SOLO预测C维输出以指示语义类概率,其中C是类的数量。这些概率取决于网格单元。如果我们将输入图像分成S×S网格,则输出空间为S×S×C,如图2所示(顶部)。该设计基于S×S网格的每个单元必须属于一个实例的假设,因此只属于一个语义范畴。在推理过程中,C维输出指示每个对象实例的类概率。
在语义类别预测的同时,每个正网格单元也会生成相应的实例掩码。对于输入图像I,如果将其划分为S×S网格,则总共最多有S2个预测掩模。我们在三维输出张量的三维(通道)显式地编码这些掩模。具体来说,实例掩码输出将具有HI×WI×S2维。第k个通道将负责在网格(i,j)处分段实例,其中k=i·S+j(以i和j为零为基础)1。为此,在语义类别和类不可知掩码之间建立了一对一的对应关系(图2)。预测实例掩码的直接方法是采用完全卷积网络,如语义分割中的FCNs[17]。
然而,传统的卷积运算在一定程度上具有空间不变性。由于空间不变性引入了鲁棒性,因此在图像分类等任务中需要空间不变性。然而,恰恰相反,这里我们需要一个空间变化的模型,或者更精确地说,位置敏感的模型,因为我们的分割遮罩是 网格单元必须由不同的特征通道分隔。
我们的解决方案非常简单:在网络的开始,我们直接将标准化的像素坐标馈送给网络,灵感来自“CoordConv”操作符[14]。具体来说,我们创建了一个与包含像素坐标的输入具有相同空间大小的张量,该张量被规范化为[-1,1]。然后,该张量连接到输入特征并传递到以下层。通过简单地赋予卷积对其自身输入坐标的访问权,我们将空间功能添加到传统的FCN模型中。值得注意的是,CoordConv并不是唯一的选择。例如,半卷积算子[20]可以胜任,但我们使用CoordConv是因为它简单且易于实现。如果原始特征张量的大小为H×W×D,则新张量的大小为H×W×(D+2),其中最后两个通道是x-y像素坐标。关于CoordConv的更多信息,请参阅[14]。正在形成实例分段。
在SOLO中,类别预测和对应的掩码由它们的参考网格单元(k=i·S+j)自然关联,在此基础上,我们可以直接形成每个网格的最终实例分割结果。原始实例分割结果是通过收集所有网格结果生成的。最后,利用非最大值抑制(NMS)方法得到最终的实例分割结果。不需要其他后处理操作。
3.2. Network Architecture
我们现在介绍在我们的SOLO框架中使用的网络。SOLO附属于一个回旋的骨干。我们使用FPN[11],它生成具有不同大小的特征映射金字塔,每个级别具有固定数量的通道(通常为256-d)。这些映射用作每个预测头的输入:语义类别和实例掩码。头部的重量在不同的层次上共享。网格数在不同的金字塔上可能不同。在此场景中,只有最后一个1×1 convis没有共享。为了演示我们方法的通用性和有效性,我们用多个架构实例化SOLO。
这些差异包括:
(a) 用于特征提取的主干架构,
(b) 用于计算实例分段结果的网络头,以及
(c) 利用训练损失函数对模型进行优化。
大多数实验都是基于头部结构的,如图3所示。我们还利用不同的变体来进一步研究通用性。我们注意到我们的实例分段头有一个直接的结构。更复杂的设计有可能提高性能,但不是这项工作的重点。
3.3. SOLO Learning
对于类别预测分支,网络需要给出每个S×S网格的对象类别概率。具体来说,如果网格(i,j)落入任何地面真值掩模的中心区域,则它被视为正样本,否则它是负样本。中心采样在最近的目标检测工作中是有效的[26,9],在这里,我们也使用了类似的技术来分类掩模类别。
3.4. Inference
SOLO的推论非常直接。给定一幅输入图像,通过骨干网和FPN进行转发,得到网格(i,j)处的类别得分pi,j和相应的掩码mk,其中k=i·S+j,因为我们通常保持行主顺序。我们首先使用0.1的置信阈值来过滤低置信度的预测。然后,我们选择500强评分口罩,并将其输入NMS操作。为了将预测的软掩码转换为二进制掩码,我们使用0.5的阈值对预测的软掩码进行二进制处理。我们保留前100个实例掩码供评估。
4. Experiments
我们在MS-COCO实例分割轨道上给出实验结果[12],并通过评估5k-val2017分割报告损伤和敏感性研究。对于我们的主要结果,我们在test dev split上报告COCO mask AP,它没有公共标签,在评估服务器上进行评估。
训练细节
用随机梯度下降(SGD)训练SOLO。我们使用同步SGD超过8个GPU,每个小批量总共16个图像(每个GPU 2个图像)。除非另有说明,否则所有模型都要经过36个阶段的训练,初始学习率为0.01,然后在第27个阶段除以10,在第33个阶段再除以10。重量衰减为0.0001,动量为0.9。所有模型都由ImageNet预先训练的权重初始化。我们使用比例抖动,其中较短的图像侧随机采样640至800像素。
4.1. Main Results
在mscoo测试设备表1中,我们比较了SOLO和最新的分段方法。SOLO结合ResNet-101实现了37.8%的mask AP,是mask R-CNN等现有两阶段实例分割方法中的最新技术。SOLO的性能优于所有前一阶段的方法,包括TensorMask[2]。利用DCN-101【4】主干,SOLO进一步实现了40.4 AP,这比目前COCO实例分割任务中的主流方法要好得多。图8显示了SOLO的输出。我们的研究表明,SOLO即使在困难的条件下也能取得好的成绩。
4.2. How SOLO Works?
我们展示了S=12网格生成的网络输出(图4)。子图(i,j)表示对应掩模通道(乙状结肠之后)生成的软掩模预测结果。这里我们可以看到不同的实例在不同的掩码预测通道中激活。通过在不同位置显式分割实例,SOLO将实例分割问题转化为位置感知分类任务。
每个网格只激活一个实例,多个相邻掩码通道可以预测一个实例。在推理过程中,我们使用NMS来抑制这些冗余的掩码。
4.3. Ablation Experiments
Grid number
我们将网格数对性能的影响与单输出特征映射进行比较,如表2所示。该特性是通过合并ResNet中的C3、C4和C5输出(步长:8)生成的。令我们惊讶的是,S=12已经可以在具有挑战性的MS-COCO数据集上达到27.2ap。SOLO将网格数提高到24时获得29.0ap。这一结果表明,我们的单尺度独奏可以适用于一些场景中的对象尺度变化不大。然而,单尺度模型在很大程度上落后于金字塔模型,说明了FPN在处理多尺度预测中的重要性。
Multi-level Prediction
从表2中我们可以看到,我们的单尺度独奏在分割多尺度物体时遇到了困难。在这个融合过程中,我们证明了FPN的多层次预测可以在很大程度上解决这个问题[11]。从表2的融合开始,我们使用五个FPN金字塔分割不同尺度的物体(表3)。地面真值掩码的比例被显式地用于将它们指定给金字塔的级别。在多层次预测的基础上,进一步实现了35.8AP。如预期的那样,总体上分割性能指标有了很大的提高。 CoordConv
另一个有助于我们的SOLO范式的重要组成部分是空间变异卷积(CoordConv[14])。如表4所示,标准卷积在一定程度上已经具有空间变异特性,这与[14]中的观察结果一致。当通过级联额外的坐标通道使卷积访问其自身的输入坐标时,我们的方法具有3.6的绝对AP gains。两个或多个坐标变换器不会带来明显的改善。这表明,单一的坐标变换已经使预测具有很好的空间变化/位置敏感性。
Loss function
表5比较了我们的掩模优化分支的不同损失函数。这些方法包括传统的Cross Entropy(BCE)、Focal Loss(FL)和Dice Loss(DL)。为了获得更好的性能,对于二值交叉熵,我们将正样本的掩模损失权重设置为10,像素权重设置为2。Focal Loss的掩模损失权重设置为20。如图所示,Focal Loss比普通的二元交叉熵损失好得多。这是因为实例掩码的大部分像素都在背景中,而Focal Loss的设计是为了通过减少良好分类样本的损失来缓解样本不平衡问题。但是,Dice Loss在不需要手动调整损失超参数的情况下达到最佳效果。Dice Loss将像素视为一个整体对象,可以自动在前景和背景像素之间建立正确的平衡。注意,通过仔细调整平衡超参数和引入其他训练技巧,二元交叉熵和Focal Loss的结果可能会有很大的改善。然而,这里的要点是,随着Dice Loss,训练通常变得更加稳定,并且更有可能在不使用很多启发式方法的情况下获得良好的效果。
Alignment in the category branch
在类别预测分支中,我们必须将卷积特征与空间大小H×W到S×S相匹配。这里,我们比较了三种常用的实现方法:插值、自适应池和区域网格插值。
•插值:直接双线性插值到目标网格大小;
•自适应池:在H×W到S×S上应用2D自适应max池;
•区域网格插值:对于每个网格单元,我们使用基于密集采样点的双线性插值,并将结果聚合为平均值。
从我们的观察来看,七个变量之间没有明显的性能差异(±0.1AP),表明校准过程相当灵活。
Different head depth
在SOLO中,实例分割被定义为一个像素到像素的任务,我们使用FCN来开发遮罩的空间布局。在图5中,我们比较了工作中使用的不同头部深度。将头部深度从4更改为7将获得1.2 AP增益。图5中的结果表明,当深度超过7时,性能变得稳定。在本文中,我们在其他实验中使用深度为7。以往的工作(如掩模R-CNN)通常采用四个卷积层进行掩模预测。在SOLO中,面罩是根据空间位置来调节的,我们只需将坐标系附加到头部的开始。面具头部必须有足够的表现力来学习这种转换。对于语义范畴分支,由于S2 H×W,计算开销可以忽略不计。
4.4. SOLO-512
我们还训练了一个更小版本的SOLO,旨在加速推理。我们使用的模型具有较小的输入分辨率(较短的图像大小为512而不是800)。其他训练和测试参数在SOLO-512和SOLO之间相同。
SOLO-512采用34.2mask AP,模型推理速度达到22.5fps,显示了SOLO在实时实例分割应用中的潜力。平均运行5次,在一个V100 GPU上报告速度。
5. Decoupled SOLO
给定预先确定的栅格编号,例如S=20,我们的单头输出S2=400通道图。然而,由于在大多数情况下对象在图像中稀疏地定位,因此预测有点多余,因为在图像中不太可能出现如此多的实例。在本节中,我们将进一步介绍一种与vanillaSOLO相当且更为有效的变体,称为DecoupledSOLO,如图7所示。
我们使用和vanillaSOLO相同的超参数进行实验。如表7所示,DecoupledSOLO取得了与vanillaSOLO相同的性能。结果表明,在单声道的精度上,DecoupledSOLO是一个有效的等效变量。注意,由于输出空间大大减少,在训练和测试期间,DecoupledSOLO需要的GPU内存大大减少。
6. Error Analysis
为了定量地理解用于掩模预测的SOLO,我们通过用地面真值替换预测的掩模来进行误差分析。对于每个预测的二值掩模,我们用地面真值掩模计算ios,并用最重叠的地面真值掩模替换它。如表8所示,如果我们将预测的掩蔽体替换为地面真实掩蔽体,则AP增加到68.1。这项实验表明,仍然有足够的空间改进掩模分支。我们期望更多的语义分割技术可以应用到提高性能上。
7. SOLO for Instance Contour Detection
通过改变掩模分支的优化目标,我们的框架可以很容易地扩展到实例轮廓检测。我们首先使用OpenCV的find courtos函数将MS-COCO中的地面真值掩模转换为实例轮廓[25],然后使用二值轮廓与语义类别分支并行优化掩模分支。这里我们使用焦点损失来优化轮廓检测,其他设置与实例分割基线相同。图6显示了由我们的模型生成的一些轮廓检测示例。我们提供这些结果作为SOLO可用于轮廓检测的概念证明。
8. Conclusion
在这项工作中,我们开发了一个名为SOLO的直接实例分割框架,与事实上的实例分割方法Mask R-CNN相比,达到了竞争性的准确度。我们提出的模型是端到端可训练的,可以直接将原始输入图像映射到期望的实例掩码,并且具有恒定的推理时间,消除了自底向上方法中的分组后处理或自顶向下方法中的包围盒检测和RoI操作的需要。通过引入“实例类别”的新概念,我们第一次能够将实例掩码预测重新格式化为一个非常简单的分类任务,使实例分割比所有当前方法都简单得多。我们展示了两个实例级的识别任务,即实例分割和实例轮廓检测。考虑到SOLO的简单性、灵活性和强大的性能,我们希望SOLO可以作为许多实例级识别任务的基础。