论文链接
目录
摘要
1 目标检测的主要方法
1.1 Viola Jones Detector
1.2 HOG Detector
1.3 Deformable Part-based Model(DPM)
1.4 RCNN
1.5 SPPNet
1.6 Fast RCNN
1.7 Faster RCNN
1.8 特征金字塔网络
1.9 YOLO
1.10 SSD
1.11 RetinaNet
2 目标检测的数据集以及衡量标准
2.1 目标检测数据集
2.2 目标检测衡量标准
3 模型加速的方法
4 目标检测近期的成果
4.1 主干网络
4.2 特征融合
4.3 不再使用滑动窗口
4.4 目标定位上的进步
4.5 使用语义分割来帮助目标检测
4.6 让模型对目标的旋转和大小变化更加鲁棒
4.7 让模型从零开始训练
4.8 对抗训练
4.9 弱监督学习
本文只对目标检测的各个方向和阶段进行大致梳理,不涉及或只简要概括算法。在原来论文的基础上,加上了我自己的一些理解。
在目标检测领域,甚至在计算机视觉领域,2014年可以说是一条很明显的分界线。在2014年以前,提取图像的特征主要是以人工的方式,但在2014年之后,随着深度学习的蓬勃发展,计算机视觉迎来了一波小高潮。本文主要从一下几个方面阐述了目标检测在1990年至2019年期间的发展历程:
下面以时间线来梳理各个目标检测方法的大致内容:
参考
HOG(Histogram of Oriented Gradients)检测器是用来检测对于物体大小不敏感的特征和形状型下文。为了让检测器对物体的平移、尺度大小、光照等不明显,该检测器大概的计算步骤如下:
DPM是传统目标检测方法的天花板,是HOG检测器的延申,DPM分为训练阶段和检测阶段。训练阶段可以看作是将目标分解的过程,检测阶段则是检测一个物体不同部位的集合。DPM算法采用了改进后的HOG特征,SVM分类器和滑动窗口(Sliding Windows)检测思想,具体检测流程可以看参考。DPM也是第一个能够调整先验框的算法。
从RCNN开始,就进入了深度学习的阶段。RCNN的主要思路如下:
SPPNet主要介绍了一个对输入图片没有尺寸要求的神经网络层——Spacial Pyramid Pool Layer(空间金字塔池化层)。SPPNet可以用于图像分类也可以用于目标检测,这里主要说的是目标检测。在RCNN中的AlexNet要求输入图片的大小必须为224*224,而在SPP层的加入下,则没有了这一限制。SPPNet目标检测的大致思路是:
Fast RCNN又是在RCNN和SPPNet上的延续。Fast RCNN也是使用selective search进行预选框的生成,但是它可以在同一个网络上同时进行特征的提取和bbox的调整,这主要是得益于ROI Pooling层的引入,在网络最后的feature map上加入了ROI Pooling层(类似于1.5中的空间金字塔池化层),直接进行分类和bbox的调整。但是Fast RCNN仍然需要SVM进行分类。
Faster RCNN又是在Fast RCNN的基础上进行改善,主要的变化是引入了RPN(Region Proposl Network),使得网络不再依靠selective search获取预选框,而是直接通过RPN网络生成预选框,其根本原理就是在feature map上生成固定大小的anchors,让网络(全连接层)去判断这些anchors是否包含物体。其他的部分和Fast RCNN差不太多。
特征金字塔网络(FPN)主要是解决了在不同层的feature map上的语义差异,高层的feature map具有更高的语义(比如属于人、背景等),而底层的feature map可能并没有那么高的语义(比如只关注轮廓、颜色、形状等)。这极大地促进了多尺度目标检测器的发展(例如Yolo)。
YOLO至今一共有V1-V5五个版本,前三个版本为同一个作者(这个作者叫Joseph Redmon,很有个性,有兴趣可以去查一下),YOLO的主要特点就是快,精度略逊色于Faster RCNN。YOLO主要思想是将图片分成许多不同尺度的小网格(YOLOv3中是将图片分成了三个尺度:13*13、26*26、52*52),在每个不同尺度的小格内直接预测小格内的物体种类以及bbox的位置。但是YOLO的不足就在于对于一些小目标的检测效果极差,但后续版本的YOLO也进行了改进。
SSD(Single Shot MultiBox Detector)主要引入了Multi-reference和Multi-resolution来解决小目标检测精度差的问题,基本思想就是预先生成一些列不同大小的anchors(锚框),在训练阶段对anchors进行调整。
RetinaNet主要提出了一种新的损失函数——focal loss,这种损失函数能够让网络更加关注一些更难的样本。
一下是一些主流的数据集,另外这篇综述论文还介绍了一些小众的数据集(比如交通信号灯、文本等)这里就不列举了。
如何衡量一个目标检测算法的好坏呢?在2014年以前,主要是使用FPPW(false positives per-window),但在2014年以后,主要使用的是mAP。
模型加速主要涵盖以下几个方面:
目标检测效果的好坏很大程度上依赖于主干网络的好坏,自2015年以后,很多优秀的主干网络都被发明了出来,例如:AlexNet, VGG, GoogLeNet, ResNet, DenseNet, SENet等
例如YOLO算法,并没有依赖于滑动窗口进行检测,而是直接利用feature map进行多尺度检测。
很多优秀的目标检测算法在检测完成之后会对bbox进行调整,也针对这一调整设计了一些损失函数。
这里主要是说很多时候使用预训练好的模型进行fine tuning可能效果并没有从零开始训练好,因为预训练使用的数据集和你自己训练的数据集可能存在很多差异。
这里主要是讲了一下GAN网络