人工智能学习07--pytorch18--目标检测:Faster RCNN源码解析(pytorch)

news2025/2/21 19:50:56

参考博客:
https://blog.csdn.net/weixin_46676835/article/details/130175898

VOC2012

在这里插入图片描述

1、代码的使用

  1. 查看pytorch中的faster-rcnn源码:
    在pytorch中导入:
import torchvision.models.detection.faster_rcnn

在这里插入图片描述
即可找到faster rcnn所实现的源码,但这只是代码的一部分,和训练相关的代码并不在此。
官方提示在pytorch的github上:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
找到在训练过程中使用的一些文件。
在这里插入图片描述
2. 视频里的代码注意事项:
在这里插入图片描述
https://github.com/pytorch/vision/tree/master/torchvision/models/detection
在这里插入图片描述

pip install pycocotools
pip install pycocotools-windows

在这里插入图片描述
在这里插入图片描述

  • backbone:特征提取网络,可以根据自己的要求选择。 在这里按照官方的样例使用了2个backbone:MobileNetv2、ResNet50+FPN。
  • network_files: Faster R-CNN网络(包括Fast R-CNN以及RPN等模块) 。 构建Faster R-CNN网络的一些模块。主要针对这里的文件进行讲解。
  • train_utils: 训练验证相关模块(包括cocotools)。 涉及训练网络的模块,pytorch官方给的。
  • my_dataset.py: 自定义dataset用于读取VOC数据集。 用于实现一个自定义的dataset。了解自定义数据集的原理后就可以去按照自己的需求创建自己的数据集,再编写相应脚本读取即可。
  • train_mobilenet.py: 以MobileNetV2做为backbone进行训练。 这里讲源码的时候主要以这套来讲,因为是单层的,即预测特征层只有一种。和Faster R-CNN基本上保持一致。但是准确率要低很多。
  • train_resnet50_fpn.py: 以resnet50+FPN做为backbone进行训练。 训练效果很好,实际中尽可能用。官方提供了resnet50+fpn的完整模型权重,利用这个进行迁移学习即可很快地得到一个自己的模型。
  • train_multi_GPU.py: 针对使用多GPU的用户使用。 需要在命令行窗口输入指令,不像前面train_mobilenet.py、train_resnet50_fpn.py这种直接在ide运行脚本即可。
  • predict.py: 简易的预测脚本,使用训练好的权重进行预测测试。
  • validation.py: 利用训练好的权重验证/测试数据的COCO指标,并生成record_mAP.txt文件。
  • pascal_voc_classes.json: pascal_voc标签文件。 pascal_voc类别信息:80个类别,对应整数标签(不从0开始,一般从1开始:目标检测中,0一般留给背景)
    在这里插入图片描述
    这里学习的代码自动去backbone文件夹下寻找所需权重。
    MobileNetV2 weights(下载后重命名为mobilenet_v2.pth,然后放到bakcbone文件夹下): https://download.pytorch.org/models/mobilenet_v2-b0353104.pth 只有backbone的权重,没有后面rpn、fastrcnn 的权重。
    在这里插入图片描述
    完整的模型权重:
    Resnet50 weights(下载后重命名为resnet50.pth,然后放到bakcbone文件夹下): https://download.pytorch.org/models/resnet50-0676ba61.pth
    ResNet50+FPN weights: https://download.pytorch.org/models/fasterrcnn_resnet50_fpn_coco-258fb6c6.pth
    注意,下载的预训练权重记得要重命名,比如在train_resnet50_fpn.py中读取的是fasterrcnn_resnet50_fpn_coco.pth文件, 不是fasterrcnn_resnet50_fpn_coco-258fb6c6.pth,然后放到当前项目根目录下即可。
    在这里插入图片描述
    **Pascal VOC2012 train/val数据集下载地址(没有测试集test):**http://host.robots.ox.ac.uk/pascal/VOC/voc2012/VOCtrainval_11-May-2012.tar
    (弹幕:其实按道理来说train训练,val进行调优选择最好的,然后再用test进行测试)

使用ResNet50+FPN以及迁移学习在VOC2012数据集上得到的权重: 链接:https://pan.baidu.com/s/1ifilndFRtAV5RDZINSHj5w 提取码:dsz8

在这里插入图片描述

train_mobilenet.py 训练脚本

如何调用模型进行训练:
在这里插入图片描述

train_res50_fpn.py 训练脚本

同train_mobilenet.py差不多,但是在main前加了一些参数,显得正式一点。
在这里插入图片描述
用RestNet50作为骨干网络时下载的预训练权重包含了FPN和backbone结构,而采用mobilenet作为骨干网络时下载的预训练权重只是backbone的权重。

2、自定义DataSet

split_data.py
先略,等我听懂之后再写

参考pytorch样例

3、FasterRCNN框架

在这里插入图片描述
在这里插入图片描述

