目标检测作为图像处理和计算机视觉领域中的经典课题,在交通监控、图像检索、人机交互等方面有着广泛的应用。它旨在一个静态图像(或动态视频)中检测出人们感兴趣的目标对象。传统的目标检测算法中特征提取和分类决策分开进行,对特征选取的要求就更加严格,在面对复杂场景的时候很难得到理想效果。自Hinton教授提出深度学习理论,越来越多的研究人员发现在目标检测领域应用深度学习,可以有效提高检测效果和性能,于是深度学习在实时视频的目标检测开始获得大规模的应用。时至今日,其检测效率和精度已经有了极大提高。
一: 传统检测算法
传统的目标检测一般使用滑动窗口的框架,主要包括三个步骤:先利用不同尺寸的滑动窗口框住图中的某一部分作为候选区域;然后提取候选区域相关的视觉特征——比如人脸检测常用的Harr-like特征,行人检测和普通目标检测常用的HOG(Histogram of Oriented Gradient)、SIFT(Scale Invariant Feature Transform)特征等;最后利用分类器进行识别,比如常用的SVM模型。
二: 经典传统检测算法之DPM
传统的目标检测中,多尺度形变部件模型DPM(Deformable Part Model)是出类拔萃的,连续获得VOC(Visual Object Class)2007到2009的检测冠军,2010年其作者Felzenszwalb Pedro被VOC授予“终身成就奖”。DPM把物体看成了多个组成的部件(比如人脸的鼻子、嘴巴等),用部件间的关系来描述物体,这个特性非常符合自然界很多物体的非刚体特征。DPM可以看做是HOG+SVM的扩展,很好的继承了两者的优点,在人脸检测、行人检测等任务上取得了不错的效果,但是DPM相对复杂,检测速度也较慢,从而也出现了很多改进的方法。
三:目前检测算法
正当大家热火朝天改进DPM性能的时候,基于深度学习的目标检测横空出世,迅速盖过了DPM的风头,很多之前研究传统目标检测算法的研究者也开始转向深度学习。基于深度学习的目标检测发展起来后,其实效果也一直难以突破。比如C. Szegedy等人提出的基于DNN的检测算法在VOC 2007测试集合上的mAP只能达到约30%,P. Sermane等人提出的OverFeat在ILSVRC 2013测试集上的mAP只能达到24.3%。2013年R-CNN[8]诞生了,在VOC 2007测试集检测的mAP大幅提升至48%,随着研究的不断深入,各类先进检测算法不断涌出。
1. YOLO
2015年Joseph Redmon提出了一个新的物体检测方法YOLO(You OnlyLook Once), 顾名思义是指只看一次就可以知道‘是否存在’以及‘在哪儿’,进一步把目标判定和目标识别合二为一,所以识别性能有了很大提升,达到每秒45帧,而在快速版YOLO(Fast YOLO,卷积层更少)中,可以达到每秒155帧。
针对一张图片,YOLO的处理步骤为:把输入图片缩放到448×448大小;运行卷积网络;对模型置信度卡阈值,得到目标位置与类别。对VOC数据集来说,YOLO就是把图片统一缩放到448×448,然后每张图平均划分为7×7=49个小格子,每个格子预测2个矩形框及其置信度,以及20种类别的概率。舍弃了Region proposal阶段,加快了速度,但是定位精度比较低,与此同时带来的问题是,分类的精度也比较低。在各类数据集上的平均表现大概为54.5%mAP。
2. Faster R-CNN
2015年S Ren等人对R-CNN系列又提出了改进型Faster R-CNN[10],运用一种区域建议网络RPN(Region Proposal Network),它和检测网络共享全图的卷积特征,使得区域建议几乎不花时间。RPN是一个全卷积网络,在每个位置同时预测目标边界和客体性得分。将RPN 生成的高质量区域建议框,用于Fast R-CNN[11]来检测,通过一种简单的交替运行优化方法,RPN和Fast R-CNN 可以在训练时共享卷积特征,应用共享卷积,计算建议框的边际成本是很小的(例如每个图像10ms)。这种将一直以来分离的候选区域提取阶段和卷积神经网络分类过程融合到了一起,使用端到端的网络进行目标检测,在速度以及精度上都得到了显著的提高。
在每个图像用了300 个建议框的情况下,对于较深的VGG-16 模型[12],Faster R-CNN检测系统在GPU 上的帧率达到5fps(包含所有步骤),对于较为简单的模型,帧率可以达到17 fps,在PASCAL VOC 2007 和PASCAL VOC2012 上实现了最高的目标检测准确率(PASCAL VOC2007:73.2%mAP ,PASCAL VOC2012:70.4%mAP)。
3. SSD
之后,针对于Faster R-CNN与YOLO网络中出现的不足,SSD[13]网络对YOLO 网络进行了相应的改进。SSD的框架如图6所示,图6(a)表示带有两个Ground Truth边框的输入图片,图6(b)和(c)分别表示8×8网格和4×4网格,显然前者适合检测小的目标,比如图片中的猫,后者适合检测大的目标,比如图片中的狗。在每个格子上有一系列固定大小的Box(有点类似前面提到的Anchor Box),这些在SSD称为Default Box,用来框定目标物体的位置,在训练的时候Ground Truth会赋予给某个固定的Box,比如图6(b)中的蓝框和图6(c)中的红框。
SSD的网络分为两部分,前面的是用于图像分类的标准网络(去掉了分类相关的层),后面的网络是用于检测的多尺度特征映射层,从而达到检测不同大小的目标。SSD和YOLO的网络结构对比如图7所示。
SSD在保持YOLO高速的同时效果也提升很多,主要是借鉴了Faster R-CNN中的Anchor机制,同时使用了多尺度。因Default Box的形状以及网格大小是事先固定的,那么对特定的图片小目标检测效果较差。
相关项目实战推荐:
YOLO:https://zhuanlan.zhihu.com/p/29555602
SSD: https://zhuanlan.zhihu.com/p/29586716
Faster R-CNN:https://github.com/endernewton/tf-faster-rcnn
对深度学习感兴趣,热爱Tensorflow的小伙伴,欢迎关注我们的网站http://www.panchuang.net 我们的公众号:磐创AI。