论文链接:https://arxiv.org/abs/1912.04488
代码链接:https://github.com/WXinlong/SOLO
摘要
提出一种新的实例分割方法。与语义分割等其他密集预测任务相比,实例分割的难度要大得多。为了预测每个实例的掩码,主流方法要么遵循“detect-then-segment”的策略,如Mask R-CNN所使用的策略,要么先预测嵌入向量,然后使用聚类技术将像素分组到单个实例中。通过引入“实例类别”的概念,文章从一个全新的角度来看待实例分割的任务,它根据实例的位置和大小为实例中的每个像素分配类别,从而很好地将实例掩码分割转化为一个可分类的问题。将实力分割分解为两类任务。文章提出的框架在精确度上优于最近的单点实例分段器。
简介
实例分割不仅要准确的分离图像中的所有对象,还要求对每个实例实现像素级的语义分割。图像中的对象属于一组固定的语义范畴,但是实例的数量不同。因此,语义分割可以很容易地表述为密集的逐像素分类问题,而直接按照相同的范式预测实例标签则是一个挑战。
最近的实例分割方法可以分为两类:自顶向下和自底向上的范例。前一种方法即“detect-then-segment”,首先检测边界盒,然后将实例掩码分割到每个边界盒中。后一种方法学习一种亲缘关系,通过推离属于不同实例的像素和拉近相同实例的像素,为每个像素分配一个嵌入向量。然后需要分组后处理来分离实例。这两种范式都是步进式和间接式的,要么严重依赖准确的边界盒检测,要么依赖逐像素嵌入学习和分组处理。
目标:在完整实例掩码注释的监督下直接分割实例掩码
提出问题:图像中的对象实例之间的基本区别是什么?
发现:在大多数案例下,图像中的两个实例要么有不同的中心位置,要么有不同的对象大小
现今主流:目前占主导地位的范式利用了完全卷积的网络(FCN)输出N个信道的稠密预测
语义切分的目的:区分不同的语义类别
文章引入了“实例类别(instance categories)”的概念来区分图像中的对象实例,量化的中心位置和对象大小,从而能够按位置划分对象
文章中提出的SOLO的核心思想是根据位置和大小分离对象实例。
原理:
位置 将图象划分为SxS的网格,从而产生 S^2 个中心位置类。根据对象中心的坐标,将对象实例分配给其中一个网格单元格,作为其中心位置类别。SOLO算法将中心位置类别编码为通道轴,类似于语义分类中的语义类别。每个输出通道负责一个中心位置类别,相应的通道映射应该预测属于该类别的对象的实例掩码。
本质上,实例类别近似于实例的对象中心位置.因此,通过将每个像素分类到其实例类别中,就相当于使用回归从每个像素中预测目标中心。将位置预测任务转换为分类而不是回归
尺寸 为了区分不同对象大小的实例,文章采用了特征金字塔网络(FPN),从而将不同尺寸的对象分配到不同层次的特征图中,作为对象尺寸类。因此,所有的对象实例都是定期分离的,从而能够通过“实例类”对对象进行分类。这里的FPN目的是检测图像中不同尺寸的目标。
FPN是SOLO的核心方法。
在SOLO框架中通过使用掩码注释,以端到端的方式对网络进行优化。并跳出局部框划分和像素分组的限制,进行像素级实例分割。
SOLO在COCO数据集上与Mask R-CNN取得同等结果。另外SOLO具有通用性。
本质上,SOLO将坐标回归转化为离散量化的分类。这样做的一个优点是避免了启发式协调规范化和日志转换,这通常在YOLO之类的检测器中使用.
相关工作
SOLO是完全无箱的,因此不受(锚)箱的位置和规模的限制,并自然受益于固有的优势FCNs
SOLO不利用像素成对关系和像素分组,而是直接在训练期间学习实例掩码注释,并端到端预测实例掩码和语义类别,无需分组后处理。SOLO是一种直接的端到端实例分割方法
SOLO以图像为输入,直接输出实例掩码和对应的类概率,采用完全卷积、无盒、无组的范式。
我们的简单网络可以优化端到端,而不需要箱监督。为了进行预测,该网络直接将输入图像映射到每个单独实例的掩模中,既不依赖于RoI特征裁剪等中间操作,也不依赖于分组后处理。
SOLO
SOLO框架的核心思想是将实例分割重新定义为两个同时存在的分类感知预测和实例感知掩码生成问题。系统将输入图像划分为均匀的SXS的网格,如果一个对象中心落到一个网格单元中,该网格单元格负责1)预测语义类别以及2)分割该对象实例。
在语义类别预测的同时,每个正网格单元也将生成相应的实例掩码。对于一个输入图像I,如果我们把它分成S×S个网格,总共最多会有S^2个预测掩模。文章明确地在三维输出张量的第三维(通道)编码这些掩模。具体来说,实例掩码输出将具有Hi×Wi×S2Hi×Wi×S^2Hi×Wi×S2维。第k个通道负责在网格(i, j)处分段实例,其中k = i·S + j
(i和j从零开始).为此,在语义类别和类不可知的掩码之间建立了一一对应关系
SOLO需要一个在空间上变化的模型,或者更准确地说,位置敏感的模型,因为我们的分割掩模取决于网格单元,必须由不同的特征通道分开。
具体地说,文章创建了一个与输入具有相同空间大小的张量,该张量包含归一化为[−1,1]的像素坐标。然后这个张量被连接到输入特征并传递到下面的层。通过让卷积访问它自己的输入坐标,我们将空间功能添加到传统的FCN模型中。如果原始特征张量的大小为H×W×D,则新张量的大小为H×W×(D+2),其中后两个通道为x-y像素坐标。
形成实例分割
在SOLO中,类别预测和对应的掩模自然通过它们的参考网格单元k=i⋅S+jk = i · S + jk=i⋅S+j关联起来。在此基础上,SOLO可以直接形成每个网格的最终实例分割结果。原始实例分割结果是通过收集所有网格结果生成的。最后,使用非最大抑制(non-maximum-suppression, NMS)来获得最终的实例分割结果。不需要其他后处理操作
网络结构
我们使用FPN[11],它为每一层生成一个具有固定数量通道(通常为256-d)的不同大小的金字塔特征图。这些映射用作每个预测头的输入:语义类别和实例掩码。头部的权重在不同层上共享。在这个场景中,只有最后的1×1 conv不共享。
在每个FPN特征级别上,我们附加两个兄弟子网络,一个用于实例类别预测(上),另一个用于实例掩码分割(下)。在掩码分支中,我们将x、y坐标和原始特征连接起来,对空间信息进行编码。这里数字表示空间分辨率和通道。在图中,我们以256个通道为例。箭头表示卷积或插值。所有的卷积都是3×3,除了输出conv。“Align”是指自适应池、插值或区域网格插值,在推理过程中,掩码分支输出进一步向上采样到原始图像大小。
SOLO 学习
标签分配
对于类别预测分支,网络需要给出每个S×S网格下的目标类别概率。具体来说,如果网格(i, j)落在任何ground truth掩码的中心区域,则认为它是正样本,反之则认为它是负样本。使用中心采样进行掩模类别分类。得到质点中心(n,m),宽w高h的mask,那么该实例的中心位置就是(n,m,w1,h1),其中w1=βw,h1=βh,β在文中设为β=0.2
Loss损失函数
L=Lcate+λLmaskL = L_{cate} + λL_{mask} L=Lcate+λLmask
这里的Lcate是传统的语义类别分类的Focal Loss,Lmask是用于掩模预测的损失,λ=3
Npos表示正样本的数量,p∗和m∗分别代表类别和掩模目标。ll是指示函数,当
Pi,j∗>0P^*_{i,j} > 0 Pi,j∗>0
时为1,否则为0.对于dmask,文章进行了一系列的对比,最终选用 Dice Loss(效果比BCE、Focal Loss好)。Dice Loss定义为
LDice=1−D(p,q),L_{Dice} = 1 −D(p, q), LDice=1−D(p,q),
D是骰子系数,定义为
px,y和qx,y分别是soft mask p和truth mask q位于(x, y)的像素值。
推论
前向传播得到类别分数pi,j和相应的mask mk,其中k=i∗S+j。首先使用置信阈值0.1来过滤低置信的预测,然后选取前500个排好序的mask进行NMS操作,然后用0.5的阈值进行mask二值化,保留前100个instance mask进行评估。
实验
如何工作
这里我们可以看到不同的实例在不同的掩模预测通道上激活,通过显式地在不同位置分割实例,SOLO将实例分割问题转化为位置感知的分类任务。
在每个网格中只有一个实例被激活,并且一个实例可以被多个相邻掩码通道预测。在推断期间,我们使用NMS来抑制这些冗余掩码
消融实验1
Grid number
将网格数对性能的影响与单一输出特征图进行了比较
这一结果表明,我们的单尺度SOLO可以适用于一些对象尺度变化不大的场景。然而,单尺度模型在很大程度上滞后于金字塔模型,这说明了FPN在处理多尺度预测中的重要性。
Multi-level Prediction
从表2中我们可以看到,单尺度的SOLO在分割多尺度的对象时遇到了困难。在消融过程中,我们证明这个问题可以通过FPN的多级预测得到很大程度的解决,表3使用
五个FPN金字塔来分割不同尺度的对象.
CoordConv
另一个促进我们的SOLO模式的重要组成部分是空间变化的卷积(CoordConv )
一个单一的CoordConv已经使预测具有良好的空间变异/位置敏感性,过多无用。
Loss function.
骰子损失(DL)导致最好的AP,训练时更稳定
Different head depth
图5中的结果显示,当深度超过7时,性能会下降。所以使用的深度为7.
Decoupled SOLO
给定一个预先定义好的网格数,如 S=20S=20,这样SOLO head就会输出400个通道的特征图。但是,这样预测有些冗余,因为绝大多数场景中,图像上的物体都是比较稀疏的,不太会出现特别多的物体实例。这一节,作者进一步介绍了一个等价的、更加高效率的 SOLO 模型的变体,称为 Decoupled SOLO, 如下图所示
在Decoupled SOLO中,原始的输出张量
M∈RH×W×S2M∈R ^{H×W×S^2} M∈RH×W×S2
被替换为两个输出张量X∈R
H×W×S和Y∈R H×W×S ,对应着两个坐标轴。因此,输出空间就从HxWxS2 降低到了H×W×2S。对于网格位置为(i,j)的物体,原来的SOLO模型在输出张量M的第k个通道上分割掩码,其中k=i⋅S+j。而 Decoupled SOLO的物体掩码预测,定义为两个通道特征图的 element-wise 相乘。
mk=xj⊗yim_k=x_j⊗y _i mk=xj⊗yi
其中xj,yi分别表示X的第j个通道图,和Y的第i个通道图。