faster_rcnn_framework.py

  • class FasterRCNNBase:
    在这里插入图片描述
    roi_heads包括:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    original_image_sizes.append((val[0], val[1])) 记录最原始图像的size,最后得到输出后再映射回原图像,这样得到的目标的边界框才是正确的数值。
    在这里插入图片描述
    在这里插入图片描述
  • class FasterRCNN
    主要是在初始函数中定义一系列参数,用到在FasterRCNNBase中提到过的backbone、rpn、roi_heads模块。
    在这里插入图片描述

在这里插入图片描述
在RPN中,通过预测信息和anchor生成器生成一系列anchor,则可得到所有预测的proposal(可能有成千上万个),在输出前要对proposal进行过滤,过滤筛选之后才有NMS处理。
在这里插入图片描述
这两个一个在nms处理前,一个在nms处理后
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
如果传入的不是它,就会报错
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4、GeneralizedRCNNTransform

在这里插入图片描述
对传入的图像进行标准化处理,同时对传入的图像以及它的bounding box信息进行resize处理,并且打包成一个一个的batch输入网络进行正向传播

transform.py

  • class GeneralizedRCNNTransform
    在这里插入图片描述
  • def normalize
    在这里插入图片描述
  • def resize
    将图像与它所对应的boundingbox进行缩放处理。将图像的大小放在之前所设定的最大最小值范围内。
    参考:https://blog.csdn.net/weixin_46676835/article/details/130175898
    在这里插入图片描述
  • def forward GeneralizedRCNNTransform类的正向传播过程
    在这里插入图片描述
    在这里插入图片描述
  • def postprocess
    在这里插入图片描述
    将预测的bounding box信息映射回原始的图像尺寸当中。
    在这里插入图片描述

剩下的有时间再补上↓↓↓↓↓

5、RPN(上)

在这里插入图片描述
AnchorsGenerator
RPNHead

6、RPN(中)

在这里插入图片描述
正负样本采样
RPN损失计算

7、RPN(下)

8、ROIAlign、TwoMLPHead、FastRCNNPredictor

9、FastRCNN正负样本划分及采样

10、FastRCNN损失计算

11、预测结果后处理

12、预测结果映射回原尺度

13、换backbone(不带FPN)

14、换backbone(带FPN)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/555108.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

NIFI分页获取Postgresql数据到Hbase中_实际操作---大数据之Nifi工作笔记0049

首先看一下整体流程,可以看到这里用的PutHbaseJson处理器,把数据导入到 hbase中的 注意这里也可以使用PutSql导入数据,通过phoenix的jdbc驱动,然后把数据利用PutSql处理器导入到 Hbase中,但是我这里的时候报错了,然后一直没解决,所以最后用了PutHbaseJson处理器,把数据存入到…

【LinuxShell】linux防火墙之SNAT策略和DNAT策略

文章目录 前言一、SANT策略1.SNAT策略概述2.SNAT的典型应用环境3.SNAT的工作原理4.SNAT策略的应用SNAT转换前提条件SNAT策略打开方式SNAT实验过程 5.知识扩展 二、DNAT策略1.DNAT策略概述2.DNAT的典型应用环境3.DNAT的工作原理4.DNAT策略的应用DNAT转换前提条件DNAT地址转换方式…

linux管道通信原理

