码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • windows11下运行swin-transformer算法


    一、背景

    我们希望使用swin-transformer算法实现物体的分类。 

    swin-transformer的github地址为:https://github.com/microsoft/Swin-Transformer

    本文参考:Swin Transformer实战:使用 Swin Transformer实现图像分类-阿里云开发者社区

    二、环境配置

    (1)配置要求

    windows版本:windows11

    pytorch版本:1.7.1

    python版本:3.7.3(至少要大于3.6.2,因为pytorch1.7.1的python最低要求是3.6.2)

    cuda版本:11.0(pytorch1.7.1在windows11下使用,最少需要cuda11.0)

    以上配置为我试验swin-transformer运行的相对比较低的配置要求。

    (2)安装方式

    torch1.7.1的安装命令:pip install torch==1.7.1 -f https://download.pytorch.org/whl/torch_stable.html

    torchvision的安装命令:pip install torchvision==0.8.2 -f https://download.pytorch.org/whl/torch_stable.html

    cuda中官网下载toolkit即可,windows下cuda11.0.X版本可选择windows10对应的版本。

    三、训练集构造

    swin-transformer默认读取imagenet格式的数据集。

    数据集的目录结构如下:

    四、修改源码

    1、修改config.py文件

    _C.DATA.DATA_PATH = 'D:\\temp\\pic_ai\\swin_transformer_test'

    _C.MODEL.NUM_CLASSES = 2

    _C.DATA.NUM_WORKERS = 0

    2、修改build.py文件

    将nb_classes =1000改为nb_classes = config.MODEL.NUM_CLASSES,如下所示:

    将部分_pil_interp修改为str_to_pil_interp,如下图所示:

     3、修改utils.py文件

    由于类别默认是1000,所以加载模型的时候会出现类别对不上的问题,所以需要修改load_checkpoint方法。在加载预训练模型之前增加修改预训练模型的方法:

    1. if checkpoint['model']['head.weight'].shape[0] == 1000:
    2. checkpoint['model']['head.weight'] = torch.nn.Parameter(
    3. torch.nn.init.xavier_uniform(torch.empty(config.MODEL.NUM_CLASSES, 768)))
    4. checkpoint['model']['head.bias'] = torch.nn.Parameter(torch.randn(config.MODELNUM_CLASSES))
    5. msg = model.load_state_dict(checkpoint['model'], strict=False)

     

     4、修改main.py文件

    (1)将如下代码注释:

    (2)将torch.distributed.init_process_group修改为:

    torch.distributed.init_process_group('gloo', init_method='file://tmp/somefile', rank=0, world_size=1)

    该函数只有在pytorch1.7.1以上才支持。

    5、修改lr_scheduler.py文件

    将如下代码注释掉

     

    五、运行训练命令:

    python.exe D:/workspace/transformer/Swin-Transformer/main.py --cfg configs/swin/swin_tiny_patch4_window7_224.yaml --local_rank 0 --batch-size 2

    执行后显示如下:

     

     

     

     

  • 相关阅读:
    C/C++学习 -- Base64算法
    centos7手动配置jdk1.8环境与maven环境
    C语言程序设计笔记(浙大翁恺版) 第十二周:程序结构
    【ESP32】制作 Wi-fi 音箱(HTTP + I2S 协议)
    10.10c++作业
    Java学习 --- 设计模式七大原则的依赖倒转原则
    leetcode:857. 雇佣 K 名工人的最低成本【分块思考 + 由简单入手】
    [Druid-1.2.11源码系列]-7-mysql-connector-java驱动包内部的创建数据库连接对象的过程
    IIS 部署.NetCore,最细步骤
    微信小程序 onLoad和onShow的区别
  • 原文地址:https://blog.csdn.net/benben044/article/details/125532003
  • 最新文章
  • 【JVM】编译执行与解释执行的区别是什么?JVM 使用哪种方式?
    用 Hashids 优雅解决 C 端自增 ID 暴露问题
    V8引擎 精品漫游指南--Ignition篇(上) 指令 栈帧 槽位 调用约定 内存布局 基础内容
    LLVM Pass快速入门(四):代码插桩
    milkup:桌面端 markdown AI续写和即时渲染
    基于项目工程构建SBOM(软件物料清单)的研究
    鸿蒙应用开发UI基础第二节:鸿蒙应用程序框架核心解析与实操
    .NET 中如何快速实现 List 集合去重?
    扣子Coze实战:从0到1打造抖音+小红书热点监控智能体
    浅谈数据访问层
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号