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

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

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

相关文章

【数据集】1985-2022年CLCD逐年土地利用分类数据

1985-2022年CLCD逐年土地利用分类数据 目前,CLCD 1985-2022年土地覆被数据集是较少的目前可公开获取的30m分辨率长时序逐年土地覆被数据。CLCD 反映了中国快速的城市化进程和一系列生态工程,揭示了气候变化条件下人为对土地覆盖的影响,其在全球变化研究中具有潜在应用价值。…

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

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

28 drf-Vue个人向总结-1

文章目录 前后端分离开发展示项目项补充知识开发问题浏览器解决跨域问题 drf 小tips设置资源root目录使用自定义的user表设置资源路径media数据库补充删除表中数据单页面与多页面模式过滤多层自关联后端提交的数据到底是什么jwt token登录设置普通的 token 原理使用流程解析 jw…

wallis匀色算法、直方图匹配、颜色转移方法比较

算法原理 这三种方法应该是比较基础的匀色处理算法 三个算法的原理比较简单,具体原理大家可以自己百度 (1)wallis匀色原理主要在于利用Wallis滤波器使原始图像的均值和标准差与参考影像相当,从而使原始影像和参考影像具有相近的色…

WebPack-打包工具

从图中我们可以看出,Webpack 可以将多种静态资源 js、css、less 转换成一个静态文件,减少了页面的请求. 下面举个例子 : main.js 我们只命名导出一个变量 export const name"老六"index.js import { name } from "./tset/…

第P7周—咖啡豆识别(1)

数据集及wen件目录介绍: 数据集:工作台 - Heywhale.com 一、前期工作 1.1 数据详情 import torch import torch.nn as nn import torchvision.transforms as transforms import torchvision from torchvision import transforms, datasets import os,…

聊聊KISS(Keep It Simple, Stupid)原则

文章目录 1. 前言2. KISS原则的几项描述3. KISS原则和奥卡姆剃刀原则区别 1. 前言 KISS原则,是Keep It Simple, Stupid的缩写,翻译成中文就是“保持简单,愚蠢的人也能懂”。这是一种鼓励简单设计的设计原则。 KISS原则的主要思想是&#x…

mysqlDM数据库中利用函数更新身份证字段,单表计算单表更新

#查询总数,男女的分别人数 SELECTcount( * ),sum( CASE WHEN gender 1 THEN 1 ELSE 0 END ) AS nan, sum( CASE WHEN gender 2 THEN 1 ELSE 0 END ) AS nv FROMt_user 写死版本的更新 #可以正确运行的sql,这样的话是写死版本 UPDATE t_user SET gender ( select sex fro…

python+pygame+opencv+gpt实现虚拟数字人直播(有趣的探索)

AI技术突飞猛进,不断的改变着人们的工作和生活。数字人直播作为新兴形式,必将成为未来趋势,具有巨大的、广阔的、惊人的市场前景。它将不断融合创新技术和跨界合作,提供更具个性化和多样化的互动体验,成为未来的一种趋…

Leetcode290. 单词规律

给定一种规律 pattern 和一个字符串 s ,判断 s 是否遵循相同的规律。 这里的 遵循 指完全匹配,例如, pattern 里的每个字母和字符串 s 中的每个非空单词之间存在着双向连接的对应规律。 解题思路:哈希 力扣(LeetCode&…

数据结构:堆的简单介绍

目录 堆的介绍:(PriorityQueue) 大根堆:根节点比左右孩子节点大 小根堆:根节点比左右孩子节点小 堆的存储结构: 为什么二叉树在逻辑上用满二叉树结构,而不是普通二叉树呢? 因为如果是普通二叉树会造成资源的浪费​编辑 堆的介绍:(PriorityQueue) 堆又称优先级队列,何为优先…

3 OpenCV两张图片实现稀疏点云的生成

前文: 1 基于SIFT图像特征识别的匹配方法比较与实现 2 OpenCV实现的F矩阵RANSAC原理与实践 1 E矩阵 1.1 由F到E E K T ∗ F ∗ K E K^T * F * K EKT∗F∗K E 矩阵可以直接通过之前算好的 F 矩阵与相机内参 K 矩阵获得 Mat E K.t() * F * K;相机内参获得的方式…

C/C++跨平台构建工具CMake入门

文章目录 1.概述2.环境准备2.1 安装编译工具2.2 安装CMake 3.编译一个示例程序总结 1.概述 本人一直对OpenGL的3d渲染很感兴趣,但是苦于自己一直是Android开发,没有机会接触这方面的知识。就在最近吗,机会来了,以前一个做3D渲染的…

【C/C++】C/C++面试八股

C/C面试八股 C和C语言的区别简单介绍一下三大特性多态的实现原理虚函数的构成原理虚函数的调用原理虚表指针在什么地方进行初始化的?构造函数为什么不能是虚函数虚函数和纯虚函数的区别抽象类类对象的对象模型内存对齐是什么?为什么要内存对齐static关键…

微信公众号网页授权登录获取用户基本信息

概述 微信公众号网页授权登录后微信获取用户基本信息,部署即可运行完整demo 详细 一、前言 (1)适合人群 1,JAVA服务端开发人员 2,初级人员开发人员 3,了解spring springboot maven 3,了…

k8s部署gin-vue-admin框架、gitlab-ci、jenkins pipeline 、CICD

测试环境使用的jenkins 正式环境使用的gitlab-ci 测试环境 创建yaml文件 apiVersion: v1 kind: ConfigMap metadata:name: dtk-go-tiktok-admin-configlabels:app.kubernetes.io/name: dtk-go-tiktok-adminapp.kubernetes.io/business: infrastructureapp.kubernetes.io/run…

中国312个历史文化名镇及景区空间点位数据集

一部中华史,既是人类创造丰富物质财富的奋头史,又是与自然共生共存的和谐史不仅留存下悠久丰富的人文思想和情怀,还在各处镌刻下可流传的生活场景,历史文化名镇(以下简称:名镇)就是这样真实的历史画卷。“镇”是一方的政治文化中心…

Elasticsearch:使用 Elasticsearch 进行语义搜索

在数字时代,搜索引擎在通过浏览互联网上的大量可用信息来检索数据方面发挥着重要作用。 此方法涉及用户在搜索栏中输入特定术语或短语,期望搜索引擎返回与这些确切关键字匹配的结果。 虽然关键字搜索对于简化信息检索非常有价值,但它也有其局…

红黑树是如何实现的?

文章目录 一、红黑树的概念二、红黑树的性质三、红黑树和AVL树对比四、红黑树的插入1. 红黑树的结点定义2. 父亲的颜色3. 叔叔的颜色为红色4. 叔叔不存在5. 叔叔存在且为黑6. 插入的抽象图 五、红黑树的验证1. 检查平衡2. 计算高度与旋转次数3. 验证 六、 红黑树与AVL树的比较 …

【数据结构】——顺序表详解

大家好!当我们学习了动态内存管理后,就可以写一个管理数据的顺序表了!!! 顺序表的理解: 线性表是最基本、最简单、也是最常用的一种数据结构。线性表(linear list)是数据结构的一种…