重磅 | 基于弱监督约束的通用目标检测

  • 2019 年 11 月 13 日
  • 笔记

目标检测作为计算机视觉研究极其重要的一个分支,随着 deep learning 技术的发展,近几年得到了长足的进步,但广大科(搬)研(砖)青年长期被各位大佬压在石缝里,Facebook 的 Kaiming He, Ross, 国内的face++,几乎预订了每年各大顶会的目标检测相关的 paper 并长期霸榜 COCO 竞赛的 state-of-the-art 席位,让我们这些活在石头缝里的搬砖青年很难有所突破。所以啊,与其在这里和各位大佬分庭抗礼,不如我们另辟蹊径,在目标检测领域内,对一些目前还未能得到很好解决的问题进行研究与探索,比如我们今天要讲到的 “weakly supervised object detection”。

1.什么是 weakly supervised object detection

在前几期的推送中,作者看到小詹同学推送了一些目标检测相关的文章,文中介绍到的 RCNN, Fast/Faster RCNN 等算法,其实都是基于 fully supervised 的object detection 算法。对于 fully supervised 来说,算法在训练的时候,需要的是一个全监督的信号。

打个比方,我现在要训练一个车辆检测器,那么我在训练检测器的时候,需要告诉算法,我的训练样本图像中的哪些位置存在感兴趣的目标,对于每个感兴趣目标需要人手工标注一系列框(xmin,ymin,xmax,ymax),类似于下图 1。

图1:全监督算法的标注方式

这种手工标注对于算法工作人员来说,是非常耗时间的,尤其是当一副图像中存在多个目标的时候,需要逐个对目标进行手工标注。为了解决标注耗时耗力的问题,相关研究人员提出了弱监督(weakly supervised)目标检测。同样,对于图 1 来说,如果我们使用弱监督的思路来训练目标检测器,我们只需要给出这副图像的类别信息,比如说,我只用告诉算法,这幅图像里有 “车” 这个目标即可,这种标注方式,可以大大的减轻标注工作量,并可以将标注的速度提升 10 倍以上。

所以,weakly supervised 目标检测的任务就是,只告诉图像中存在哪些目标,希望算法能够给出这些目标在图像中存在的位置。

2. 如何使用 weakly supervised 的思路来解决目标检测的问题?

目标检测是一个很难的计算机视觉问题,常规的解决思路小詹同学在前几期的推送里已经有过相关的介绍,通常是首先生成大量的候选框,然后对候选框进行分类,再进行相关的边框回归。试想一下,我们在使用弱监督信息训练的时候,因为监督信号缺失精准的坐标信息,所以我们就无法进行边框回归训练,也就无法得到精准的检测框。

因为我们得到的监督信号只有图像存在的类别信息,我们首先想到的就是将检测问题转化为一个分类问题。根据许多之前的研究我们可以知道,在使用卷积神经网络对图像进行特征提取的时候,具有语义信息的目标会在特征图上高亮显示,并且相同的类别会存在相似的特征,如果我们能够学习到目标类内和类间的特征,是不是就可以在特征图上对目标进行定位呢?

这种思路是正确的,也是目前弱监督目标检测普遍采用的方法之一,但其中也存在很多困难与阻力,比如说类内差异较大、怎么去定义同一个类别的共性,像图 3 那样,我们应该怎么去定义一辆摩托车?因为摩托车通常是和人同时出现的,且不同摩托车的类内差异也较大。

图2:具有语义信息的物体在特征图上会高亮显示

图3: 同时出现摩托车和人的时候,怎么去定义一类物体?

3. 目前的两种主流解决思路及代表性方法介绍

a) 基于多实例学习的方法

Multiple Instance Learning(MIL)多实例学习是机器学习中的一个经典问题。在弱监督目标检测中,我们把整张图片作为一个 bag,然后我们通过selective search(ss)算法生成大量的proposal,把这些proposals作为 instances,再训练一个分类器为这些 proposal 赋予类别标签。

