【基于 PyTorch 的 Python 深度学习】8 注意力机制(3):Transformer(下)

前言

文章性质:学习笔记 📖

学习资料:吴茂贵《 Python 深度学习基于 PyTorch ( 第 2 版 ) 》【ISBN】978-7-111-71880-2

主要内容:根据学习资料撰写的学习笔记,该篇主要介绍了 vision Transformer 和 Swin Transformer 。

目录

前言

一、Transformer

1、Vision Transformer

2、Swin Transformer


一、Transformer

Transformer 目前在自然语言处理领域取得了很好的效果,并且在很多场景中,Transformer 的 性能训练速度 等均已远超传统的循环神经网络。因此,人们自然想到将其应用到视觉处理领域。凭借 Transformer 的长注意力和并发处理能力,研究人员通过 Vision Transformer(ViT)Swin Transformer(Swin-T)等架构在图像分类、目标检测、语义分割等方面取得了目前最好的成绩。Transformer 有望跨越视觉处理、自然语言处理之间的鸿沟,建立一个更通用的架构。

1、Vision Transformer

Transformer 应用到视觉处理领域,首先把图像分成多个小块,对这些块排序,构成块序列,至于这些块原本在图像中的位置信息,通过添加 绝对位置信息相对位置信息 等方法来处理。图 8-32 是 ViT 的架构图。

如图 8-32 所示,把输入图像划分成 9 个小块并展平成一维向量后通过线性映射成固定长度嵌入,然后与各小块的位置嵌入张量融合在一起,构成 Transformer 编辑器的输入,这些输入相当于 NLP 中的一个个单词标记。图 8-32 中的 0,1,2,3,… ,9 表示位置嵌入,星号(*)表示分类标记的嵌入。ViT 把 整张图像 作为自注意力的输入,如果图像像素较大或图像为多尺寸,则其计算复杂度较高。另外,ViT 通常只适合分类任务,不适合目标检测、语义分割等任务。是否可以把 Transformer 改造成更通用的架构,就像卷积神经网络处理视觉任务一样?接下来介绍的 Swin Transformer 就是一个这样的通用架构。

2、Swin Transformer

Swin Transformer 被评为 2021 ICCV 最佳论文,它对 ViT 进行了一些改进,更适合处理不同尺寸的图像,且同时可以处理目标检测、语义分割等任务。Swin Transformer 是如何实现的呢? 主要从以下两方面进行改进。

(1)使用层次化的网络结构

通过下采样的层级设计,能够逐渐增大感受野,从而使得注意力机制也能够注意到全局的特征,如图 8-33 所示。

Swin-T 的层级结构如何实现呢?其整体架构如图 8-34 所示。

Swin-T 的整个模型采取层次化的设计,共包含 4 个阶段,每个阶段都会缩小输入特征图的分辨率,像 CNN 一样逐层扩大感受野。

1)对输入图像实现分块,具体通过图中的 块划分并展平模块 来实现,这相当于 ViT 中的块嵌入模块(只不过这里没有位置嵌入,Swin Transformer 的位置嵌入在计算自注意力时采用相对位置编码),将图像切成一个个图块,展平再嵌入固定维度。

2)随后在第一个阶段中,通过 线性嵌入 (主要通过 CNN 实现,将 stride 和 kernel-size 设置为 patch_size)调整通道数为 C

3)在每个阶段里(除第一个阶段),均由 块合并  Swin-T 模块 组成。其中,块合并的作用是在每个阶段开始前做下采样,用于缩小分辨率,调整通道数进而形成层次化的设计。同时也能节省一定运算量。每次下采样是缩小两倍,因此在行方向和列方向上,按间隔 2 选取元素。然后拼接在一起作为一个张量,最后展开。此时通道维度会变成原先的 4 倍,因为 H 、W 各缩小 2 倍,最后再通过一个全连接层调整通道维度为原来的两倍。

