计算机视觉中自注意力构建块的PyTorch实现

使用PyTorch实现自注意力机制原理详解与代码实战 自注意力机制因其强大的序列建模能力,已被广泛应用于自然语言处理、计算机视觉乃至蛋白质结构预测等领域。它不仅解决了RNN系列模型难以并行计算和捕捉长距离依赖的问题,还因其灵活性成为了现代深度学习架构的基石。理解并熟练实现自注意力机制,是深入掌握前沿深度学习模型的关键一步。 阅读详情

作者:AI Summer

编译:ronghuaiyang

导读

一个非常好用的git仓库,封装了非常全面的计算机视觉中的自注意力构建块,直接调用,无需重复造轮子了。

git仓库地址:https://github.com/The-AI-Summer/self-attention-cv

用einsum和einops在PyTorch中实现计算机视觉的自我注意机制。专注于计算机视觉自注意模块。

使用 pip 安装
$ pip install self-attention-cv

如果你没有GPU,最好是在环境中预装好pytorch。

相关的文章

  • How Attention works in Deep Learning

  • How Transformers work in deep learning and NLP

  • How the Vision Transformer (ViT) works in 10 minutes: an image is worth 16x16 words

  • Understanding einsum for Deep learning: implement a transformer with multi-head self-attention from scratch

  • How Positional Embeddings work in Self-Attention

示例代码

Multi-head attention
import torch
from self_attention_cv import MultiHeadSelfAttention

model = MultiHeadSelfAttention(dim=64)
x = torch.rand(16, 10, 64)  # [batch, tokens, dim]
mask = torch.zeros(10, 10)  # tokens X tokens
mask[5:8, 5:8] = 1
y = model(x, mask)
Axial attention
import torch
from self_attention_cv import AxialAttentionBlock
model = AxialAttentionBlock(in_channels=256, dim=64, heads=8)
x = torch.rand(1, 256, 64, 64)  # [batch, tokens, dim, dim]
y = model(x)
Vanilla Transformer Encoder
import torch
from self_attention_cv import TransformerEncoder
model = TransformerEncoder(dim=64,blocks=6,heads=8)
x = torch.rand(16, 10, 64)  # [batch, tokens, dim]
mask = torch.zeros(10, 10)  # tokens X tokens
mask[5:8, 5:8] = 1
y = model(x,mask)
Vision Transformer使用ResNet50主干做图像分类
import torch
from self_attention_cv import ViT, ResNet50ViT

model1 = ResNet50ViT(img_dim=128, pretrained_resnet=False, 
                        blocks=6, num_classes=10, 
                        dim_linear_block=256, dim=256)
# or
model2 = ViT(img_dim=256, in_channels=3, patch_dim=16, num_classes=10,dim=512)
x = torch.rand(2, 3, 256, 256)
y = model2(x) # [2,10]
使用Vision Transformer编码器的Unet的复现
import torch
from self_attention_cv.transunet import TransUnet
a = torch.rand(2, 3, 128, 128)
model = TransUnet(in_channels=3, img_dim=128, vit_blocks=8,
vit_dim_linear_mhsa_block=512, classes=5)
y = model(a) # [2, 5, 128, 128]
Bottleneck Attention block
import torch
from self_attention_cv.bottleneck_transformer import BottleneckBlock
inp = torch.rand(1, 512, 32, 32)
bottleneck_block = BottleneckBlock(in_channels=512, fmap_size=(32, 32), heads=4, out_channels=1024, pooling=True)
y = bottleneck_block(inp)

位置嵌入可用

1D Positional Embeddings
import torch
from self_attention_cv.pos_embeddings import AbsPosEmb1D,RelPosEmb1D

model = AbsPosEmb1D(tokens=20, dim_head=64)
# batch heads tokens dim_head
q = torch.rand(2, 3, 20, 64)
y1 = model(q)

model = RelPosEmb1D(tokens=20, dim_head=64, heads=3)
q = torch.rand(2, 3, 20, 64)
y2 = model(q)
2D Positional Embeddings
import torch
from self_attention_cv.pos_embeddings import RelPosEmb2D
dim = 32  # spatial dim of the feat map
model = RelPosEmb2D(
    feat_map_size=(dim, dim),
    dim_head=128)

