Faster R-CNN pytorch版

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. 画框

'''


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Faster R-CNN是一种常用的目标检测算法,它结合了区域提取网络(Region Proposal Network,RPN)和分类网络来实现物体检测。在使用Faster R-CNN进行目标检测时,通常需要将模型的源码进行微调,以适应自己的数据集。 在PyTorch中,微调Faster R-CNN的源码需要以下几个步骤: 1. 数据集准备:首先需要准备自己的目标检测数据集。该数据集需要包含图片和对应的标签信息,标签信息通常包括物体的类别和边界框坐标。可以使用标注工具如LabelImg等进行标注,并将标注结果保存为一种格式,如VOC格式。 2. 获取源码:从PyTorch官方的GitHub仓库中获取Faster R-CNN源码。可以使用git命令行或者直接在浏览器上下载源码的压缩包。 3. 修改数据集加载:在源码中找到数据集加载部分的代码。可以通过修改已有的数据集类或者新建一个数据集类来加载自己的数据集。在数据集类中,需要定义数据集的路径、读取图片和标签的方法等。 4. 修改训练设置:在源码中找到训练设置部分的代码。根据自己的需求修改训练的batch size、学习率、训练轮数等参数。可以根据实际情况调整这些参数,以获得更好的训练效果。 5. 开始微调:在终端中切换到源码所在的目录,并执行训练指令,如"python train.py"。这将开始使用自己的数据集对Faster R-CNN进行微调。在微调过程中,可以观察训练日志和损失曲线,以评估训练的效果。 6. 模型保存:微调完成后,可以将训练得到的模型保存下来,以便后续的测试和推理使用。可以将模型保存为一个.pth文件,以便后续加载和使用。 通过以上步骤,我们可以使用PyTorch实现对Faster R-CNN的源码进行微调,以适应自己的目标检测数据集。微调后的模型可以用于检测目标物体,并根据实际需要进行后续处理和应用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值