各种注意力机制,Attention、MLP、ReP等系列的PyTorch实现,含核心代码

不知道CV方向的同学在读论文的时候有没有发现这样一个问题:论文的核心思想很简单,但当你找这篇论文的核心代码时发现,作者提供的源码模块会嵌入到分类、检测、分割等任务框架中,这时候如果你对某一特定框架不熟悉,尽管核心代码只有十几行,依然会发现很难找出。

今天我就帮大家解决一部分这个问题,还记得上次分享的attention论文合集吗?没印象的同学点这里。

这次总结了这30篇attention论文中的核心代码分享,还有一部分其他系列的论文,比如ReP、卷积级数等,核心代码与原文都整理了。

由于篇幅和时间原因,暂时只分享了一部分,需要全部论文以及完整核心代码的同学看文末

Attention论文

1、Axial Attention in Multidimensional Transformers
核心代码
from model.attention.Axial_attention import AxialImageTransformer
import torchif __name__ == '__main__':input=torch.randn(3, 128, 7, 7)model = AxialImageTransformer(dim = 128,depth = 12,reversible = True)outputs = model(input)print(outputs.shape)
2、CCNet: Criss-Cross Attention for Semantic Segmentation
核心代码
from model.attention.CrissCrossAttention import CrissCrossAttention
import torchif __name__ == '__main__':input=torch.randn(3, 64, 7, 7)model = CrissCrossAttention(64)outputs = model(input)print(outputs.shape)
3、Aggregating Global Features into Local Vision Transformer
核心代码
from model.attention.MOATransformer import MOATransformer
import torchif __name__ == '__main__':input=torch.randn(1,3,224,224)model = MOATransformer(img_size=224,patch_size=4,in_chans=3,num_classes=1000,embed_dim=96,depths=[2, 2, 6],num_heads=[3, 6, 12],window_size=14,mlp_ratio=4.,qkv_bias=True,qk_scale=None,drop_rate=0.0,drop_path_rate=0.1,ape=False,patch_norm=True,use_checkpoint=False)output=model(input)print(output.shape)
4、CROSSFORMER: A VERSATILE VISION TRANSFORMER HINGING ON CROSS-SCALE ATTENTION
核心代码
from model.attention.Crossformer import CrossFormer
import torchif __name__ == '__main__':input=torch.randn(1,3,224,224)model = CrossFormer(img_size=224,patch_size=[4, 8, 16, 32],in_chans= 3,num_classes=1000,embed_dim=48,depths=[2, 2, 6, 2],num_heads=[3, 6, 12, 24],group_size=[7, 7, 7, 7],mlp_ratio=4.,qkv_bias=True,qk_scale=None,drop_rate=0.0,drop_path_rate=0.1,ape=False,patch_norm=True,use_checkpoint=False,merge_size=[[2, 4], [2,4], [2, 4]])output=model(input)print(output.shape)
5、Vision Transformer with Deformable Attention
核心代码
from model.attention.DAT import DAT
import torchif __name__ == '__main__':input=torch.randn(1,3,224,224)model = DAT(img_size=224,patch_size=4,num_classes=1000,expansion=4,dim_stem=96,dims=[96, 192, 384, 768],depths=[2, 2, 6, 2],stage_spec=[['L', 'S'], ['L', 'S'], ['L', 'D', 'L', 'D', 'L', 'D'], ['L', 'D']],heads=[3, 6, 12, 24],window_sizes=[7, 7, 7, 7] ,groups=[-1, -1, 3, 6],use_pes=[False, False, True, True],dwc_pes=[False, False, False, False],strides=[-1, -1, 1, 1],sr_ratios=[-1, -1, -1, -1],offset_range_factor=[-1, -1, 2, 2],no_offs=[False, False, False, False],fixed_pes=[False, False, False, False],use_dwc_mlps=[False, False, False, False],use_conv_patches=False,drop_rate=0.0,attn_drop_rate=0.0,drop_path_rate=0.2,)output=model(input)print(output[0].shape)
6、Separable Self-attention for Mobile Vision Transformers
核心代码
from model.attention.MobileViTv2Attention import MobileViTv2Attention
import torch
from torch import nn
from torch.nn import functional as Fif __name__ == '__main__':input=torch.randn(50,49,512)sa = MobileViTv2Attention(d_model=512)output=sa(input)print(output.shape)
7、On the Integration of Self-Attention and Convolution
核心代码
from model.attention.ACmix import ACmix
import torchif __name__ == '__main__':input=torch.randn(50,256,7,7)acmix = ACmix(in_planes=256, out_planes=256)output=acmix(input)print(output.shape)
8、Non-deep Networks
核心代码
from model.attention.ParNetAttention import *
import torch
from torch import nn
from torch.nn import functional as Fif __name__ == '__main__':input=torch.randn(50,512,7,7)pna = ParNetAttention(channel=512)output=pna(input)print(output.shape) #50,512,7,7
9、UFO-ViT: High Performance Linear Vision Transformer without Softmax
核心代码
from model.attention.UFOAttention import *
import torch
from torch import nn
from torch.nn import functional as Fif __name__ == '__main__':input=torch.randn(50,49,512)ufo = UFOAttention(d_model=512, d_k=512, d_v=512, h=8)output=ufo(input,input,input)print(output.shape) #[50, 49, 512]
10、Coordinate Attention for Efficient Mobile Network Design
核心代码
from model.attention.CoordAttention import CoordAtt
import torch
from torch import nn
from torch.nn import functional as Finp=torch.rand([2, 96, 56, 56])
inp_dim, oup_dim = 96, 96
reduction=32coord_attention = CoordAtt(inp_dim, oup_dim, reduction=reduction)
output=coord_attention(inp)
print(output.shape)