q = torch.rand(2, 4, dim*dim, 128)
y = model(q)

参考文献

  1. Vaswani, A., Shazeer, N., Parmar, N., Uszkoreit, J., Jones, L., Gomez, A. N., ... & Polosukhin, I. (2017). Attention is all you need. arXiv preprint arXiv:1706.03762.

  2. Wang, H., Zhu, Y., Green, B., Adam, H., Yuille, A., & Chen, L. C. (2020, August). Axial-deeplab: Stand-alone axial-attention for panoptic segmentation. In European Conference on Computer Vision (pp. 108-126). Springer, Cham.

  3. Srinivas, A., Lin, T. Y., Parmar, N., Shlens, J., Abbeel, P., & Vaswani, A. (2021). Bottleneck Transformers for Visual Recognition. arXiv preprint arXiv:2101.11605.

  4. Dosovitskiy, A., Beyer, L., Kolesnikov, A., Weissenborn, D., Zhai, X., Unterthiner, T., ... & Houlsby, N. (2020). An image is worth 16x16 words: Transformers for image recognition at scale. arXiv preprint arXiv:2010.11929.

—END—

英文原文:https://github.com/The-AI-Summer/self-attention-cv

从代码学习深度学习 - 自注意力和位置编码 PyTorch 版 深度学习近年来在自然语言处理、计算机视觉等领域取得了巨大成功,而 Transformer 模型无疑是其中的明星架构。自注意力和位置编码作为 Transformer 的两大核心组件,不仅赋予了模型强大的序列建模能力,还推动了 BERT、GPT 等模型的广泛应用。然而,理解这些概念的理论公式往往令人望而生畏,直接从代码入手则能让学习过程更加直观和有趣。在这篇博客中,我们将基于 PyTorch,通过分析提供的代码文件(以及一个 Jupyter 笔记本),深入探讨自注意力机制和位置编码的实现细节。 阅读详情

相关推荐

【深度学习|Transformer模型学习】基于pytorch的Transformer 块代码实现及解释!快来看看吧

【深度学习|Transformer模型学习】基于pytorch的Transformer 块代码实现及解释!快来看看吧

985小水博的摸鱼日常 961

pytorch实现自注意力(self-attention)

import torch import torch.nn as nn import torch.nn.functional as F class Attention_Layer(nn.Module): #用来实现mask-attention layer def __init__(self, hidden_dim, is_bi_rnn): super(Attention_Layer,self).__init__() self.hi

qq_41626059的博客 1万+

TransUNet pytorch实现

TransUNet pytorch实现

An Attention Free Transformer论文参考文献

中文翻译:[13] 科罗曼斯基, K., 利霍舍尔托夫, V., 多汉, D., 宋, X., 盖恩, A., 萨洛斯, T., 霍金斯, P., 戴维斯, J., 莫希乌丁, A., 凯撒, L., 贝兰杰, D., 科尔韦尔, L., & 韦勒, A. (2020). 用表演者重新思考注意力。中文翻译:[1] 瓦斯瓦尼, A., 沙泽尔, N., 帕尔马, N., 乌斯基奥雷特, J., 琼斯, L., 戈麦斯, A. N., 凯撒, Ł., & 波洛苏金, I. (2017). 注意力就是一切。

hello! 1918

30种常见注意力机制论文、解读、使用方法、实现代码整理(Attention)

30种常见注意力机制论文、解读、使用方法、实现代码整理(Attention)

苹果搜索广告ASA开户教程

阅读导航 一、创建账号 1、登录网站 2、填写账号主体信息 3、填写商家和发票信息 4、选择付款方式 二、上传审核材料 1、上传文件 2、请求审批 3、上传文件中的常见问题 一、创建账号 1、用Apple ID登录ASA网站 首先我们进入开户网址:https://app-ads.apple.com/ 如果已拥有Apple ID,直接登录即可,如果没有Apple ID,可以先按照步骤创建Apple ID,再返回登录。 注意,这里登录的Apple ID也有讲究: ① 如果是开发

testflight121的博客 2131

Attention Is All You Need

