Transformer实战-系列教程3:Vision Transformer 源码解读1

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

有任何问题欢迎在下面留言
本篇文章的代码运行界面均在Pycharm中进行
本篇文章配套的代码资源已经上传

Vision Transformer 源码解读1
Vision Transformer 源码解读2
Vision Transformer 源码解读3
Vision Transformer 源码解读4

1、整体解读

在这里插入图片描述

在文本任务中大量使用了Transformer 架构,因为文本数据是一个序列非常好的契合Transformer 架构。
可是如何将一张图像展开成一个序列呢?

将一个文本数据使用Transformer 进行特征提取需要把文本embbeding成一个向量

对于图像我们一样也可以embbeding成一个向量,所谓向量实际上不就是特征吗?把图像提取成特征,那就可以套上Transformer 架构,我们照样使用ConvNet把图像提取成特征再调整为向量就可以了。

一个词embbeding成向量,最多的是转化为768维的向量,对于图片使用一个卷积核对整体卷积一次就可以得到一个向量,如果我们使用512个卷积核就可以得到512维的向量,这样就可以和NLP任务对上了。

因此使用Transformer架构做CV任务,只需要加上一层embbeding就可以套用Transformer架构了,一次卷积就可以得到图像全局的特征,当然也要加上位置编码得到位置信息。

有了向量序列,就可以进行self-Attention的堆叠了

2、VIT项目

在这里插入图片描述
运行参数:

--name cifar10-100_500 
--dataset cifar10 
--model_type ViT-B_16 
--pretrained_dir checkpoint/ViT-B_16.npz

容易出错python包:

pip install protobuf==3.20.0 -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install numpy==1.19.5 -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install ml-collections -i https://pypi.tuna.tsinghua.edu.cn/simple

我是装了这三个就能正常运行了

3、VIT项目debug

配置参数部分就不需要仔细去看了,遇到哪个参数的时候回去去找就行了

找到train.py------main()函数
到第一个可执行的代码部分开启debug模式,逐行查看

# Setup CUDA, GPU & distributed trainingif args.local_rank == -1:device = torch.device("cuda" if torch.cuda.is_available() else "cpu")args.n_gpu = torch.cuda.device_count()else:  # Initializes the distributed backend which will take care of sychronizing nodes/GPUstorch.cuda.set_device(args.local_rank)device = torch.device("cuda", args.local_rank)torch.distributed.init_process_group(backend='nccl',timeout=timedelta(minutes=60))args.n_gpu = 1args.device = device

单机单卡、单机多卡、没有安装GPU则执行CPU
指定训练设备

# Setup logginglogging.basicConfig(format='%(asctime)s - %(levelname)s - %(name)s - %(message)s',datefmt='%m/%d/%Y %H:%M:%S',level=logging.INFO if args.local_rank in [-1, 0] else logging.WARN)logger.warning("Process rank: %s, device: %s, n_gpu: %s, distributed training: %s, 16-bits training: %s" %(args.local_rank, args.device, args.n_gpu, bool(args.local_rank != -1), args.fp16))

设置打印日志的格式

# Set seedset_seed(args)
def set_seed(args):random.seed(args.seed)np.random.seed(args.seed)torch.manual_seed(args.seed)if args.n_gpu > 0:torch.cuda.manual_seed_all(args.seed)

设置所有的随机种子,为什么args.seed=42,远古大神们都是用的42🤣

# Model & Tokenizer Setupargs, model = setup(args)
def setup(args):# Prepare modelconfig = CONFIGS[args.model_type]num_classes = 10 if args.dataset == "cifar10" else 100model = VisionTransformer(config, args.img_size, zero_head=True, num_classes=num_classes)model.load_from(np.load(args.pretrained_dir))model.to(args.device)num_params = count_parameters(model)logger.info("{}".format(config))logger.info("Training parameters %s", args)logger.info("Total Parameter: \t%2.1fM" % num_params)print(num_params)return args, model

