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 学习笔记 -结构
上篇文章我们创建了一个窗口,看样子还不难,我们继续玩DX12 引用一些文件 头文件 #include <d3d12.h> #include <dxgi1_4.h> #include <wrl.h>还有一些库 #pragma comment(lib, "d3d12.lib") #pragma comment(lib, "…...
【Redis】Redis 的学习教程(十二)之在 Redis使用 lua 脚本
lua 菜鸟教程:https://www.runoob.com/lua/lua-tutorial.html 在 Redis 使用 lua 脚本的好处: 减少网络开销。可以将多个请求通过脚本的形式一次发送,减少网络时延及开销原子性操作。Redis会将整个脚本作为一个整体执行,中间不会…...
标准/扩展库中对象的导入与使用
博主:命运之光 专栏:Python程序设计 Python扩展库导入和使用 Python启动时,仅加载了很少一部分模块,其它模块需要由程序员显示加载。使用“sys.modules.items()”显示所有预加载的模块信息。 import 模块名[.对象名] [as 别名] …...
87、Redis 的 value 所支持的数据类型(String、List、Set、Zset、Hash)---->List相关命令
本次讲解要点: List相关命令:是指value中的数据类型 启动redis服务器: 打开小黑窗: 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-纯原生)
先创建一个空文件夹,名字为web-001,然后用idea开发工具打开,如图: 可以看到,这是个彻底的空项目,创建 index.html index.js index.css三个文件,如图: 其中,html文件内容如下&am…...
基于微信小程序的游戏账号交易买卖平台设计与实现(源码+lw+部署文档+讲解等)
文章目录 前言系统主要功能:具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序(小蔡coding)有保障的售后福利 代码参考源码获取 前言 💗博主介绍:✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计…...
C++实现分布式网络通信框架RPC(3)--rpc调用端
目录 一、前言 二、UserServiceRpc_Stub 三、 CallMethod方法的重写 头文件 实现 四、rpc调用端的调用 实现 五、 google::protobuf::RpcController *controller 头文件 实现 六、总结 一、前言 在前边的文章中,我们已经大致实现了rpc服务端的各项功能代…...
Spring Boot 实现流式响应(兼容 2.7.x)
在实际开发中,我们可能会遇到一些流式数据处理的场景,比如接收来自上游接口的 Server-Sent Events(SSE) 或 流式 JSON 内容,并将其原样中转给前端页面或客户端。这种情况下,传统的 RestTemplate 缓存机制会…...
为什么需要建设工程项目管理?工程项目管理有哪些亮点功能?
在建筑行业,项目管理的重要性不言而喻。随着工程规模的扩大、技术复杂度的提升,传统的管理模式已经难以满足现代工程的需求。过去,许多企业依赖手工记录、口头沟通和分散的信息管理,导致效率低下、成本失控、风险频发。例如&#…...
【学习笔记】深入理解Java虚拟机学习笔记——第4章 虚拟机性能监控,故障处理工具
第2章 虚拟机性能监控,故障处理工具 4.1 概述 略 4.2 基础故障处理工具 4.2.1 jps:虚拟机进程状况工具 命令:jps [options] [hostid] 功能:本地虚拟机进程显示进程ID(与ps相同),可同时显示主类&#x…...
Go 并发编程基础:通道(Channel)的使用
在 Go 中,Channel 是 Goroutine 之间通信的核心机制。它提供了一个线程安全的通信方式,用于在多个 Goroutine 之间传递数据,从而实现高效的并发编程。 本章将介绍 Channel 的基本概念、用法、缓冲、关闭机制以及 select 的使用。 一、Channel…...
【Android】Android 开发 ADB 常用指令
查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...
为什么要创建 Vue 实例
核心原因:Vue 需要一个「控制中心」来驱动整个应用 你可以把 Vue 实例想象成你应用的**「大脑」或「引擎」。它负责协调模板、数据、逻辑和行为,将它们变成一个活的、可交互的应用**。没有这个实例,你的代码只是一堆静态的 HTML、JavaScript 变量和函数,无法「活」起来。 …...
0x-3-Oracle 23 ai-sqlcl 25.1 集成安装-配置和优化
是不是受够了安装了oracle database之后sqlplus的简陋,无法删除无法上下翻页的苦恼。 可以安装readline和rlwrap插件的话,配置.bahs_profile后也能解决上下翻页这些,但是很多生产环境无法安装rpm包。 oracle提供了sqlcl免费许可,…...
Kubernetes 节点自动伸缩(Cluster Autoscaler)原理与实践
在 Kubernetes 集群中,如何在保障应用高可用的同时有效地管理资源,一直是运维人员和开发者关注的重点。随着微服务架构的普及,集群内各个服务的负载波动日趋明显,传统的手动扩缩容方式已无法满足实时性和弹性需求。 Cluster Auto…...
从实验室到产业:IndexTTS 在六大核心场景的落地实践
一、内容创作:重构数字内容生产范式 在短视频创作领域,IndexTTS 的语音克隆技术彻底改变了配音流程。B 站 UP 主通过 5 秒参考音频即可克隆出郭老师音色,生成的 “各位吴彦祖们大家好” 语音相似度达 97%,单条视频播放量突破百万…...