文章目录概主要内容Positional Encodingauto_regressive额外的细节代码 Vaswani A., Shazeer N., Parmar N., Uszkoreit J., Jones L., Gomez A. N., and Kaiser L. Attention is all you need. In Advances in Neural Information Processing Systems (NIPS), 2017. 概 Transformer. 主要内容 [外链

MTandHJ的博客 1108

ETL基础概念及要求详解

ETL即Extract(抽取)Transform(转换)Load(装载)的过程,如下图,同时也包括数据清洗的部分,是数据从源端到目标端的一个数据处理的过程,是构建数据仓库的重要一环,但不局限于构建数据仓库其他BI(商业智能)的设计和开发数据分析平台也经常用到ETL。

qq_43605229的博客 8947

A ConvNet for the 2020s 论文解读

引言 ViT提出之后(只针对分类任务),Swin Transform 在图像领域(分类下游任务)的全面大幅度超越 CNN 模型, 仿佛印证了 Attetion 论文中 “Attention Is All You Need ”。当读到 Attetion 论文中这句话时,不自觉的回忆起电视剧中,释迦摩尼出生时,一手指天,一手指地,然道:“天上地下 ,唯我独尊”。 ConVNeXt 这篇文章,通过借鉴 swin TransForm 精心构建的 tricks,卷积在图像领域反超 Transform。这些技巧对分

qq_42105426的博客 6005

vos如何对接okcc(保姆级教程)

1.添加账户 点击 系统->账户管理 [图片] 2.创建费率 系统->费率管理 点击添加

qq_46333281的博客 3455

Plaxis软件简介及 Plaxis Python API环境搭建、自动化建模、Python全自动实现、高级案例分析

本次课程主要针对岩土工程中的各种问题(塑性、渗流、固结、动力、稳定安全、热力TM),用四天时间,教大家如何一步一步地搭建自己的Plaxis模型,包括Plaxis Python API的连接与配置、外部Python编译器的使用、Python命令流自动建模过程、Python远程脚本读取输出结果等,其中的Python建模模块尽可能做到让学员零基础开始,通过提供标准命令流库,使用搭积木、摆乐高的形式模块化进行,加强学员的易上手、可操作性。(2)钻孔的建立、土层的建立、土层属性、水力条件及初始条件、导入土层。

CCfz566的博客 1464

基于pytorch的视觉变换器-Vision Transformer(ViT)的介绍与应用

1.调正图像大小2.运用ToTensor()函数转化格式# 使用Compose定义train_transformResize((224, 224)), # 将图像调整为224x224像素ToTensor() # 将图像转换为Tensor格式])# 使用Compose定义test_transformResize((224, 224)), # 将图像调整为224x224像素ToTensor() # 将图像转换为Tensor格式])

第欧根尼的酒桶的博客 2216

完整IC设计流程解析&Makefile学习

本文介绍了decorder38项目的文件结构、自动化综合流程和Makefile使用方法。项目包含RTL到GDSII全流程文件,重点关注syn目录中的综合脚本。通过make dc命令运行综合流程,生成网表、约束和时序文件。关键报告如qor.rpt、area.rpt和min_vio.rpt用于分析综合质量、面积和时序。Makefile部分解释了其基本语法、IC设计中的典型结构,包括目标定义、命令执行和特殊声明,强调了其在自动化构建和依赖管理中的重要性。

m0_63352623的博客 856

PyTorch高级构建块完全指南:自注意力、谱归一化、自适应实例归一化

PyTorch作为深度学习领域最受欢迎的框架之一,提供了丰富的工具和组件来构建复杂的神经网络模型。本文将深入探讨三个强大的PyTorch高级构建块:自注意力机制(Self-Attention)、谱归一化(Spectral Normalization)和自适应实例归一化(Adaptive Instance Normalization),帮助你轻松掌握这些技术并应用到实际项目中。 ## 为什么需要高

gitblog_00801的博客 651

推荐系统[八]算法实践总结V3:重排在快手短视频推荐系统中的应用and手淘信息流多兴趣多目标重排技术

快手推荐系统包括了传统的召回、粗排、精排、Learning To Rank 的多目标排序、多目标预估等技术环节。而在这些模块之后的技术环节就属于重排序,主要包括手机端和服务端两部分。服务端通过传统服务器部署重排服务,包括序列重排、多源内容混排、多样性模块。端上部分包括端上重排模型和端上重排策略两部分。重排技术是快手十分重要的技术环节,它的发展速度远快于其他排序环节,属于较新的技术范畴。整个序列的价值并非单 item 效果的累计,如何使得序列价值最大化;

丨汀、的博客 1065

鸿蒙ArkUI内部API10以及11开发,输入框唤起输入法键盘,页面会被顶起的解决办法

鸿蒙ArkUI内部API10以及11开发,输入框唤起输入法键盘,页面会被顶起的解决办法

zmx781284440的博客 3215

【深度学习】自注意力机制&多头自注意力机制:技术背景、原理分析及基于Pytorch的代码实现

(1)自注意力机制是一种将单个序列内不同位置相关联的注意力机制,以便计算序列的表示,即,使得每个位置的表示不仅依赖于该位置的信息,还能考虑到序列中其它位置的信息,从而能够快速捕捉长距离依赖关系。(2),同时将输入序列有助于增强模型的特征表达能力。(3)自注意力机制不依赖序列的顺序处理,可以一次性计算整个序列,得以在训练和推理时进行,从而大大提高了计算效率。(4)不仅适用于文本序列,也可以应用于图像、音频等不同类型的数据。

2401_85773741的博客 1524

rk3588 适配以太网(百兆)

虽然 RK3588 的 GMAC 控制器原生支持千兆速率(10/100/1000 Mbps),但在某些工业控制、物联网网关或成本敏感型硬件设计中,开发者会选择将其配置为 百兆以太网(Fast Ethernet) 模式。

weixin_35723192的博客 222

Halonet-PyTorch: 自注意力层的高效视觉骨干网实现教程

Halonet-PyTorch: 自注意力层的高效视觉骨干网实现教程 项目介绍 HaloNet-PyTorch 是一个基于 GitHub 的开源项目,它实现了论文《Scaling Local Self-Attention For Parameter Efficient Visual Backbones》中提出的自注意力层。这个库专注于提供一个高效且参数高效的视觉处理模块,而非一个完整的模型体系结...

gitblog_00135的博客 758

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

自注意力(Self-Attention)

自注意力(Self-Attention)是一种神经网络机制,它允许模型在计算某个词的表示时,关注序列中所有的词。这种机制在自然语言处理(NLP)和计算机视觉(CV)中被广泛应用,尤其是在Transformer及其衍生模型(如BERT、GPT、Vision Transformer)中。自注意力的核心思想是:让序列的每个位置关注(或者说加权计算)整个序列中的其他位置。计算每个词对所有词的重要性,使得模型可以捕捉全局依赖信息。由于不涉及递归计算,可以并行化处理,提高计算效率。

彬彬侠的博客 1558

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

计算机视觉中的注意力:PyTorch中实现MultiHead和CBAM

自从Transformer在“注意力就是你所需要的”的工作中被引入以来,在自然语言处理领域已经发生了一个转变,即用基于注意力的网络取代循环神经网络(RNN)。在当前的文献中,已经有很多很棒的文章描述了这种方法。下面是我在评论中发现的两个最好的:带注释的Transformer和Transformer的可视化解释。 然而,在研究了如何在计算机视觉中实现注意力(建议阅读:Understanding attention Modules, CBAM, Papers with code - attention, Sel

deephub 6194

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

计算机视觉自注意力机制实战:高效实现方法与性能优化技巧

self-attention-cv是一个专注于计算机视觉领域自注意力机制实现的PyTorch开源项目,为研究人员和开发者提供了丰富的自注意力构建模块。该项目采用einops和einsum等现代张量操作库,实现了从基础自注意力到复杂轴向注意力、线性注意力等多种变体,为计算机视觉任务中的Transformer架构应用提供了高效、模块化的解决方案。 ## 一、计算机视觉中的自注意力挑战与解决方案 传

gitblog_00735的博客 703
上一篇: 一个中科大差生的8年程序员工作总结
下一篇: 分享两道有关回文数的常见面试题
机器学习算法那些事
博客等级 码龄9年 1633粉丝 62原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值