在这里插入图片描述
看一下都返回了哪些参数,用这些参数初始化一个模型

setup()函数解读,debug模式:

  1. 将所有的参数全部读进来
  2. 数据类别10个
  3. 使用VisionTransformer类构造模型
  4. 加载预训练模型
  5. 模型进入GPU
  6. 统计模型参数量
  7. 设置日志信息
  8. 返回参数和模型

Vision Transformer 源码解读1
Vision Transformer 源码解读2
Vision Transformer 源码解读3
Vision Transformer 源码解读4

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

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

相关文章

Vue 实现动态路由

Vue 实现动态路由 Vue中实现动态路由主要涉及到两个方面:一是路由的动态添加,二是基于路由的参数变化来动态渲染组件。这通常在使用Vue Router时进行配置和实现。以下是实现动态路由的一些基本步骤和概念: 安装和设置Vue Router npm insta…

kubesphere部署k8s-v1.23.10

功能: 🕸 部署 Kubernetes 集群 🔗 Kubernetes 多集群管理 🤖 Kubernetes DevOps 🔎 云原生可观测性 🧩 基于 Istio 的微服务治理 💻 应用商店 💡 Kubernetes 边缘节点管理 &#x1…

latex论文写作遇到的问题

图一: 图二: 图三: 使用模版的时候将图一转为图二:在.tex文件开头导言部分加上: \usepackage{titletoc} \titlecontents{section}[0pt]{\addvspace{1.5pt}\filright\bf}{\contentspush{第\thecontentslabel\ 章\qu…

2024.2.4 awd总结

防御阶段 感觉打了几次awd,前面阶段还算比较熟练 1.ssh连接 靶机登录 修改密码 [root8 ~]# passwd Changing password for user root. New password: Retype new password: 2.xftp连接 备份网站源码 我觉得这步还是非常重要的,万一后面被删站。。…

【幻兽帕鲁】如何快速部署私人服务器

看了许多关于如何部署服务器的,大部分都是要买阿里云或者腾讯云的服务器并且至少四核以上才能保证流畅运行。 但是对于想搭建私服但又没有技术的小白,确实是有点难度了。购买云服务器后还要配置服务器,配置OpenVPN、PalServer,doc…

解锁亚马逊测评防关联新技术:亚马逊鲲鹏系统

在亚马逊测评的过程中,一直以来都存在着一些技术难题,特别是在模拟买家行为时需要考虑诸多因素,包括关键词搜索、IP地址切换以及防关联等。然而,最新的技术突破,亚马逊鲲鹏系统正是为了解决这些问题而诞生的。 首先&am…

视频存储空间的计算:适用安防监控录像、视频会议录像、手机录像、短视频录像等场景

目 录 一、问题 二、计算方法 三、实例 1、需求 2、确定存储空间的计算方法 3、存储容量计算 一、问题 经常有客户、伙伴问我,视频监控中录像要多少个TB?要多少个硬盘?每次都要问问他们各种情况,是什么样的视…

No matching client found for package name ‘com.unity3d.player‘

2024年2月5日更新 下面的一系列操作最终可能都无用,大致这问题出现原因是我在Unity采用了Android方式接入Firebase,而Android接入实际上和Unity接入方式有配置上的不一样,我就是多做了几步操作如下。https://firebase.google.com/docs/androi…

【Java】Redis入门

1. Redis入门 1.1 Redis简介 Redis是一个基于内存的key-value结构数据库。Redis 是互联网技术领域使用最为广泛的存储中间件。 官网:https://redis.io 中文网:https://www.redis.net.cn/ key-value结构存储: 主要特点: 基于内…

maven java 如何打纯源码zip包

一、背景 打纯源码包给第三方进行安全漏洞扫描 二、maven插件 项目中加入下面的maven 插件 <!-- 要将源码放上去&#xff0c;需要加入这个插件 --><plugin><artifactId>maven-source-plugin</artifactId><version>2.4</version><con…

docker复习笔记01(小滴课堂)安装+部署mysql

查看内核版本。 关闭防火墙&#xff1a; 查看docker版本&#xff1a; 下载阿里yum源&#xff1a; 再看一下yum版本都有哪些&#xff1a; 我们可以看的docker-ce了。 安装它&#xff1a; 设置docker服务开机启动&#xff1a; 更新日志文件&#xff1a; 启动docker&#xff1a; …

CSS写渐变边框线条

box-sizing: border-box; border-top: 1px solid; border-image: linear-gradient(to right, red, blue) 1;

SpringBoot使用Mybatis Plus详解含示例代码(值得珍藏)

1. 前言 本文将详细介绍如何在Spring Boot项目中集成和使用MyBatis Plus。我们将从环境准备、依赖管理、配置文件、实体映射、CRUD操作等方面进行阐述&#xff0c;并附有完整的示例代码和注释。通过阅读本文&#xff0c;你将能够了解如何在Spring Boot项目中使用MyBatis Plus进…

STM32F407移植OpenHarmony笔记9

继上一篇笔记&#xff0c;已经完成liteos内核的基本功能适配。 今天尝试启动OHOS和XTS兼容性测试。 如何启动OHOS&#xff1f; OHOS系统初始化接口是OHOS_SystemInit(void)&#xff0c;在内核初始化完成后&#xff0c;就能调用。 extern void OHOS_SystemInit(void); OHOS_Sys…

JupyterLab 更换内核 使用 conda 虚拟环境

未有conda虚拟环境default先创建环境 conda create -n default python3.8 ipykernel已有conda虚拟环境default激活后安装ipykernel conda activate defaultpip install ipykernel将虚拟环境写入 jupyter notebook 的 kernel 中 python -m ipykernel install --user --name 虚…

C语言小游戏:贪吃蛇(游戏开发的环境和功能介绍)

❀❀❀ 文章由不准备秃的大伟原创 ❀❀❀ ♪♪♪ 若有转载&#xff0c;请联系博主哦~ ♪♪♪ ❤❤❤ 致力学好编程的宝藏博主&#xff0c;代码兴国&#xff01;❤❤❤ 生命不停&#xff0c;学习不止。铁汁们&#xff0c;我是大伟&#xff0c;欢迎来到大伟的游戏时间&#xff0c…

使用idea连接SQL Server数据库出错TLS10 is not accepted

使用idea连接数据库时&#xff0c;发现提示错误&#xff1a; 驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全连接。错误:“The server selected protocol version TLS10 is not accepted by client preferences [TLS13, TLS12]”。等等出错提示。 可能有两个…

基础算法bfs -剪枝问题

问题描述:一个迷宫有 NXM 格,有一些格子是地板,能走;有一些格子是障碍,不能走。给一个起点S和一个终点D。一只小狗从 S出发,每步走一块地板&#xff0c;在每块地员不能停留&#xff0c;而且走过的地板都不能再走。给定一个 T,问小狗能正好走 T步到达D吗?输入:有很多测试样例。…

一次Kubernetes Pod内存异常导致的测试环境耗时异常问题排查过程

概述 在使用公司内部后台系统测试环境时发现一个请求加载慢的问题&#xff0c;简简单单的列表&#xff0c;查询MongoDB数据库&#xff0c;测试环境不过几百上千条数据而已&#xff0c;请求耗时居然高达5~6秒&#xff1a; 作为对比&#xff0c;生产环境的请求响应截图如下&…

【Java程序设计】【C00194】基于SSM的高校财务处理管理系统(论文+PPT)

基于SSM的高校财务处理管理系统&#xff08;论文PPT&#xff09; 项目简介项目获取开发环境项目技术运行截图 项目简介 这是一个基于ssm的高校从财务处理系统 本系统分为财务和管理员2个功能模块。 财务&#xff1a;财务登录高校财务处理系统后&#xff0c;能对首页、个人中心…