Transformer实战-系列教程8:SwinTransformer 源码解读1(项目配置/SwinTransformer类)

本文主要是介绍Transformer实战-系列教程8:SwinTransformer 源码解读1(项目配置/SwinTransformer类),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

🚩🚩🚩Transformer实战-系列教程总目录

有任何问题欢迎在下面留言
本篇文章的代码运行界面均在Pycharm中进行
本篇文章配套的代码资源已经上传
https://download.csdn.net/download/weixin_50592077/88809977?spm=1001.2014.3001.5501

SwinTransformer 算法原理
SwinTransformer 源码解读1(项目配置/SwinTransformer类)
SwinTransformer 源码解读2(PatchEmbed类/BasicLayer类)
SwinTransformer 源码解读3(SwinTransformerBlock类)
SwinTransformer 源码解读4(WindowAttention类)
SwinTransformer 源码解读5(Mlp类/PatchMerging类)

1、项目配置

本项目来自SwinTransformer 的GitHub官方源码:

Image Classification: Included in this repo. See get_started.md for a quick start.
Object Detection and Instance Segmentation: See Swin Transformer for Object Detection.
Semantic Segmentation: See Swin Transformer for Semantic Segmentation.
Video Action Recognition: See Video Swin Transformer.
Semi-Supervised Object Detection: See Soft Teacher.
SSL: Contrasitive Learning: See Transformer-SSL.
SSL: Masked Image Modeling: See get_started.md#simmim-support.
Mixture-of-Experts: See get_started for more instructions.
Feature-Distillation: See Feature-Distillation.

此处包含多个版本(分类、检测、分割、视频 ),但是仅仅学习算法建议选择第一个图像分类的基础版本就可以了

安装需求:

pip install timm==0.4.12
pip install yacs==0.1.8
pip install termcolor==1.1.0
pytorch
opencv
Apex(linux版本)

原本的数据是imagenet,这个数据太多了,有很多开源的imagenet小版本,本文配套的资源就是已经配好的imagenet小版本,目录信息、数据标注、数据划分都已经做好了

本项目的执行文件就是main.py,源码我已经修改了部分

配置参数:

--cfg configs/swin_tiny_patch4_window7_224.yaml
--data-path imagenet
--local_rank 0
--batch-size 4

–local rank 0这个参数表示的是分布式训练,直接用当前的这个就好

2、SwinTransformer类

打开models有两个构建模型的源码:
build.py
swin_transformer.py

构建模型的部分主要就在swin_transformer.py,一共有600多行代码

首先看SwinTransformer类的前向传播函数:

class SwinTransformer(nn.Module):def forward(self, x):x = self.forward_features(x)x = self.head(x)return x

打印这个过程的shape值:

  1. 原始输入x: torch.Size([4, 3, 224, 224]),原始输入是一张彩色图像,4是batch,3是通道数,图像是224*244的长宽
  2. self.forward_features(x):torch.Size([4, 768]),经过forward_features函数后,变成了768维的向量
  3. self.head(x):torch.Size([4, 1000]),head是一个全连接层,很显然这个1000是最后的分类数

所以整个体征提取的过程都在self.forward_features()函数中:

    def forward_features(self, x):x = self.patch_embed(x)if self.ape:x = x + self.absolute_pos_embedx = self.pos_drop(x)for layer in self.layers:x = layer(x)x = self.norm(x)  # B L Cx = self.avgpool(x.transpose(1, 2))  # B C 1x = torch.flatten(x, 1)return x
  1. 原始输入x: torch.Size([4, 3, 224, 224]),原始输入是一张彩色图像

  2. patch_embed: torch.Size([4, 3136, 96]),图像经过patch_embbeding变成一个Transformer需要的序列,相当于序列是3136个向量,每个向量维度是96。这个过程通常包括将图像分割成多个patches,然后将每个patch线性投影到一个指定的维度。

  3. if self.ape: x = x + self.absolute_pos_embed,如果模型配置了绝对位置编码(self.ape为真),这行代码会将绝对位置嵌入加到patch的嵌入上。绝对位置嵌入提供了每个patch在图像中位置的信息,帮助模型理解图像中不同部分的空间关系, 不改变维度

  4. pos_drop: torch.Size([4, 3136, 96]),一层Dropout

  5. layer: torch.Size([4, 784, 192]),for循环主要是Swin Transformer Block的堆叠

  6. layer: torch.Size([4, 196, 384]),4次循环,序列长度减小

  7. layer: torch.Size([4, 49, 768]),特征图个数增多,即向量维度变大

  8. layer: torch.Size([4, 49, 768]),最后一次维度不变

  9. norm: torch.Size([4, 49, 768]),层归一化,维度不变

  10. avgpool: torch.Size([4, 768, 1]),平均池化

  11. flatten: torch.Size([4, 768]),拉平操作,去掉多余的维度

