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

news2024/11/25 4:34:14

在这里插入图片描述

文章目录

  • 前言
  • 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

Replknet原论文:点我跳转

如果你以为该仓库仅支持训练一个模型那就大错特错了,我在项目地址放了目前支持的42种模型(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、MobileViT、DaViT、RepLKNet、BEiT、EVA、MixMIM、EfficientNetV2),使用方式一模一样。且目前满足了大部分图像分类需求,进度快的同学甚至论文已经在审了

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构成一个完整模型

  • 找到Replknet参数配置文件,可以看到所有支持的类型都在这,且每个模型均提供预训练权重
    在这里插入图片描述

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

在这里插入图片描述

4. 评估

  • 确认Awesome-Backbones/datas/annotations.txt标签准备完毕
  • 确认Awesome-Backbones/datas/test.txtannotations.txt对应
  • Awesome-Backbones/models/下找到对应配置文件
  • 在参数配置文件中修改权重路径其余不变
ckpt = '你的训练权重路径'
  • Awesome-Backbones路径下打开终端运行
python tools/evaluation.py models/replknet/replknet-31B.py

在这里插入图片描述

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

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

5. 其他教程

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

  • 环境搭建
  • 数据集准备
  • 配置文件解释
  • 训练
  • 模型评估&批量检测/视频检测
  • 计算Flops&Params
  • 添加新的模型组件
  • 类别激活图可视化
  • 学习率策略可视化

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

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

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

相关文章

cocoscreator打包android app bundle使用Play Asset Delivery分包

1.cocoscreator构建完android项目 2.用androidstudio打开项目 3.点击androidstudio上项目目录左上角的Android改为Project 4. 在项目目录下新建Modul 5.选择Android Library 6.命名assetPack1或者自定义,点击Finish 7.在新建的assetPack1目录下找到build.gradle并…

【408数据结构】一篇文章吃透算法时间复杂度

文章目录前言1. 什么是好的算法2. 算法的效率度量3. 时间复杂度4. 大 O 时间复杂度表示法5. 算法时间复杂度计算规则🍑 规则 1:只关注循环中的代码段🍑 规则 2:加法规则🍑 规则 3:乘法规则6. 常见算法时间复…

两道有关链表的练习

目录 一、分割链表 二、奇偶链表 一、分割链表 给你一个链表的头节点 head 和一个特定值 x ,请你对链表进行分隔,使得所有 小于 x 的节点都出现在 大于或等于 x 的节点之前。 你不需要 保留 每个分区中各节点的初始相对位置。 示例 1: 输…

国科大论文latex模板中可能的注意事项

背景 国科大2022年9月发布了毕业论文的LaTeX模板,它是在ucasthesis上修改而来的,但近日使用国科大发布版本时发现有几点不同以及需要注意的地方。本人只会简单使用latex,但并不熟悉latex样式编辑,因此以下介绍与方法仅供参考。仅…

基于 Flink CDC 的实时同步系统

摘要:本文整理自科杰科技大数据架构师张军,在 FFA 2022 数据集成专场的分享。本篇内容主要分为四个部分:功能概述架构设计技术挑战生产实践Tips:点击「阅读原文」查看原文视频&演讲 ppt科杰科技是专门做大数据服务的供应商&am…

Regmap API 实验

目录 一、Regmap regmap 结构体 regmap_config 结构体 regmap_config 掩码设置 二、Regmap 操作函数 1、Regmap 申请与初始化 2、 regmap 设备访问 API 函数 3、regmap_update_bits 函数 4、regmap_bulk_read函数 5、regmap_bulk_write 三、修改SPI实验 1、添加regmap…

Kubenates中的日志收集方案ELK(下)

1、rpm安装Logstash wget https://artifacts.elastic.co/downloads/logstash/logstash-6.8.7.rpm yum install -y logstash-6.8.7.rpm2、创建syslog配置 input {beats{port> 5044 } }output {elasticsearch {hosts > ["http://localhost:9200"]index …

【博客632】k8s service ession affinity原理与iptables recent模块

k8s service ession affinity原理与iptables recent模块 1、iptables recent模块 作用: iptables的recent模块用于限制一段时间内的连接数, 是谨防大量请求攻击的必杀绝技! 善加利用该模块可充分保证服务器安全。 recent常用参数: –name 设定列表名称…

