上下文注意力 CoT Attention | Contextual Transformer Networks for Visual Recognition

本文主要是介绍上下文注意力 CoT Attention | Contextual Transformer Networks for Visual Recognition,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在这里插入图片描述

论文名称:《Contextual Transformer Networks for Visual Recognition》

论文地址:https://arxiv.org/pdf/2107.12292.pdf

代码地址:https://github.com/JDAI-CV/CoTNet


具备自注意力机制的 Transformer 已经引领了自然语言处理领域的革命,并且最近也在许多计算机视觉任务中以出色的结果启发了类似 Transformer 风格的架构设计的出现。然而,大多数现有设计直接在二维特征图上使用自注意力来基于每个空间位置的孤立查询和键对获取注意力矩阵,但却未充分利用相邻键之间的丰富上下文信息。在这项工作中,我们设计了一种新颖的 Transformer 风格模块,即上下文 Transformer (CoT)块,用于视觉识别。这种设计充分利用了输入键之间的上下文信息,以引导动态注意力矩阵的学习,从而增强了视觉表示的能力。在技术上,CoT块首先通过3×3卷积对输入键进行上下文编码,从而得到输入的静态上下文表示。我们进一步将编码的键与输入查询连接起来,通过两个连续的 1×1 卷积学习动态多头注意力矩阵。学得的注意力矩阵与输入值相乘,以实现输入的动态上下文表示。最终将静态和动态上下文表示的融合作为输出。从视角上看,我们的 CoT 块具有吸引力,因为它可以很容易地替换ResNet架构中的每个 3×3 卷积,从而得到一个名为上下文Transformer网络(CoT-Net)Transformer风格主干。通过广泛的实验证明了CoT-Net作为更强大主干网络的优越性,涵盖了各种应用领域(例如图像识别、目标检测和实例分割)。


问题背景

传统的自注意力机制在视觉识别任务中表现良好,但在二维特征图上通常忽视了相邻键之间的丰富上下文。这可能导致特征表示不够丰富,尤其是对于需要长距离交互的任务。因此,为了解决这个问题,Contextual Transformer (CoT) 提出了一种新的变压器模块,旨在充分利用输入键之间的上下文信息来指导动态注意力矩阵的学习。


核心概念

CoT 模块的核心理念是结合卷积和自注意力机制,利用3×3卷积在输入键中提取静态上下文信息,然后通过两个连续的1×1卷积在动态多头自注意力矩阵上进行操作。这种方法融合了静态和动态的上下文信息,使得注意力矩阵更能适应输入特征图中的各种模式,从而增强特征表示能力。


模块的操作步骤


在这里插入图片描述

传统自注意力机制与我们的上下文变换器 (CoT) 模块的比较:(a) 传统的自注意力机制仅利用孤立的查询-键值对来计算注意力矩阵,忽略了键值之间丰富的上下文关系。相比之下,(b) CoT 模块首先通过 3×3 卷积挖掘键值之间的静态上下文。接着,基于查询和上下文化的键值,利用两个连续的 1×1 卷积来执行自注意力,产生动态上下文。静态和动态上下文最终融合为输出。


CoT模块的操作步骤包括以下几个关键环节:

  1. 上下文编码:使用3×3卷积在输入键上提取静态上下文,生成静态上下文表示。
  2. 动态多头注意力:将上下文编码后的键与输入查询连接,然后使用两个连续的1×1卷积来学习动态多头注意力矩阵。
  3. 上下文融合:将动态多头注意力矩阵与输入值相乘,以获得动态上下文表示。最后,将静态和动态上下文融合以作为最终输出。

文章贡献

本文的主要贡献在于提出了一种新的Transformer模块,称为Contextual Transformer (CoT),它可以通过上下文信息来指导自注意力的学习。这种模块在不增加参数和计算负担的情况下,可以增强视觉表示能力。CoT模块可以轻松替换ResNet架构中的3×3卷积,从而创建一种新的Contextual Transformer Networks (CoTNet)。实验结果表明,这种模块在图像识别、目标检测和实例分割等任务中表现出色。


实验结果与应用

实验结果显示,CoTNet在多种计算机视觉任务中取得了优异的性能。在ImageNet图像识别任务中,CoTNettop-1top-5准确率上超过了许多其他骨干网络。对于目标检测和实例分割任务,CoTNetCOCO数据集上的表现也非常出色,进一步验证了这种模块的通用性和有效性。


对未来工作的启示

CoT模块的成功展示了通过上下文信息来增强自注意力的潜力。未来的研究可以进一步探索在不同的网络架构中应用这种机制,或者将其与其他注意力机制相结合。此外,研究人员还可以考虑将这种方法应用于其他领域,如自然语言处理和音频分析,以进一步拓展其应用范围。


代码

