首页 > 其他分享 >【 ICCV代码复现】Swin Transformer图像分类实战教程 (训练自己的数据集)

【 ICCV代码复现】Swin Transformer图像分类实战教程 (训练自己的数据集)

时间:2024-03-28 15:59:19浏览次数:28  
标签:Transformer Swin -- torch python swin ICCV py

Swin Transformer图像分类实战教程

我用的是官方的代码,还有一位大神的集成代码也很不错,根据自己需求选择(不过选择大神的代码就不能看我这个教程了)https://github.com/WZMIAOMIAO/deep-learning-for-image-processing/tree/master/pytorch_classification/swin_transformer

论文地址:https://arxiv.org/pdf/2103.14030.pdf
GitHub地址:https://github.com/microsoft/Swin-Transformer/tree/main
在这里插入图片描述

一、环境配置

1.官方环境配置

基础pytorch、mmcv等,可以按照官方的教程如以下信息:
https://github.com/microsoft/Swin-Transformer/blob/main/get_started.md


我们推荐使用 pytorch docker nvcr>=21.05 by nvidia:
https://catalog.ngc.nvidia.com/orgs/nvidia/containers/pytorch
Clone this repo:

git clone https://github.com/microsoft/Swin-Transformer.git
cd Swin-Transformer

创建conda虚拟环境并激活:

conda create -n swin python=3.7 -y
conda activate swin

Install CUDA>=10.2 with cudnn>=7 following the official installation instructions
Install PyTorch>=1.8.0 and torchvision>=0.9.0 with CUDA>=10.2:

conda install pytorch==1.8.0 torchvision==0.9.0 cudatoolkit=10.2 -c pytorch

Install timm==0.4.12:

pip install timm==0.4.12

安装其他环境:

pip install opencv-python==4.4.0.46 termcolor==1.1.0 yacs==0.1.8 pyyaml scipy

Install fused window process for acceleration, activated by passing --fused_window_process in the running script

cd kernels/window_process
python setup.py install #--user

2.数据集结构

$ tree data
imagenet
├── train
│   ├── class1
│   │   ├── img1.jpeg
│   │   ├── img2.jpeg
│   │   └── ...
│   ├── class2
│   │   ├── img3.jpeg
│   │   └── ...
│   └── ...
└── val
    ├── class1
    │   ├── img4.jpeg
    │   ├── img5.jpeg
    │   └── ...
    ├── class2
    │   ├── img6.jpeg
    │   └── ...
    └── ...

二、修改配置等文件

1.修改config.py

_C.DATA.DATA_PATH = ‘dataset’
数据集路径的根目录,我定义为dataset,将数据集放在dataset里

_C.DATA.DATASET = ‘imagenet’
数据集的类型,这里只有一种类型imagenet

_C.MODEL.NUM_CLASSES:模型的类别,默认是1000,按照数据集的类别数量修改。

_C.SAVE_FREQ = 10 ,每多少个epoch保存一次模型

_C.TRAIN.EPOCHS = 300
训练300轮

2.修改build.py

找到mixup部分,将nb_classes =1000改为nb_classes = config.MODEL.NUM_CLASSES
修改完像下面这样
在这里插入图片描述

3.修改utils.py

找到load_checkpoint函数
checkpoint = torch.load(config.MODEL.RESUME, map_location='cpu')后面插入

    if checkpoint['model']['head.weight'].shape[0] == 1000:
        checkpoint['model']['head.weight'] = torch.nn.Parameter(
            torch.nn.init.xavier_uniform(torch.empty(config.MODEL.NUM_CLASSES, 768)))
        checkpoint['model']['head.bias'] = torch.nn.Parameter(torch.randn(config.MODELNUM_CLASSES))

修改完如下所示
在这里插入图片描述

三、训练

1.Train

python -m torch.distributed.launch --nproc_per_node <num-of-gpus-to-use> --master_port 12345  main.py \ 
--cfg <config-file> --data-path <imagenet-path> [--batch-size <batch-size-per-gpu> --output <output-directory> --tag <job-tag>]

For example, to train Swin Transformer with 8 GPU on a single node for 300 epochs, run:

  • Swin-T:
python -m torch.distributed.launch --nproc_per_node 8 --master_port 12345  main.py \
--cfg configs/swin/swin_tiny_patch4_window7_224.yaml --data-path <imagenet-path> --batch-size 128 
  • Swin-S:
python -m torch.distributed.launch --nproc_per_node 8 --master_port 12345  main.py \
--cfg configs/swin/swin_small_patch4_window7_224.yaml --data-path <imagenet-path> --batch-size 128 
  • Swin-B:
python -m torch.distributed.launch --nproc_per_node 8 --master_port 12345  main.py \
--cfg configs/swin/swin_base_patch4_window7_224.yaml --data-path <imagenet-path> --batch-size 64 \
--accumulation-steps 2 [--use-checkpoint]

