目标检测20年(综述)

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

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

目标检测20年(综述)_第1张图片
目标检测的发展历程主要分为两个阶段:传统目标检测方法、基于深度学习的目标检测方法。
传统目标检测方法主要有三个: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年由R. Joseph等人提出,是首个在深度学习领域的单阶段检测器。作为单阶段检测器,YOLO非常快:YOLO最快的版本在VOC2007数据集上运行可以达到155fps,mAP=52.7%;增强版本同样有45fps,但其精度可以达到VOC2007 mAP=63.4%,VOC2012 mAP=57.9%。从YOLO的名字就可以看出,作者完全的抛弃以前的检测方式:“候选框生成+验证”。相反采用完全不同的思路:只应用一个神经网络结构去处理所有图片。YOLO将图像划分为多个区域,并同时预测每个区域的边界框和概率。后来 R. Joseph在YOLO的基础上经过一系列改进提出了YOLOv2和YOLOv3版本,目前YOLO已经更新到v4版本。尽管YOLO在检测速度上有着巨大的飞跃,但目标定位准确率相比于双阶段检测器有下降,尤其是在定位小目标上。YOLO的接下来的版本都将重点放在解决此问题上。

Single Shot MultiBox Detector (SSD)
在2016年,SSD被 W. Liu等人提出,它是在深度学习领域的第二个单阶段检测器。其主要贡献是首次融合的多层特征进行推理预测,这样使得单阶段检测器的检测精度有了极大的提高,尤其是在一些小目标的检测上,表现比YOLO更好,同时兼顾了检测速度和准确率(VOC2007 mAP=76.8%,VOC2012 mAP=74.9%)。SSD与以前的检测器之间的主要区别在于,前者在网络的不同层上检测不同比例的对象,而后者仅在其顶层运行检测。

RetinaNet
尽管单阶段检测器简单而且有着非常高的速度,单其准确率一直不如双阶段检测器。在2017年T.-Y. Lin等人发现了其背后的原因,并提出了RetinaNet。他们认为导致单阶段检测器精度没有双阶段检测器高,主要是因为其没有像双阶段检测器中的候选框提取结构,而是简单的将图像划分为多个区域进行分类回归,这样导致网络在训练过程中包含目标的前景样本和背景样本及其不平衡。为此,作者重塑了标准交叉熵损失,提出了新的损失函数:Focal loss,以便检测器在训练过程中将更多的注意力放在困难的,分类错误的示例上。Focal loss应用于单阶段检测器可以达到和双阶段检测器相媲美的检测精度,并且保持了非常高的检测速度。

未完…

你可能感兴趣的:(目标检测)