带有超令牌采样的视觉转换器

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 摘要
  • Abstract
  • 文献阅读:带有超令牌采样的视觉转换器
    • 1、研究背景
    • 2、方法提出
    • 3、优势
    • 4、实验
    • 5、贡献
  • 二、StokenAttention代码学习


摘要

本周主要阅读了CVPR文章,带有超令牌采样的视觉转换器。该论文提出了一个名为SViT的方法,这是一种基于Transformer的模型,SViT主要由以下几个关键组件构成:卷积位置嵌入(CPE)、卷积FFN(ConvFFN)及空间注意力(STA)模块,通过在Transformer中引入卷积层,使得模型能够更好地利用局部信息,同时保持了Transformer对全局信息的建模能力。除此之外,还学习学习了StokenAttention的注意力模块代码的学习。

Abstract

This week, I mainly read the CVPR article on a visual transformer with super-token sampling. The paper proposes a method called SViT, which is a Transformer-based model. SViT mainly consists of the following key components: convolutional position embedding CPE, convolutional FFN ConvFFN, and spatial attention STA module. By introducing convolutional layers into the Transformer, the model can better utilize local information while maintaining the Transformer’s ability to model global information. In addition, I also learned the attention module code of StokenAttention.


文献阅读:带有超令牌采样的视觉转换器

Title: Vision Transformer with Super Token Sampling
Author:Huaibo Huang, Xiaoqiang Zhou,Jie Cao, Ran He, Tieniu Tan
From:2023 IEEE/CVF Conference on Computer Vision and Pattern Recognition (CVPR)

1、研究背景

Transformer在许多视觉任务上取得了令人印象深刻的性能,比如Vision Transformer(ViT)。然而,它可能在捕捉浅层特征时遭受高冗余,使用自注意力机制,其计算复杂度与输入序列的长度平方成正比,在处理高分辨率图像时,计算成本较高。因此,使用局部自注意力或早期卷积,但牺牲了捕捉长距离依赖的能力。然后出现了一个挑战:能否在神经网络的早期阶段获得高效和有效的全局上下文建模?

2、方法提出

文中提出了一个名为SViT的方法,这是一种基于Transformer的模型,SViT(Spatially Variant Transformer)是一种针对图像分割任务的基于Transformer的模型。它主要由以下几个关键组件构成:

  • 卷积位置嵌入(CPE):CPE用于在特征中添加位置信息,这对于Transformer模型来说至关重要。CPE通过将位置编码与原始特征进行逐元素相加,使得模型能够捕捉到不同位置的信息。实验结果显示,CPE能提高模型的性能,因为它更加灵活,适用于任意分辨率的输入。
  • 卷积FFN(ConvFFN):ConvFFN是一种用于增强局部特征的模块。它通过使用3x3卷积核对特征进行处理,从而提取更丰富的局部信息。此外,ConvFFN中还使用了shortcut连接,有助于提高最终的性能。
  • 空间注意力(STA)模块:STA模块用于提取全局上下文表示。它通过高效地探索和充分利用长范围依赖关系,使得模型能够更好地理解图像中的全局上下文信息。
    在这里插入图片描述

3、优势

Spatially Variant Transformer(SVT)和Vision Transformer(ViT)都是基于Transformer架构的视觉模型,但它们在处理图像数据时具有不同的特点和优势。以下是Spatially Variant Transformer相比ViT的一些潜在优势:

  • 融合局部和全局信息:SViT结合了卷积神经网络(CNN)和Transformer的优点,能够同时捕捉局部和全局上下文信息。它通过在Transformer中引入卷积层,使得模型能够更好地利用局部信息,同时保持了Transformer对全局信息的建模能力。
  • 空间变化性:SViT通过引入空间变化性,使得模型能够更好地适应不同场景中的空间变化。这使得模型在处理具有复杂结构和多样性的图像时具有更好的鲁棒性。
  • 高效的注意力机制:SViT采用了 deformable attention机制,这是一种可变形的注意力机制,能够以更高效的方式建模图像中的长距离依赖关系。这使得模型在处理具有复杂结构的图像时具有更高的效率。如下图所示,相比其他模型,SViT能更好地捕捉注意力信息。
  • 结构简单且易于实现:SViT的结构相对简单,易于实现和优化。相比于其他复杂的Transformer架构,SViT具有更高的计算效率和更少的参数数量。
    在这里插入图片描述