4)块的具体结构可见图 8-35,主要由 LayerNorm  MLP 、窗口多头自注意力(Window Multi-head Self-Attention, W-MSA )、移动窗口多头自注意力(Shifted Window Multi-head Self-Attention, SW-MSA )组成。

由图 8-35 可知,每个块都是由着两个子块构成,所以子块的个数都是偶数。

(2)使用 W-MSA 和 SW-MSA

Swin-T 块由局部多头自注意(MSA)模块组成,在连续块中基于交替移位的块窗口。在局部自注意力中,计算复杂度与图像大小成线性关系,而移动窗口可以实现跨窗口连接。论文作者还展示了移动的窗口如何在开销很小的情况下提高检测精度,增加 窗口循环移动(window cyclic shift)功能,如图 8-36 所示。

从图 8-35 可以看出 Swin-T 的最大创新点就是 W-MSASW-MSA ,其他则是些大家熟悉的处理模块。W-MSA 就是在一个窗口内实现多头注意力,为了更好地与其他窗口进行信息交互,Swin-T 引入了 移动窗口操作 。具体操作如图 8-37 所示。

图 8-37 的左边是没有重叠的窗口,右边则是将窗口进行移位的移动窗口注意力。可以看到移位后的窗口包含原本相邻窗口的元素。但这也引入了一个新的问题,即窗口的个数增加了,由原本的 4 个窗口变成 9 个窗口。这里是通过对特征图移位,并给自注意力通过设置掩码来间接实现,如此就可在保持原有窗口个数的前提下,实现跨窗口的信息交互,具体步骤如下:

① 特征图移位操作

对特征图移位是通过 torch.roll 来实现的,如图 8-38 所示。

② Masked MSA

通过设置合理的掩码机制,让 SW-MSA 与 W-MSA 在相同的窗口个数下,达到等价的计算结果。首先我们对移动窗口后的每个窗口都加上索引,并且执行一个 roll 操作( window_size = 2 , shift_size = -1 ),如图 8-39 所示。

在计算 SW-MSA 的时候,让具有相同索引的 QK^T进行计算,而忽略不同索引的 QK^T计算结果,即把不同索引的 QK^T区域设置为一个负数,如 -100 ,这样通过 softmax 计算后相关领域的值将为 0 ,计算结果如图 8-40 所示。

这些创新不但提升了 Swin-T 的精度、速度,还拓展了应用领域(如目标检测、语义分割等)。

使用 Transformer 架构处理 CV 任务时,需要处理标记的时序问题,ViT 采用 输入 + 绝对路径嵌入 的方法,而 Swin-T 在输入中添加绝对路径嵌入作为一个选择项,且在计算注意力的 QK 时,加上一个相对位置偏置(B)的处理,具体计算公式如下:

Attention(Q,K,V)=Softmax(\frac{QK^T}{\sqrt{d}}+B)V

实验证明加入相对位置编码可以提升模型性能。

如何获取输入图像的相对位置偏置呢?生成输入图像的相对位置偏置的基本思路是:先生成一个相对位置偏置的表,然后基于特征图的相对位置索引获取相对位置偏置表中对应的值。具体步骤如下:

① 生成特征图的相对位置编码

假设输入的特征图的高宽都为 2 ,由此可以构建出每个像素的绝对位置,如图 8-41 中左下角的 2×2 矩阵,每个像素的绝对位置分别用行号和列号表示。假设第 1 个像素对应的是第 0 行第 0 列,则其绝对位置索引是 (0, 0) 。再来看相对位置索引,首先看第 1 个像素,它使用 Q 与所有像素 K 进行匹配,这里以第 1 个像素为参考点。然后用位于 (0, 0) 的绝对位置索引与其他位置索引相减,得到其他位置相对  (0, 0) 位置的相对位置索引。例如第 2 个像素的绝对位置索引是  (0, 1) ,则它相对第 1 个像素的相对位置索引为  (0, 0) -  (0, 1) = (0, -1) 。同理,可以得到其他位置相对第 1 个像素的相对位置索引矩阵。同样,也能得到相对第 2 、3 、4 个像素的相对位置索引矩阵。将每个相对位置索引矩阵按行展平,并拼接在一起得到下面的 4×4 矩阵,如图 8-41 所示。

