Fast R-CNN存在的问题:选择性搜索,非常耗时。
解决:加入一个提取边缘的神经网络,将候选框的选取交给神经网络。
在Fast R-CNN中引入Region Proposal Network(RPN)替代Selective Search,同时引入anchor box应对目标形状的变换问题(anchor就是位置和大小固定的box,可以理解成事先设置好的固定的proposal)
具体做法:
1、将RPN放在最后一个卷积层的后面
2、RPN直接训练得到的候选区域
RPN简介:
1. 在feature map上滑动窗口
2. 建一个神经网络用于物体分类 + 框位置回归
3. 滑动窗口的位置提供了物体的大体位置信息
4. 框的回归提供了框更精确的位置
一种网络,四个损失函数:
1. RPN classification(anchor good.bad)
2. RPN regression(anchor-->proposal)
3. Fast R-CNN classification(over classes)
4. Fast R-CNN regression(proposal-->box)
测试过程:Faster R-CNN统一的网络结构如下图所示,可以简单看做RPN + Fast R-CNN
注意在RPN网络中的那两个全连接层是并联的,不是串联的,图有点小问题
注意:上图Fast R-CNN中含有特有卷积层,并不是所有卷积层都参与共享
1. 首先向CNN网络(ZF或VGG-16)输入任意大小图片
2. 经过CNN网络前向传播至最后共享的卷积层,一方面得到供RPN网络输入的特征图,另一方面继续前向传播至特有卷积层,产生更高维特征图
3. 供RPN网络输入的特征图经过RPN网络得到区域建议和区域得分,并对区域得分采用非极大值抑制(阈值为0.7),输出其Top-N得分的区域建议给ROI池化层
4. 第2步得到的高维特征图和第3步输出的区域建议同时输入RoI池化层,提取对应区域建议的特征
5. 第4步得到的区域建议特征通过全连接层后,输出该区域的分类得分以及回归后的bounding-box
速度对比:
Faster R-CNN的主要贡献就是设计了提供候选区域的网络RPN,代替了费时的选择性搜索Selective Search,使得检测速度大幅提高。
总结各个算法的步骤:RCNN
1. 在图像中确定约1000-2000个候选框(使用选择性搜索Selective Search)
2. 每个候选框内图像块缩放至相同大小,并输入到CNN内进行特征提取
3. 对候选框中提取出的特征,使用分类器判别是否属于一个特定类
4. 对于属于某一类别的候选框,用回归器进一步调整器位置
Fast R-CNN
1. 在图像中确定约1000-2000个候选框(使用选择性搜索Selective Search)
2. 对整张图片输入CNN,得到feature map
3. 找到每个候选框在feature map中的映射patch,将此patch作为每个候选框的卷积特征输入到SPP layer和之后的层
4. 对候选框中提取出的特征,使用分类器判别是否属于一个特定类
5. 对于属于某一类别的候选框,用回归器进一步调整器位置
Faster R-CNN
1. 对整张图片输入CNN,得到feature map
2. 卷积特征输入到RPN,得到候选框的特征信息
3. 对候选框中提取出的特征,使用分类器判别是否属于一个特定类
4. 对于属于某一类别的候选框,用回归器进一步调整器位置
简言之,
R-CNN(Selective Search + CNN + SVM)
SPP-net(ROI Pooling)
Fast R-CNN(Selective Search + CNN + ROI)
Faster R-CNN(RPN + CNN + ROI)