目前,研究团队已将代码及训练好的模型全部开源,包括 Res50, Res101 base 的 Mask R-CNN, Cascade Mask R-CNN, SSD 等,未来还将有更多模型开源,如 yolact 等。
该方法的操作非常简单,目前已发布为 pip 包,只需 python 中加一行代码,import instaboost,换一个 dataloader 函数就可以在 COCO 实例分割数据集上实现显著的性能提升。
近年来,基于 CNN 的深度学习算法,如 Mask R-CNN 等,在实例分割任务中有了非常广泛的应用。但是出于像素级别的标注成本高,周期长,难度大等原因,这些深度学习框架的潜力因为缺少大量的训练数据而难以被充分挖掘出来。
此前我们报道过,Google 研究团队曾研究利用 bounding box 标签,运用强化学习进行数据增强,并获得了一定提升。不过,在实例分割领域,如何利用 mask 标签在 COCO 数据集上获得提升,仍是一个需要探索的问题。
然而实例分割这种像素级的分类要比目标检测难很多,对应的数据增强也要困难很多,这主要体现在它并不能随意把目标切割并移到另外的背景上,因为它们对分割结果也有很大的影响。
来自上海交通大学 MVIG 实验室的研究人员在实例分割应用中对其进行改进优化,成功的将模型的实例分割精度大幅提升,同时也能实现目标检测的提升。
论文地址:https://arxiv.org/abs/1908.07801
代码地址:https://github.com/GothicAi/InstaBoost
演示地址:https://youtu.be/iFsmmHUGy0g
实例分割任务中的数据增强
早期一些方法使用 domain adaptation 等思路,将其他领域的数据作为信息来源辅助数据增强,但是这些方法没有充分利用训练集的 mask 标注信息。
近期一些研究使用基于 crop-paste 的方法在目标检测任务中取得了不错的效果。简单来说,这些方法将物体按照 mask 标注的信息从原图片中剪下来,然后粘贴到一个随机的背景图片上。但是研究者发现这种方法在分割任务中,由于实例和背景契合程度较差,在实验中表现比 baseline 要差。为了解决这一问题,一些论文提出了使用 context model 去为二者一致性打分,但是这种该方法计算成本过高,难以在实际场景中应用。
研究者在这篇论文中提出了两种递进的实例层面的数据增强算法:Random InstaBoost 和 Map-guided InstaBoost。这类算法极大地提高了检测和分割精度。
Matting 和 Inpainting
在将图片前景和背景按照标注进行分离的过程中,如果完全按照标注去切割前景,前景的边界处会呈不自然的多边形锯齿状,这与 COCO 数据标注方式有关。为了解决这一问题,研究者使用《A global sampling method for alpha matting》一文中提出的方法对前景轮廓做 matting 处理,以得到与物体轮廓契合的边界。
在前景背景分离后,背景上会存在若干个空白区域,这些区域可以使用 inpainting 算法进行填补。论文中使用了《Navier-stokes, fluid dynamics, and image and videoinpainting》文章中提出的 inpainting 算法。
从左至右:原图,inpainting 处理后的背景,matting 处理后的前景。
Random InstaBoost
为了尽可能保证粘贴后前景和背景融合的契合程度,直觉上来说将前景粘贴到原位置的附近是最可靠的。Random InstaBoost 方法即是在上述先验的判断下提出的。研究者通过定义一个四元数 (tx, ty, s, r) 来映射前景在数据增强前后的变换。四个参数从左至右分别表示了水平位移,垂直位移,放缩程度和旋转角度。将这四个参数在 (0, 0, 1, 0) 附近进行独立的随机扰动,即可生成一系列符合外观一致性的增强图片。
Map-guided InstaBoost
在 Random InstaBoost 方法中,前景的中心位置 (x,y) 被严格限制在了原位置 (x0,y0) 附近。为了解决这一问题,作者提出了使用外观一致性热度图(appearance consistency heatmap)来引导前景中心粘贴的位置。
外观一致性热度图计算原理大致如下。
外观描述符 D(•)
公式中,(cx, cy) 表示实例的中心坐标,Ci 表示第 i 个轮廓线,wi 表示其对应的权重,i=1 表示最内部的轮廓线。轮廓线通过将实例轮廓膨胀后取差集获得。如下图所示,内外黑色区域之前的三个不同深度区域即为果盘的三个轮廓线。在 w 的取值上,我们按照先验,规定越靠近实例影响越大,权重越大,即 w1>w2>w3。
外观距离
外观距离定义为,外观描述符之间局部外观一致性的度量。由于我们已经定义了具有三个轮廓区域和相应权重关联描述符,D1=D(c1x, c1y) 和 D2=D(c2x, c2y) 之间的外观距离被定义为:
其中 Ik(x, y) 表示图片 k 在 (x, y) 坐标像素点的 RGB 值,Δ可以表示任何距离公式,在实验中作者使用了欧氏距离。对于部分坐标点移出图片的情况,我们将其距离定义为无穷大。
热度图生成与引导平移
通过固定 D0 为实例的原始位置,遍历图片中其余像素点,计算背景上所有可能的 d(D, D0),并通过下列公式将其归一化:
其中 M=max(d(D, D0)),m=min(d(D, D0))。通过将 h(•) 映射到背景图片上的每一个像素,即可获得一个热度图。通过热度与概率之间的映射,可以使用蒙特卡洛方法进行采样,得到高外观一致性的粘贴位置。下图为几则热度图与增强后的实例。
实验结果
在实验过程中,作者使用 Mask R-CNN 和 Cascade R-CNN 两个框架在 COCO 数据集上分别进行了测试,测试结果如下图所示。结果显示,在目标检测和实例分割任务上,InstaBoost 在 mAP 标准下最高带来 4mAP 和 2.2mAP 的提升。
研究人员还使用 Mask R-CNN 在 VOCSDS 数据集上进行实验,目标检测和实例分割提升分别是 4.2mAP 和 3.9mAP,仍旧十分可观。
随后,研究人员从速度和鲁棒性方面将 InstaBoost 与现有方法进行对比。
从速度上来看,InstaBoost 可以作为在线算法嵌入到 dataloader 内部,在 Mask R-CNN 上对比,使用前后每轮迭代仅增加了 0.03s 的时间成本。而使用 context model 的算法,需要对特定数据集预先进行训练等操作,花费大量额外时间,并且难以作为在线算法内嵌到代码框架内。
从鲁棒性的角度来看,传统的 Mask R-CNN 的框架,在训练到 24 个 Epoch 的时候,出现比较严重的过拟合现象,精度开始下降。使用 InstaBoost 之后,模型在 48 个 Epoch 之后精度仍然呈上升趋势。说明 InstaBoost 很大程度上提升了分割框架的鲁棒性。
为了更直观的反应 InstaBoost 对实例分割效果的提升,这里列出部分可视化对比结果: