提出这一概念的论文:《Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks》
Faster-R-CNN是CV-Object detection领域下的。(目标检测=多图像识别+多物体定位)
CV-Object detection的相关学习可以参考https://zhuanlan.zhihu.com/p/31117359
object detection技术的演进:RCNN->SppNET->Fast-RCNN->Faster-RCNN
object detection的解决思路有哪些?
思路一:看做回归问题
步骤1:• 简单搭一个识别图像的神经网络, 或下载AlexNet VGGNet GoogleLenet等,fine-tuning;
步骤2:• 在上述CNN的结尾处加入“类别分类 classification”和“矩形框回归 regression”
步骤3:• Regression用欧氏距离损失• 使用SGD训练
(需要两次fine-tuning:1在步骤一的神经网络上做,2将头部改成regression head,前面不变,fine-tuning)
Regression的部分加在哪?有两种处理方法:
• 加在最后一个卷积层后面(如VGG)
• 加在最后一个全连接层后面(如R-CNN)
思路二:取图像窗口
• 还是刚才的classification + regression思路
• 咱们取不同的大小的“框”• 让框出现在不同的位置,得出这个框的判定得分
• 取得分最高的那个框(注:有的时候也会选择得分最高的两个框,然后取两框的交集作为最终的位置预测。)
·找出可能含有物体的框,框之间可以互相重叠或包含的,这样避免了暴力枚举。选定候选框的方法,例如EdgeBoxes和SS。
基于以上的思路,RCNN出现了。
1. R-CNN:
其中R对应于(区域)Region。整体框架与传统方法相似,大致为:生成候选窗口(Selective Search提proposal),进行特征提取(CNN),对窗口进行分类(SVM),边框回归(Bounding box regression)。
1.1. 生成候选窗口(Selective Search)
使用Selective Search方法生成候选窗口,抛弃了滑动窗口范式(传统的SIFT,HOG等方法)。SS方法先基于颜色特征将图像划分为多个小块,然后自底向上对不同的块进行合并,合并前后的每一个块都对应一个候选窗口,最后挑出最有可能包含待检测目标的窗作为候选窗口。与图像分类区别:图像分类是把输入图像作为样本,依次进行处理;本文是针对一个输入图像,再用SS方法生成2000个左右的候选区域,几乎涵盖了图像中物体可能出现所有位置。
1.2. 特征提取及分类
用CNN的输出来训练SVM分类器(二分类)( 当样本缺乏时,用辅助样本预训练,后用真实样本,随机梯度下降对CNN微调)
1.3. 边框回归(Bounding box regression)
边框回归指的是在给定窗口的基础上去预测真实检测框的位置和大小,即在候选窗口基础上,调整得到更精确的位置和大小,为和待检测目标贴合得更好。边框回归一方面提供了一个新的角度来定义检测任务,另一方面对于提高精确度有比较显著的作用。
1.4. 缺点:即使使用了SS等预处理步骤来提取bounding box作为输入,但是RCNN仍有严重的速度瓶颈。由于每一个候选框都要独自经过CNN,即计算机对所有region进行特征提取时重复计算,花费大量时间。因此提出Fast R-CNN。
SPP Net
SPP:Spatial Pyramid Pooling(空间金字塔池化) 它的特点有两个:
1.结合空间金字塔方法实现CNNs的多尺度输入
一般CNN后接全连接层或者分类器,他们都需要固定的输入尺寸,因此不得不对输入数据进行crop或者warp,这些预处理会造成数据的丢失或几何的失真。SPP Net的第一个贡献就是将金字塔思想加入到CNN,实现了数据的多尺度输入。
在卷积层和全连接层之间加入了SPP layer。此时网络的输入可以是任意尺度的,在SPP layer中每一个pooling的filter会根据输入调整大小,而SPP的输出尺度始终是固定的。
2.只对原图提取一次卷积特征
在R-CNN中,每个候选框先resize到统一大小,然后分别作为CNN的输入,这样是很低效的。
SPP Net据此做了优化:只对原图进行一次卷积得到整张图的feature map,然后找到每个候选框在feature map上的映射patch,将此patch作为每个候选框的卷积特征输入到SPP layer和之后的层。大幅节省计算时间,比R-CNN有一百倍左右的提速。
2. Fast R-CNN
RCNN的处理流程:SS提proposal,CNN提取特征,SVM分类器二分类,最后bbox regression。而Fast-RCNN,巧妙的把bbox regression放进了神经网络内部,与分类和并成为了一个multi-task模型(实验也证明二者能够共享卷积特征,并相互促进)。
提速:Fast R-CNN共享卷积层(不再是每个候选框都输入CNN)而是输入原图片,第五个卷积层再得到每个候选框的特征。
RCNN:许多候选框(eg 两千个roi)-->CNN(两千遍)-->得到每个候选框的特征-->分类+回归
Fast R-CNN:一张完整图片(SS提roi)-->CNN(一遍)-->得到每张候选框的特征-->分类+回归
(基本实现端对端(除了proposal阶段外))
Fast R-CNN就是在RCNN的基础上采纳了SPP Net方法,使得性能进一步提高。
正常来说输入图片size不同(conv、pooling、relu等都不需要输入size相同)导致得到的feature map尺寸也不同,不能直接接到一个全连接层进行分类。但是大牛提出了一个单层sppnet的网络层,叫做ROI Pooling,他可把不同大小的输入映射到一个固定尺度的特征向量。ROI Pooling层对每个region都可提取一个固定维度的特征表示,就可以通过正常的softmax进行类型识别了。
Fast R-CNN将整个图片送入网络时同时将object proposal(这里称为RoI,一张图中得到约2k个)也送入网络,每一个RoI被Rol pooling layer(相当于一个单层SPP layer)统一到一个固定大小的feature map,然后通过两个全连接层将其映射到一个特征向量。这个特征分别share到两个新的全连接,连接上两个优化目标,一个是softmax probabilities,优化目标是分类;一个是bounding-box regression,优化目标是精确边框位置。
2.1 Rol pooling layer
Rol pooling layer的作用主要有两个,一个是将image中的rol定位到feature map中对应区域(patch),另一个是用一个单层的SPP layer将这个feature map patch下采样为大小固定的feature再传入全连接层。
2.2 Fine-tuning for detection
SPP无法进行权值更新,Fast R-CNN使用单层SPP layer。利用随机梯度下降法小批量分层采样,同一张图片里面的ROI(region of interest)在前向传播和反向传播中,计算和存储共享,从而降低了计算,可以实现权值更新。
2.3 Multi-task loss
FRCN有两个loss:1.分类loss,是一个N+1路的softmax,其中N是类别个数,1是背景。2.回归loss,是一个4xN路输出的bounding-box regressor(有4个元素(x,y,w,h),左上角(x,y),宽w,高h),即对于每个类别都会训练一个单独的regressor。
2.4 Truncated SVD for faster detection
利用SVD矩阵分解技术,其作用是将一个大的矩阵(近似)拆解为三个小的矩阵的乘积,使拆解之后三个矩阵的元素数目远小于原大矩阵的元素数目,达到降低矩阵乘法计算量目的。将SVD应用于全连接层的权值矩阵,处理一张图所需的时间能降低30%。
2.5.重要贡献:成功的让人们看到了Region Proposal+CNN这一框架实时检测的希望,原来多类检测真的可以在保证准确率的同时提升处理速度,也为后来的Faster-RCNN做下了铺垫。
2.6.缺点:SS需要找出所有的候选框,这个也非常耗时。那我们能不能找出一个更加高效的方法来求出这些候选框呢?因此提出Faster:加入一个提取边缘的神经网络(RPN),也就说找到候选框的工作也交给神经网络来做了。
具体做法:
• 将RPN放在最后一个卷积层的后面
• RPN直接训练得到候选区域
Fast-RCNN基本实现端对端(除了proposal阶段外),下一步自然就是要把proposal阶段也用CNN实现(放到GPU上)。这就出现了Faster-RCNN,一个完全end-to-end的CNN对象检测模型。
3. Faster R-CNN
3.1. 简介
Faster R-CNN是基于深度学习R-CNN系列目标检测最好的方法。使用VOC2007+2012训练集训练,VOC2007测试集测试mAP达到73.2%,目标检测的速度可以达到每秒5帧。
将RPN网络和Fast R-CNN网络结合到了一起,将RPN获取到的proposal直接连到ROI pooling(为softmax统一大小)层。
RPN(一种 fully-convolutional network (FCN))的核心思想是使用卷积神经网络直接产生region proposal,使用的方法本质上就是滑动窗口。
最后根据region proposal得分高低,选取前300个region proposal,作为Fast R-CNN的输入进行目标检测。
3.3. RPN简介:
• 在feature map上滑动窗口
• 建一个神经网络用于物体分类+框位置回归
• 滑动窗口的位置提供了物体的大体位置信息
• 框的回归提供了框更精确的位置
一种网络,四个损失函数;
• RPN calssification(anchor good.bad)
• RPN regression(anchor->propoasal)
• Fast R-CNN classification(over classes)
• Fast R-CNN regression(proposal ->box)
3.4.主要贡献:设计了神经网络RPN,提取候选区域,代替了费时的选择性搜索,检测速度大幅提高。
3.3. 训练:
(1)使用在ImageNet上预训练的模型初始化RPN网络参数,微调RPN网络;
(2) 使用(1)中RPN网络提取region proposal,训练Fast R-CNN网络,也用ImageNet上预训练的模型初始化该网络参数;
(3) 使用(2)的Fast R-CNN网络重新初始化RPN, 固定卷积层进行微调,微调RPN网络;
(4) 固定(2)中Fast R-CNN的卷积层,使用(3)中RPN提取的region proposal对Fast R-CNN网络进行微调。
最后总结一下各大算法的步骤:
RCNN
1. 使用SS(选择性搜索)在图像中确定约1000-2000个候选框
2. 每个候选框图像块缩放至相同size,输入到CNN内进行特征提取
3. 对候选框中提取出的特征,SVM二分类判别是否属于一个特定类
4. 对于属于某一特征的候选框,bbox回归器进一步调整其位置
Fast RCNN
1. 使用SS(选择性搜索)在图像中确定约1000-2000个候选框
2. 对整张图片输进CNN,得到feature map
3. 找到每个候选框在feature map上的映射patch,将patch输入到SPP layer和之后的层
4. 对候选框中提取出的特征,SVM二分类判别是否属于一个特定类
5. 对于属于某一特征的候选框,bbox回归器进一步调整其位置
Faster RCNN
1. 对整张图片输进CNN,得到feature map
2. feature map输入到RPN,得到各个候选框的特征信息
3. 对候选框中提取出的特征,SVM二分类判别是否属于一个特定类
4. 对于属于某一特征的候选框,bbox回归器进一步调整其位置
内容来源:
https://blog.csdn.net/ture_dream/article/details/52763694(rcnn系列)
https://www.cnblogs.com/skyfsm/p/6806246.html(rcnn系列)
几篇讲解这个论文的博客:
https://blog.csdn.net/abrams90/article/details/53580774(翻译)
https://zhuanlan.zhihu.com/p/24916624(faster RPN)
https://blog.csdn.net/crazyice521/article/details/52752122(faster fast r-cnn论文及训练)
https://www.cnblogs.com/jie-dcai/p/5710232.html (faster论文)
https://blog.csdn.net/bailufeiyan/article/details/50575150