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

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

文章目录

  • 摘要
  • 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、问题背景 在某些场景…

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 在正式介绍这些 …

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的康复中…

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

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

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

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

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

目 录 摘 要 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 系统…

前端应用开发实验:Vue的特性

目录 实验目的实验内容图片浏览功能代码实现效果 简单购物车功能代码实现效果 汇率换算功能代码实现效果 关于需要准备的内容&#xff0c;如Vue的下载就不多赘述了 实验目的 &#xff08;1&#xff09;掌握vue实例编写的语法和基本选项的使用 &#xff08;2&#xff09;在实际…

基于SpringBoot框架的校园二手交易系统的设计与实现(全套资料)

一、系统架构 前端&#xff1a;vue | element-plus 后端&#xff1a;springboot | mybatis-plus 环境&#xff1a;jdk17 | mysql | maven | node | redis 二、代码及数据库 三、功能介绍 01. 后台管理-登录页 02. 后台管理-首页 03. 后台管理-基础模块-用户管理 04. 后…

Java项目:61 ssm基于java的健身房管理系统的设计与实现+vue

作者主页&#xff1a;舒克日记 简介&#xff1a;Java领域优质创作者、Java项目、学习资料、技术互助 文中获取源码 项目介绍 基于ssm Vue的健身房管理系统 角色:管理员、用户、教练、游客 管理员:管理员登录系统后&#xff0c;可以对个人中心、会员管理、器材管理、课程管理…

JS核心知识点 - 赋值、浅拷贝、深拷贝。

一、理解基础数据类型和引用数据类型 基础数据类型&#xff1a; 字符串&#xff08;String&#xff09;&#xff1a;表示文本数据&#xff0c;使用引号括起来。数字&#xff08;Number&#xff09;&#xff1a;表示数值数据&#xff0c;包括整数和浮点数。布尔值&#xff08;Bo…

vulhub中Apache Shiro 认证绕过漏洞复现(CVE-2010-3863)

Apache Shiro是一款开源安全框架&#xff0c;提供身份验证、授权、密码学和会话管理。Shiro框架直观、易用&#xff0c;同时也能提供健壮的安全性。 在Apache Shiro 1.1.0以前的版本中&#xff0c;shiro 进行权限验证前未对url 做标准化处理&#xff0c;攻击者可以构造/、//、…

[ Linux ] vim的使用(附:命令模式的常见命令列表)

1.下载安装 这里是在通过yum进行下载安装 yum install -y vim 2.了解 vim是一款编辑器&#xff0c;它具有多模式的特点 主要有&#xff1a;插入模式&#xff0c;命令模式&#xff0c;底行模式 3.使用 打开 vim 文件名 命令模式的常见命令列表 插入模式 按「 i 」切换…

A Survey on Multimodal Large Language Models

目录 1. Introduction2. 概述方法多模态指令调优 3.1.1 简介3.1.2 预备知识3.1.3 模态对齐3.1.4 数据3.1.5 模态桥接3.1.6 评估 3.2.多模态情境学习3.3.多模态思维链3.3.1 模态桥接3.3.2 学习范式3.3.3 链配置3.3.4 生成模式3.4.LLMs辅助视觉推理3.4.1 简介3.4.2 训练范式3.4.3…

医疗隔离电源系统在医院配电系统应用分析

【摘要】根据医疗场所分类说明医院尤其是 2 类 医疗场所的接地方案&#xff0c;分析医疗场所自动切断电源措 施&#xff0c;提出校验医疗 IT 系统配出回路长度&#xff1b;说明 RCD、RCM、IMD、IFLS 等的用途和范围&#xff1b;就应急医 院 2 类场所的配电方案进行探讨。 【关…