基于深度学习的目标检测算法调研

0 目标检测的任务概述

如何从图像中解析出可供计算机理解的信息,是机器视觉的中心问题。理解图像,有三个主要的层次:

理解图像

  1. 一是分类(Classification),即是将图像结构化为某一类别的信息,用事先确定好的类别(string)来描述图片。这一任务是最简单、最基础的图像理解任务,也是深度学习模型最先取得突破和实现大规模应用的任务。
  2. 二是检测(Detection)。检测则关注特定的物体目标,要求同时获得这一目标的类别信息和位置信息。相比分类,检测需要从背景中分离出感兴趣的目标,并确定这一目标的类别和位置。
  3. 三是分割(Segmentation)。分割包括语义分割(semantic segmentation)和实例分割(instance segmentation),前者要求分离开具有不同语义的图像部分,而后者是检测任务的拓展,要求描述出目标的轮廓(相比检测框更为精细)。分割是对图像的像素级描述,它赋予每个像素类别意义,适用于理解要求较高的场景,如无人驾驶中对道路和非道路的分割。

1 基于深度学习的「目标检测」算法

深度学习时代来临后,「目标检测」算法大家族主要划分为两大派系,一个是 R-CNN 系两刀流派,另一个则是以 YOLO 为代表的一刀流派。下面分别解释一下 两刀流一刀流:

两刀流

顾名思义,两刀解决问题。其实两刀流 更符合人们解决图像问题的思路:

  1. 生成候选区域(Region Proposal)
  2. 放入分类器分类并微调边框位置

这种流派的算法都离不开 Region Proposal(候选区域生成) ,即是优点也是缺点,主要代表人物就是 R-CNN 系。

一刀流

顾名思义,一刀解决问题,直接对预测的目标物体进行回归
回归解决问题简单快速,主要代表人物是 YOLOSSD


两种流派的不同:

  • 两刀流主要倾向准,
  • 一刀流主要倾向快。

无论 两刀流 还是 一刀流,他们都是在同一个天平下选取一个平衡点、或者选取一个极端—— 要么准,要么快。

1.1 两刀流 R-CNN

R-CNN 其实是一个很大的家族,桃李满天下。在此,我们只探讨 R-CNN 直系亲属,他们的发展顺序如下:

