图像分类|保姆级使用PyTorch训练与评估自己的Wide ResNet网络教程

图像分类|保姆级使用PyTorch训练与评估自己的Wide ResNet网络教程
文章图片


文章目录

  • 前言
  • 1. 数据集制作
    • 1.1 标签文件制作
    • 1.2 数据集划分
    • 1.3 数据集信息文件制作
  • 2. 修改参数文件
  • 3. 训练
  • 4. 评估

前言 【图像分类|保姆级使用PyTorch训练与评估自己的Wide ResNet网络教程】项目地址:https://github.com/Fafa-DL/Awesome-Backbones
操作教程:https://www.bilibili.com/video/BV1SY411P7Nd
Wide ResNet原论文:点我跳转
1. 数据集制作 1.1 标签文件制作
  • 将项目代码下载到本地
    图像分类|保姆级使用PyTorch训练与评估自己的Wide ResNet网络教程
    文章图片

  • 本次演示以花卉数据集为例,目录结构如下:
├─flower_photos │├─daisy ││100080576_f52e8ee070_n.jpg ││10140303196_b88d3d6cec.jpg ││... │├─dandelion ││10043234166_e6dd915111_n.jpg ││10200780773_c6051a7d71_n.jpg ││... │├─roses ││10090824183_d02c613f10_m.jpg ││102501987_3cdb8e5394_n.jpg ││... │├─sunflowers ││1008566138_6927679c8a.jpg ││1022552002_2b93faf9e7_n.jpg ││... │└─tulips ││100930342_92e8746431_n.jpg ││10094729603_eeca3f2cb6.jpg ││...

  • Awesome-Backbones/datas/中创建标签文件annotations.txt,按行将类别名 索引写入文件;
daisy 0 dandelion 1 roses 2 sunflowers 3 tulips 4

图像分类|保姆级使用PyTorch训练与评估自己的Wide ResNet网络教程
文章图片

1.2 数据集划分
  • 打开Awesome-Backbones/tools/split_data.py
  • 修改原始数据集路径以及划分后的保存路径,强烈建议划分后的保存路径datasets不要改动,在下一步都是默认基于文件夹进行操作
init_dataset = 'A:/flower_photos' new_dataset = 'A:/Awesome-Backbones/datasets'

  • Awesome-Backbones/下打开终端输入命令:
python tools/split_data.py

  • 得到划分后的数据集格式如下:
├─... ├─datasets │├─test ││├─daisy ││├─dandelion ││├─roses ││├─sunflowers ││└─tulips │└─train │├─daisy │├─dandelion │├─roses │├─sunflowers │└─tulips ├─...

1.3 数据集信息文件制作
  • 确保划分后的数据集是在Awesome-Backbones/datasets下,若不在则在get_annotation.py下修改数据集路径;
datasets_path= '你的数据集路径'

  • Awesome-Backbones/下打开终端输入命令:
python tools/get_annotation.py

  • Awesome-Backbones/datas下得到生成的数据集信息文件train.txttest.txt
    图像分类|保姆级使用PyTorch训练与评估自己的Wide ResNet网络教程
    文章图片
2. 修改参数文件
  • 每个模型均对应有各自的配置文件,保存在Awesome-Backbones/models
  • backboneneckheadhead.loss构成一个完整模型
  • 找到Wide ResNet参数配置文件,可以看到所有支持的类型都在这
    图像分类|保姆级使用PyTorch训练与评估自己的Wide ResNet网络教程
    文章图片
  • model_cfg中修改num_classes为自己数据集类别大小
  • 按照自己电脑性能在data_cfg中修改batch_sizenum_workers
  • 若有预训练权重则可以将pretrained_weights设置为True并将预训练权重的路径赋值给pretrained_weights
  • 若需要冻结训练则freeze_flag 设置为True,可选冻结的有backbone, neck, head
  • optimizer_cfg中修改初始学习率,根据自己batch size调试,若使用了预训练权重,建议学习率调小
  • 学习率更新详见core/optimizers/lr_update.py
  • 更具体配置文件修改可参考配置文件解释
3. 训练
  • 确认Awesome-Backbones/datas/annotations.txt标签准备完毕
  • 确认Awesome-Backbones/datas/train.txttest.txtannotations.txt对应
  • 选择想要训练的模型,在Awesome-Backbones/models/下找到对应配置文件,以efficientnet_b0为例
  • 按照配置文件解释修改参数
  • Awesome-Backbones打开终端运行
python tools/train.py models/wide_resnet/wide_resnet50.py

4. 评估
  • 确认Awesome-Backbones/datas/annotations.txt标签准备完毕
  • 确认Awesome-Backbones/datas/test.txtannotations.txt对应
  • Awesome-Backbones/models/下找到对应配置文件
  • 在参数配置文件中修改权重路径其余不变
ckpt = '你的训练权重路径'

  • Awesome-Backbones打开终端运行
python tools/evaluation.py models/wide_resnet/wide_resnet50.py

    推荐阅读