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

2023-11-19

在这里插入图片描述

前言

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

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

ConvNeXt原论文:点我跳转

如果你以为该仓库仅支持训练一个模型那就大错特错了,我在项目地址放了目前支持的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
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构成一个完整模型

  • 找到ConvNeXt参数配置文件,可以看到所有支持的类型都在这
    在这里插入图片描述

  • 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/下找到对应配置文件,以convnext_tiny为例
  • 按照配置文件解释修改参数
  • Awesome-Backbones打开终端运行
python tools/train.py models/convnext/convnext_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/convnext/convnext_tiny.py

在这里插入图片描述

  • 单张图像测试,在Awesome-Backbones打开终端运行
python tools/single_test.py datasets/test/dandelion/14283011_3e7452c5b2_n.jpg models/convnext/convnext_tiny.py

在这里插入图片描述
至此完毕,实在没运行起来就去B站看我手把手带大家运行的视频教学吧~

5. 其他教程

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

有任何更新均会在Github与B站进行通知,记得Star与三连关注噢~

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

保姆级使用PyTorch训练与评估自己的ConvNeXt网络教程 的相关文章

  • checkbox样式改写

    div class checkbox font s div
  • js 微观任务、宏观任务、循环机制

    javascript是单线程语言 就是因为单线程的特性 就不得不提js中的同步和异步 同步和异步 所谓单线程 无非就是同步队列和异步队列 js代码是自上向下执行的 在主线程中立即执行的就是同步任务 比如简单的逻辑操作及函数 而异步任务不会立
  • 计算机网络--绪论

    一 计网的体系结构 1 概念和功能 2 组成和分类 3 标准化工作及相关组织 二 性能指标 1 速率 2 带宽 3 吞吐量 4 时延 5 时延带宽积 6 往返时间RTT利用率 7 利用率 三 分层结构 1 分层 四 OSI参考模型 1 OS
  • 随机数产生方法

    5 产生一定范围随机数的通用表示公式 要取得 a b 的随机整数 使用 rand b a a 要取得 a b 的随机整数 使用 rand b a 1 a 要取得 a b 的随机整数 使用 rand b a a 1 通用公式 a rand n
  • 【Vue】Vue基础自用笔记&Day02_①Vue过滤器②按键修饰符③自定义指令

    Vue基础 Day02 1 Vue过滤器 2 按键修饰符 3 自定义Vue指令 1 Vue过滤器 Vue js 允许你自定义过滤器 可被用于一些常见的文本格式化 过滤器可以用在两个地方 双花括号 插值和 v bind 表达式 后者从 2 1