4、实验

文中进行了广泛的视觉任务上的实验,包括在ImageNet-1K 上进行图像分类,在COCO 2017 [28]上进行物体检测和实例分割,以及在ADE20K 上进行语义分割。除此之外还进行了消融研究,以检查每个组件的作用。

  • 图像分类:在ImageNet-1K数据集上进行图像分类实验,与现有最先进的模型进行比较。实验结果表明,我们的Super Vision Transformer(SViT)在准确度方面具有竞争力,同时拥有22%更少的浮点运算次数(FLOPs)和两倍的速度。这说明SViT在图像分类任务中表现出色,并且计算效率较高。
    在这里插入图片描述

  • 目标检测和实例分割:在COCO 2017数据集上进行目标检测和实例分割实验。实验结果进一步验证了我们方法的有效性,表明SViT不仅在图像分类任务中表现良好,而且在目标检测和实例分割任务中也有较好的性能。
    在这里插入图片描述
    在这里插入图片描述

  • Ablation Study:我们进行了消融研究,以检查SViT每个组件的作用。实验结果表明,超级令牌(super tokens)具有不同的模式,从而降低了局部冗余。提出的超级令牌注意力(super token attention)将原始全局注意力(global attention)分解为乘法,有助于提高目标检测的准确性。这说明SViT的关键组件对于提高模型性能具有重要影响。
    在这里插入图片描述

5、贡献

文章的贡献主要在于提出了一种新的图像分割方法——SViT。该方法通过将图像分割成固定大小的不重叠块,并将每个块展平成一个向量,然后利用Transformer对这些向量进行处理,从而实现在全局范围内的上下文建模。实验结果表明,SViT在多个图像分割任务中均取得了优于现有方法的性能,证明了其有效性。此外,文中还进行了详细的消融实验,探究了SViT中各组件的作用和效果。

二、StokenAttention代码学习