import numpy as np
import torch
from torch import flatten, nn
from torch.nn import init
from torch.nn.modules.activation import ReLU
from torch.nn.modules.batchnorm import BatchNorm2d
from torch.nn import functional as Fclass CoTAttention(nn.Module):def __init__(self, dim=512, kernel_size=3):super().__init__()self.dim = dimself.kernel_size = kernel_sizeself.key_embed = nn.Sequential(nn.Conv2d(dim,dim,kernel_size=kernel_size,padding=kernel_size // 2,groups=4,bias=False,),nn.BatchNorm2d(dim),nn.ReLU(),)self.value_embed = nn.Sequential(nn.Conv2d(dim, dim, 1, bias=False), nn.BatchNorm2d(dim))factor = 4self.attention_embed = nn.Sequential(nn.Conv2d(2 * dim, 2 * dim // factor, 1, bias=False),nn.BatchNorm2d(2 * dim // factor),nn.ReLU(),nn.Conv2d(2 * dim // factor, kernel_size * kernel_size * dim, 1),)def forward(self, x):bs, c, h, w = x.shapek1 = self.key_embed(x)  # bs,c,h,wv = self.value_embed(x).view(bs, c, -1)  # bs,c,h,wy = torch.cat([k1, x], dim=1)  # bs,2c,h,watt = self.attention_embed(y)  # bs,c*k*k,h,watt = att.reshape(bs, c, self.kernel_size * self.kernel_size, h, w)att = att.mean(2, keepdim=False).view(bs, c, -1)  # bs,c,h*wk2 = F.softmax(att, dim=-1) * vk2 = k2.view(bs, c, h, w)return k1 + k2if __name__ == "__main__":input = torch.randn(64, 256, 8, 8)model = CoTAttention(dim=256, kernel_size=3)output = model(input)print(output.shape)

这篇关于上下文注意力 CoT Attention | Contextual Transformer Networks for Visual Recognition的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Visual Studio中,MSBUild版本问题

假如项目规定了MSBUild版本,那么在安装完Visual Studio后,假如带的MSBUild版本与项目要求的版本不符合要求,那么可以把需要的MSBUild添加到系统中,然后即可使用。步骤如下:            假如项目需要使用V12的MSBUild,而安装的Visual Studio带的MSBUild版本为V14。 ①到MSDN下载V12 MSBUild包,把V12包解压到目录(

多头注意力机制(Multi-Head Attention)

文章目录 多头注意力机制的作用多头注意力机制的工作原理为什么使用多头注意力机制?代码示例 多头注意力机制(Multi-Head Attention)是Transformer架构中的一个核心组件。它在机器翻译、自然语言处理(NLP)等领域取得了显著的成功。多头注意力机制的引入是为了增强模型的能力,使其能够从不同的角度关注输入序列的不同部分,从而捕捉更多层次的信息。 多头注意力机

2025秋招NLP算法面试真题(二)-史上最全Transformer面试题:灵魂20问帮你彻底搞定Transformer

简单介绍 之前的20个问题的文章在这里: https://zhuanlan.zhihu.com/p/148656446 其实这20个问题不是让大家背答案,而是为了帮助大家梳理 transformer的相关知识点,所以你注意看会发现我的问题也是有某种顺序的。 本文涉及到的代码可以在这里找到: https://github.com/DA-southampton/NLP_ability 问题

Visual Studio开发环境搭建

原文:https://blog.c12th.cn/archives/25.html Visual Studio开发环境搭建 测试:笔记本原装操作系统:Windows 10 家庭中文版 资源分享链接:提取码:qbt2 注意事项:注意查看本地硬盘是否够用,建议预留4G左右空间。 教程 安装Visual studio 2010 找到并解压 “VS2010中文旗舰版”

算是一些Transformer学习当中的重点内容

一、基础概念         Transformer是一种神经网络结构,由Vaswani等人在2017年的论文Attentions All YouNeed”中提出,用于处理机器翻译、语言建模和文本生成等自然语言处理任务。Transformer同样是encoder-decoder的结构,只不过这里的“encoder”和“decoder”是由无数个同样结构的encoder层和decoder层堆叠组成

Program-of-Thoughts(PoT):结合Python工具和CoT提升大语言模型数学推理能力

Program of Thoughts Prompting:Disentangling Computation from Reasoning for Numerical Reasoning Tasks github:https://github.com/wenhuchen/Program-of-Thoughts 一、动机 数学运算和金融方面都涉及算术推理。先前方法采用监督训练的形式,但这种方

越复杂的CoT越有效吗?Complexity-Based Prompting for Multi-step Reasoning

Complexity-Based Prompting for Multi-step Reasoning 论文:https://openreview.net/pdf?id=yf1icZHC-l9 Github:https://github.com/FranxYao/chain-of-thought-hub 发表位置:ICLR 2023 Complexity-Based Prompting for

python库安装出现Microsoft Visual C++ 14.0 required问题解决

出现上述错误,最简单的方法就是安装c++2015即可,然而网上乱七八糟的软件下载,下面提供百度云盘链接,直接下载安装即可用。 点击下载 安装到电脑即可。

Simple-STNDT使用Transformer进行Spike信号的表征学习(一)数据处理篇

文章目录 1.数据处理部分1.1 下载数据集1.2 数据集预处理1.3 划分train-val并创建Dataset对象1.4 掩码mask操作 数据、评估标准见NLB2021 https://neurallatents.github.io/ 以下代码依据 https://github.com/trungle93/STNDT 原代码使用了 Ray+Config文件进行了参数搜

在Mac OS上使用Visual Studio Code创建C++ Qt的Hello World应用

引言 Qt是一个跨平台的应用程序和用户界面框架,而Visual Studio Code是一个功能强大的编辑器,两者结合可以极大地提升开发效率。本文将指导你在Mac OS上使用Visual Studio Code创建一个简单的Qt 'Hello World'窗口应用。 环境准备 确保你的MacBook OS运行最新的操作系统。安装Homebrew,Mac OS的包管理器。通过Homebrew安装