当前位置: 首页 > news >正文

mmpretrain学习笔记

深度学习模型的训练涉及几个方面
1、模型结构:模型有几层、每层多少通道数等
2、数据:数据集划分、数据文件路径、批大小、数据增强策略等
3、训练优化 :梯度下降算法、学习率参数、训练总轮次、学习率变化策略等
4、运行时:GPU、分布式环境配置等
5、辅助功能:如打印日志、定时保存 checkpoint等

mmpretrain的文件结构

-configs 配置文件
-data 数据集存储路径
-demo 入门案例
-docs 中英文文档教程
-mmpretrain 模块化代码-apis: 顶层 api 接口,支持各类推理任务-datasets:支持了各类数据集,数据变换等-engine:支持各类钩子,优化器等训练相关组件-evaluation:各类评测相关函数和指标计算-models:各类算法模型的定义-backbones 一般为图像的特征提取器,各类主千网络的定义-necks 则为承接 backbone 和 head 之间的其它计算 (例如高维特征解码,多尺度特征融合等)-heads 则主要为相关loss 计算和推理结果的预测-classifier,selfsup,multimodal 则为模型高阶抽象定义-structures: DataSample 数据结构的定义-utils: 相关工具-visualization:可视化的支持
-project 工程实例
-resources 图片、视频等静态资源
-tests 组件维度测试脚本
-tools 训练、测试、可视化等工具集
-work_dirs 运行代码产生的文件存放地

现有数据集+现有模型

python tools/train.py configs/resnet/resnet18_8xb16_cifar10.py
python tools/test.py configs/resnet/resnet18_8xb16_cifar10.py work_dirs/resnet18_8xb16_cifar10/epoch_200.pth

自定义模型+现有数据集
方案一:
1、使用pytorch实现完整的前向传播,并测试好维度
2、按照mmpretrain的约定将进行代码转换以及配置文件的改写

python tools/train.py work_dirs/test_8xb16_cifar10/resnet18_8xb16_cifar10.py
python tools/test.py work_dirs/test_8xb16_cifar10/resnet18_8xb16_cifar10.py work_dirs/resnet18_8xb16_cifar10/epoch_20.pth

方案二:
1、通过断点调试以及可视化的方式理解官方代码维度的变换
2、在理解的基础上直接按照约定改写官方代码

自定义模型心得:
1、虽然模型被拆分成了不同分组件,但组件之间并不能任意组合
2、各个组件的输出并不一定是Tensor,也有可能是Tuple
3、并不是每个组件都是必须的,例如可以没有neck
4、loss是和head绑定的,拆散模型时候要注意

自定义数据集+现有模型
1、数据集下载 Fruits Dataset(Images)

https://www.kaggle.com/datasets/shreyapmaher/fruits-dataset-images
python tools/train.py configs/efficientnet/efficientnet-b0_8xb32_in1k.py

出现报错,但是没有影响,只是需要拿到efficientnet-b0_8xb32_in1k.py,随后修改这个配置
修改:
(1)type=‘ImageNet’–》type=‘CustomDataset’ 4个地方

   cp efficientnet-b0_8xb32_in1k.py efficientnet-b0_8xb32_fruits.py

(2)efficientnet-b0_8xb32_in1k.py–》efficientnet-b0_8xb32_fruits.py
(3)work_dir = ‘./work_dirs\efficientnet-b0_8xb32_in1k’–》work_dir = ‘./work_dirs/efficientnet-b0_8xb32_fruits’
(4)数据集路径 data_root=‘data/imagenet’–》data_root=‘data/Fruits Dataset/images’
(5)num_classes=1000–》num_classes=9
(6)split=‘train’、split='val’注释掉
(7)适当的修改num_workers、epochs、batch_size、lr等
如下:

python tools/train.py work_dirs/efficientnet-b0_8xb32_fruits.py --work-dir work_dirs/efficientnet-b0_8xb32_fruits
python tools/test.py work_dirs/efficientnet-b0_8xb32_fruits.py work_dirs/efficientnet-b0_8xb32_fruits/epoch_50.pth

resnet18_8xb32_in1k.py
名称:resnet 层数:18 8×b16:8张卡,每张卡batch_size为16 in1k:数据集名称

python tools/train.py configs/resnet/resnet18_8xb32_in1k.py

my_resnet18_8xb32_in1k.py 完整的配置文件

2、训练结果测试与验证
单张测试

python demo/image_demo.py demo/test.jpg configs/resnet/my_resnet18_8xb32_in1k_method3.py --checkpoint D:/Project_python/mmpretrain/work_dirs/my_resnet18_8xb32_in1k_method3/epoch_50.pth --show --show-dir demo --device cuda:0

批量测试
(1)测试 测试可以看详细文档教程自定义评估指标