这里描述的是相对位置索引,而不是相对位置偏置参数。相对位置偏置需要根据相对位置索引获取。

如图 8-42 所示,第 2 个像素在第 1 个像素的右边,所以相对 (0, 0) 位置的相对位置索引为  (0, -1) 。第 4 个像素是处于 (1, 1) 位置的像素,在第 3 个像素的右边,所以相对第 3 个元素的相对位置索引为  (0, -1) 。可以发现这两者的相对位置索引都是  (0, -1) ,所以它们使用的相对位置偏置参数都是一样的,这也说明相对位置应好于绝对位置。

② 把二维索引转换成一维索引

因为输入图像需要进行展平,所以对应的相对位置索引也需要转换为一维索引。

如何把二维索引转换成一维索引呢?具体实现步骤如图 8-42 所示。

③ 根据索引获取相对位置偏置

根据相对位置索引从相对位置偏置表中获取偏置值,即前文的 B 值,如图 8-43 所示,相对位置偏置表的大小为 (2M-1)×(2M-1) 。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

WeTrade 在印度尼西亚井里汶成功举办研讨会

端午安康!在这欢乐的假日里,WeTrade和各位投资者分享一则喜事!如果有意参加的,可以联系小编! 5 月底,我们在印度尼西亚井里汶成功举办了一场精彩研讨会,聚集了来自印度尼西亚各地交易社区的100多名交易者。 此次研讨会由经验丰富…

互联网政务应用指那些?怎么过等保?

随着互联网技术的快速发展,互联网已经跟大家的生活分不开了,已经成为了大家获取信息交流互动的重要渠道了。因此为了提高用户体验,跟上时代潮流,政府开通了不少互联网政务应用,作为政府服务社会、联系群众的重要窗口。…

从文本文件中读取博客数据并将其提取到文件中

通常情况下我们可以使用 Python 中的文件操作来实现这个任务。下面是一个简单的示例,演示了如何从一个文本文件中读取博客数据,并将其提取到另一个文件中。 假设你的博客数据文件(例如 blog_data.txt)的格式 1、问题背景 我们需…

3D模型如何快速渲染效果图?

3D模型快速渲染效果图的关键在于优化渲染过程,减少不必要的计算量,并充分利用软件和硬件的性能。那么,3D模型如何实现快速渲染效果图呢? 一、优化模型与材质 1.优化模型文件:尽量减少模型面数,因为模型面数越多&#…

独具魅力的 App UI 风格才能称之为优秀

独具特色的App UI 长什么样!看这里

【制作100个unity游戏之27】使用unity复刻经典游戏《植物大战僵尸》,制作属于自己的植物大战僵尸随机版和杂交版7(附带项目源码)

最终效果 系列导航 文章目录 最终效果系列导航前言绘制进度条UI控制关卡进度测试按配置表使用关卡进度变化源码结束语 前言 本节主要实现关卡进度条的功能 绘制进度条UI 控制关卡进度测试 新增ProgressPanel代码,控制关卡进度 public class ProgressPanel : Mon…

(css)el-tabs滚动按钮浮动问题

(css)el-tabs滚动按钮浮动问题 修改前: 修改后: 思路:找到相应元素,降低层级 css写法: ::v-deep .el-tabs__nav {z-index: 1; }

【设计模式】行为型设计模式之 备忘录模式(快照模式)

介绍 备忘录应用场景明确并且有限,一般用来数据的防丢失、撤销和恢复。对大对象的备份和恢复,备忘录模式能有效的节省时间和空间开销。 定义 备忘录模式:也称为快照模式,在不违背封装原则的前提下,捕获一个对象的内…

你必须得认真体验下 TDengine Cloud 了!抢 600 元体验券