SwinTransformer 算法原理
SwinTransformer 源码解读1(项目配置/SwinTransformer类)
SwinTransformer 源码解读2(PatchEmbed类/BasicLayer类)
SwinTransformer 源码解读3(SwinTransformerBlock类)
SwinTransformer 源码解读4(WindowAttention类)
SwinTransformer 源码解读5(Mlp类/PatchMerging类)

这篇关于Transformer实战-系列教程8:SwinTransformer 源码解读1(项目配置/SwinTransformer类)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/693925

相关文章

网页解析 lxml 库--实战

lxml库使用流程 lxml 是 Python 的第三方解析库,完全使用 Python 语言编写,它对 XPath表达式提供了良好的支 持,因此能够了高效地解析 HTML/XML 文档。本节讲解如何通过 lxml 库解析 HTML 文档。 pip install lxml lxm| 库提供了一个 etree 模块,该模块专门用来解析 HTML/XML 文档,下面来介绍一下 lxml 库

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

Zookeeper安装和配置说明

一、Zookeeper的搭建方式 Zookeeper安装方式有三种,单机模式和集群模式以及伪集群模式。 ■ 单机模式:Zookeeper只运行在一台服务器上,适合测试环境; ■ 伪集群模式:就是在一台物理机上运行多个Zookeeper 实例; ■ 集群模式:Zookeeper运行于一个集群上,适合生产环境,这个计算机集群被称为一个“集合体”(ensemble) Zookeeper通过复制来实现

这15个Vue指令,让你的项目开发爽到爆

1. V-Hotkey 仓库地址: github.com/Dafrok/v-ho… Demo: 戳这里 https://dafrok.github.io/v-hotkey 安装: npm install --save v-hotkey 这个指令可以给组件绑定一个或多个快捷键。你想要通过按下 Escape 键后隐藏某个组件,按住 Control 和回车键再显示它吗?小菜一碟: <template

CentOS7安装配置mysql5.7 tar免安装版

一、CentOS7.4系统自带mariadb # 查看系统自带的Mariadb[root@localhost~]# rpm -qa|grep mariadbmariadb-libs-5.5.44-2.el7.centos.x86_64# 卸载系统自带的Mariadb[root@localhost ~]# rpm -e --nodeps mariadb-libs-5.5.44-2.el7

hadoop开启回收站配置

开启回收站功能,可以将删除的文件在不超时的情况下,恢复原数据,起到防止误删除、备份等作用。 开启回收站功能参数说明 (1)默认值fs.trash.interval = 0,0表示禁用回收站;其他值表示设置文件的存活时间。 (2)默认值fs.trash.checkpoint.interval = 0,检查回收站的间隔时间。如果该值为0,则该值设置和fs.trash.interval的参数值相等。

NameNode内存生产配置

Hadoop2.x 系列,配置 NameNode 内存 NameNode 内存默认 2000m ,如果服务器内存 4G , NameNode 内存可以配置 3g 。在 hadoop-env.sh 文件中配置如下。 HADOOP_NAMENODE_OPTS=-Xmx3072m Hadoop3.x 系列,配置 Nam

Makefile简明使用教程

文章目录 规则makefile文件的基本语法:加在命令前的特殊符号:.PHONY伪目标: Makefilev1 直观写法v2 加上中间过程v3 伪目标v4 变量 make 选项-f-n-C Make 是一种流行的构建工具,常用于将源代码转换成可执行文件或者其他形式的输出文件(如库文件、文档等)。Make 可以自动化地执行编译、链接等一系列操作。 规则 makefile文件

如何用Docker运行Django项目

本章教程,介绍如何用Docker创建一个Django,并运行能够访问。 一、拉取镜像 这里我们使用python3.11版本的docker镜像 docker pull python:3.11 二、运行容器 这里我们将容器内部的8080端口,映射到宿主机的80端口上。 docker run -itd --name python311 -p

性能分析之MySQL索引实战案例

文章目录 一、前言二、准备三、MySQL索引优化四、MySQL 索引知识回顾五、总结 一、前言 在上一讲性能工具之 JProfiler 简单登录案例分析实战中已经发现SQL没有建立索引问题,本文将一起从代码层去分析为什么没有建立索引? 开源ERP项目地址:https://gitee.com/jishenghua/JSH_ERP 二、准备 打开IDEA找到登录请求资源路径位置