参考:
Faster R-CNN详解
通俗易懂地了解faster RCNN(RPN区域建议网络)
RCNN流程:
- 输入图像
- 利用selective search对图像生成1K~2K的候选区域(region proposal)
这个量比传统的算法要少得多。具体一点,选出region
proposal的方法是运行图像分割算法,对于分割算法跑出来的块,把它作为可能的region proposal输出
- 对每个候选区域,使用深度网络提取特征
将region proposal resize为统一大小,送进去掉了softmax的CNN,对每个候region proposal提取特征
4.将特征送入每一类的SVM 分类器,判断是否属于该类, 对区域进行分类
对从CNN output出来的特征向量送进每一类的SVM分类, 如果我有十个类别,那么每个region proposal要跑10个SVM,得到类别。这里为什么要用SVM而不是softmax,有一种说法是为了解决样本不均衡的问题,另外是早期神经网络还不如现在这样发达,当时SVM还是比较领先的分类器
- 修正
对CNN output的特征向量(这个特征向量和第4步中拿去喂给SVM的是一个向量)做回归(左上角右下角的四个坐标),修正region
proposal的位置。
Fast RCNN流程
Fast R-CNN算法是R-CNN算法的进一步衍生算法,它通过引入ROI pooling层,避免了R-CNN算法对同一区域多次提取特征的情况从而提高了算法的运行速度,总体流程上虽然仍然无法实现端到端的训练,但是也在R-CNN算法的基础上有了很大的改进。
图1:Fast R-CNN算法示意图
图2:ROI pooling示意图
- 输入图像;
- 通过深度网络中的卷积层(VGG、Alexnet、Resnet等中的卷积层)对图像进行特征提取,得到图片的特征图;
- 通过选择性搜索算法得到图像的感兴趣区域(通常取2000个);
- 感兴趣区域池化(对得到的感兴趣区域进行ROI pooling)
即通过坐标投影的方法,在特征图上得到输入图像中的感兴趣区域对应的特征区域,并对该区域进行最大值池化,这样就得到了感兴趣区域的特征,并且统一了特征大小,如图2所示;
- 对ROI pooling层的输出(及感兴趣区域对应的特征图最大值池化后的特征)作为每个感兴趣区域的特征向量;
- 将感兴趣区域的特征向量与全连接层相连,并定义了多任务损失函数,分别与softmax分类器和boxbounding回归器相连,分别得到当前感兴趣区域的类别及坐标包围框;
- 对所有得到的包围框进行非极大值抑制(NMS),得到最终的检测结果。
Faster RCNN
Faster RCNN则抛弃了传统的滑动窗口和SS方法,直接使用RPN生成检测框,这也是Faster R-CNN的巨大优势,能极大提升检测框的生成速度。Faster RCNN将特征提取(feature extraction),proposal提取,bounding box regression,classification都整合在了一个网络中,使得综合性能有较大提高,在检测速度方面尤为明显。对比Fast-RCNN, 其实最重要的一点就是使用RPN来代替原来使用分割算法生成候选框的方式,极大的提升了检测框生成速度。总地来说,Faster RCNN对Fast RCNN的改进点在于获得region proposals的速度要快很多。
左边的Bounding-box regression loss是推荐框(通过RPN推荐可能存在物体的框proposals)和真实框之间的loss;
上面的Bounding-box regression loss是预测框(已经预测有物体的框)和真实框之间的loss
具体图:
- 提取特征
输入固定大小的图片,进过卷积层提取特征图feature maps
- 生成region proposals
然后经过Region Proposal Networks(RPN)生成region proposals。该层通过softmax判断anchors属于foreground(前景)或者background(背景),再利用bounding box回归修正anchors获得精确的proposals(候选区域)。
- ROI Pooling (感兴趣区域池化)
该层的输入是feature maps和proposals,综合这些信息后提取proposal feature maps
- Classification
将Roi pooling生成的proposal feature maps分别传入softmax分类和bounding box regression获得检测物体类别和检测框最终的精确位置。
RPN
可以看到,feature map经过3×3卷积后,分成了两条线:
3x3卷积主要作用是语义转化,可以增加网络复杂程度,增加RPN的拟合能力;
1x1卷积用于通道转换,原则上可以转换成任意通道的特征图
第一条线:通过softmax分类anchors获得foreground(positive)和background(negative),其中检测目标是foreground。因为是2分类(有无物体两种分类),所以它的维度是2k score。
2个分数,因为RPN是提候选框,还不用判断类别,所以只要求区分是不是物体就行,那么就有两个分数,前景(物体)的分数,和背景的分数;
第二条线:计算对于anchors的bounding box regression偏移量,以获得精确的proposal。它的维度是4k coordinates(4个坐标)。
4个坐标是指针对原图坐标的偏移,首先一定要记住是原图;
而最后的Proposal层则负责综合positive anchors和对应bounding box regression偏移量获取proposals,同时剔除太小和超出边界的proposals。其实整个网络到了Proposal Layer这里,就完成了相当于目标定位的功能。