val_evaluator = [dict(topk=(1, 5,), type='Accuracy'),dict(type='SingleLabelMetric', items=['precision', 'recall']),]
python tools/test.py configs/resnet/my_resnet18_8xb32_in1k_method3.py work_dirs/my_resnet18_8xb32_in1k_method3/epoch_50.pth --work-dir work_dirs/my_resnet18_8xb32_in1k_method3/val --out-item metrics --show-dir work_dirs/my_resnet18_8xb32_in1k_method3/val_result 

(2)可视化模块展示 tools/visualization
browse_dataset.py: 显示在进入模型之前(类似数据增强操作)经历了什么

python tools/visualization/browse_dataset.py configs/resnet/my_resnet18_8xb32_in1k_method3.py --output-dir work_dirs/my_resnet18_8xb32_in1k_method3/browse_dataset --phase train --show-number 2 --mode original transformed concat  pipeline

vis_cam.py:热力图 主要关注区域

python tools/visualization/vis_cam.py demo/roses.jpg configs/resnet/my_resnet18_8xb32_in1k_method3.py work_dirs/my_resnet18_8xb32_in1k_method3/epoch_50.pth --preview-model
data_preprocessor
backbone
.......
backbone.layer4
backbone.layer4.0
backbone.layer4.0.conv1
.......
backbone.layer4.1
backbone.layer4.1.conv1
backbone.layer4.1.bn1
backbone.layer4.1.conv2
backbone.layer4.1.bn2
backbone.layer4.1.relu
backbone.layer4.1.drop_path
neck
.......
head.fc
python tools/visualization/vis_cam.py demo/roses.jpg configs/resnet/my_resnet18_8xb32_in1k_method3.py work_dirs/my_resnet18_8xb32_in1k_method3/epoch_50.pth --target-category 2 --target-layers backbone.layer4.1.conv2 --method GradCAM/GradCAM/......

(3)分析工具 tools/analysis_tools
计算参数量

python tools/analysis_tools/get_flops.py configs/resnet/my_resnet18_8xb32_in1k_method3.py  --shape 224 224

日志分析

python tools/analysis_tools/analyze_logs.py plot_curve work_dirs/my_resnet18_8xb32_in1k_method3/20230929_151247/vis_data/20230929_151247.json --keys loss accuracy/top1
python tools/analysis_tools/analyze_logs.py cal_train_time work_dirs/my_resnet18_8xb32_in1k_method3/20230929_151247/vis_data/20230929_151247.json

生成pkl文件

python tools/test.py configs/resnet/my_resnet18_8xb32_in1k_method3.py work_dirs/my_resnet18_8xb32_in1k_method3/epoch_50.pth  --out work_dirs/my_resnet18_8xb32_in1k_method3/result.pkl

验证预测失败和成功的图

python tools/analysis_tools/analyze_results.py configs/resnet/my_resnet18_8xb32_in1k_method3.py work_dirs/my_resnet18_8xb32_in1k_method3/result.pkl --out-dir work_dirs/my_resnet18_8xb32_in1k_method3/analyze  

画混淆矩阵图

python tools/analysis_tools/confusion_matrix.py configs/resnet/my_resnet18_8xb32_in1k_method3.py work_dirs/my_resnet18_8xb32_in1k_method3/result.pkl --show --include-values

相关文章:

mmpretrain学习笔记

深度学习模型的训练涉及几个方面 1、模型结构:模型有几层、每层多少通道数等 2、数据:数据集划分、数据文件路径、批大小、数据增强策略等 3、训练优化 :梯度下降算法、学习率参数、训练总轮次、学习率变化策略等 4、运行时:GPU、…...

rhel8 网络操作学习

一、查询dns服务器地址汇总 1.查询dns服务器地址: (1)方法一:执行命令 cat /etc/resolv.conf 执行结果如下: nameserver后面就是dns服务器的ip地址。 (2)方法2:查看/etc/syscon…...

有车型(CarModel),车厂(CarFactory),经销商(Distributor)三个表

用drf编写 1 有车型(CarModel),车厂(CarFactory),经销商(Distributor)三个表, 一个车厂可以生产多种车型,一个经销商可以出售多种车型,一个车型可以有多个经销商出售车型:车型名,车型…...

Python函数:chr()和ord()

两个函数是基于Unicode编码表进行进行字符与字码之间的转换。 chr()函数是通过字码转换成字符: 如图,坐标(1,4e10)丑 使用chr需要线将坐标相加得到:4e11 chr默认传入10进制的字码. 如图是各进制的字码。 也可以传入其他进制,不过需要在前面传入的参数最前…...

flink sql 使用

1.准备工作 安装flink 1.16.2 将以下jar包放到/data/cmpt/flink-1.16.2/lib 目录下 antlr-runtime-3.5.2.jar flink-connector-hive_2.12-1.16.2.jar flink-connector-jdbc-1.16.2.jar mysql-connector-java-6.0.6.jar hive-exec-3.1.3.jar libfb303-0.9.3.ja…...

