从代码实现理解Vision Permutator:WeightedPermuteMLP模型解析
从代码实现理解Vision Permutator:WeightedPermuteMLP模型解析
随着人工智能的快速发展,视觉识别任务变得越来越重要。最近提出的Vision Permutator架构为这一领域带来了新的思路,它通过可学习的排列操作重新定义了特征交互的方式。
今天我们将深入解析Vision Permutator的核心组件——WeightedPermuteMLP模块,并通过代码实现来理解它的设计思想和工作原理。
Vision Permutator概述
传统的视觉模型大多基于CNN或Transformer架构。Vision Permutator提出了一种全新的网络结构,通过可学习的排列操作替代了传统模型中的池化和卷积操作。这种创新的设计显著提升了模型性能,同时降低了计算复杂度。
在论文《Vision Permutator: A Permutable MLP-Like Architecture for Visual Recognition》中,研究者提出了基于MLP的 Vision Transformer 替代方案——Permute MLP。该架构通过参数化排列实现了全局特征交互,从而达到了与Transformer相当或更优的效果。
WeightedPermuteMLP代码解析
让我们先来看一下WeightedPermuteMLP类的具体实现:
class WeightedPermuteMLP(nn.Module):def __init__(self,dim,seg_dim=8, qkv_bias=False, proj_drop=0.):super().__init__()self.seg_dim=seg_dimself.mlp_c=nn.Linear(dim,dim,bias=qkv_bias)self.mlp_h=nn.Linear(dim,dim,bias=qkv_bias)self.mlp_w=nn.Linear(dim(dim,dim,bias=qkv_bias)self.reweighting=MLP(dim,dim//4,dim*3)self.proj=nn.Linear(dim,dim)self.proj_drop=nn.Dropout(proj_drop)def forward(self,x) :B,H,W,C=x.shapec_embed=self.mlp_c(x)S=C//self.seg_dimh_embed=x.reshape(B,H,W,self.seg_dim,S).permute(0,3,2,1,4).reshape(B,self.seg_dim,W,H*S)h_embed=self.mlp_h(h_embed).reshape(B,self.seg_dim,W,H,S).permute(0,3,2,1,4).reshape(B,H,W,C)w_embed=x.reshape(B,H,W,self.seg_dim,S).permute(0,3,1,2,4).reshape(B,self.seg_dim,H,W*S)w_embed=self.mlp_w(w_embed).reshape(B,self.seg_dim,H,W,S).permute(0,2,3,1,4).reshape(B,H,W,C)weight=(c_embed+h_embed+w_embed).permute(0,3,1,2).flatten(2).mean(2)weight=self.reweighting(weight).reshape(B,C,3).permute(2,0,1).softmax(0).unsqueeze(2).unsqueeze(2)x=c_embed*weight[0]+w_embed*weight[1]+h_embed*weight[2]x=self.proj_drop(self.proj(x))return x
模块初始化
在__init__方法中:
mlp_c,mlp_h,mlp_w分别对应channel、height、width方向的MLP层。reweighting模块用于对不同方向的特征进行重新加权。- 最后通过一个投影层和Dropout完成最终的输出计算。
前向传播过程
-
特征提取:
- 通过三个不同的MLP分别提取channel、height、width方向的特征。
-
权重计算:
- 将不同方向的特征进行叠加,经过flatten和平均池化操作后输入到reweighting模块,得到每个通道的三组权重。
- 使用softmax对权重进行归一化处理。
-
加权合并:
- 根据计算出的三个权重值,将channel、width、height方向的特征按比例相加,融合得到最终的输出特征。
-
投影输出:
- 通过线性变换将特征维度恢复到原始维度,并应用Dropout防止过拟合。
实验验证
我们可以通过以下代码进行简单的实验验证:
if __name__ == '__main__':input=torch.randn(64,8,8,512)seg_dim=8block=WeightedPermuteMLP(512,seg_dim)out=block(input)print(out.shape) # 输出: torch.Size([64, 8, 8, 512])
从实验输出可以看到,模型成功保持了输入的尺寸不变,即在不改变特征图尺寸的情况下实现了特征的非线性变换和全局交互。
总结与展望
WeightedPermuteMLP模块通过创新性的思路,将特征交互的方式从简单的通道加法转变为基于权重的自适应融合。这种设计思想既降低了计算复杂度,又提升了模型性能。
对于未来的研究,我们可以关注以下几个方向:
- 多尺度特征融合:尝试在不同尺度上应用类似的设计思想。
- 动态权重调整:研究如何进一步提升权重的自适应能力。
- 轻量化设计:探索减少计算量的方法,使模型能够部署到更多场景。
Vision Permutator给我们展示了一种全新的思考方式,在特征交互和网络架构设计方面提供了新的视角。相信随着研究的深入,还会有更多的创新和突破涌现出来。
相关文章:
从代码实现理解Vision Permutator:WeightedPermuteMLP模型解析
从代码实现理解Vision Permutator:WeightedPermuteMLP模型解析 随着人工智能的快速发展,视觉识别任务变得越来越重要。最近提出的Vision Permutator架构为这一领域带来了新的思路,它通过可学习的排列操作重新定义了特征交互的方式。 今天我…...
Web开发:ABP框架10——使用数据库存储文件,完成文件的下载和上传
一、简要介绍 字节数组:字节数组是存储数据的字节序列,常用于二进制数据(如图片、音视频、文档等)的表示。 文件和字节的关系:文件是由字节构成,字节是文件内容的基本单位。 文件以字节形式存储在服务器数…...
SystemVerilog语法之内建数据类型
简介:SystemVerilog引进了一些新的数据类型,具有以下的优点:(1)双状态数据类型,更好的性能,更低的内存消耗;(2)队列、动态和关联数组,减少内存消耗…...
NestJS-Knife4j
文章目录 前言✅ 一、什么是 Knife4j?✅ 二、Knife4j 与 Swagger 对比✅ 三、NestJS-Knife4j 集成1. 安装依赖2. 配置 Swagger 与 Knife4j3. 启动应用并访问接口文档 ✅ 四、功能增强1. **接口分组**2. **请求/响应示例**3. **接口文档的美化** ✅ 五、总结 前言 N…...
【项目管理】成本类计算 笔记
项目管理-相关文档,希望互相学习,共同进步 风123456789~-CSDN博客 (一)知识总览 项目管理知识域 知识点: (项目管理概论、立项管理、十大知识域、配置与变更管理、绩效域) 对应&…...
手机投屏到电视方法
一、投屏软件 比如乐播投屏 二、视频软件 腾讯视频、爱奇艺 三、手机无线投屏功能 四、有线投屏 五、投屏器...
(三十)安卓开发中的MVP模式详解
在安卓开发中,MVP(Model-View-Presenter) 是一种常见的软件架构模式,它通过将应用程序的逻辑与用户界面分离,使得代码更加模块化、易于维护和测试。本文将详细讲解MVP模式的组成部分、工作流程、优点,并结合…...
基于MuJoCo物理引擎的机器人学习仿真框架robosuite
Robosuite 基于 MuJoCo 物理引擎,能支持多种机器人模型,提供丰富多样的任务场景,像基础的抓取、推物,精细的开门、拧瓶盖等操作。它可灵活配置多种传感器,提供本体、视觉、力 / 触觉等感知数据。因其对强化学习友好&am…...
配置管理CM
以下是关于项目管理中 配置管理 的详细解析,结合高项(如软考高级信息系统项目管理师)教材内容,从理论到实践进行系统阐述: 一、配置管理的基本概念 1. 定义 配置管理(Configuration Management, CM)是识别、记录、控制项目成果(产品、服务或过程)的物理和功能特征,…...
13.编码器的结构
从入门AI到手写Transformer-13.编码器的结构 13.编码器的结构代码 整理自视频 老袁不说话 。 13.编码器的结构 T r a n s f o r m e r E n c o d e r : 输入 [ b , n ] TransformerEncoder:输入[b,n] TransformerEncoder:输入[b,n] E m b e d d i n g : − > [ b , n , d ]…...
[原理分析]安卓15系统大升级:Doze打盹模式提速50%,续航大幅增强,省电提升率5%
技术原理:借鉴中国友商思路缩短进入Doze的时序 开发者米沙尔・拉赫曼(Mishaal Rahman)在其博文中透露,谷歌对安卓15系统进行了显著优化,使得设备进入“打盹模式”(Doze Mode)的速度提升了50%,并且部分机型的待机时间因此得以延长三小时。设备…...
cdp-(Chrome DevTools Protocol) browserscan检测原理逆向分析
https://www.browserscan.net/zh/bot-detection 首先,打开devtools后访问网址,检测结果网页显示红色Robot,标签插入位置,确定断点位置可以hook该方法,也可以使用插件等方式找到这个位置,本篇不讨论. Robot标签是通过insertBefore插入的. 再往上追栈可以发现一个32长度数组,里面…...
【Java面试笔记:基础】1.谈谈你对Java平台的理解?
前言 Java 是历史悠久且主流的编程语言,拥有庞大的开发者群体和广泛的应用领域。通过系统学习和实践,构建扎实的 Java 知识体系,提升面试成功率 笔记核心内容 1. Java 平台的核心特性 跨平台特性:Java 的核心特性之一是“Writ…...
Containerd与Docker的相爱相杀:容器运行时选型指南
容器运行时(Container Runtime)作为云原生基础设施的底层引擎,正从Docker一家独大走向多元化竞争。本文将深入剖析Containerd与Docker的技术血缘、性能差异及选型策略,揭示如何根据场景需求选择最优解。 一、技术血缘:…...
Java第五节:继承thread类创建线程
1、创建类Thread01 创建类Thread01然后继承thread类 2、重写run函数 3、运行线程 在主函数创建两个线程,并执行。...
vite安装及使用
没特殊要求的项目,还是怎么简单怎么来╮(╯▽╰)╭ 一、Vite 基础知识 1. 什么是 Vite? Vite 是一个前端构建工具,专注于开发服务器速度和优化构建过程。特点: 快速冷启动:利用 ES 模块的原生支持,实现快速的开发服务器启动。即时热更新:在开发过程中,修改代码后可以…...
Oracle expdp的 EXCLUDE 参数详解
Oracle expdp的 EXCLUDE 参数详解 EXCLUDE 是 Oracle Data Pump Export (expdp) 工具中的一个关键参数,用于指定在导出过程中要排除的对象或对象类型。 一、基本语法 expdp username/password DUMPFILEexport.dmp DIRECTORYdpump_dir EXCLUDEobject_type[:name_c…...
C#/.NET/.NET Core技术前沿周刊 | 第 35 期(2025年4.14-4.20)
前言 C#/.NET/.NET Core技术前沿周刊,你的每周技术指南针!记录、追踪C#/.NET/.NET Core领域、生态的每周最新、最实用、最有价值的技术文章、社区动态、优质项目和学习资源等。让你时刻站在技术前沿,助力技术成长与视野拓宽。 欢迎投稿、推荐…...
《MySQL:MySQL表的基本查询操作CRUD》
CRUD:Create(创建)、Retrieve(读取)、Update(更新)、Delete(删除)。 Create into 可以省略。 插入否则更新 由于主键或唯一键冲突而导致插入失败。 可以选择性的进行同步…...
CF2096F Wonderful Impostors
题解 看到题意很容易想到用双指针来维护所有可行的区间,但是显然不能对所有的 1 区间来维护所有的可行区间,这样的区间数量会太多,我们无法快速进行判断。 所以只能对满足答案的所有区间进行双指针,这就要求我们如何快速插入和删…...
多维度信息捕捉:利用向量、稀疏向量、全文搜索及张量实现RAG的极致性能
开源 AI 原生数据库 Infinity 0.2 release 正式发布,提供了 2 种新数据类型:稀疏向量Sparse Vector 和 张量Tensor,在此前的全文搜索和向量搜索之外, Infinity 提供了更多的召回手段,如下图所示,用户可以采…...
vscode使用remote ssh插件连接服务器的问题
本人今天发现自己的vscode使用remote ssh连接不上服务器了,表现是:始终在初始化 解决方法: 参考链接:vscode remote-ssh 连接失败的基本原理和优雅的解决方案 原因 vscode 的 SSH 之所以能够拥有比传统 SSH 更加强大的功能&a…...
基础版-图书管理系统
现在我们用面向对象编程,首先我们要明确这个图书管理系统的对象有哪些? 图书管理需要管理图书(对象1),在哪管理图书呢?书架(对象2)上 然后由谁来管呢?有两类人…...
【单片机 C语言】单片机学习过程中常见C库函数(学习笔记)
memset() C 标准库 - <string.h> string .h 头文件定义了一个变量类型、一个宏和各种操作字符数组的函数。 <string.h> 是 C 标准库中的一个头文件,提供了一组用于处理字符串和内存块的函数。这些函数涵盖了字符串复制、连接、比较、搜索和内存操作…...
神经网络优化 - 小批量梯度下降之批量大小的选择
上一博文学习了小批量梯度下降在神经网络优化中的应用: 神经网络优化 - 小批量梯度下降-CSDN博客 在小批量梯度下降法中,批量大小(Batch Size)对网络优化的影响也非常大,本文我们来学习如何选择小批量梯度下降的批量大小。 一、批量大小的…...
Novartis诺华制药社招入职综合能力测评真题SHL题库考什么?
一、综合能力测试 诺华制药的入职测评中,综合能力测试是重要的一部分,主要考察应聘者的问题解决能力、数值计算能力和逻辑推理能力。测试总时长为46分钟,实际作答时间为36分钟,共24题。题型丰富多样,包括图形变换题、分…...
文件的物理结构和逻辑结构的区分
文件的物理结构和逻辑结构是文件系统中两个重要的概念,它们分别描述了文件在存储设备上的实际存储方式以及用户在编程或操作文件时所看到的抽象组织形式。理解这两者的区别和联系对于深入掌握文件系统的设计和实现至关重要。 一、文件的逻辑结构 定义 文件的逻…...
C语言学习记录(16)文件操作7
前面学的东西感觉都跟写代码有关系,怎么突然就开始说文件了,有什么用呢? 其实,文件是另一种数据存储的方式,学会使用文件就可以让我们的数据持久的保存。 一、文件是什么 就算没有学过相关的知识,在这么…...
Coze平台 创建AI智能体的详细步骤指南
一、创建智能体的基础流程 注册与登录 访问Coze官网(www.coze.cn),使用邮箱或手机号注册账号并登录。 创建智能体 在控制台点击左侧“”按钮,选择“创建智能体”,输入名称(如“职场鼓励师”&…...
《作用域大冒险:从闭包到内存泄漏的终极探索》
“爱自有天意,天有道自不会让有情人分离” 大家好,关于闭包问题其实实际上是js作用域的问题,那么js有几种作用域呢? 作用域类型关键字/场景作用域范围示例全局作用域var(无声明)整个程序var x 10;函数作用…...