ReP论文

1、RepVGG: Making VGG-style ConvNets Great Again
核心代码
from model.rep.repvgg import RepBlock
import torchinput=torch.randn(50,512,49,49)
repblock=RepBlock(512,512)
repblock.eval()
out=repblock(input)
repblock._switch_to_deploy()
out2=repblock(input)
print('difference between vgg and repvgg')
print(((out2-out)**2).sum())
2、ACNet: Strengthening the Kernel Skeletons for Powerful CNN via Asymmetric Convolution Blocks
核心代码
from model.rep.acnet import ACNet
import torch
from torch import nninput=torch.randn(50,512,49,49)
acnet=ACNet(512,512)
acnet.eval()
out=acnet(input)
acnet._switch_to_deploy()
out2=acnet(input)
print('difference:')
print(((out2-out)**2).sum())

卷积级数论文

1、CondConv: Conditionally Parameterized Convolutions for Efficient Inference
核心代码
from model.conv.CondConv import *
import torch
from torch import nn
from torch.nn import functional as Fif __name__ == '__main__':input=torch.randn(2,32,64,64)m=CondConv(in_planes=32,out_planes=64,kernel_size=3,stride=1,padding=1,bias=False)out=m(input)print(out.shape)
2、Dynamic Convolution: Attention over Convolution Kernels
核心代码
from model.conv.DynamicConv import *
import torch
from torch import nn
from torch.nn import functional as Fif __name__ == '__main__':input=torch.randn(2,32,64,64)m=DynamicConv(in_planes=32,out_planes=64,kernel_size=3,stride=1,padding=1,bias=False)out=m(input)print(out.shape) # 2,32,64,64
3、Involution: Inverting the Inherence of Convolution for Visual Recognition
核心代码
from model.conv.Involution import Involution
import torch
from torch import nn
from torch.nn import functional as Finput=torch.randn(1,4,64,64)
involution=Involution(kernel_size=3,in_channel=4,stride=2)
out=involution(input)
print(out.shape)

关注下方《学姐带你玩AI》🚀🚀🚀

回复“核心代码”获取全部论文+代码合集

码字不易,欢迎大家点赞评论收藏!

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

ssl证书 阿里的域名,腾讯云的证书

目录 1.腾讯云申请ssl免费证书 2.去阿里云进行解析 3.回到腾讯云 4.nginx的配置 说明:阿里云的免费证书用完了(每年可以申请20个),还有个项目要用证书,第三方的证书免费的都是90天的。看了下腾讯云业可以申请免费的…

C++代码示例:排列数简单生成工具

文章目录 前言代码仓库内容代码(有详细注释)编译和运行命令结果总结参考资料作者的话 前言 C代码示例:排列数简单生成工具。 代码仓库 yezhening/Programming-examples: 编程实例 (github.com)Programming-examples: 编程实例 (gitee.com) …

数据集划分——train_test_split函数使用说明