​面试官:谈谈 Go 泛型编程

大家好,我是木川 泛型编程是一种编程范式,它允许编写具有参数化类型的代码,从而增加代码的复用性和灵活性。在泛型编程中,你可以编写一段代码,使其适用于不同类型的参数,而不需要为每种类型编写不同的实现。…...

脚手架开发流程详解

开发流程 创建npm项目创建脚手架入口文件,最上方添加 #!/usr/bin/env/ node配置package.json,添加bin属性编写脚手架代码将脚手架发布到npm 使用流程 安装脚手架 npm install -g your-own-cli使用脚手架 your-own-cli脚手架开发难点解析 分包&…...

架构真题2021(四十三)

产品配置是指一个产品在其生命周期各个阶段所产生的各种形式(机器刻可读或人工可读)和各种版本()的集合。 需求规格说明、设计说明、测试报告需求规则说明、设计说明、计算机程序设计说明、用户手册、计算机程序文档、计算机程序…...

数据统计和分析怎么做?spss如何做好数据分析?

为什么要做数据分析?数据分析有什么意义?数据分析可以为企业和组织提供多方面的帮助,包括提高工作效率、优化业务流程、升职加薪、提高管理效率以及改进汇报效果等方面。 IBM SPSS Statistics 26是一款功能强大的统计分析软件,适用于Mac操作…...

【多线程】线程安全的集合类

文章目录 1. 多线程环境使用ArrayList1.1 自己使用同步机制1.2 Collections.synchronizedList(new ArrayList);1.3 使用 CopyOnWriteArrayList 2. 多线程使用队列3. 多线程环境使用哈希表3.1 HashTable3.2 ConcurrentHashMap3.3 Hashtable和HashMap、ConcurrentHashMap 之间的区…...

Goby 漏洞发布|Revive Adserver 广告管理系统 adxmlrpc.php 文件远程代码执行漏洞(CVE-2019-5434)

漏洞名称:Revive Adserver 广告管理系统 adxmlrpc.php 文件远程代码执行漏洞(CVE-2019-5434) English Name: Revive Adserver adxmlrpc.php Remote Code Execution Vulnerability (CVE-2019-5434) CVSS core: 9.0 影响资产数&a…...

Docker(三)、Dockerfile探究

Dockerfile探究 一、镜像层概念1、通过执行命令显化docker的机制 二、Dockerfile基础命令1、FROM 基于基准镜像【即构建镜像的时候,依托原有镜像做拓展】2、LABEL & MAINTAINER -说明信息3、WORKDIR 设置工作目录4、ADD & COPY 复制文件5、ENV 设置环境常量…...

C++读取文件夹下多个文件,包括图片等等