Git使用教程:最详细、最傻瓜、最浅显、真正手把手教

GITGIT版本控制版本控制的意义分布式图形化客户端环境搭建仓库的操作分支使用场景命令远程仓库操作生成公钥命令冲突忽略列表的配置时机配置方式版本回退练习:GIT 版本控制 把文件系统中的文件,按照修改的版本进行记录,进行管理的操作。 版…

Spring Cloud ( Consul注册、发现 )

操作步骤: 安装Consul服务端在服务内添加客户端依赖修改配置类,添加注解编写yml文件一、安装Consul服务端 链接:https://www.consul.io/downloads.html,解压 开启cmd,进入你的Consul解压路径,我是在E盘 …

扩展欧几里得算法及其应用

前言 由于数论的板子真的很抽象,也很难背,所以特此记录扩展欧几里得算法的板子和它的用途 本篇文章只涉及应用,不涉及证明,如需理解证明还请各位移步其他优秀的讲解! 扩展欧几里得算法 先粘一下板子的代码 typedef lo…

JAVA面向对象特征之——封装

4.封装 private关键字 是一个权限修饰符 可以修饰成员(成员变量和成员方法) 作用是保护成员不被别的类使用,被private修饰的成员只在本类中才能访问 针对private修饰的成员变量,如果需要被其他类使用,提供相应的操作 提供 “get变量名()…

面向数据安全共享的联邦学习研究综述

开放隐私计算 摘 要:跨部门、跨地域、跨系统间的数据共享是充分发挥分布式数据价值的有效途径,但是现阶段日益严峻的数据安全威胁和严格的法律法规对数据共享造成了诸多挑战。联邦学习可以联合多个用户在不传输本地数据的情况下协同训练机器学习模型&am…

【SpringCloud】SpringCloud详解之Feign远程调用

目录前言SpringCloud Feign远程服务调用一.需求二.两个服务的yml配置和访问路径三.使用RestTemplate远程调用(order服务内编写)四.构建Feign(order服务内配置)五.自定义Feign配置(order服务内配置)六.Feign配置日志(oder服务内配置)七.Feign调优(order服务内配置)八.抽离Feign前…

SNS (Simple Notification Service)简介

SNS (Simple Notification Service) 是一种完全托管的发布/订阅消息收发和移动通知服务,用于协调向订阅终端节点和客户端的消息分发。 和SQS (Simple Queue Service)一样,SNS也可以轻松分离和扩展微服务,分布式系统和无服务应用程序&#xf…

九龙证券|直逼1.5万亿!A股融资余额创年内新高,青睐这些行业和个股

2023年以来,A股商场震动重复,商场走势整体先扬后抑,各路资金看法纷歧,但数据显现,融资客在此期间整体持续净买入,未受到商场动摇的明显冲击,融资余额日前已迫临1.5万亿元,创出年内新…

磨金石教育摄影技能干货分享|烟花三月下扬州,是时候安排了!

人间三月最柔情,杨柳依依水波横。三月的风将要吹来,春天的门正式打开。对中国人来说,古往今来,赏春最好的地方是江南。人人都说江南好,可是江南哪里好呢?古人在这方面早就给出了答案:故人西辞黄…

使用高精度秒表StopWatch测试DateTime.Now的精度

StopWatch使用的命名空间:using System.Diagnostics;StopWatch的使用方法:创建Stopwatch对象:stopwatch;stopwatch计时表开启:stopwatch.Start();stopwatch计时表关闭:stopwatch.Stop();计算stopwatch.Stop…

【剧前爆米花--爪哇岛寻宝】进程的调度以及并发和并行,以及PCB中属性的详解。

作者:困了电视剧 专栏:《JavaEE初阶》 文章分布:这是关于进程调度、并发并行以及相关属性详解的文章,我会在之后文章中更新有关线程的相关知识,并将其与进程进行对比,希望对你有所帮助。 目录 什么是进程/…

redis布隆过滤器与四个缓存问题

目录布隆过滤器定义特性使用场景解决缓存穿透的问题黑白名单校验底层原理哈希冲突案例添加key查询key总结四个缓存问题缓存雪崩定义解决方案缓存穿透定义解决方案方案一方案二(guava实现)代码案例源码分析方案三(RedisSon实现)代码实现方案四(直接安装redis插件,应用层解决方案…