随机推荐

  • 袁红岗的编程感悟

    我自己知道 近几年也一直在用 但就是说不出来 直到最近几天才能够表达 叫作Think in Code 也就是用代码思考 同时也把代码当成自己思想表达的方式 正如哲学家用文字设计 诠释思想 程序员 说话 用的是代码 这就是一个程序员的境 界
  • 使用python实现简单全连接神经网络

    最近在学习神经网络的相关知识 特在此做一个笔记 python语言的功能很强大 可以使用很少的代码实现很多功能 因此大家如果想研究深度学习的话 一定要懂得python语言 这篇笔记记录我的第一次使用python编写神经网络代码的过程 其中代码
  • Centos7 ELK7.6.2集群搭建

    Centos7 ELK7 6 2集群搭建 ELK7 6 2网盘安装包下载 一 单节点准备 配置ip 配置主机名和主机名映射 关闭防火墙 事件同步 更换yum源 阿里云yum源 安装常用软件 系统优化 创建用来启动es的普通用户 jdk安装
  • 微信小程序(日历/日期)选择插件

    微信小程序日历选择器插件点击日历日期可以获取到年月日 wxml
  • stm32学习笔记——通用计时器基本原理

    stm32f10x最多有8个定时器 stm32f103zet6就有8个定时器 分别是4个通用定时器 2个高级定时器 2个基本定时器 定时器种类 位数 计时器模式 产生DMA请求 捕获 比较通道 互补输出 特殊应用场景 高级定时器 TIM1
  • Spring Boot 应用启动时 java.lang.reflect.InaccessibleObjectException 问题的解决

    Spring Boot 的应用启动的时候遇到下面的错误 java lang reflect InaccessibleObjectException Unable to make private native accessible Set c
  • windows下命令行修改系统时间;修改系统时间的软件

    找了很久 都没有找到 还找了关键词 dos下修改系统时间 因为看到linux下修改系统时间是用hwclock 命令写入主板芯片 而我由于某些原因想自动化修改系统时间 所以找windows下修改系统时间的软件 没有找到 有一个 意天禁止修改系
  • 图解Git

    基本用法 上面的四条命令在工作目录 暂存目录 也叫做索引 和仓库之间复制文件 git add files 把当前文件放入暂存区域 git commit 给暂存区域生成快照并提交 git reset files 用来撤销最后一次git add
  • UNITY一些关于旋转的问题

    实现平滑的旋转 旋转的目的是为了朝向目标物体 untiy中的旋转rotation是一个四元数 在代码里面我们可以用Quaternion 来记录一个人物角色的最初的旋转角度 注意 这个要在awake里赋值 目的是取得该值 为了实现平滑的旋转
  • 关于powershell中错误:无法将“XXX”项识别为 cmdlet、函数、脚本文件或可运行程序的名称解决方案

    在利用ffmpeg进行格式转换时报错 无法将 ffmpeg 项识别为 cmdlet 函数 脚本文件或可运行程序的名称 发现是改动了ffmpeg所在根文件夹名字 导致path环境变量找不到ffmpeg程序 改动环境变量就正常了 快速打开环境变
  • protobuf对象 转为Json串写入elastic search遇到的问题总结

    背景 从kafka中消费数据后拿到的是protobuf序列化后的字节数组 转化为Java中的proto对象后 需要将这些protocol对象继续处理成Json串写入elasticsearch 各种问题 Json工具选择 刚开始尝试使用fas
  • Failed to convert property value of type 'java.lang.String' to required type 'int' for property

    junit Spring 测试Service org springframework beans TypeMismatchException Failed to convert property value of type java lan
  • Django ORM中常用字段类型与参数

    ORM中常用字段类型与参数 在ORM中一个模型类对应的是数据库中的一张表 对象对应的是数据库中的记录 属性则对应的是字段 此篇为章主要整理的是常用的字段类型和对应的参数 字段类型 1 自增长字段 自增长 id models AutoFiel
  • 详述Java三种注释方法及实例说明

    1 注释方法汇总 实例说明在第二部分 1 1单行注释 1 符号 2 注释范围 从符号 开始 到本行结束 3 快捷键 Ctrl Ctrl 和 的组合 选中要注释的内容 按 Ctrl 便可 同时单行注释多行内容 若想多个同个取消 则选中 以及单
  • Linux的静态库和动态库

    库从本质上来说是一种可执行代码的二进制格式 可以被载入内存中执行 库分静态库和动态库两种 静态库和动态库的区别 1 静态函数库 这类库的名字一般是libxxx a 利用静态函数库编译成的文件比较大 因为整个 函数库的所有数据都会被整合进目标
  • J-Flash中添加MDK制作的QSPI Flash下载算法方法

    在JLINK的电脑端驱动V6 84a上测试的 1 MDK的QSPI Flash下载算法制作方法和制作好的算法看教程第80章和配套的例子即可http www armbbs cn forum php mod viewthread tid 869
  • 蹭热点:白的不能再白的Github Pages部署教程

    最近最热点的新闻无疑是微软收购 世界上最大的同性交友网站 Github了 作为一个程序单身狗 我也来蹭蹭热点 正好花了半天时间学了一下怎么构建Github Pages 没看错 我也是现学的 然后才发现原来Github还有这么NB好用的功能
  • Linux(一): 系统操作命令与组成

    目录 命令格式 一 常用操作以及概念 快捷键 求助 1 help 2 man 3 info 4 doc 关机 1 who 2 sync 3 shutdown PATH sudo 包管理工具 1 发行版 VIM 三个模式 1 离开或保存 GN
  • python3.8动态人脸识别

    一 准备依赖库 pip install dlib pip python opencv 二 代码实现 coding utf 8 从视屏中识别人脸 并实时标出面部特征点 import dlib 人脸识别的库dlib import cv2 图像处
  • 保姆级使用PyTorch训练与评估自己的ConvNeXt网络教程

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