目标检测:Segmentation is All You Need ?
对于目标检测,从滑动窗口时代开始,我们已经习惯了候选区域特征提取然后分类的套路,深度学习时代强大的特征表示能力让我们能够探索不一样的道路,比如:
ECCV18 Oral | CornerNet目标检测开启预测“边界框”到预测“点对”的新思路
通过定位特定语义点来定位目标。
而且Anchor-Free方法越来越流行,大家开始意识到预先定义的Anchor降低计算量的同时,却已经成为限制目标检测精度提高的因素。
今天跟大家分享的一篇文章《Segmentation is All You Need》,可能又要颠覆大家的认知,我们不仅不需要Anchor,甚至我们思考目标检测的方式都被局限了!
论文作者信息:
论文作者来自牛津大学、湖南农业大学、SnowCloud公司。该论文已投NeurIPS 2019。
提出问题
在现代目标检测应用中,目标部分被遮挡、环境光照差和目标相对场景过小等依然难以被解决。
下图展示了这些极端的例子:
这些难以处理的情况几乎都和算法能够选择或者预定义正确的、尺度合理的候选区域有关系。
而计算机视觉任务中的分割,不对目标做任何位置和尺度的假设,对像素进行无差别分类。
目标检测可否直接用分割来完成呢?这就是作者要解决的问题。
算法思想
既然是用分割来做目标检测,那就需要有标注好的分割数据集。
作者使用目标检测数据库中目标的包围框来计算目标的mask,即弱监督标注。
请看下面的例子:
上面的图像来自我爱计算机视觉曾经报道的“数钢筋”大赛DataFountain新上计算机视觉比赛-20万巨奖数钢筋,在这些钢筋端部的包围框上计算内接椭圆,其包含的区域即可以认为是目标的弱监督像素级标注了。
就像下面这幅苹果图像,你很容易通过包围框简单得到苹果的大致区域。
完整的算法示意图如下:
首先是生成弱监督标注数据,然后使用这些数据训练语义分割(不是实例分割),推断的时候,语义分割的结果转化为二值图像,最后使用轮廓提取算法找到不同的目标个体。
图像中往往有复杂的遮挡,比如:
这需要在制作目标像素级标注时考虑到,下图是将目标包围框转化为像素级标注的细化:
作者称这种标注方法为multimodal annotations(多模标注)。
推断时,对二值图像进行轮廓查找,作者设计了Run-data-based tracing 算法。
查找到的不同的轮廓即为不同的目标个体。
对于极其小的目标的训练,作者在此框架下引入vector field方法。示意图如下:
实验结果
作者在三个数据集上进行了实验,分别是数钢筋大赛的数据、WiderFace人脸数据集和COCO 目标检测数据集。
下图是数钢筋的结果:
该文提出的算法在参数量最少的情况下,精度最高,超过目标检测state-of-the-art Cascade RCNN算法。
下图是在WiderFace人脸检测数据集上的结果,依然超过了所有方法。
最后是在COCO 数据集上的结果,该文算法取得了与Mask RCNN 和 Cascade R-CNN相匹敌的精度。
这类算法才刚刚出来,应该还有很大改进空间!
值得一提的是,作者对目标进行像素级标注的方法,对于人脸和钢筋这种实心的目标可能比较有效,对于自行车这种中间有很大空隙的,会不会有问题?
不知作者会不会进一步公布在COCO数据集上不同类的检测结果,应该很有趣。
另外作者目前没有公开代码,也没公布推断时间。
这篇文章颠覆了我们的认知,原来什么框、什么点也不需要,也可以做目标检测!
也许是作者急于快点公布算法与实验结果,以至于忘了在论文最后写结论了^_^
论文地址:
https://arxiv.org/abs/1904.13300v1
欢迎文末留言,发表你的看法。