Faster R-CNN
Faster R-CNN是在R-CNN,Fast R-CNN的基础上改进得来的。在训练速度和预测精度等方面有显著提高,实现端到端的目标检测。R-CNN,Fast R-CNN是Faster-RCNN发展进化的基石,回顾R-CNN,Fast R-CNN有助于更好地理解Faster R-CNN。
1 R-CNN,Fast R-CNN,Faster R-CNN检测流程
(1)R-CNN检测流程
检测流程:
'''
1. input: img
2. 生成region proposals : 用select research法,在输入图像上生成2K个候选区域。
3. 提取候选区域:找出图像上的候选区域,并缩放到227x227。
4. 生成特征:上一步的结果输入CNN模型中提取特征。
5. 分类:特征输入SVM分类器,得到物体类别。
6. 回归:通过回归精修候选框。
'''
缺点:
'''
1. select research法提取候选框费时。
2. 一张图片2K个候选框,用CNN提取特征时,大量重复计算。
3. 特征提取、分类、边框回归分别进行,分别训练、测试,效率低下。
'''
(2)Fast R-CNN检测流程
针对R C-NN的问题,Fast R-CNN有所改进,主要体现在把建议框映射到特征图上,再把特征图统一尺寸,这样就大大减少了重复计算,但是还是两步骤检测。
检测流程:
'''
1. input: img
2. 生成region proposals : 用select research法,在输入图像上生成2K个候选区域。
3.生成特征:图片输入CNN模型中提取特征。
4. 筛选特征:把候选区域映射到特征层,通过RoIPooling统一候选区域的尺寸。
5.分类和回归:对上一步提取的特征进行分类和回归。
'''
缺点:
'''
1. select research法耗时
'''
(3)Faster-RCNN检测流程
检测流程:
'''
1. 提取特征:backbone提取特征。
2. RPN生成建议框:backbone提取的特征输入RPN网络,RPN网络再提取特征后,进行分类和回归,判断特征图上是否有框,对存在框的数据根据先验框修正后得到新的建议框。把建议框对应图片的区域选出来,通过池化统一尺寸,作为下面网络的先验框。
3. cls+reg: 根据上一步得到的先验框提取特征后,进行分类和回归。
'''
优点:
'''
1. RPN代替select research法生成建议框。
2. 实现端到端的检测。
3. Faster R-CNN 确定了锚框检测流程。
4. 相比于R C-NN和Fast R-CNN,计算量大大减少。
'''
2 Faster R-CNN网络结构
Faster R-CNN网络结构的网络结构主要分为:backbone、 RPN、cls+reg。下面依次分析各个部分的工作流程。
(1)backbone
Faster R-CNN可以选用多种流行的backbone提取特征,以ResNet50为例。ResNet50有Conv Block和Identity Block,具体细节可以参考之前的博文。ResNet50对输入图片进行5次下采样,Faster R-CNN使用第四次下采样的特征feature[38,38,1024],第五次下采样的特征应用在分类和回归中。
ResNet50网络结构
'''
ResNet50:
input [600,600,3]
Zeropad
Conv2d(s=2) + BatchNorm + ReLU + MaxPool(s=2) [300,300,64] --> [150,150,64]
Conv Block + Identity Block*2(s=1) [150,150,256]
Conv Block + Identity Block*3(s=2) [75,75,512]
Conv Block + Identity Block*5(s=2) [38,38,1024]
Conv Block + Identity Block*2(s=2)
AveragePooling2D
Flatten
output
'''
(2)RPN
'''
1. backbone 中第四次下采样的特征[b,38,38,1024]先经过卷积conv(3*3),输出结果分别进行conv(1*1)得到[b,38,38,18]、[b,38,38,36]。
2. 根据分类置信度选出可信的框,对框解码得到新的框,作为下一个网络的先验框,根据框在特征上截取后resize到14x14x1024。
features --> conv(3*3) -->output
output--> conv(1*1) --> o1 [b,38,38,18]
output--> conv(1*1) --> o2 [b,38,38,36]
'''
(3)cls+reg
'''
1. 上一步截取的特征进行一次下采样,然后平均池化、Falatten、最后进行分类和回归。
features --> COnvBlock --> AveragePooling --> cls(CrossEntropy)+reg(SmoothL1)
'''
3 训练流程
'''
1. 导入model_rpn, model_classifier,model_all及参数。
2. 生成标签。找到与真实框匹配的先验框,对真实框编码,生成预测框偏移及标记类别。
3. 计算回归损失和类别损失。
4. 数据前向传播,得到PRN 网络的预测结果,对预测结果解码,根据预测框和真实框的IoU筛选新的框。
5. RPN 筛选的框输入classifier网络,得到预测框和物体类别,梯度反向传播,更新参数。
'''
(1)生成标签
(2)损失函数
(3)预测结果筛选
4 预测流程
'''
1.图片处理。把图片放缩到最短边为600,图片原始宽高比例不变;图片归一化。
2.RPN得到预测得到置信度和预测偏移值。将预测结果进行解码--> nms筛选得到建议框。
3. 分批次把建议框传入classifier。筛选出其中得分高于confidence的框,得到预测结果。
4. 画框
'''