管道,通常指无名管道,是 UNIX 系统IPC(InterProcess Communication)最古老的形式。 1、特点: 1.它是半双工的(即数据只能在一个方向上流动) ,具有固定的读端和写端 2.它只能用于具有亲缘关系的进程之间的通信(也是子进程或者兄弟进…

python 读写 json,csv,txt,docx,xlsx,xls文件大全

目录 前言一、读写json1.1 读1.2 写1.2.1 list类型写入1.2.2 dict类型写入 二、读写csv2.1 读2.2 写2.2.1 list类型写入2.2.2 dict类型写入 三、读写txt3.1 读3.2 写按行写入(手动添加换行符\n)按行写入(python添加换行符\n)3.2.1…

Linux:Firewalld防火墙

Linux:Firewalld防火墙 一、Firewanlld防火墙概述二、Firewalld和Iptables的关系三、Firewalld网络区域3.1 Firewalld 区域的概念:3.2 firewalld防火墙预定义了9个区域3.3 firewalld数据处理流程 四、Firewalld防火墙的配置方法五、Firewalld-config图形…

RHCSA 8考题超级详细解析(2022最新版)本人已过

文章目录 1.配置IP地址2、配置软件仓库3、调试SELinux4、创建用户账户5. 配置cron计划任务6、创建共享目录7、配置NTP时间客户端8. auto自动挂载9、配置文件权限10、配置用户账户11、查找文件12、查找字符串13、 创建归档14、配置sudo提权15、设置密码默认策略16、配置umask值1…

海格里斯HEGERLS库架合一|仓储托盘四向穿梭车在冷库冷链行业中的应用

当前的物流行业正在从劳动密集型向技术密集型转变,物流系统越来越明显的向呈现出自动化、数字化、柔性化、智能化的发展趋势。以堆垛机为代表的自动化仓储系统,取货对场地要求比较高,多建在12M以上的新仓库。而对于不规则的、层高较低的老仓库…

【python资料】热图和Matplotlib.imshow()函数

一、说明 Matplotlib是一个强大的Python数据可视化库,可以绘制各种类型的图形,其中包括热图。热图通常用于表现数据的分布和趋势。本文用一个简单的例子,告诉大家用Matplotlib绘制热图的基本操作语句。 二、热图的概念 2.1 基本概念 热图&am…

7EBG-10-C-B-107EBG-20-B-B-10比例先导溢流阀放大板

7EBG-10-B-B-10、7EBG-20-C-B-10、7EBG-30-H-B-10、7EBG-10-C-B-10、7EBG-20-B-B-10、7EBG-30-C-B-10特性: ● 该阀是由高性能型比例先导式溢流阀和低噪音型溢流阀组合而成,进行压力与输入电流成比例的压力控制,能够达到无段式控制特性。 ●…

c++(内存管理)

本节目标: 1、c/c内存分布 2、c语言中动态内存管理方式 3、c中动态内存管理 4、operator new 与 operator delete函数 5、new和delete的实现原理 6、定位new表达式(placement - new) 7、常见面试题 目录 1.c/c内存分布 2、c语言中动…

StringRedisTemplate和RedisTemplate的区别

StringRedisTemplate和RedisTemplate的区别 springboot提供了两种redis访问工具类StringRedisTemplate和RedisTemplate,为什么spring官方会提供两种不同redis访问工具呢?两者主要的的区别在于redis的key和value的序列化方式不同,并且StringR…

手把手教你制作AI孙燕姿,让你的抖音视频火遍全网!

最近“AI孙燕姿”翻唱”的《发如雪》《爱在西元前》等歌曲在B站、抖音、快手等短视频平台爆火,截止到发稿前抖音的播放量已经超1700万。 目前AI孙燕姿制作教程资料较少,网上搜到几个都是使用开源项目Sovits来训练模型,使用门槛较高。 本文以…

云时通 X 九毛九 | SRM系统助力连锁餐饮行业高效管理供应链

餐饮行业作为第三产业中的传统服务性行业之一,始终保持旺盛的发展势头,随着时代的进步,现代餐饮企业更多以连锁业态发展,其特点是多种形式相结合而生,将新颖的就餐空间与潮流文化和传统的经典美味互相融合,…

​数据库原理及应用上机(实验五 SQL的数据更新)

✨作者:命运之光 ✨专栏:数据库原理及应用上机实验 🍓🍓前言: 数据库原理及应用上机实验报告的一个简单整理后期还会不断完善🍓🍓 ✨一、实验目的和要求 掌握SQL数据插入、修改和删除语句的一…

多大一口气能将汽车吹上天,你算出来了吗?

多大一口气能将汽车吹上天,你算出来了吗?起来了解其中的原理,手把手教你如何计算汽车起飞所需的风速! 空气同时通过机翼上表面和下表面时,会在机翼上下方形成不同流速,空气通过机翼上表面时流速大,压强较小;通过下表面…

设计模式之【中介者模式】,多对多关系降级为一对多关系的利器

文章目录 一、什么是中介者模式1、中介者模式的优势2、中介者模式的缺点3、中介者模式的应用场景4、中介者模式的四大角色5、观察者模式和中介模式的区别 二、实例1、中介者模式的一般写法2、租房中介案例3、智能家具案例 三、源码中的中介者模式1、Timer 一、什么是中介者模式…

Spring MVC 中的视图解析器是什么?如何配置它

当我们使用 Spring MVC 框架进行 Web 开发时,视图解析器(View Resolver)是一个非常重要的组件,它负责将控制器(Controller)所产生的逻辑视图名称(Logical View Name)转换成实际的视图…

Go语言环境搭建(内附网P下载地址)

一、Golang语言的官网 首先我们登录Golang的官方网站:https://golang.org/ 因为Google和中国的关系,直接登录Golang的官网,需要翻墙。 当然你也可以登录Golang的国内网站:https://golang.google.cn/ 二、下载 在Mac、Windows和L…

2023贵工程团体程序设计赛--赛后总结

本次比赛共27支队伍参加,总计135人,其中一支队伍为出题组(不计入最后排名)。实际参赛130人,5人缺考(1人未加入题集)。 1.人员分布 信息工程学院:22计科2支队伍,22软件6…

Python|Pyppeteer快速定位select下拉框(10)

前言 本文是该专栏的第10篇,结合优质项目案例持续分享Pyppeteer的干货知识,记得关注。 一般情况下,选中某个select下拉框,会出现一堆可选信息。如下图中的Country列表,点击列表会出现多个国家选择,如下图所示。 比如说,现在需要从这个Country列表中,快速选中某个国家…