2016 年的 CVPR (计算机视觉及模式识别领域国际顶级会议) 上有一篇论文提出了一种 WSDDN 的算法,使用 MIL 的思路,将弱监督目标检测做到了当时的最高水平。他是怎么做的呢?像我们上面说的,首先通过 ss 算法生成大量的候选框,再使用卷积神经网络对整张图像进行特征提取,在获取到整张图片的特征后,使用 roi pooling 的方法,获取每一个proposal 的特征,这里和 fast rcnn 的方法非常类似。但在得到每一个 proposal 的特征之后,作者将后续分为了两个阶段:1)分类阶段;2)定位阶段。两个阶段分别计算了某一个特定的proposal j 属于第i类的概率和这个proposal j对这种图片存在第i类目标的贡献率,生成的都是c * |R|的矩阵,其中c是类别的个数,|R|是proposal的个数,其实这个地方就是分别在横向和纵向做了两次softmax。

拿图4举个例子吧,图片上存在人和马两个类别,那我们拿到的监督信号就是图片的类别是人和马。对于ss生成的每个proposal,我们都能计算出其属于人和马的概率,就是一个2*|R|的矩阵,然后我们在这个矩阵的横向和纵向分别做两次softmax,就能分别的到这个区域属于人和马的概率的softmax值以及这个区域对这张图像存在人和马的贡献。

图4:wsddn分两路计算softmax

然后我们将得到的值进行 element-wise 的乘积,得到这个区域的最终分数,并根据分数来对 proposal 进行筛选,得到最优的 proposal。

b) 基于深度特征图挖掘的方法

上面说到的方法似乎不是很好理解,那说一个简单通俗易懂的方法吧。我们上面说过,卷积神经网络在对物体进行特征提取的时候,具有语义信息的物体,在特征图上会高亮显示,那我们是不是能够通过处理这些语义信息来获取目标的位置呢?

答案是肯定的,同样实在 2016 年的 CVPR 上,MIT 的 Bolei Zhou 提出的 class activation mapping 的方法,通过挖掘特征图上的高亮区域,得到目标物体的位置信息。

图5: 对特征图和权值进行线性加权

是不是看完上面这张图,基本就很明了了。这篇论文的思路非常简单,使用 global average pooling 的方法对特征图进行全局池化,然后再通过一个全连接层进行分类,这是一个普通的不能再普通的分类框架。作者这里对最后一层特征图和分类层之间的关系进行挖掘,我们知道,最后一层每个特征图在经过全局池化后得到了对应数目的特征点,这些特征点与分类层的一个特定节点都会有连接,作者把这个连接的权值看作是该特征图对于这幅图像被分为该特定类别的贡献率,并将特征图与其对应的连接权值进行了一个简单的线性加权,得到最后的特征输出。在最后的特征输出上,该特定类别具有非常显著的响应,也就能很轻易的获取到特定类别目标的位置信息。

图6: 第三列使用cam得到的目标区域的高亮显示

总结一下,上面介绍了两种完全不同的弱监督目标检测的方法,虽然这两种算法在 9102 年的今天看起来已经 out 了,而且性能似乎并不是那么好,但这两种方法确实为弱监督目标检测提供了两种非常有价值的思路,在近几年的 cvpr,iccv 等顶级计算机视觉国际会议中,陆陆续续出现了很多关于弱监督目标检测的论文,基本都是从今天介绍的两种方法出发研究得到的。

弱监督目标检测的性能和全监督的算法比起来,性能上还存在较大差异,但弱监督的方法能够很大程度上降低数据标注的工作量,作为一个科学研究问题,还有更多、未知的方法值得我们努力去挖掘!

最后还是想叨叨一句,上面说到的都是简单的不能再简单的对算法的通俗解释,如果有兴趣的同学,千万、一定要去读论文,多读 paper,多写 code,才能发出好论文!

相关参考资料:

[1]Bilen H, Vedaldi A. Weakly supervised deep detection networks[C]//Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition. 2016: 2846-2854.

[2]Zhou B, Khosla A, Lapedriza A, et al. Learning deep features for discriminative localization[C]//Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition. 2016: 2921-2929.

我爱小詹

/ 今日互动 /

留言主题 : 说实话,你觉得本文难度如何?

留言格式 : Day xx. blablabla ;这里强调下 ,不符合主题和格式的打卡不移入精选,打卡无效噢 !