话不多说,直接上代码: int main() {//读入图片路径下的所有文件,D:\APP\VS\vs_projects_repos\Isp\imagesstring imgdirpath"D:\\APP\\VS\\vs_projects_repos\\Isp\\proimages\\";// 只读取文件夹下的png的文件名,也可以改成“*.b…...

DirectX 12 学习笔记 -结构

上篇文章我们创建了一个窗口&#xff0c;看样子还不难&#xff0c;我们继续玩DX12 引用一些文件 头文件 #include <d3d12.h> #include <dxgi1_4.h> #include <wrl.h>还有一些库 #pragma comment(lib, "d3d12.lib") #pragma comment(lib, "…...

【Redis】Redis 的学习教程(十二)之在 Redis使用 lua 脚本

lua 菜鸟教程&#xff1a;https://www.runoob.com/lua/lua-tutorial.html 在 Redis 使用 lua 脚本的好处&#xff1a; 减少网络开销。可以将多个请求通过脚本的形式一次发送&#xff0c;减少网络时延及开销原子性操作。Redis会将整个脚本作为一个整体执行&#xff0c;中间不会…...

标准/扩展库中对象的导入与使用

博主&#xff1a;命运之光 专栏&#xff1a;Python程序设计 Python扩展库导入和使用 Python启动时&#xff0c;仅加载了很少一部分模块&#xff0c;其它模块需要由程序员显示加载。使用“sys.modules.items()”显示所有预加载的模块信息。 import 模块名[.对象名] [as 别名] …...

87、Redis 的 value 所支持的数据类型(String、List、Set、Zset、Hash)---->List相关命令

本次讲解要点&#xff1a; List相关命令&#xff1a;是指value中的数据类型 启动redis服务器&#xff1a; 打开小黑窗&#xff1a; C:\Users\JH>e: E:>cd E:\install\Redis6.0\Redis-x64-6.0.14\bin E:\install\Redis6.0\Redis-x64-6.0.14\bin>redis-server.exe redi…...

Celery结合flask完成异步任务与定时任务

Celery 常用于 web 异步任务、定时任务等。 使用 redis 作为 Celery的「消息代理 / 消息中间件」。 这里通过Flask-Mail使用qq邮箱延时发送邮件作为示例 pip install celery pip install redis pip install Flask-Mail1、使用flask发送邮件 使用 Flask-Mail 发送邮件需要进行…...

前端项目练习(练习-001-纯原生)

先创建一个空文件夹&#xff0c;名字为web-001,然后用idea开发工具打开&#xff0c;如图&#xff1a; 可以看到&#xff0c;这是个彻底的空项目&#xff0c;创建 index.html index.js index.css三个文件&#xff0c;如图&#xff1a; 其中&#xff0c;html文件内容如下&am…...

基于微信小程序的游戏账号交易买卖平台设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言系统主要功能&#xff1a;具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序&#xff08;小蔡coding&#xff09;有保障的售后福利 代码参考源码获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计…...

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…...

AtCoder 第409​场初级竞赛 A~E题解

A Conflict 【题目链接】 原题链接&#xff1a;A - Conflict 【考点】 枚举 【题目大意】 找到是否有两人都想要的物品。 【解析】 遍历两端字符串&#xff0c;只有在同时为 o 时输出 Yes 并结束程序&#xff0c;否则输出 No。 【难度】 GESP三级 【代码参考】 #i…...

Linux-07 ubuntu 的 chrome 启动不了

文章目录 问题原因解决步骤一、卸载旧版chrome二、重新安装chorme三、启动不了&#xff0c;报错如下四、启动不了&#xff0c;解决如下 总结 问题原因 在应用中可以看到chrome&#xff0c;但是打不开(说明&#xff1a;原来的ubuntu系统出问题了&#xff0c;这个是备用的硬盘&a…...

C++.OpenGL (10/64)基础光照(Basic Lighting)

基础光照(Basic Lighting) 冯氏光照模型(Phong Lighting Model) #mermaid-svg-GLdskXwWINxNGHso {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-GLdskXwWINxNGHso .error-icon{fill:#552222;}#mermaid-svg-GLd…...

优选算法第十二讲:队列 + 宽搜 优先级队列

优选算法第十二讲&#xff1a;队列 宽搜 && 优先级队列 1.N叉树的层序遍历2.二叉树的锯齿型层序遍历3.二叉树最大宽度4.在每个树行中找最大值5.优先级队列 -- 最后一块石头的重量6.数据流中的第K大元素7.前K个高频单词8.数据流的中位数 1.N叉树的层序遍历 2.二叉树的锯…...

今日学习:Spring线程池|并发修改异常|链路丢失|登录续期|VIP过期策略|数值类缓存

文章目录 优雅版线程池ThreadPoolTaskExecutor和ThreadPoolTaskExecutor的装饰器并发修改异常并发修改异常简介实现机制设计原因及意义 使用线程池造成的链路丢失问题线程池导致的链路丢失问题发生原因 常见解决方法更好的解决方法设计精妙之处 登录续期登录续期常见实现方式特…...

Typeerror: cannot read properties of undefined (reading ‘XXX‘)

最近需要在离线机器上运行软件&#xff0c;所以得把软件用docker打包起来&#xff0c;大部分功能都没问题&#xff0c;出了一个奇怪的事情。同样的代码&#xff0c;在本机上用vscode可以运行起来&#xff0c;但是打包之后在docker里出现了问题。使用的是dialog组件&#xff0c;…...

Pinocchio 库详解及其在足式机器人上的应用

Pinocchio 库详解及其在足式机器人上的应用 Pinocchio (Pinocchio is not only a nose) 是一个开源的 C 库&#xff0c;专门用于快速计算机器人模型的正向运动学、逆向运动学、雅可比矩阵、动力学和动力学导数。它主要关注效率和准确性&#xff0c;并提供了一个通用的框架&…...

R语言速释制剂QBD解决方案之三

本文是《Quality by Design for ANDAs: An Example for Immediate-Release Dosage Forms》第一个处方的R语言解决方案。 第一个处方研究评估原料药粒径分布、MCC/Lactose比例、崩解剂用量对制剂CQAs的影响。 第二处方研究用于理解颗粒外加硬脂酸镁和滑石粉对片剂质量和可生产…...

AirSim/Cosys-AirSim 游戏开发(四)外部固定位置监控相机

这个博客介绍了如何通过 settings.json 文件添加一个无人机外的 固定位置监控相机&#xff0c;因为在使用过程中发现 Airsim 对外部监控相机的描述模糊&#xff0c;而 Cosys-Airsim 在官方文档中没有提供外部监控相机设置&#xff0c;最后在源码示例中找到了&#xff0c;所以感…...