目标检测与实例分割是计算机视觉领域重要的两个任务,近年来出现了非常多优秀的算法解决这两个问题,且都取得了优异的效果。
但是,却鲜有文章深入分析两者之间的关联,也就导致了诸如下图所示的错误的出现:
上面的结果由Mask R-CNN得到,可以看到由于边界框定位不准导致前两张图的实例掩码缺失,以及后两张图的边界框与实例掩码不统一。
最近,来自中科院自动化所的硕士生王绍儒提出的算法,很好地解决了以上问题,可以同时完成目标检测与实例分割任务,两个任务能相互辅助,同时取得了性能的提升。
论文一作王绍儒现在也是地平线公司的一名实习生,他的论文已被AAAI 2020收录,相关工作已经开源。
双流网络
这篇文章认为,目标检测属于目标级别的任务,这类任务更关注物体级别的特征,对分辨率的需求不高,但需要更多的高级语义信息。
而实例分割任务属于像素级别的任务,这类任务需要给出逐像素的输出,对分辨率的需求较高,需要更多的细节信息。
因此作者设计了如图所示的双流网络:
上面的object stream重点完成目标检测任务,可以是SSD, YOLO, RetinaNet等任一anchor-based的目标检测算法。
下面的pixel stream重点完成分割的任务,分辨率很高。
两个任务相互辅助
“物体”辅助实例分割:
目前常见的实例分割算法分为两类,一类是类似于Mask R-CNN的proposal-based的方法,是目标检测算法的直接扩展。
但这类方法会面临上文提到的诸多问题,得到的实例掩码分辨率相对较低且严重依赖于proposal的边界框。
另一类基于分割算法,首先预测每个点的嵌入,然后再通过聚类得到每个实例的掩码。
这类方法天然克服了proposal-based的缺陷,但一般无法端到端训练,且受限于聚类算法,性能一般有限。
仔细分析发现,聚类的难题主要源于聚类中心的缺失,换句话说,如果我们拥有每个簇的中心,我们就可以抛弃聚类算法,进行端到端训练。
而这个“中心”,应该是每个物体的嵌入,也就是说,它应该源于目标级别,而非像素级别。因此,也就形成了论文里提出的基于相关滤波的实例掩码生成算法:
Object stream和pixel stream分别提取目标和像素的嵌入,属于同一物体的像素和与其对应的物体具有相近的嵌入,相似性的衡量采用了内积相似度。
也就是说,对于每个检测到的物体,以其嵌入作为内核,在像素嵌入上执行相关滤波,即可得到这一物体的掩码。
除此之外,文中还充分利用了object stream得到的目标边界框,对距离物体中心较远的噪声进行了抑制,本质上是在一定程度上克服CNN的translation-variant对实例分割任务的影响。
“掩码”辅助目标检测:
边界框定位是目标检测的一项重要任务,而现有的方法大多采用回归的方式得到边界框的位置。然而我们回顾边界框的定义,发现它本身就是通过物体的掩码定义的。
那么,既然我们可以得到物体的掩码,为什么还要依赖于回归算法,多此一举呢?
文中通过实验发现,直接利用通过上述基于相关滤波方法得到的实例掩码生成边界框,精度并不太高,甚至低于回归方法得到的边界框。
文章作者通过可视化发现:大多数物体的掩码都可以提供十分准确的边界框,然而也存在部分物体的掩码预测结果不太理想,使得边界框出现了较大的偏移。
据此观察,文章提出了一种基于贝叶斯公式的边界框定位算法,首先将边界框定位定义为分类任务,将问题转化为给定物体掩码,坐标属于边界框的后验概率的预测:
然后利用贝叶斯公式,将回归得到的边界框作为先验概率P(X=i),而P(M’|X=i)则由物体实例掩码通过逐列(行)取最大、一维卷积和激活函数得到。
整体过程如下图所示:
此方法综合考虑了回归得到的边界框和实例掩码的优势,得到了更准确的边界框。
具体结果可以看下图,可以明显发现,由此方法得到的边界框可以以更高的IOU和ground truth box匹配。
实验结果:
文章在COCO数据集上进行了实验验证。
在实例分割任务中,此方法在单阶段算法中可以达到更优的速度与精度的平衡,以近3倍的速度取得了和TensorMask相近的精度,以相近的速度在YOLACT的基础上取得了2.3mAP的提升。
在目标检测任务中,此方法以极低的计算代价在不同的backbone上取得了一致的性能提升。
值得注意的是,文章中采用的是RetinaNet作为探测器,且在其基础上扩展到实例分割任务中并不会带来显著的计算量的增加,如果采用其他更先进的目标检测算法,其精度与速度还能取得更进一步的提升。
传送门
论文地址: https://arxiv.org/abs/1912.05070
源代码: https://github.com/wangsr126/RDSNet