• 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 运行代码产生的文件存放地
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    现有数据集+现有模型

    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
    • 2

    自定义模型+现有数据集
    方案一:
    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、在理解的基础上直接按照约定改写官方代码

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

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

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

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

       cp efficientnet-b0_8xb32_in1k.py efficientnet-b0_8xb32_fruits.py
    
    • 1

    (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
    
    • 1
    • 2

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

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

    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

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

    val_evaluator = [
        dict(topk=(1, 5,), type='Accuracy'),
        dict(type='SingleLabelMetric', items=['precision', 'recall']),]
    
    • 1
    • 2
    • 3
    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 
    
    • 1

    (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
    
    • 1

    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
    
    • 1
    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    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/......
    
    • 1

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

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

    日志分析

    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
    
    • 1
    python tools/analysis_tools/analyze_logs.py cal_train_time work_dirs/my_resnet18_8xb32_in1k_method3/20230929_151247/vis_data/20230929_151247.json
    
    • 1

    生成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
    
    • 1

    验证预测失败和成功的图

    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  
    
    • 1

    画混淆矩阵图

    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
    
    • 1
  • 相关阅读:
    Windows 下 MySQL 8.1.0 安装及配置图文指南,快速搭建实验学习环境
    细说js变量、作用域和垃圾回收
    Spring/Spring MVC、Spring Boot/Spring Cloud
    解析nc格式文件,GRB格式文件的依赖包edu.ucar.netcdfAll的api 学习
    深度学习时,训练集的精度与测试集精度之间的关系
    安卓六大布局
    【Gitlab】01_基于docker部署gitlab及使用操作
    服务端ZMQ(一)——源码解析
    9.28栈、队列&状态压缩&双向搜索
    Redis7入门概述
  • 原文地址:https://blog.csdn.net/qq_50993557/article/details/133420525