2019年的实时实例分割算法,mAP 达到29.8,并且FPS达到33.5
论文名称:《YOLACT Real-time Instance Segmentation》
论文链接:https://arxiv.org/pdf/1904.02689.pdf
代码链接:https://github.com/dbolya/yolact
我们提出了一个简单的,全卷积实时实例分割模型,在MSCOCO数据集上单张Tian Xp评估下,达到了29.8的mAP 33.5 fps,这是大大快于以往任何竞争的方法。而且,我们只在一个GPU上训练就得到了这个结果。我们通过将实例分割分成两个并行的子任务来完成此任务: (1)生成一组原型mask,(2)预测每个实例的mask系数(cofficients)。然后,通过将原型与mask系数线性组合得到实例mask。我们发现,由于这个过程不依赖于repolling,这种方法可以生成非常高质量的mask,并展现出时间稳定性。此外,我们分析了原型的意外行为,并表明尽管完全卷积,但它们仍学会了以翻译变体的方式自行定位实例。最后,我们还建议使用速度更快的NMS,这是一种比标准NMS快12毫秒的替代方法,它只会对性能造成轻微的影响。
创建实时实例分割算法需要什么? 在过去的几年中,视觉社区在实例分割方面取得了长足的进步,部分是通过利用来自完善的目标检测领域的强大相似之处。 诸如Mask RCNN [18]和FCIS [24]之类的实例分割的最新方法直接基于目标检测的进步,例如Faster R-CNN [37]和R-FCN [8]。 然而,这些方法主要侧重于性能而不是速度,从而使场景实例分割与SSD [30]和YOLO [35,36]等实时目标检测器偏离。 在这项工作中,我们的目标是以一种快速的单阶段实例分割模型填补这一空白,就像SSD和YOLO填补该空白以进行目标检测一样。
但是,实例分割很困难-比目标检测困难得多。 诸如SSD和YOLO之类的单阶段目标检测器能够通过简单地移除第二阶段,并以其他方式弥补性能损失来加快诸如Faster R-CNN之类的现有两阶段检测器。 但是,同一方法不易扩展到实例分割。 最新的两阶段实例分割方法在很大程度上依赖于特征定位来生成mask。 也就是说,这些方法(例如,通过RoIpool / align)在某些bounding box区域中“repool”特征,然后将这些现在定位到的特征送到其mask预测器中。 这种方法本质上是按顺序进行的(自下而上),因此很难加速。 确实存在像FCIS一样并行执行这些步骤的单阶段方法,但是它们在定位之后需要大量的后处理,因此仍然远远不够实时。
为了解决这些问题,我们提出了YOLACT,这是一个实时实例分割框架,它放弃了明确的定位步骤。 相反,YOLACT将实例分割分为两个并行的任务:(1)在整个图像上生成非定位原型mask的字典,以及(2)预测每个实例的一组线性组合系数。 然后,从这两个分量生成全图像实例分割很简单:对于每种实例,使用相应的预测系数线性组合原型,然后使用预测的边界框进行裁剪。 我们展示了通过以这种方式进行分段,网络学会了如何自行定位实例mask,在视觉,空间和语义上相似的实例在原型中看起来是不同的。
此外,由于原型mask的数量与类别的数量无关(例如,可以有比原型更多的类别),因此YOLACT学习了一种分布式表示形式,其中每个实例都通过在类别之间共享的原型组合进行了细分。 这种分布式表示形式导致了原型空间中有趣的意外行为:一些原型在空间上对图像进行划分,一些定位实例,一些检测实例轮廓,一些编码位置敏感的方向图(类似于在FCIS中对位置敏感模块进行硬编码而获得的那些 [24]),并且大多数都将这些任务组合在一起(参见图5)。
这种方法还具有一些实际优势。 首先,它是快速的:由于其并行的结构和极其轻量的组装过程,YOLACT仅在单阶段backbone检测器上增加了少量的计算开销,即使使用ResNet-101时也很容易达到30 fps [19 ]; 实际上,整个mask分支仅需约5毫秒即可评估。 其次,mask是高质量的:由于mask会使用整个图像空间,而不会因repooling而损失任何品质,因此我们用于大目标的mask的质量明显高于其他方法(请参见图7)。 最后,总的来说,生成原型和mask系数的想法几乎可以添加到任何现代目标检测器中。
我们的主要贡献是第一个实时(> 30 fps)实例分割算法,在具有挑战性的MS COCO数据集上[28]具有竞争性结果(见图1)。 此外,我们分析了YOLACT原型的意外行为,并提供了实验来研究在不同backbone架构,原型数量和图像分辨率下获得的速度与性能之间的权衡。 我们还提供了一种新颖的快速NMS方法,其性能比传统NMS快12ms。 YOLACT的代码可从https://github.com/dbolya/yolact获得。
图1:在COCO上各种实例分割方法的速度性能折衷。 据我们所知,我们是第一种实时(30 FPS以上)方法,在COCO test-dev 上具有约30的mask mAP
实例分割:鉴于其重要性,已进行了大量研究工作以提高实例分割的准确性。 Mask-RCNN [18]是一种代表性的两阶段实例分割方法,该方法首先生成候选感兴趣区域(ROI),然后在第二阶段对这些ROI进行分类和分割。 后续工作试图提高其准确性,例如通过增加FPN 特征[29]或解决mask的置信度得分与其定位精度之间的不兼容性[20]。 这两个阶段的方法需要为每个ROI特征进行repooling,并通过后续计算对其进行处理,这使得即使减小图像size,它们也无法获得实时速度(30 fps)(请参见表2c)。
单阶段实例分割方法生成位置敏感图,这些位置敏感图通过位置敏感pooling[6,24]组装到最终的mask中,或者组合语义分割logit和方向预测logits [4]。 尽管从概念上讲比两阶段方法要快,但它们仍需要repooling或其他不重要的计算(例如,mask投票)。 这严重限制了它们的速度,使它们远离实时。 相比之下,我们的组装步骤要轻量得多(仅是线性组合),并且可以实现为单GPU加速的矩阵矩阵乘法,从而使我们的方法非常快速。
最后,一些方法首先执行语义分割,然后执行边界检测[22],像素聚类[3、25]或学习嵌入以形成实例mask[32、17、9、13]。 同样,这些方法具有多个阶段和/或涉及昂贵的聚类过程,这限制了它们在实时应用中的可行性。
实时实例分割:尽管存在实时目标检测[30、34、35、36]和语义分割[2、41、33、11、47]方法,但很少有工作专注于实时实例分割。 Straight to Shapes[21]和Box2Pix [42]可以实时执行实例分割(Straight to Shapes在Pascal SBD 2012 [12,16]上为30 fps,在Cityscapes [5]上为10.9 fps,Box2Pix在KITTI [35]上为35 fps。 15],但其精度远远小于现代baseline。 实际上,Mask R-CNN [18]在具有挑战性的数据集(例如COCO [28])上的仍然是最快实例分割方法之一(在550^2 px图像上为13.5 fps;请参见表2c)。
原型(Prototypes):在计算机视觉中已经广泛地探索了学习原型(又称词汇表或密码本)。 古典的表现形式包括文本[23]和视觉单词[40],并通过稀疏性和局部性先验[44、43、46]取得了进步。 其他人则设计了用于目标检测的原型[1,45,38]。 尽管相关,但这些作品使用原型来表示特征,而我们使用它们来组装mask以进行实例分割。 此外,我们学习特定于每个图像的原型,而不是在整个数据集中共享的全局原型。
我们的目标是按照与Mask R-CNN [18]和Faster R-CNN [37]相同的方式,向现有的单阶段目标检测模型添加mask分支,但没有明确的特征定位步骤(例如,特征repoolig)。 为此,我们将实例分割的复杂任务分解为两个更简单的并行任务,可以将它们组合起来以形成最终的mask。 第一分支使用FCN [31]来生成一组图像大小的“原型mask”,这些mask不依赖任何instances。 第二种方法在目标检测分支上增加了一个额外的头,以预测每个anchor的“mask系数”向量,这些anchor编码原型空间中实例的表示形式。 最后,对于在NMS中幸存的每个实例,我们通过线性组合这两个分支的工作为该实例构造一个掩码。
基本原理:我们以这种方式执行实例分割主要是因为mask在空间上是连贯的。 也就是说,彼此靠近的像素可能是同一实例的一部分。 卷积(conv)层自然地利用了这种一致性,而全连接(fc)层则没有。 这就带来了一个问题,因为单阶段目标检测器会为每个anchor生成生成类和框系数作为fc层的输出。诸如Mask R-CNN的两阶段方法通过使用定位步骤(例如RoIAlign)解决了这个问题,可以保留要特征的空间连贯性,同时还可以将mask用作卷积层输出。 但是,这样做需要模型的很大一部分时间等待第一个阶段的RPN提出定位候选目标,从而导致明显的速度损失。
因此,我们将问题分为两个平行的部分,即利用fc层和conv层,其中fc层善于产生语义矢量,而conv层善于产生空间连续的mask,从而分别产生“mask系数”和“原型mask” 。 然后,由于原型和mask系数可以独立计算,因此与backbone检测器相比,计算开销主要来自组装步骤,可以将其实现为单个矩阵乘法。 通过这种方式,我们可以保持特征空间的空间连贯性,同时仍然是单阶段且快速。
原型生成分支(protonet)为整个图像预测 k个原型mask。 Pronet是一个FCN,其最后一层具有k个通道(每个原型一个),并将其附加到 backbone 特征层(请参见图3)。 尽管此表述与标准语义分段相似,但不同之处在于我们在原型上没有表现出明显的损失。 取而代之的是,对这些原型的所有监督都来自组装后的最终mask损失。
图3:Protonet结构:标签表示图像尺寸为550×550的特征尺寸和通道。箭头表示3×3的conv层,最终的conv为1×1。size的增加是一个上样,然后是一个conv.灵感来自于[18]的mask分支。
我们注意到两个重要的设计选择:从更深的backbone feature中获取Protonet会产生更健壮的mask,而分辨率更高的原型则可以为mask和小的目标带来更高质量性能。 因此,我们使用FPN [26],因为它的最大特征层(在我们的情况下为P3,见图2)最深。 然后,我们将其上采样到输入图像尺寸的四分之一,以提高在小物体上的性能。
图2:YOLACT体系结构蓝色/黄色表示原型中的低/高值,灰色节点表示未经训练的功能,在此示例中,k = 4。 我们使用ResNet-101 + FPN在RetinaNet [27]的基础上建立了该架构。
最后,我们发现protonet的输出是无界的是很重要的,因为这允许网络为它非常确信的原型(例如,明显的背景)产生巨大的、强大的激活。 因此,我们可以选择遵ReLU或不具有非线性的protonet。 我们选择ReLU以获得更多可解释的原型。
典型的基于anchor的目标检测器在其预测头中有两个分支:一个分支预测c类置信度,另一个分支预测4个边界框回归器。 对于mask系数预测,我们只需并行添加第三分支即可预测 k 个mask系数,每个分支对应一个原型。 因此,我们不是每个anchor产生4 + c系数,而是产生4 + c + k个系数。
然后对于非线性,我们发现能够从最终mask中减去原型很重要。 因此,我们将tanh应用于k个mask系数,从而在没有非线性的情况下产生更稳定的输出。 这种设计选择的相关性在图2中显而易见,因为在不允许扣除的情况下,两种mask都无法构建。
为了产生实例mask,我们将原型分支和mask系数分支的工作结合起来,使用前者和后者作为系数的线性组合。 然后,我们通过Sigmoid非线性来生成最终的mask。 使用单矩阵乘法和Sigmoid可以有效地实现这些运算:
其中 P 是原型mask的h×w×k矩阵,C 是n个实例在NMS后n×k的mask系数矩阵和得分阈值。 其他更复杂的组合步骤也是可能的; 但是,我们通过基本的线性组合使其保持简单(快速)。
Losses: 我们使用三个损失来训练我们的模型:分类损失Lcls,框回归损失Lbox和Mask损失Lmask,权重分别为1、1.5和6.125。 Lcl和Lbox的定义方式与[30]中的定义相同。 然后,要计算Mask损失,我们只需简单地获取已组装的Mask M与Grund truth Mask Mgt之间的像素级二进制交叉熵:
Cropping Masks:我们在评估过程中使用预测的边界框裁剪最终Mask。 在训练过程中,我们改用Ground truth边界框进行裁剪,然后将Lmask除以ground truth边界框区域,以保留原型中的小对目标。
我们的方法似乎令人惊讶,因为围绕实例分割的普遍共识是,由于FCN是平移不变的(卷积的性质),因此该任务需要在[24]中添加平移差异。 因此,诸如FCIS [24]和Mask R-CNN [18]之类的方法尝试显式添加平移方差,无论是通过directional maps和position-sensitive repooling,还是通过将mask分支置于第二阶段,因此都不必 处理定位的实例。 在我们的方法中,我们添加的唯一平移方差是使用预测的边界框裁剪最终的mask。 但是,我们发现我们的方法也无需裁剪就可以处理大中型目标,因此这不是裁剪的结果。 相反,YOLACT学习如何通过其原型中的不同激活来自行定位实例。
要了解如何做到这一点,首先请注意,在没有填充的FCN中,实际上不可能激活图5中的红色实心图像(图像a)的原型。 因为卷积输出到单个像素,所以如果在图像中各处的卷积输入相同,则在conv输出中各处的结果都将相同。 另一方面,在像ResNet这样的现代FCN中,填充边缘始终如一,使网络能够分辨像素距图像边缘的距离。 从概念上讲,它可以完成此操作的一种方法是使多层填充的0从边缘到中心依次展开(例如,使用[1; 0]这样的kernel)。这意味着ResNet本质上是翻译变体,而我们的方法大量使用了该属性(图像b和c表现出明显的翻译差异)。
图5原型行为:相同六个原型(y轴)在不同图像(x轴)上的激活。 原型1-3响应对象到柔软的,隐式边界(用虚线标记)的一侧。 原型4在对象的左下角激活(例如,图像d中伞的左下角); 原型5在背景和对象之间的边缘上激活; 原型6细分了网络所感知的图像中的地面。 在图像d-f中,这最后3种模式最为清晰。
我们观察到许多原型可以在图像的某些“分区”上激活。 也就是说,它们仅在隐式学习的边界一侧的对象上激活。 在图5中,原型1-3就是这样的示例。 通过组合这些分区图,网络可以区分同一语义类的不同(甚至重叠)实例。 例如,在图像d中,可以通过从原型2中减去原型3来将绿色伞与红色伞分开。
此外,作为学习对象,原型是可压缩的。也就是说,如果原型将多个原型的功能组合为一个,则mask系数分支可以了解哪种情况需要哪种功能。例如,在图5中,原型2是一个分区原型,但也会在左下角的实例上最强烈地触发。原型3相似,但在右边的实例中。这解释了为什么在实践中,即使k = 32个原型,该模型的性能也不会降低(请参见表2b)。另一方面,增加k最有可能是无效的,因为难以预测系数。如果由于线性组合的性质,网络即使在一个系数上都产生很大的误差,则所产生的mask可能会消失或包括其他物体的泄漏。因此,网络必须发挥平衡作用以产生正确的系数,而增加更多的原型会使这一点变得更加困难。实际上,我们发现对于较高的k值,网络仅添加了冗余原型,这些原型具有较小的边沿级变化,从而略微增加了AP95,但其他方面不多。
对于我们的Backbone检测器,我们优先考虑速度和特征丰富性,因为预测这些原型和系数是一项艰巨的任务,需要良好的特征才能做好。 因此,我们backbone探测器的设计紧随RetinaNet [27],并着重于速度。
YOLACT 检测器:我们将ResNet-101 [19]与FPN [26]用作默认特征backbone,并且基本图像尺寸为550×550。为了获得一致的评估时间,我们不保留aspect ratio。像RetinaNet一样,我们通过不产生P2以及不产生P6和P7作为从P5(不是C5)开始的连续3×3 strie为2的卷积层来修改FPN,并放置3个具有长宽比的anchor[1,1 / 2, 2]。 P3的anchor的面积为24个像素的平方,并且每个后续层的大小都是前一个的两倍(结果为[24, 48, 96,192, 384])。对于每个Pi附加的预测头,我们三个分支共享一个3×3卷积,然后每个分支并行获得自己的3×3卷积。与RetinaNet相比,我们的预测头设计(见图4)更轻巧,更快。我们将smooth L1 loss应用于训练box回归器,并以与SSD [30]相同的方式对box回归坐标进行编码。为了训练类别预测,我们使用带有c个正标记和1个背景标记的softmax交叉熵,并使用OHEM [39]以3:1 neg:pos的比率选择训练示例。因此,与RetinaNet不同,我们不使用focal loss,我们发现这种focal loss在我们的情况下不可行。
图4:toubu 架构:我们使用比RetinaNet [27]浅的预测头,并添加了一个mask系数分支。 这是对c类,特征图Pi 的一个anchor和k个原型。 见图3的一个key。
通过这些设计选择,我们发现该backbone比具有相同图片大小的基于ResNet-101 [19]的SSD [30]更好,更快。
我们还将讨论其他改进,这些改进要么增加速度,而对性能的影响很小,要么增加性能,而没有速度损失。
Fast NMS:在为每个anchor生成边界框回归系数和类置信度之后,像大多数目标检测器一样,我们执行NMS来抑制重复检测。 在许多先前的工作[35、36、30、37、18、27]中,NMS是按顺序执行的。 也就是说,对于数据集中c类的每个类别,对检测到的框按置信度降序进行排序,然后对于每个检测,删除所有置信度比其低且IoU重叠大于某个阈值的框。 尽管此顺序方法在大约5 fps的速度下足够快,但它却成为获取30 fps的一大障碍(例如,以5 fps的速度提高10毫秒可提高0.26 fps,而以30 fps的速度提高10毫秒时, 以12.9 fps的速度提升)。
为了解决传统NMS的顺序性问题,我们引入了Fast NMS,它是NMS的一种版本,在该版本中,可以并行确定每个实例保留或丢弃。 为此,我们仅允许已删除的检测来抑制其他检测,这在传统NMS中是不可能的。 这种放松使我们能够在标准GPU加速矩阵操作中完全实现Fast NMS。
为了执行Fast NMS,我们首先计算一个c×n×n 对的IoU矩阵X,用于对c个类别中的每一个类别按得分降序排列的前n个检测。 GPU上的批量排序很容易获得,计算IoU可以很容易地向量化。 然后,如果存在更高得分的检测,且对应的IoU大于某个阈值t,则我们将其删除。 我们首先通过将X的下三角形和对角线设置为0来有效地实现这一点: 可以在一个批处理的triu调用中执行,然后采用按列的最大值:
为了每次检测计算最大IoU值的矩阵K。 最后,用t(K < t)对该矩阵进行阈值化将指示为每个类别保留哪些检测。
由于放松,Fast NMS的作用是删除过多的boxes。 但是,与速度的急剧提高相比,由此造成的性能下降可以忽略不计(参见表2a)。 在我们的代码库中,Fast NMS比传统NMS的Cython实现快11.8毫秒,而性能仅降低0.1 mAP。 在Mask R-CNN基准套件[18]中,Fast NMS比其传统NMS的CUDA实施快15.0 ms,而性能损失仅为0.3 mAP。
表2:消融:使用我们的服务器在COCO val2017上评估的所有模型。 对表2b中的模型进行了400k迭代而不是800k的迭代训练。 为方便起见,报告了以毫秒为单位的时间。
语义分割Loss:尽管Fast NMS牺牲了少量的性能以提高速度,但仍有许多方法可以提高性能而不会降低速度。 其中一种方法是在训练期间使用未在测试时执行的模块对模型施加额外的损失。 这有效地增加了特征丰富性,而没有速度损失。
因此,我们使用仅在训练期间评估的图层将语义分割损失应用于特征空间。 请注意,由于我们是通过实例注释来构造这种损失的基本事实,因此这不能严格捕获语义分割(即,我们不对每个像素强制执行标准的一类)。 要在训练期间创建预测,我们只需将带有c个输出通道的1x1卷积层直接附加到backbone中最大的特征图(P3)。 由于每个像素可以分配给多个类别,因此我们使用Sigmoid和c 个通道,而不是softmax和c +1个通道。此损耗的权重为1,导致+0.4 mAP增强。
我们使用标准指标在MS COCO [28]和Pascal 2012 SBD [16]上报告实例分割结果。 对于MS COCO,我们在train2017上进行训练,并在val2017和test-dev上进行评估。
实现细节:我们使用ImageNet [10]预训练权重在一个GPU上训练,batch size为8的所有模型。 我们发现这足够使用batch norm的batch size,因此我们不冻结预训练的batch norm,但是不添加任何额外的bn层。 我们使用SGD进行了800k迭代的训练,以10-3的初始学习率开始,并使用5×10-4的权重衰减,0.9的momentum以及所有的动量在280k,600k,700k和750k的迭代中除以10。 SSD中使用的数据扩充[30]。 对于Pascal,我们训练了12万次迭代,并将学习率除以60k和100k。 随着对象趋于更大,我们还将anchor比例乘以4/3。 一台用于COCO的Titan Xp训练需要4-6天(取决于配置),而在Pascal上则需要不到1天的训练。
Mask 结果:我们首先将YOLACT与表1中MS COCO的test-dev集上的最新方法进行比较。由于我们的主要目标是速度,因此我们将其与其他单模型结果进行了比较,而没有增加测试时间。 我们报告所有在单个Titan Xp上计算出的速度,因此列出的某些速度可能比原始论文中的速度更快。
表1:MS COCO [28]结果我们将最先进的mask mAP方法与COCO test-dev上的速度进行了比较,并包括基本模型的几种消融,变化的backbone和图像大小。 我们用网络深度特征表示backbone结构,其中R和D分别指ResNet [19]和DarkNet [36]。 我们的基本模型,带有ResNet-101的YOLACT-550,比以前的具有竞争性口罩mAP的最快方法快3.9倍。
YOLACT-550提供了有竞争力的实例分割性能,而其速度是以前COCO上最快的实例分割方法的3.8倍。 我们还注意到与其他方法相比,我们的方法的性能存在一个有趣的差异。 支持图7中定性结果的YOLACT-550与Mask R-CNN在50%重叠阈值之间的差距是9.5 AP,而在75%IoU阈值之间的差距是6.6 AP。 举例来说,这与FCIS的性能不同,与Mask R-CNN的差距一致(AP值分别为7.5和7.6)相比。 此外,在最高(95%)IoU阈值下,我们以1.6 vs 1.3 AP的性能上优于Mask R-CNN。
图7:mask质量:由于mask尺寸较大且缺乏特征repooling,我们的mask质量通常比Mask R-CNN [18]和FCIS [24]高。
我们还在表1中报告了替代模型配置的编号。除了基本的550×550图像尺寸模型之外,我们还训练了400×400(YOLACT-400)和700×700(YOLACT-700)模型,并相应地调整了anchor比例 (sx = s550 / 550 * x)。 减小图像尺寸会导致性能大幅下降,这表明实例分割自然会需要较大的图像。 然后,如预期的那样,增大图像尺寸会显着降低速度,但也会提高性能。
除了ResNet-101 [19]的基本backbone之外,我们还测试了ResNet-50和DarkNet-53 [36],以获得更快的结果。 如果更高的速度是可取的,我们建议使用ResNet-50或DarkNet-53而不是减小图像大小,因为这些配置的性能比YOLACT- 400好得多,而速度却稍慢一些。
最后,我们还在表3中针对Pascal 2012 SBD训练和评估了ResNet-50模型。YOLACT明显优于报告SBD性能的流行方法,而且速度明显更快。
表3:Pascal 2012 SBD [16]结果:为公平起见,在Titan Xp上重做了FCIS的时间。 由于Pascal具有比COCO更少且更容易检测的功能,因此YOLACT比以前的方法要好得多。 请注意,COCO和Pascal FPS不具有可比性,因为Pascal的类较少。
Mask 质量:因为我们生成的最终Mask的尺寸为138×138,并且因为我们直接从原始特征创建了mask(没有进行repooling来转换和潜在地使特征不对齐的情况),所以用于大目标的mask的质量明显高于Mask R- CNN [18]和FCIS [24]。 例如,在图7中,YOLACT产生的Mask完全匹配手臂的边界,而FCIS和Mask R-CNN都具有更大的噪声。 此外,尽管总体情况下差了5.9 mAP,但在95%IoU阈值的情况下,我们的基本模型仍达到了1.6 AP,而Mask R-CNN获得了1.3 AP。 这表明repooling确实会导致mask质量的量化下降。
时间稳定性:尽管我们仅使用静态图像进行训练,并且不应用任何时间平滑,但我们发现,与Mask R-CNN相比,即使在目标静止的情况下,其mask也会在整个帧中抖动,因此我们的模型在视频上会产生时间上更稳定的mask。 我们认为我们的mask更稳定,部分是因为它们的质量更高(因此,各帧之间的误差空间较小),但主要是因为我们的模型是单阶段的。 采用两阶段方法产生的mask在第一阶段高度依赖于其region proposal。 与我们的方法相反,即使模型在帧中预测不同的框,原型也不会受到影响,从而产生了时间上更稳定的mask。
尽管我们的mask质量更高,并且具有诸如时间稳定性之类的良好属性,但我们在整体性能上仍落后于最新的实例分割方法,尽管速度要快得多。 大多数错误是由检测器中的错误引起的:分类错误,框不对齐等。但是,我们已经确定了两种典型的错误,这些错误是由YOLACT的mask生成算法引起的。
定位失败:如果场景中一个点的目标太多,则网络可能无法在其自己的原型中定位每个目标。 在这些情况下,对于组中的某些对目标,网络将比实例分割更接近前景mask。 例如,在图6的第一张图片(第1行第1列)中,红色飞机下方的蓝色卡车未正确定位。
图6:基于COCO的test-dev集的YOLACT评估结果。 此基本模型在33.0 fps时达到29.8 mAP。 所有图像的置信度阈值均设置为0.3。
泄露:我们的网络利用了在组装后对mask进行裁剪的事实,并且没有尝试抑制裁剪区域之外的噪声。 当边界框准确时,此方法效果很好,但如果边界框不正确,则噪声可能会渗入实例mask,从而从裁剪区域外部产生一些“泄漏”。 当两个实例彼此相距很远时,也会发生这种情况,因为网络已了解到它不需要对很远的实例进行定位-裁剪会照顾好它。 但是,如果预测的边界框太大,则mask也会包含一些远处实例的mask。 例如,图6(第2行第4列)显示了这种泄漏,因为mask分支认为这三个滑雪者相距足够远,不必将它们分开。
理解AP差距:但是,仅定位失败和泄漏不足以解释YOLACT基本模型与Mask R-CNN之间的近6 mAP差距。 确实,我们基于COCO的基础模型的test-dev mask和box mAP(29.8 mask,32.3 box)之间只有2.5 mAP的差异,这意味着即使使用完美的mask,我们的基础模型也只能获得很少mAP。 此外,Mask R-CNN具有相同的mAP差异(35.7 mask,38.2 box),这表明这两种方法之间的差距在于检测器性能相对较差,而不是我们生成mask的方法。