热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

保姆级使用PyTorch训练与评估自己的HorNet网络教程

文章目录前言0.环境搭建&快速开始1.数据集制作1.1标签文件制作1.2数据集划分1.3数据集信息文件制作2.修改参数文件3.训练4.评估5.其他教程前言项目地址:




在这里插入图片描述



文章目录


  • 前言
  • 0. 环境搭建&快速开始
  • 1. 数据集制作
    • 1.1 标签文件制作
    • 1.2 数据集划分
    • 1.3 数据集信息文件制作

  • 2. 修改参数文件
  • 3. 训练
  • 4. 评估
  • 5. 其他教程



前言

项目地址:https://github.com/Fafa-DL/Awesome-Backbones

操作教程:https://www.bilibili.com/video/BV1SY411P7Nd

HorNet原论文:点我跳转

如果你以为该仓库仅支持训练一个模型那就大错特错了,我在项目地址放了目前支持的35种模型(LeNet5、AlexNet、VGG、DenseNet、ResNet、Wide-ResNet、ResNeXt、SEResNet、SEResNeXt、RegNet、MobileNetV2、MobileNetV3、ShuffleNetV1、ShuffleNetV2、EfficientNet、RepVGG、Res2Net、ConvNeXt、HRNet、ConvMixer、CSPNet、Swin-Transformer、Vision-Transformer、Transformer-in-Transformer、MLP-Mixer、DeiT、Conformer、T2T-ViT、Twins、PoolFormer、VAN、HorNet、EfficientFormer、Swin Transformer V2、MViT V2),使用方式一模一样。且目前满足了大部分图像分类需求,进度快的同学甚至论文已经在审了


0. 环境搭建&快速开始
  • 这一步我也在最近录制了视频

最新Windows配置VSCode与Anaconda环境

『图像分类』从零环境搭建&快速开始


  • 不想看视频也将文字版放在此处。建议使用Anaconda进行环境管理,创建环境命令如下

conda create -n [name] python=3.6 其中[name]改成自己的环境名,如[name]->torch,conda create -n torch python=3.6

  • 我的测试环境如下

torch==1.7.1
torchvision==0.8.2
scipy==1.4.1
numpy==1.19.2
matplotlib==3.2.1
opencv_python==3.4.1.15
tqdm==4.62.3
Pillow==8.4.0
h5py==3.1.0
terminaltables==3.1.0
packaging==21.3

  • 首先安装Pytorch。建议版本和我一致,进入Pytorch官网,点击 install previous versions of PyTorch,以1.7.1为例,官网给出的安装如下,选择合适的cuda版本

# CUDA 11.0
pip install torch==1.7.1+cu110 torchvision==0.8.2+cu110 torchaudio==0.7.2 -f https://download.pytorch.org/whl/torch_stable.html
# CUDA 10.2
pip install torch==1.7.1 torchvision==0.8.2 torchaudio==0.7.2
# CUDA 10.1
pip install torch==1.7.1+cu101 torchvision==0.8.2+cu101 torchaudio==0.7.2 -f https://download.pytorch.org/whl/torch_stable.html
# CUDA 9.2
pip install torch==1.7.1+cu92 torchvision==0.8.2+cu92 torchaudio==0.7.2 -f https://download.pytorch.org/whl/torch_stable.html
# CPU only
pip install torch==1.7.1+cpu torchvision==0.8.2+cpu torchaudio==0.7.2 -f https://download.pytorch.org/whl/torch_stable.html

  • 安装完Pytorch后,再运行

pip install -r requirements.txt

  • 下载MobileNetV3-Small权重至datas
  • Awesome-Backbones文件夹下终端输入

python tools/single_test.py datas/cat-dog.png models/mobilenet/mobilenet_v3_small.py --classes-map datas/imageNet1kAnnotation.txt

1. 数据集制作

1.1 标签文件制作


  • 将项目代码下载到本地
    在这里插入图片描述

  • 本次演示以花卉数据集为例,目录结构如下:

├─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

在这里插入图片描述


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
    在这里插入图片描述

2. 修改参数文件
  • 每个模型均对应有各自的配置文件,保存在Awesome-Backbones/models
  • backboneneckheadhead.loss构成一个完整模型
  • 找到HorNet参数配置文件,可以看到所有支持的类型都在这,且每个模型均提供预训练权重
    在这里插入图片描述
  • 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/下找到对应配置文件,以hornet_tiny为例
  • 按照配置文件解释修改参数
  • Awesome-Backbones路径下打开终端运行

python tools/train.py models/hornet/hornet_tiny.py

4. 评估

  • 确认Awesome-Backbones/datas/annotations.txt标签准备完毕
  • 确认Awesome-Backbones/datas/test.txtannotations.txt对应
  • Awesome-Backbones/models/下找到对应配置文件
  • 在参数配置文件中修改权重路径,其余不变

ckpt = '你的训练权重路径'

  • Awesome-Backbones路径下打开终端运行

python tools/evaluation.py models/hornet/hornet_tiny.py

至此完毕,实在没运行起来就去B站看我手把手带大家运行的视频教学吧~


5. 其他教程

除开上述,我还为大家准备了其他一定用到的操作教程,均放在了GitHub项目首页,为了你们方便为也粘贴过来


  • 环境搭建
  • 数据集准备
  • 配置文件解释
  • 训练
  • 模型评估&批量检测/视频检测
  • 计算Flops&Params
  • 添加新的模型组件
  • 类别激活图可视化
  • 学习率策略可视化
    有任何更新均会在Github与B站进行通知,记得Star与三连关注噢~






推荐阅读
author-avatar
平凡小几
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有