2.Evaluation

python -m torch.distributed.launch --nproc_per_node 1 --master_port 12345 main.py --eval \
--cfg configs/swin/swin_base_patch4_window7_224.yaml --resume swin_base_patch4_window7_224.pth --data-path <imagenet-path>

nproc_per_node是GPU数量
config-file 是配置文件,在configs里

四、常见报错

1.TypeError: init() got an unexpected keyword argument ‘t_mul‘

删除Swin-Transformer/lr_scheduler.py的第24行‘t_mul=1.,’

标签:Transformer,Swin,--,torch,python,swin,ICCV,py
From: https://blog.csdn.net/weixin_62371528/article/details/137112837

相关文章

  • 词-词共现概率与Transformer
    1.词词共现概率    词-词共现概率是自然语言处理中的一个关键概念,它描述的是在一段文本或一个大型语料库中,任意两个词在同一上下文中共同出现的概率。具体来说,如果我们在分析语料库时发现词A和词B经常相邻出现或者在一定距离范围内出现,那么我们就说词A和词B具有较高的......
  • Transformer 预测过程 详解
    我们看到很多文章讲了transformer架构的高层概述,包括其中一些主要组件。但大部分文章没有讲整个预测过程是如何一步步进行的。让我们通过一个简单的例子来详细了解一下。在这个例子中,你将会看到一个翻译任务或者序列到序列任务,这恰好是transformer架构设计者最初的目标。你将......
  • Transformer逐层分解
    什么是Transformer?Transformer架构擅长处理文本数据,这些数据本身是有顺序的。他们将一个文本序列作为输入,并产生另一个文本序列作为输出。例如,讲一个输入的英语句子翻译成西班牙语。Transformer的核心部分,包含一个编码器层和解码器层的堆栈。为了避免混淆,我们把单个层称为编......
  • 重新梳理Attention Is All You Need(Transformer模型): Attention=距离,权重,概率;Multi-He
    Attention并非transformer原创,但是transformer把Attention置为核心地位,取得了巨大的成功!我来尝试理解并介绍一下Attention注意机制。Attention的目的是:提取特征,获得权重。Attention是什么:提取特征(权重)的手段。比如:给定一张图片,人类大脑很快就会把注意力放在最具辨识度的部分......
  • Transformer
    Transformer自注意力机制自注意力机制核心就是计算句子在编码过程中每个位置上的注意力权重,然后再以权重和的方式计算整个句子的隐含向量表示attention核心?self-attention核心公式:\(\text{Attention}(Q,K,V)=\text{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right)V\)其......
  • 学习人工智能:Attention Is All You Need-3-训练;结果;结论;Transformer模型相当于 E=MC^2
    5训练Training本节描述了我们模型的训练方案。5.1训练数据和批次处理TrainingDataandBatching我们在标准的WMT2014英德数据集上进行了训练,该数据集包含约450万个句子对。句子使用字节对编码[3]进行编码,其共享源-目标词汇表包含约37000个标记。对于英法翻译,我们使用......
  • 谈一谈BEV和Transformer在自动驾驶中的应用
    谈一谈BEV和Transformer在自动驾驶中的应用BEV和Transformer都这么火,这次就聊一聊。结尾有资料连接一BEV有什么用首先,鸟瞰图并不能带来新的功能,对规控也没有什么额外的好处。从鸟瞰图这个名词就可以看出来,本来摄像头等感知到的物体都是3D空间里的的,投影到2D空间,只是信息的......
  • 马斯克开源的 grok-1 底层 Transformer 模型论文 《Attention is All You Need》
    拓展阅读马斯克开源的grok-1底层Transformer模型论文《AttentionisAllYouNeed》马斯克开源的grok-1大模型底层Transformer模型到底是个啥?马斯克开源的grok-1大模型硬核源码第1弹马斯克开源的grok-1大模型硬核源码第2弹马斯克开源的grok-1大模型硬核源......
  • 机器学习算法那些事 | 使用Transformer模型进行时间序列预测实战
    本文来源公众号“机器学习算法那些事”,仅用于学术分享,侵权删,干货满满。原文链接:使用Transformer模型进行时间序列预测实战时间序列预测是一个经久不衰的主题,受自然语言处理领域的成功启发,transformer模型也在时间序列预测有了很大的发展。本文可以作为学习使用Transformer模......
  • 【论文精读】VIT:vision transformer论文
    相关文章【论文精读】Transformer:AttentionIsAllYouNeed文章目录相关文章一、文章概览(一)研究背景(二)核心思路(三)相关工作(三)文章结论二、模型细节(一)组成模块(二)模型的大体流程(三)具体的模型的前向过程(四)transformerencoder的公式表达(五)消融实验1、关于图像分类编码方......