前述目标检测(object detection):解决的问题是物体是什么和物体在哪里的整个流程。
而物体可能是多个类别的,物体的尺寸变化范围很大,摆放物体的角度,姿态不定,出现在图片的任何地方等诸多因素,导致目标检测的难度增大。
ViolaJones
HOG+SVM
DPM
传统目标检测流程:
1)选择区域:设置不同大小,不同的长宽比的窗口滑动对图像进行遍历,时间复杂度高。
2)特征提取:提取的三类方法分别是底层特征,中层次特征,高层次特征。
3)分类器判定目标:(SVM、Adaboost等)
图像识别和滑动窗口位置检测
1.解决简单问题,先搭建一个识别图像的神经网络
2.接下来对图片用各种大小的框来遍历,将对应遍历的图像截取出来,输入到CNN中,然后CNN输出这个框的得分以及框在图片处对应的位置(x, y, h,w)
总结:传统目标检测方法时间复杂度高,对于多样性的变化没有很好的适应能力。
R-CNN(Selective Search + CNN + SVM)
SPP-net(ROI Pooling)
Fast R-CNN(Selective Search + CNN + ROI)
Faster R-CNN(RPN + CNN + ROI)
R-FCN
Region Proposal即候选区域很好的解决了传统目标检测算法中采用滑动窗口存在的时间复杂度高的问题。
Region Proposal的主要方法:Selective Search(选择搜索)算法,其主要观点是图像中物体可能存在的区域是有某些相似性或着连续性区域的,因此,选择搜索首先对输入图像进行分割算法产生许多小的子区域;其次,根据这些主区域之间的相似性(主要是颜色、纹理、大小等)进行区域合并,不断的进行区域迭代合并。每次迭代过程中对这些合并的子区域做bounding boxes(外切矩形),这些子区域就是通常所说的候选区。
R-CNN的简要步骤如下
(1) 输⼊测试图像
(2) 利⽤选择性搜索Selective Search算法在图像中从下到上提取2000个左右的可能包含物体的候选区域Region Proposal
(3) 因为取出的区域大小各自不同,所以需要将每个Region Proposal缩放(warp)成统⼀的227x227的大小并输入到CNN,将CNN的fc7层的输出作为特征
(4) 将每个Region Proposal提取到的CNN特征输⼊到SVM进行分类
R-CNN框架对提取的候选框都需要进行CNN操作,计算量大,而且训练时对卷积出来的特征数据还需要单独保存,占用的磁盘空间大。
SPP-net的主要思想是去掉了原始图像上的crop/warp等操作,换成了在卷积特征上的空间金字塔池化层(Spatial Pyramid Pooling,SPP)如图:
SPP Net的第⼀个贡献就是在卷积层后,接⼊了⾦字塔池化层,保证传到下⼀层全连接层的输⼊固定。
换句话说,在普通的CNN机构中,输⼊图像的尺⼨往往是固定的(⽐如224*224像素),输出则是⼀个固定维数 的向量。SPP Net在普通的CNN结构中加⼊了ROI池化层(ROI Pooling),使得⽹络的输⼊图像可以是任意尺⼨ 的,输出则不变,同样是⼀个固定维数的向量。
ROI池化层⼀般跟在卷积层后⾯,此时⽹络的输⼊可以是任意尺度的,在SPP layer中每⼀个pooling的filter会根据 输⼊调整大小,而SPP的输出则是固定维数的向量,然后给到全连接FC层。
可以说SPP-net大大加快了目标检测的速度,比R-CNN有接近100倍的提速。
R-CNN的进阶版Fast R-CNN是R-CNN的进阶版,在R-CNN的基础上采纳了SPP Net的方法,对R-CNN作 了改进,使得性能进⼀步提高。
之前R-CNN的处理流程是先提proposal,然后CNN提取特征,之后用SVM分类器,然后再做box regression,而在Fast R-CNN中,作者巧妙的把box regression放进了神经网络内部,与region分类和并成为了 ⼀个multi-task模型,这两个任务能够共享卷积特征,并相互促进。
总的来说Fast R-CNN对于R-CNN来说性能有了非常大的提升了,但任然存在耗时的问题。
为了解决Fast R-CNN存在的瓶颈:选择性搜索,找出所有的候选框,也非常耗时的问题,加⼊⼀个提取边缘的神经⽹络,也就说找到候选框的工作也交给神经网络来做。所以,rgbd在Fast R-CNN中引入Region Proposal Network(RPN)替代Selective Search,同时引入anchor box 应对目标形状的变化问题(anchor就是位置和大小固定的box,可以理解成事先设置好的固定的proposal)
总的来说,从R-CNN, SPP-net, Fast R-CNN, Faster R-CNN一路走来,基于深度学习目标检测的流程变得越来越精简,精度越来越高,速度也越来越快。可以说基于region proposal的R-CNN系列目标检测方法是当前目标检测技术领域最主要的一个分支。
(You Only Look Once: Unified, Real-Time Object Detection)
(1) 给个一个输入图像,首先将图像划分成77的网格
(2) 对于每个网格,我们都预测2个边框(包括每个边框是目标的置信度以及每个边框区域在多个类别上的概率)
(3) 根据上一步可以预测出77*2个目标窗口,然后根据阈值去除可能性比较低的目标窗口,最后NMS去除冗余窗口
可以看到YOLO整个过程非常简单,不再需要中间的region proposal找目标,直接回归便完成了位置和类别的判定,YOLO将目标检测任务转换成一个回归问题,大大加快了检测的速度,使得YOLO可以每秒处理45张图像。而且由于每个网络预测目标窗口时使用的是全图信息,使得false positive比例大幅降低(充分的上下文信息)。
但是YOLO也存在问题:没有了Region Proposal机制,只使用7*7的网格回归会使得目标不能非常精准的定位,这也导致了YOLO的检测精度并不是很高。
(SSD: Single Shot MultiBox Detector)
YOLO使用整图特征在7*7的粗糙网格内回归对目标的定位并不是很精准。为了实现比较精准的定位,SSD结合YOLO的回归思想以及Faster R-CNN的anchor机制
上图是SSD的一个框架图,首先SSD获取目标位置和类别的方法跟YOLO一样,都是使用回归,但是YOLO预测某个位置使用的是全图的特征,SSD预测某个位置使用的是这个位置周围的特征
SSD结合了YOLO中的回归思想和Faster R-CNN中的anchor机制,使用全图各个位置的多尺度区域特征进行回归,既保持了YOLO速度快的特性,也保证了窗口预测的跟Faster R-CNN一样比较精准。SSD在VOC2007上mAP可以达到72.1%,速度在GPU上达到58帧每秒。
上文为学习笔记,一些地方自己也可能存在误解,希望指正!