RCNN、SPP-net、Fast-Rcnn、Faster-Rcnn,一连串的经典模型,目标检测的开山之作,传奇模型。RCNN和Fast-RCNN简直是引领了最近两年目标检测的潮流!
欢迎各位评论讨论,博主才疏学浅,有疏忽和错误,如存在错误和纰漏,请各位及时指出,共同交流,共同进步。
Region CNN(RCNN)可以说是利用深度学习进行目标检测的开山之作。R-CNN有两个关键点:一是使用建议窗口,并用CNN对其进行卷积特征提取;二是样本缺乏时,使用大量辅助样本进行预先训练,再用自己的样本进行微调。也就是fine-tuning,我觉得迁移学习和fine-tuning差不多…
经典的目标检测算法使用滑动窗口法来判断所有可能为目标的区域,取不同大小的滑动窗口,然后分别计算得分,还需要对框内的物体进行分类。显然运算量过于庞大。
那么RCNN的做法是先为图像生成region proposal(候选区域),然后用CNN进行特征提取。
网络结构,借鉴Hinton 2012年在Image Net上的分类网络。
Selective Search方法从一种图片生成约2000个候选区域,采用一种过分割的手段,将图像分割成小区域,然后bottom-up,合并可能性最高的两个区域,重复合并,直到整张图像上合并成一个区域为止。
输出所有曾经存在过的区域,就是候选区域。
对每一类目标,使用一个线性SVM二类分类器进行判别。考察每一个候选框,如果和本类所有标定框的重叠面积都小于0.3,认定其为负样本。
做位置精修,因为候选框不够准确,重叠面积很小。输入为深度网络pool5层的4096维特征,输出为xy方向的缩放和平移。
对于bounding box的定位精度,有一个很重要的概念,因为我们算法不可能百分百跟人工标注的数据完全匹配,因此就存在一个定位精度评价公式:IOU。
IOU定义了两个bounding box的重叠度,如下图所示:
就是矩形框A、B的重叠面积占A、B并集的面积比例:
IOU=SI/(SA+SB-SI)
R-CNN相比于当前的前沿算法,精确度不够高,速度不够快,无法满足实时系统的需要,但R-CNN是深度学习在目标检测上迈出的重要一步。
CNN网络需要固定尺寸的图像输入,SPPNet将任意大小的图像池化生成固定长度的图像表示,提升R-CNN检测的速度24-102倍。
事实上,CNN的卷积层不需要固定尺寸的图像,全连接层是需要固定大小输入的,因此提出了SPP层,放到卷积层的后面。
SPP的优点:1)任意尺寸输入,固定大小输出,2)层多,3)可对任意尺度提取的特征进行池化。
SPP的结构如上图所示,将最后一个卷积层后紧跟SPP层,作为全连接层的输入。至此,网络不仅可对任意长宽比的图像进行处理,而且可对任意尺度的图像进行处理。图像就不需要reshape了。(如果固定网络输入的话,要么选择crop策略,要么选择warp策略,crop就是从一个大图扣出网络输入大小的patch(比如227×227),而warp则是把一个bounding box的内容resize成227×227。这两种方法都存在着丢失或者扭曲原始图像信息的缺陷。这样CNN获取的特征也就受到了限制,从而导致后续分类/预测的泛化能力不够。)
原理很简单,滑动窗池化的过程中,随着不同卷积后输入的图像大小不同,滑动窗口的大小也是变化的。直观上可以理解为此时的池化窗口改成了自适应窗口大小,保证了经过pooling后出来的feature的长度是一致的,实际是空间金字塔特征提取,运用不同大小的pooling窗口。
SPP中可以看到,它的pooling层是分层的,正如SPP自身的含义——金字塔式池化一样,它每层pooling 窗口的大小是可变的,它的大小是和输入图像的大小成比例的;同时pooling bins的个数是确定的,这就相当于多尺度的pooling,相较于传统CNN中单尺度的pooling,肯定存在更多的优势。这里需要理解的是,对图像的分割操作仍然是需要的,只是SPP中并不是立即对每个region直接特征抽取,而是将“对每个region的操作”放在了SPP这一过程中,即RCNN是多个regions+多次CNN+单个pooling,而SPP则是单个图像+单次CNN+多个region+多个pooling。
SPP已有一定的速度提升,它在ConvNet的最后一个卷积层才提取proposal,但是依然有不足之处。和R-CNN一样,它的训练要经过多个阶段,特征也要存在磁盘中,另外,SPP中的微调只更新spp层后面的全连接层,对很深的网络这样肯定是不行的。
Fast-Rcnn在继承R-CNN的同时,吸收了SPPnet的特点。Fast-Rcnn方法解决了R-CNN方法的三个问题
1)测试时速度慢:R-CNN把一张图片分解成大量的region proposal,每个region proposal用CNN提取特征。实际上,这样region proposal大量重叠,特征值之间完全可以共享,造成了运算能力的浪费。
Fast-RCNN解决了这个问题,它将整张图片归一化后直接送入CNN,在最后的卷积层输出的feature map上,再提取region proposal,使得在此之前的CNN运算得以共享。
2)R-CNN在训练时,在采用SVM分类之前,把通过CNN提取的特征存储到硬盘上,这种方法造成了训练性能低下,因为在硬盘上大量的读写数据会造成训练数据缓慢。
Fast-Rcnn在训练时,只需要将一张图片送入网络,每张图片一次性地提取CNN特征和region proposal,训练数据在GPU内存里直接进入loss层,这样候选区域的前几层特征不需要再重复计算且不再需要把大量数据存储到硬盘上。
Fast-RCNN是深度学习在目标检测任务上的应用,Fast是相对于R-CNN模型而言,是R-CNN的加速版本。
这是SPP pooling层的一个简化版,只有一级“金字塔”。
Rol pooling layer的作用主要有两个:
- 1.是将image中的rol定位到feature map中对应patch
- 2.是用一个单层的SPP layer将这个feature map patch下采样为大小固定的feature再传入全连接层。
cls_score层用于分类,输出K+1维数组p,表示属于K类和背景的概率。
bbox_prdict层用于调整候选区域位置,输出4*K维数组t,表示分别属于K类时,应该平移缩放的参数。
注意本张图的最后,总代价为两者加权和。Fast-RCNN把两个回归的loss进行联合训练。
虽然Fast-Rcnn基于R-CNN有了很大的改进,但是Fast-Rcnn仍然是基于Selective Search方法进行提取region proposal,而Selective Search方法提取region proposal的计算是无法用GPU进行的,无法借助GPU的高度并行运算能力,所以效率极低。而且选取2000个候选区域,也加重了后面深度学习的处理压力。那Faster-RCNN在吸取了Fast-RCNN的特点的前提下,采用共享的卷积网组成RPN网络(Region Proposal Network),用RPN直接预测出候选区域建议框,数据限定在300个,RPN的预测绝大部分在GPU中完成,而且卷积网和Fast-RCNN部分共享,因此大幅度提升了目标检测的速度。
可以看成:Faster-RCNN = RPN(区域生成网络)+ Fast-RCNN,用RPN网络代替Fast-RCNN中的Selective Search是Faster-RCNN的核心思想。
测试时,用边框回归值校正原来的候选窗口,生成预测窗口坐标。
那么就剩三个问题:
如上图所示,在生成region proposal的RPN设计中,Faster-RCNN在feature map上运用滑动窗口(和介绍RCNN之前提出的traditional method很像,==就是给它大小不同(但设计固定)的region图,然后根据与ground truth的覆盖率给它正负标签,让它学习里面是否有object即可。==)。为了能够应对不同尺寸的物体,Faster-RCNN采用了3中不同类型的滑动窗口(Anchor),长宽比分别为1:1,1:2,2:1,并用三个尺度缩放滑动窗口,一共采用了9种类型的滑动窗口(固定尺度变化,固定scale ratio变化,固定采样方式。)。这些窗口经过卷积形成256维向量,最终通过分类挑选选出300个得分最高的窗口作为最终的建议窗口。
这样,图片通过一次卷积,既可以提取出特征,又可以生成region proposal,可以共享卷积计算结果。
样本
考察训练集中的每张图像:
a. 对每个标定的真值候选区域,与其重叠比例最大的region proposal记为前景样本。
b. 对a)剩余的region proposal,如果其与某个标定重叠比例大于0.7,记为前景样本;如果其与任意一个标定的重叠比例都小于0.3,记为背景样本。
c. 对a),b)剩余的region proposal,弃去不用。
d. 跨越图像边界的region proposal弃去不用。
同时最小化两种代价:
a. 分类误差
b. 前景样本的窗口位置偏差
欢迎各位评论讨论,博主才疏学浅,有疏忽和错误,如存在错误和纰漏,请各位及时指出,共同交流,共同进步。
Reference:
1.http://blog.csdn.net/u011534057/article/details/51240387
2.《深度学习-Caffe之经典模型详解与实战》第12、13、14章
3.http://blog.sina.com.cn/s/blog_9ae57c020102vopp.html
4.http://blog.csdn.net/xyy19920105/article/details/50420779
5.http://blog.csdn.net/shenxiaolu1984/article/details/51036677
6.http://blog.csdn.net/u011534057/article/details/51247371