你真的了解 TDengine Cloud 吗? 在当今快速演变的数字经济时代,企业面临着前所未有的挑战和机遇。数据量的激增、计算需求的不断增长以及对业务敏捷性的迫切需求,促使企业寻求更加灵活、高效的技术解决方案。云服务由此应运而生,成…

文献解读-农业系列-第七期|《高粱驯化的基因组足迹和多种最终用途的育种选择》

关键词:高粱基因分析;基因组变异检测;全基因组重测序; 文献简介 标题(英文):Genomic footprints of sorghum domestication and breeding selection for multiple end uses标题(中文…

二叉树左右树交换

leetcode 226题 翻转二叉树 题目描述 给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。 示例 1: 输入:root [4,2,7,1,3,6,9] 输出:[4,7,2,9,6,3,1]示例 2: 输入:root [2,1,3]…

理解 Bearer Token:什么是它以及如何运作?

在当前数字化时代,网络安全尤为关键。随着技术快速进步,需求日益增长,保障应用程序中用户数据的安全成为开发者们的首要任务。其中,Bearer Token 作为一种高效的验证策略,在防止未授权访问中发挥着不可或缺的作用。 解…

算法005:有效三角形的个数

. - 力扣(LeetCode). - 备战技术面试?力扣提供海量技术面试资源,帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。https://leetcode.cn/problems/valid-triangle-number/ 要组成三角形的三条边,需要保证&am…

沂蒙精神宣讲员尹志林寻访“电台双杰”秦鸿钧贺伯珍烈士故居

临沂信息联播讯(张春兄、冯爱云) 近日,为了更好的弘扬沂蒙精神、讲好先烈事迹,沂蒙精神宣讲员、《百集学沂蒙党史颂沂蒙精神大讲堂》主讲人、中共临沂市兰山区委宣传部宣讲团成员尹志林一行,专程赶往沂南县辛集镇世和村…

wgcloud可以监测交换机的哪些数据

WGCLOUD可以监测交换机的cpu,内存,温度,电压,磁盘,流量传输速率等数据 WGCLOUD也是基于SNMP协议来监测交换机的

新能源汽车不安全?新能源汽车测试之方案篇——充电桩综合测试

背景 随着全球对气候变化和环境污染问题的日益加剧,新能源汽车作为一种环保、节能的交通工具备受关注。其发展背景主要源于对环境问题的关注以及对传统燃油汽车依赖的减少。新能源汽车的出现,带来了减少尾气排放、节能减排、保护环境等多方面的优点&…

梯度提升树GBDT系列算法

Boosting方法的基本元素与基本流程💫 在Boosting集成算法当中,我们逐一建立多个弱评估器(基本是决策树),并且下一个弱评估器的建立方式依赖于上一个弱评估器的评估结果,最终综合多个弱评估器的结果进行输出…

div拖拽改变宽高

目前是点击按照右下角边框拖拽改变大小 如果要点击按住内容拖拽也改变大小 则传入事件 $ event即可 startDrag(index,$event)和 drag(index,$event) 以下代码可直接使用 <template><div><div>目前是点击按照右下角边框拖拽改变大小 <br> 如果要点击按…

如何系统学习vue框架

前言 在软件开发的浩渺星海中&#xff0c;编程规范如同航海的罗盘&#xff0c;为我们指引方向&#xff0c;确保我们的代码之旅能够顺利、高效地到达目的地。无论是个人开发者还是大型团队&#xff0c;编程规范都是提升代码质量、保障项目成功不可或缺的一环。 因此&#xff0c…

MySQL表设计经验汇总篇

文章目录 1、命名规范2、选择合适的字段类型3、主键设计要合理4、选择合适的字段长度5、优先考虑逻辑删除&#xff0c;而不是物理删除6、每个表都需要添加通用字段7、一张表的字段不宜过多8、定义字段尽可能not null9、合理添加索引10、通过业务字段冗余来减少表关联11、避免使…