R-CNN -> SPP Net -> Fast R-CNN -> Faster R-CNN -> Mask R-CNN`

下面对其分别简单介绍:

1.1.1 R-CNN / 2013

论文:Rich feature hierarchies for accurate object detection and semantic segmentation

罗斯的这篇论文,这个模型,是利用卷积神经网络来做「目标检测」的开山之作,其意义深远不言而喻。

R-CNN

解决问题一、速度

传统的区域选择使用滑窗,每滑一个窗口检测一次,相邻窗口信息重叠高,检测速度慢。R-CNN 使用一个启发式方法(Selective search),先生成候选区域再检测,降低信息冗余程度,从而提高检测速度。

解决问题二、特征提取

传统的手工提取特征鲁棒性差,限于如颜色、纹理等 低层次(Low level)的特征。使用CNN 提取高维特征,免去手工提取特征工作。

1.1.2 SPP Net / 2014

论文:Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition

尽管 之前提出的 R-CNN 效果不错,但是他还有两个硬伤:

硬伤一、算力冗余

先生成候选区域,再对区域进行卷积,这里有两个问题:其一是候选区域会有一定程度的重叠,对相同区域进行重复卷积;其二是每个区域进行新的卷积需要新的存储空间。

何恺明等人意识到这个可以优化,于是把先生成候选区域再卷积,变成了先卷积后生成区域。“简单地”改变顺序,化腐朽为神奇,不仅减少存储量而且加快了训练速度。

硬伤二、图片缩放

undefined

由于FC Layer(全连接层)需要确定输入维度。

无论是剪裁(Crop)还是缩放(Warp)等预处理,在很大程度上会丢失图片原有的信息导致训练效果不好,如上图所示。把一座高塔缩放成一个胖胖的塔,人看到也没很大把握直接下结论。

何恺明等人发现了这个问题,他们在输入全连接层前定义一个特殊的池化层,将输入的任意尺度 feature maps 组合成特定维度的输出,这个组合可以是不同大小的拼凑,如同拼凑七巧板般。

SPP Net 的出现,不仅减少了计算冗余,更重要的是打破了固定尺寸输入这一束缚。

1.1.3 Fast R-CNN / 2015

论文:Fast R-CNN

此时,R-CNN的原作者自己 也按耐不住了——自己家的孩子,自己养大——于是。憋出了一个大招 Fast R-CNN

取这个名字的意思就是“一代更比一代强”,相对于原来的 Slow R-CNN,做了速度上的优化——就是快。

在这篇论文中,引用了 SPP Net 的工作,并且致谢其第一作者何恺明。

纵观全文,最大的建树就是将原来的串行结构改成并行结构

Fast R-CNN

原来的 R-CNN 是先对候选框区域进行分类,判断有没有物体,如果有则对 Bounding Box 进行精修 回归 。

这是一个串联式的任务,那么势必没有并联的快,所以 rbg 就将原有结构改成并行——在分类的同时,对 Bbox 进行回归。

这一改变将 Bbox 和 Clf 的 loss 结合起来变成一个 Loss 一起训练,并吸纳了 SPP Net 的优点,最终不仅加快了预测的速度,而且提高了精度。

1.1.4 Faster R-CNN / 2015

论文:Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks

在 Faster R-CNN 前,我们生产候选区域都是用的一系列启发式算法,基于 Low Level 特征生成区域。这样就有两个问题:

第一个问题 是生成区域的靠谱程度随缘,而 两刀流 算法正是依靠生成区域的靠谱程度——生成大量无效区域则会造成算力的浪费、少生成区域则会漏检;

第二个问题 是生成候选区域的算法是在 CPU 上运行的,而我们的训练在 GPU 上面,跨结构交互必定会有损效率。

于是乎,任少卿等人提出了一个 Region Proposal Networks 的概念,利用神经网络自己学习去生成候选区域。

Region Proposal Networks

这种生成方法同时解决了上述的两个问题,神经网络可以学到更加高层、语义、抽象的特征,生成的候选区域的可靠程度大大提高;可以从上图看出 RPNs 和 RoI Pooling 共用前面的卷积神经网络——将 RPNs 嵌入原有网络,原有网络和 RPNs 一起预测,大大地减少了参数量和预测时间。

两刀流 的两刀并入同一个网络,这一操作足够载入史册了。

1.1.5 Mask R-CNN / 2017

论文:Mask R-CNN

时隔一年,何恺明团队再次更新了 R-CNN 家族,改进 Faster R-CNN 并使用新的 backbone 和 FPN 创造出了 Mask R-CNN

我们纵观发展历史,发现 SPP Net 升级为 Fast R-CNN 时结合了两个 loss ,也就是说网络输入了两种信息去训练,结果精度大大提高了。何恺明他们就思考着再加一个信息输入,即图像的 Mask ,信息变多之后会不会有提升呢?

加一条通道

于是乎 Mask R-CNN 就这样出来了,不仅可以做「目标检测」还可以同时做「语义分割」,将两个计算机视觉基本任务融入一个框架。没有使用什么 trick ,性能却有了较为明显的提升,这个升级的版本让人们不无啧啧惊叹。

1.1.6 二刀流小结

从结构上讲

undefined

一开始的串行到并行,从单一信息流到三条信息流。

从最开始 50s 一张图片的到最后 200ms 一张图片,甚至可以达到 6 FPS 的高精度识别,无不彰显着人类的智慧。

1.2 一刀流 YOLO

一刀流最核心的还是利用了分类器优秀的分类效果,首先给出一个大致的范围(最开始就是全图)进行分类,然后不断迭代这个范围直到一个精细的位置,这样做的优点就是快,但是会有许多漏检。

1.2.1 YOLO / 2015

论文:YOLO

YOLO

YOLO 就是使用回归这种做法的典型算法。

首先将图片 Resize 到固定尺寸,然后通过一套卷积神经网络,最后接上 FC 直接输出结果,这就他们整个网络的基本结构。

更具体地做法,是将输入图片划分成一个 SxS 的网格,每个网格负责检测网格里面的物体是啥,并输出 Bbox Info 和 置信度。这里的置信度指的是 该网格内含有什么物体 和 预测这个物体的准确度。

undefined

这个想法其实就是一个简单的分而治之想法,将图片卷积后提取的特征图分为 SxS 块,然后利用优秀的分类模型对每一块进行分类,将每个网格处理完使用 NMS (非极大值抑制)的算法去除重叠的框,最后得到我们的结果。

1.2.2 SSD / 2015

YOLO 这样做的确非常快,但是问题就在于这个框有点大,就会变得粗糙——小物体就容易从这个大网中漏出去,因此对小物体的检测效果不好。

所以 SSD 就在 YOLO 的主意上添加了 Faster R-CNN 的 Anchor 概念,并融合不同卷积层的特征做出预测。

SSD

我们从上图就可以很明显的看出这是 YOLO 分治网络 和 Faster R-CNN Anchor 的融合,这就大大提高了对小物体的检测。这里作者做实验也提到和 Faster R-CNN 一样的结果,这个 Anchor 的数量和形状会对性能造成较大的影响。

除此之外,和 YOLO 最大的区别是,SSD 没有接 FC 减少了大量的参数量、提高了速度。

1.2.3 YOLO9000 / 2016

论文:YOLO9000: Better, Faster, Stronger

到了 SSD ,回归方法的目标检测应该独步武林了,但是 YOLO 的作者不服气,升级做了一个 YOLO9000 ——号称可以同时识别 9000 类物体的实时监测算法。

YOLO9000 更像是 SSD 加了一些 Trick :

  • Batch Normalization
  • High resolution classifier 448*448 pretrain
  • Convolution with anchor boxes
  • Dimension clusters
  • Multi-Scale Training every 10 batch {320,……608}
  • Direct location prediction
  • Fine-Grained Features
  • 加了 BN 层,扩大输入维度,使用了 Anchor,训练的时候数据增强…

所以YOLO9000 和 SSD 可以归为一类。

2 总结

在「目标检测」中有两个指标:快(Fast) 和 准(Accurate)。

一刀流代表的是快,但是最后在快和准中找到了平衡,第一是快,第二是准。
两刀流代表的是准,虽然没有那么快但是也有 6 FPS 可接受的程度,第一是准,第二是快。

两类算法都有其适用的范围,比如说实时快速动作捕捉,一刀流更胜一筹;复杂、多物体重叠,两刀流当仁不让。没有不好的算法,只有合适的使用场景。

此外,后面的论文中可以看到,两种类型的模型也在互相吸收彼此的优点,这也使得两者的界限更为模糊。

参考:

  1. 《基于深度学习的「目标检测」算法综述》https://zhuanlan.zhihu.com/p/33981103
  2. 《干货 | 目标检测入门,看这篇就够了》https://zhuanlan.zhihu.com/p/34142321
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章