```clike
class StokenAttention(nn.Module):def __init__(self, dim, stoken_size, n_iter=1, num_heads=8, qkv_bias=False, qk_scale=None, attn_drop=0.,proj_drop=0.):"""Args:dim (int): 特征维度。stoken_size (tuple): stoken的尺寸,格式为 (height, width)。n_iter (int): 迭代次数,默认为1。num_heads (int): 注意力头的数量,默认为8。qkv_bias (bool): 是否允许查询、键和值的偏置。qk_scale (float or None): 查询和键的缩放因子,默认为None。attn_drop (float): 注意力得分的dropout率,默认为0.0。proj_drop (float): 用于投影的dropout率,默认为0.0"""super().__init__()# 初始化参数self.n_iter = n_iterself.stoken_size = stoken_sizeself.scale = dim ** - 0.5# 定义展开(unfold)和折叠(fold)操作self.unfold = nn.Unfold(3)self.fold = nn.Fold(3)# 定义用于精细化stoken的注意力模块self.stoken_refine = Attention(dim, num_heads=num_heads, qkv_bias=qkv_bias, qk_scale=qk_scale,attn_drop=attn_drop, proj_drop=proj_drop)def stoken_forward(self, x):'''执行图像处理中stoken的前向传播。Args:x (torch.Tensor): 输入图像张量,尺寸为 (B, C, H, W),其中B为批大小,C为通道数,H为高度,W为宽度。Returns:torch.Tensor: 处理后的图像张量。'''B, C, H0, W0 = x.shapeh, w = self.stoken_size# 计算填充数量pad_l = pad_t = 0pad_r = (w - W0 % w) % wpad_b = (h - H0 % h) % h# 执行填充操作if pad_r > 0 or pad_b > 0:x = F.pad(x, (pad_l, pad_r, pad_t, pad_b))_, _, H, W = x.shapehh, ww = H // h, W // w# 提取stoken特征和像素级特征stoken_features = F.adaptive_avg_pool2d(x, (hh, ww))  # (B, C, hh, ww)pixel_features = x.reshape(B, C, hh, h, ww, w).permute(0, 2, 4, 3, 5, 1).reshape(B, hh * ww, h * w, C)# 计算关联矩阵with torch.no_grad():for idx in range(self.n_iter):stoken_features = self.unfold(stoken_features)  # (B, C*9, hh*ww)stoken_features = stoken_features.transpose(1, 2).reshape(B, hh * ww, C, 9)affinity_matrix = pixel_features @ stoken_features * self.scale  # (B, hh*ww, h*w, 9)affinity_matrix = affinity_matrix.softmax(-1)  # (B, hh*ww, h*w, 9)affinity_matrix_sum = affinity_matrix.sum(2).transpose(1, 2).reshape(B, 9, hh, ww)affinity_matrix_sum = self.fold(affinity_matrix_sum)if idx < self.n_iter - 1:stoken_features = pixel_features.transpose(-1, -2) @ affinity_matrix  # (B, hh*ww, C, 9)stoken_features = self.fold(stoken_features.permute(0, 2, 3, 1).reshape(B * C, 9, hh, ww)).reshape(B, C, hh, ww)stoken_features = stoken_features / (affinity_matrix_sum + 1e-12)  # (B, C, hh, ww)# 更新stoken特征stoken_features = pixel_features.transpose(-1, -2) @ affinity_matrix  # (B, hh*ww, C, 9)stoken_features = self.fold(stoken_features.permute(0, 2, 3, 1).reshape(B * C, 9, hh, ww)).reshape(B, C, hh, ww)stoken_features = stoken_features / (affinity_matrix_sum.detach() + 1e-12)  # (B, C, hh, ww)# 对stoken特征进行精细化stoken_features = self.stoken_refine(stoken_features)# 折叠stoken特征得到像素级特征stoken_features = self.unfold(stoken_features)  # (B, C*9, hh*ww)stoken_features = stoken_features.transpose(1, 2).reshape(B, hh * ww, C, 9)  # (B, hh*ww, C, 9)pixel_features = stoken_features @ affinity_matrix.transpose(-1, -2)  # (B, hh*ww, C, h*w)pixel_features = pixel_features.reshape(B, hh, ww, C, h, w).permute(0, 3, 1, 4, 2, 5).reshape(B, C, H, W)# 去除填充if pad_r > 0 or pad_b > 0:pixel_features = pixel_features[:, :, :H0, :W0]return pixel_featuresdef direct_forward(self, x):"""执行直接处理的前向传播。Args:x (torch.Tensor): 输入张量。Returns:torch.Tensor: 处理后的张量。"""B, C, H, W = x.shapestoken_features = xstoken_features = self.stoken_refine(stoken_features)return stoken_featuresdef forward(self, x):"""执行前向传播。Args:x (torch.Tensor): 输入张量。Returns:torch.Tensor: 处理后的张量。"""if self.stoken_size[0] > 1
---# 总结
本周主要阅读了CVPR文章,带有超令牌采样的视觉转换器。该论文提出了一个名为SViT的方法,这是一种基于Transformer的模型,SViT主要由以下几个关键组件构成:卷积位置嵌入(CPE)、卷积FFN(ConvFFN)及空间注意力(STA)模块,通过在Transformer中引入卷积层,使得模型能够更好地利用局部信息,同时保持了Transformer对全局信息的建模能力。除此之外,还学习学习了StokenAttention的注意力模块代码的学习。下周继续努力!

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

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

相关文章

Elasticsearch数据存储优化方案

优化Elasticsearch数据存储有助于提升系统性能、降低成本、提高数据查询效率以及增强系统的稳定性和可靠性。通常我们再优化Elasticsearch数据存储会遇到一些问题&#xff0c;导致项目卡壳。以下是优化Elasticsearch数据存储的一些重要作用&#xff1a; 1、问题背景 在某些场景…

ARTS Week 21

Algorithm 本周的算法题为 565. 数组嵌套 索引从0开始长度为N的数组A&#xff0c;包含0到N - 1的所有整数。找到最大的集合S并返回其大小&#xff0c;其中 S[i] {A[i], A[A[i]], A[A[A[i]]], ... }且遵守以下的规则。 假设选择索引为i的元素A[i]为S的第一个元素&#xff0c;S…

AI系统性学习03—ChatGPT开发教程

文章目录 1、OpenAI关键概念⭐️2、OpenAI SDK介绍3、OpenAI API KEY&API 认证3.1 REST API安全认证 4、OpenAI模型⭐️4.1 模型分类4.2 GPT44.3 GPT-3.54.4 Embeddings 5、OpenAI快速入门6、Function calling(函数调用)⭐️⭐️⭐️6.1 应用场景6.2 支持function calling的…

打破传统,拥抱未来:解锁企业数字化转型成功的11把金钥匙

数字化转型是一个持续的过程&#xff0c;需要企业不断地适应新技术和市场变化。企业如何提高转型成功的可能性&#xff0c;并在竞争激烈的市场中保持领先地位。今天我们来解锁企业数字化转型成功的11把金钥匙。 清晰的战略目标&#xff1a; 首先&#xff0c;企业需要明确数字化…

如何高效接入 Flink: Connecter / Catalog API 核心设计与社区进展

本文整理自阿里云实时计算团队 Apache Flink Committer 和 PMC Member 任庆盛在 FFA 2023 核心技术专场&#xff08;二&#xff09;中的分享&#xff0c;内容主要分为以下四部分&#xff1a; Source APISink API将 Connecter 集成至 Table /SQL APICatalog API 在正式介绍这些 …

Vue3项目随笔

目录 富文本编辑器 [ vue-quill ]的使用步骤 1&#xff0c;安装包 2&#xff0c;注册成局部组件 3&#xff0c;页面中绑定使用 4&#xff0c;样式美化 5&#xff0c;涉及表单内容 富文本内容的清空 富文本编辑器 [ vue-quill ]的使用步骤 1&#xff0c;安装包 pnpm add…

CornerStone之读取txt文件点数据

1. 页面标签 页面中目前只提供一个按钮来进行输入文件 <input click"importZeroOne" type"file" />2. 函数定义 在输入文件之后&#xff0c;执行importZeroOne函数&#xff0c;获得输入的文件&#xff0c;进行以下处理 const importZeroOne((eve…

Vue-Vuex

文章目录 vuex是什么什么时候使用Vuex原理Vuex环境搭建实例操作 vuex是什么 1.专门在vue中实现集中式状态&#xff08;数据&#xff09;管理的一个vue插件&#xff0c;对vue应用中多个组件的共享状态进行集中式的管理&#xff08;读/写&#xff09;&#xff0c;也是一种组件之…

【Django框架学习笔记】超详细的Python后端开发Django框架学习笔记

十二&#xff0c;Django框架 可以以下链接获取Django框架学习笔记,md文档和pdf文档 Django框架超详细的学习笔记&#xff0c;点击我获取 12.1 命令行操作 # 创建django项目 django-admin startproject aini# 启动项目 cd /mysite python3 manage.py runserver## 创建应用 …

23双体系Java学习之字符串的常用操作和==,equals的区别

字符串的常用操作 toCharArray的基本用法&#xff0c;将字符串转变成数组 String str "Hello, World!"; char[] charArray str.toCharArray(); charAt的基本用法 &#xff0c;接受一个整数索引作为参数&#xff0c;并返回该索引位置的字符。 String str "…

Vue+SpringBoot打造康复中心管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 普通用户模块2.2 护工模块2.3 管理员模块 三、系统展示四、核心代码4.1 查询康复护理4.2 新增康复训练4.3 查询房间4.4 查询来访4.5 新增用药 五、免责说明 一、摘要 1.1 项目介绍 基于JAVAVueSpringBootMySQL的康复中…

如何高效测试Mybatis?(xxxMapper)

目录 一、背景二、对Dao层进行单元测试1 低效的方式1.1 使用SpringBootTest&#xff1a;1.2 其他低效的方式 2 高效的方式2.1 示例&#xff08;报错&#xff1a;Failed to replace DataSource with an embedded database for tests&#xff09;2.2 解决办法2.2.1 禁用自动配置的…

蚁群算法实现 - 全局路径规划算法

参考博客&#xff1a; &#xff08;1&#xff09;【人工智能】蚁群算法(密恐勿入) &#xff08;2&#xff09;计算智能——蚁群算法 &#xff08;3&#xff09;蚁群算法(实例帮助理解) &#xff08;4&#xff09;【数之道 04】解决最优路径问题的妙招-蚁群ACO算法 &#xff08;…

uboot启动内核和根文件系统:通过dhcp设置bootcmd和bootargs来自动获取ip地址

uboot启动内核和根文件系统&#xff1a;通过dhcp设置bootcmd和bootargs来自动获取ip地址 一.问题描述&#xff1a; 首先我提前给ipaddr环境变量赋值为主机同一网段的任意一个ip&#xff08;就是根据自己的意愿随便挑了一个ip地址&#xff09;&#xff1a;192.168.0. 然后昨天…

Dubbo(一)

RPC框架 不仅具备RPC访问功能&#xff0c;还具备服务治理功能 2.5.3 2.7.3 Provider 提供者。编写持久层和事务代码 registry&#xff1a;Provider的ip 端口 协议 接口中的方法 consumer&#xff0c;service、controller monitor&#xff1a; dubbo支持的协议&#xff1a; Du…

深度学习中的温度参数(Temperature Parameter)是什么?

文章目录 Temperature Parameter1.背景知识2.引入Temperature Parameter3.Temperature是如何影响学习的&#xff1f; Temperature Parameter 1.背景知识 标准的深度学习模型具有一堆卷积、池化、全连接层&#xff0c;然后是最终的全连接层。最后的全连接层输出一个与类数大小…

2024-3-17Go语言入门

在Go语言中&#xff1a; var a chan int 定义了一个名为 a 的变量&#xff0c;其类型为 chan int。这意味着 a 是一个整型值的通道&#xff08;channel&#xff09;。通道是Go语言中用于goroutine之间通信的一种机制&#xff0c;你可以通过通道发送和接收特定类型的值。在这个例…

【计算机网络篇】物理层(2)传输方式

文章目录 &#x1f354;传输方式⭐串行传输和并行传输⭐同步传输和异步传输&#x1f388;同步传输&#x1f388;异步传输 ⭐单向通信&#xff0c;双向交替通信和双向同时通信 &#x1f354;传输方式 在物理层中&#xff0c;传输方式是指数据在传输介质中传输的方式和方法。常见…

RS编码性能测试

RS编码 基本知识 网上一大堆的介绍&#xff0c;这里不做复制和粘贴了。 这里针对RS编码在我的实际项目上的性能测试。 1、算法选择 RS&#xff08;255&#xff0c;239&#xff09;编码在255个符号中添加了16个纠错符号&#xff0c;这意味着它可以纠正多达8个错误符号&#xf…

基于单片机的灭火机器人设计

目 录 摘 要 I Abstract II 引 言 1 1 系统方案设计 4 1.1 方案论证 4 1.2 灭火机器人系统工作原理 4 2 系统硬件设计 6 2.1 单片机 6 2.2 火焰探测系统设计 8 2.3 灭火系统设计 8 2.4 循迹模块设计 9 2.5 电机驱动模块 10 3 系统软件设计 12 3.1 系统软件开发环境 12 3.2 系统…