目标检测20年(综述)

本文根据论文:Object Detection in 20 Years: A Survey 撰写,其中关于深度学习方面的目标检测算法我都会附上原论文的链接以及一些我认为写的还不错的博客。

1、目标检测20年发展历程

目标检测20年(综述)
目标检测的发展历程主要分为两个阶段:传统目标检测方法、基于深度学习的目标检测方法。
传统目标检测方法主要有三个:Viola Jones Detectors、HOG Detector、Deformable Part-based Model (DPM)。
基于深度学习的目标检测方法又有两个分支,分别是双阶段检测、单阶段检测器。

1.1 双阶检测器

R-CNN
R-CNN在2014年由R. Girshick等人提出,作为第一个使用卷积神经网络提取图像特征的目标检测算法,奠定了深度学习在目标检测的统治地位,其背后的思想很简单:它首先在原图上提取一组对象候选框。然后将每个候选框重新缩放为固定大小的图像,并输入到ImageNet上训练的CNN模型中以提取特征。 最后,将提取出来的特征送给线性SVM分类器用于预测每个区域内对象的存在并识别对象类别。
RCNN在VOC07数据集上的表现(mAP)从之前最好传统目标检测算法的33.7%直接提升到58.3%。但是R-CNN有个很大的缺点:一张图要先产生超过2000个候选框,每个候选框存在大量重叠的部分,因此再对每个候选框区域分别进行卷积的时候有大量的冗余计算,因此RCNN的检测速度并不快。

SPPNet(Spatial Pyramid Pooling Networks)
SPPNet是2014年由何恺明等人提出的目标检测算法,其主要贡献是引入了空间金字塔池化层(SPP),具体原理和实现方式可参考博客。空间金字塔池化层能够使CNN生成的特征表示成固定长度,然后送给全连接层,而不对图像/RoI的大小进行放缩。当使用SPPNet进行目标检测时,整个图像只计算一次特征图,然后可以对任意区域生成固定长度的特征用于训练检测器,避免重复计算卷积特征。SPPNet比R-CNN快20倍以上,但不牺牲任何检测精度(VOC07mA) p=59.2%)。
缺点:训练是多阶段的,其次,SPPNet仅微调其全连接层,而忽略了之前的所有层。

Fast RCNN
Fast RCNN检测算法又是R. Girshick大神在2015年提出的。它吸取了SPPNet的优点,提出了简化版的空间金字塔池化层:ROI Pooling,首次同时将分类器和包围盒回归器同时放入网络进行训练。具体原理可参考博客。在VOC07数据集上,Fast RCNN将mAP从58.5%(RCNN)提高到70.0%,而检测速度是R-CNN的200倍以上。
缺点:建议框的提取仍然耗费了大量的时间,是提取特征分类的几倍。

Faster RCNN
Faster RCNN是由任少卿等人在2016年提出的目标检测算法,它是第一个端到端的目标检测算法(Fast RCNN需要先搜索2000个推荐框),也是第一个接近实时检测的算法。Faster RCNN的主要贡献就是提出了区域推荐网络RPN(Region Proposal Network),它生成推荐框的时候几乎没有时间消耗。具体原理可以参考博客

Feature Pyramid Networks
特征金字塔网络FPN(Feature Pyramid Networks)是2017年由Tsung-Yi Lin等人在Faster RCNN基础上提出的一种结构。在FPN之前,大多数基于深度学习的检测器仅使用卷积网络的顶层特征进行检测。尽管CNN较深层的特征有利于目标类别的识别,但它不利于对象的定位。为此,在FPN中开发了具有横向连接的自上而下的体系结构,用于构建各种规模的高级语义。由于CNN通过其向前传播自然形成了一个特征金字塔,因此FPN在检测各种尺度的物体方面显示出了巨大的进步。FPN至今也是很多检测器的基础结构。FPN的具体原理可以参考博客

1.2 单阶检测器

You Only Look Once (YOLO)
YOLO在2015年由Joseph Redmon等人提出。它是在深度学习领域的第一个单阶检测器。

未完…