一、 传统目标检测方法
传统目标检测流程:
1)区域选择(穷举策略:采用滑动窗口,且设置不同的大小,不同的长宽比对图像进行遍历,时间复杂度高)
2)特征提取(SIFT、HOG等;形态多样性、光照变化多样性、背景多样性使得特征鲁棒性差)
3)分类器(主要有SVM、Adaboost等)
传统目标检测的主要问题:
1)基于滑动窗口的区域选择策略没有针对性,时间复杂度高,窗口冗余
2)手工设计的特征对于多样性的变化没有很好的鲁棒性。
二、目标检测技术近年来的发展
大致分类:
1.使用region proposal的,目前是主流,比如RCNN、SPP-Net、Fast-RCNN、Faster-RCNN以及MSRA的R-FCN。
2.不使用region proposal的,YOLO,SSD。
我觉得,这些工作都体现的一个趋势:如何让不同ROI(Region of Interest)之间尽量多的共享计算量,并充分利用CNN得到
的特征,使得整个detection的速度变快。
下面就大致介绍一下上面提到的一些算法
三、基于侯选区域(Region Proposal)的深度学习目标检测法
Region Proposal:顾名思义,就是
在图片中预先找出物体可能出现的位置,利用颜色、纹理、边缘等信息选取比穷举窗口少很
多的目标区域(大约2k个)。
常见的Region Proposal方式:
1.R-CNN
步骤:
(1) 输入测试图像
(2) 利用selective search算法在图像中从下到上提取2000个左右的Region Proposal
(3) 将每个Region Proposal缩放(warp)成227x227的大小并输入到CNN,将CNN的fc7层的输出作为特征
(4) 将每个Region Proposal提取到的CNN特征输入到SVM进行分类
注:
(2) 利用selective search算法在图像中从下到上提取2000个左右的Region Proposal
(3) 将每个Region Proposal缩放(warp)成227x227的大小并输入到CNN,将CNN的fc7层的输出作为特征
(4) 将每个Region Proposal提取到的CNN特征输入到SVM进行分类
注:
1)对每个Region Proposal缩放到同一尺度是因为CNN全连接层输入需要保证维度固定。
2)对于SVM分好类的Region Proposal做边框回归(bounding-box
2)对于SVM分好类的Region Proposal做边框回归(bounding-box
regression),边框回归是对region proposal进行纠正的线性回归算法,为了让region
proposal提取到的窗口跟目标真实窗口更吻合。因为region proposal提取到的窗口不可能跟人手工标记那么准,如果region
proposal跟目标位置偏移较大,即便是分类正确了,但是由于IoU(region
proposal与Ground Truth的窗口的交集比并集的比值)低于0.5,那么相当于目标还是没有检测到。
3)R-CNN缺点:
(1) 训练分为多个阶段,步骤繁琐: 微调网络+训练SVM+训练边框回归器
(2) 训练耗时,占用磁盘空间大:5000张图像产生几百G的特征文件
(3) 速度慢: 使用GPU, VGG16模型处理一张图像需要47s。
(4) 测试速度慢:每个候选区域需要运行整个前向CNN计算
(5) SVM和回归是事后操作:在SVM和回归过程中CNN特征没有被学习更新
proposal提取到的窗口跟目标真实窗口更吻合。因为region proposal提取到的窗口不可能跟人手工标记那么准,如果region
proposal跟目标位置偏移较大,即便是分类正确了,但是由于IoU(region
proposal与Ground Truth的窗口的交集比并集的比值)低于0.5,那么相当于目标还是没有检测到。
3)R-CNN缺点:
(1) 训练分为多个阶段,步骤繁琐: 微调网络+训练SVM+训练边框回归器
(2) 训练耗时,占用磁盘空间大:5000张图像产生几百G的特征文件
(3) 速度慢: 使用GPU, VGG16模型处理一张图像需要47s。
(4) 测试速度慢:每个候选区域需要运行整个前向CNN计算
(5) SVM和回归是事后操作:在SVM和回归过程中CNN特征没有被学习更新
2.SPP-NET
SSP-Net:Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition
RCNN使用CNN作为特征提取器,首次使得目标检测跨入深度学习的阶段。但是RCNN对于每一个区域候选都需要首先将图片放
缩到固定的尺寸(224*224),然后为每个区域候选提取CNN特征。容易看出这里面存在的一些性能瓶颈:
- 速度瓶颈:重复为每个region proposal提取特征是极其费时的,Selective Search对于每幅图片产生2K左右个region proposal,也就是意味着一幅图片需要经过2K次的完整的CNN计算得到最终的结果。
- 性能瓶颈:对于所有的region proposal防缩到固定的尺寸会导致我们不期望看到的几何形变,而且由于速度瓶颈的存在,不可能采用多尺度或者是大量的数据增强去训练模型。
但是,这2000个RegionProposal不都是图像的一部分吗,那么我们完全可以对图像提一次卷积层特征,然后只需要将
Region
Proposal在原图的位置映射到卷积层特征图上,这样对于一张图像我们只需要提一次卷积层特征,然后将每个Region
Proposal
的卷积层特征输入到全连接层做后续操作。(对于CNN来说,大部分运算都耗在卷积操作上,这样做可以节省大量时
间)。
现在的问题是每个Region Proposal的尺度不一样,直接这样输入全连接层肯定是不行的,因为全连接层输入必须是固定
的长
度。SPP-NET恰好可以解决这个问题。
具体思路为:CNN的卷积层是可以处理任意尺度的输入的,只是在全连接层处有限制尺度——换句话说,如果找到一个方法,在全连接层之前将其输入限制到等长,那么就解决了这个问题。
具体方案如下图所示:

如果原图输入是224x224,对于conv5出来后的输出,是13x13x256的,可以理解成有256个这样的filter,每个filter对应一
张13x13的activation map。如果像上图那样将activationmap pooling成4x4 2x2 1x1三张子图,做max pooling后,出来的特
征就是固定长度的(16+4+1)x256那么多的维度了。如果原图的输入不是224x224,出来的特征依然是(16+4+1)x256;直觉地
说,可