当我们拿到数据集时,首先需要对数据集进行划分训练集和测试集,sklearn提供了相应的函数供我们使用 一、讲解 快速随机划分数据集,可自定义比例进行划分训练集和测试集 二、官网API 官网API sklearn.model_selection.train_test_split(*a…

Spring5 自定义标签开发

spring5 自定义脚本开发步骤 1 定义bean, public class User {private String id;private String userName;private String email;private String password;public String getId() {return id;}public void setId(String id) {this.id id;}public String getUser…

网络爬虫——urllib(2)

前言🍭 ❤️❤️❤️网络爬虫专栏更新中,各位大佬觉得写得不错,支持一下,感谢了!❤️❤️❤️ Python网络爬虫_热爱编程的林兮的博客-CSDN博客 前篇讲解了urllib的基本使用、一个类型六个方法与下载相关内容&#xff0…

云原生Kubernetes:K8S配置资源管理

目录 一、理论 1.Secret 2.Secret创建 3.Secret使用 4.Configmap 5.Configmap创建 6.Configmap使用 二、实验 1.Secret创建 2.Secret使用 3.Configmap创建 4.Configmap使用 三、问题 1.变量引用生成资源报错 2.查看pod日志失败 3.创建configmap报错 4.YAML创建…

好看的货架效果(含3D效果)

搭配thymeleaf layui合成 货架一 1. css #gudinghuojia2F .layui-row { display: flex; justify-content: space-between; height: 100%;} #gudinghuojia2F .layui-col-xs10 {margin-right: 4%;} #gudinghuojia2F .layui-col-xs10:last-child {margin-right: 0;} .inner-ti…

Centos一键安装、切换各版本JDK

查看服务中的安装的jdk rpm -qa | grep java获取jdk各版本信息 yum -y list java*查看指定版本 yum -y list java*|grep 1.8安装jdk yum install java-11-openjdk当服务器中有多个版本jdk,切换指定jdk版本 alternatives --config java按照提示输入编号即可切换&…

2021-06-10 51单片机设计一个蜂鸣器报警电路每秒

缘由求助一下谢谢啦51单片机_嵌入式-CSDN问答设计一个蜂鸣器报警电路,按下K1,蜂鸣器响一声,按下K2,蜂鸣器响三声,按下K3,蜂鸣器长鸣。要求响声和间隔的时间均为1秒,长鸣不限时,但是此时应设置一…

验证曲线(validation_curve)项目实战

验证曲线 validation_curve 一、简介 validation_curve验证曲线,可确定不同参数值下的训练和测试分数 根据指定参数的不同值计算估计器的得分 这与使用一个参数的网格搜索类似。不过,这也会计算训练得分,只是一个用于绘制结果的工具。 二、…

【C++】unordered_set、unordered_map的介绍及使用

unordered_set、unordered_map的介绍及使用 一、unordered系列关联式容器二、unordered_map and unordered_multimap1、unordered_map的介绍2、unordered_map的使用(1)定义(2)接口使用 3、unordered_multimap 二、unordered_set a…

【python海洋专题八】Cartopy画地形水深图的contourf填充间隔数调整

【python海洋专题八】Cartopy画地形水深图的contourf填充间隔数调整 article 有时候想把contourf的画面变得更细 此时,就需要增加填充间隔数 本期内容 1:contourf的填充个数改变 cf ax.contourf(lon, lat, ele[:, :], levelsnp.linspace(-9000,0,60…

【中秋国庆不断更】HarmonyOS对通知类消息的管理与发布通知(下)

一、发布进度条类型通知 进度条通知也是常见的通知类型,主要应用于文件下载、事务处理进度显示。HarmonyOS提供了进度条模板,发布通知应用设置好进度条模板的属性值,如模板名、模板数据,通过通知子系统发送到通知栏显示。 目前系统…

JS三大运行时全面对比:Node.js vs Bun vs Deno

全文约 5100 字,预计阅读需要 15 分钟。 JavaScript 运行时是指执行 JavaScript 代码的环境。目前,JavaScript 生态中有三大运行时:Node.js、Bun、Deno。老牌运行时 Node.js 的霸主地位正受到 Deno 和 Bun 的挑战,下面就来看看这…

设计模式1、单例模式 Singleton

解释说明:确保一个类只有一个实例,并提供一个全局访问点来访问这个唯一实例 要点如下 有且仅有一个实例 必须自行创建自己的唯一实例 必须给所有其他对象提供这一实例 具体实现要点如下 提供一个 private 构造函数(防止外部调用而构造类的实例…

【COMP304 LEC3】

LEC 3 1. Contingent Formulas: 定义:Truth or falsity of a propositional formula depends on the truth/falsity of the atoms in the formula 例子:p ∧ q is true if both p and q are true, false otherwise.这里p和q就是atoms&…

paddle2.3-基于联邦学习实现FedAVg算法-CNN

目录 1. 联邦学习介绍 2. 实验流程 3. 数据加载 4. 模型构建 5. 数据采样函数 6. 模型训练 1. 联邦学习介绍 联邦学习是一种分布式机器学习方法,中心节点为server(服务器),各分支节点为本地的client(设备&#…

【精品】Springboot 接收发送日期类型的数据

问题 无法请求到后台,后台报错:[Failed to convert property value of type java.lang.String to required type java.time.LocalDateTime for property : 2023-10-02T09:26:16.06908:00 WARN 14296 --- [p-nio-80-exec-1] .w.s.m.s.Defaul…

跨类型文本文件,反序列化与类型转换的思考

文章目录 应用场景序列化 - 对象替换原内容,方便使用编写程序取得结果数组 序列化 - JSON 应用场景 在编写热更新的时候,我发现了一个古早的 ini 文件,记录了许多有用的数据 由于使用的语言年份较新,没有办法较好地对 ini 文件的…

Canal实现数据同步

1、Canal实现数据同步 canal可以用来监控数据库数据的变化,从而获得新增数据,或者修改的数据。 1.1 Canal工作原理 原理相对比较简单: 1、canal模拟mysql slave的交互协议,伪装自己为mysql slave,向mysql master发送…