【Block总结】OutlookAttention注意力,捕捉细节和局部特征|即插即用
论文信息
- 标题: VOLO: Vision Outlooker for Visual Recognition
- 作者: Li Yuan, Qibin Hou, Zihang Jiang, Jiashi Feng, Shuicheng Yan
- 代码链接: https://github.com/sail-sg/volo
- 论文链接: https://arxiv.org/pdf/2106.13112

创新点
- 前景注意力机制: VOLO引入了一种称为“outlook attention”的新型注意力机制,能够动态地在输入图像上进行局部特征聚合。这种机制专注于编码细粒度特征,而不是传统自注意力机制所关注的全局依赖性,从而提高了模型在视觉识别任务中的表现。
- 高效的特征编码: VOLO通过滑动窗口的方式进行局部特征聚合,打破了自注意力机制在计算复杂度上的瓶颈,使得模型在内存使用上更加高效。

方法
- 模型架构: VOLO的架构相对简单,主要包括以下几个部分:
- Outlook Attention: 该机制通过局部窗口内的相似度计算生成注意力权重,有效地聚合细粒度特征。
- 多层感知机(MLP): 用于进一步处理和整合特征,增强模型的表达能力。
实验结果
- ImageNet-1K分类任务: VOLO在该任务中实现了87.1%的top-1准确率,成为首个在该数据集上超过87%准确率的模型,且未使用任何额外训练数据。与其他模型相比,VOLO在参数量仅为296M的情况下,表现出色,显示出其高效性。
- 下游任务表现: VOLO在CityScapes和ADE20K等下游任务中也表现优异,分别取得了84.3%和54.3%的mIoU(平均交并比)得分,证明了其良好的迁移学习能力。
总结
VOLO通过引入前景注意力机制和高效的特征编码方法,显著提升了视觉识别模型的性能,尤其是在细粒度特征的处理上。该模型在多个标准数据集上取得了优异的成绩,为未来的视觉识别研究提供了新的思路和方向。VOLO的设计理念和实验结果表明,基于注意力的模型在视觉识别领域具有广泛的应用潜力。
代码
import torch
import torch.nn as nn
import math
import torch.nn.functional as Fclass OutlookAttention(nn.Module):"""Implementation of outlook attention--dim: hidden dim--num_heads: number of heads--kernel_size: kernel size in each window for outlook attentionreturn: token features after outlook attention"""def __init__(self, dim, num_heads, kernel_size=3, padding=1, stride=1,qkv_bias=False, qk_scale=None, attn_drop=0., proj_drop=0.):super().__init__()head_dim = dim // num_headsself.num_heads = num_headsself.kernel_size = kernel_sizeself.padding = paddingself.stride = strideself.scale = qk_scale or head_dim**-0.5self.v = nn.Linear(dim, dim, bias=qkv_bias)self.attn = nn.Linear(dim, kernel_size**4 * num_heads)self.attn_drop = nn.Dropout(attn_drop)self.proj = nn.Linear(dim, dim)self.proj_drop = nn.Dropout(proj_drop)self.unfold = nn.Unfold(kernel_size=kernel_size, padding=padding, stride=stride)self.pool = nn.AvgPool2d(kernel_size=stride, stride=stride, ceil_mode=True)def forward(self, x):B, H, W, C = x.shapev = self.v(x).permute(0, 3, 1, 2) # B, C, H, Wh, w = math.ceil(H / self.stride), math.ceil(W / self.stride)v = self.unfold(v).reshape(B, self.num_heads, C // self.num_heads,self.kernel_size * self.kernel_size,h * w).permute(0, 1, 4, 3, 2) # B,H,N,kxk,C/Hattn = self.pool(x.permute(0, 3, 1, 2)).permute(0, 2, 3, 1)attn = self.attn(attn).reshape(B, h * w, self.num_heads, self.kernel_size * self.kernel_size,self.kernel_size * self.kernel_size).permute(0, 2, 1, 3, 4) # B,H,N,kxk,kxkattn = attn * self.scaleattn = attn.softmax(dim=-1)attn = self.attn_drop(attn)x = (attn @ v).permute(0, 1, 4, 3, 2).reshape(B, C * self.kernel_size * self.kernel_size, h * w)x = F.fold(x, output_size=(H, W), kernel_size=self.kernel_size,padding=self.padding, stride=self.stride)x = self.proj(x.permute(0, 2, 3, 1))x = self.proj_drop(x)return xif __name__ == "__main__":# 如果GPU可用,将模块移动到 GPUdevice = torch.device("cuda" if torch.cuda.is_available() else "cpu")# 输入张量 (batch_size, height, width,channels)x = torch.randn(1,40,40,32).to(device)# 初始化 OutlookAttention 模块dim=32block = OutlookAttention(dim,8)print(block)block = block.to(device)# 前向传播output = block(x)print("输入:", x.shape)print("输出:", output.shape)
输出结果:

相关文章:
【Block总结】OutlookAttention注意力,捕捉细节和局部特征|即插即用
论文信息 标题: VOLO: Vision Outlooker for Visual Recognition作者: Li Yuan, Qibin Hou, Zihang Jiang, Jiashi Feng, Shuicheng Yan代码链接: https://github.com/sail-sg/volo论文链接: https://arxiv.org/pdf/2106.13112 创新点 前景注意力机制: VOLO引入了一种称为“…...
网络攻防实战指北专栏讲解大纲与网络安全法
专栏 本专栏为网络攻防实战指北,大纲如下所示 进度:目前已更完准备篇、HTML基础 计划:所谓基础不牢,地动山摇。所以下一步将持续更新基础篇内容 讲解信息安全时,结合《中华人民共和国网络安全法》(以下简…...
【已解决】windows7虚拟机安装VMtools频繁报错
为了在虚拟机VMware中安装win7,题主先在网上下载了windows7 professional版本的镜像,在vmware中安装vmtools时报错,信息如下 (安装程序无法继续,本程序需要您将此虚拟机上安装的操作系统更新到SP1) 然后就…...
蓝桥杯模拟算法:多项式输出
P1067 [NOIP2009 普及组] 多项式输出 - 洛谷 | 计算机科学教育新生态 这道题是一道模拟题,我们需要分情况讨论,我们需要做一下分类讨论 #include <iostream> #include <cstdlib> using namespace std;int main() {int n;cin >> n;for…...
冲刺蓝桥杯之速通vector!!!!!
文章目录 知识点创建增删查改 习题1习题2习题3习题4:习题5: 知识点 C的STL提供已经封装好的容器vector,也可叫做可变长的数组,vector底层就是自动扩容的顺序表,其中的增删查改已经封装好 创建 const int N30; vecto…...
知识管理平台在数字经济时代推动企业智慧决策与知识赋能的路径分析
内容概要 在数字经济时代,知识管理平台被视为企业智慧决策与知识赋能的关键工具。其核心作用在于通过高效地整合、存储和分发企业内部的知识资源,促进信息的透明化与便捷化,使得决策者能够在瞬息万变的市场环境中迅速获取所需信息。这不仅提…...
IT服务管理平台(ITSM):构建高效运维体系的基石
IT服务管理平台(ITSM):构建高效运维体系的基石 在数字化转型浪潮的推动下,企业对IT服务的依赖日益加深,如何高效管理和优化IT服务成为企业面临的重要课题。IT服务管理平台(ITSM)应运而生,以其系统化的管理方法和工具,助力企业实现IT服务的规范化、高效化和智能化。本…...
[EAI-026] DeepSeek-VL2 技术报告解读
Paper Card 论文标题:DeepSeek-VL2: Mixture-of-Experts Vision-Language Models for Advanced Multimodal Understanding 论文作者:Zhiyu Wu, Xiaokang Chen, Zizheng Pan, Xingchao Liu, Wen Liu, Damai Dai, Huazuo Gao, Yiyang Ma, Chengyue Wu, Bin…...
深度学习:基于MindNLP的RAG应用开发
什么是RAG? RAG(Retrieval-Augmented Generation,检索增强生成) 是一种结合检索(Retrieval)和生成(Generation)的技术,旨在提升大语言模型(LLM)生…...
【C语言】static关键字的三种用法
【C语言】static关键字的三种用法 C语言中的static关键字是一个存储类说明符,它可以用来修饰变量和函数。static关键字的主要作用是控制变量或函数的生命周期和可见性。以下是static关键字的一些主要用法和含义: 局部静态变量: 当static修饰…...
STM32 PWMI模式测频率占空比
接线图: PWMI基本结构 代码配置: 与上一章输入捕获代码一样,根据结构体,需要在输入捕获单元再配置一个通道。我们调用一个函数 这个函数可以给结构体赋值,当我们定义了一遍结构体参数,再调用这个函数&…...
神经网络|(四)概率论基础知识-古典概型
【1】引言 前序学习了线性回归的基础知识,了解到最小二乘法可以做线性回归分析,但为何最小二乘法如此准确,这需要从概率论的角度给出依据。 因此从本文起,需要花一段时间来回顾概率论的基础知识。 【2】古典概型 古典概型是我…...
ubuntu20.04.6下运行VLC-Qt例子simple-player
下载examples-master.zip(https://github.com/vlc-qt/examples),编译运行simple-player 参考链接: https://blog.csdn.net/szn1316159505/article/details/143743735 本文运行环境 Qt 5.15.2 Qt creator 5.0.2 主要步骤…...
低代码产品插件功能一览
下图是统计的目前市面上流行的低代码、零代码产品的插件功能。 产品名称 产品类型 官方插件数量 支持拓展 官方插件功能 宜搭 零代码 3 暂不支持 云打印、CAD看图、打印表单详情 微搭 低代码 1 暂不支持 小程序 明道云 低代码 2 支持 视图、工作流节点 简道…...
Blazor-@bind
数据绑定 带有 value属性的标记都可以使用bind 绑定,<div>、<span>等非输入标记,无法使用bind 指令的,默认绑定了 onchange 事件,onchange 事件是指在输入框中输入内容之后,当失去焦点时执行。 page &qu…...
RK3568中使用QT opencv(显示基础图像)
文章目录 一、查看对应的开发环境是否有opencv的库二、QT使用opencv 一、查看对应的开发环境是否有opencv的库 在开发板中的/usr/lib目录下查看是否有opencv的库: 这里使用的是正点原子的ubuntu虚拟机,在他的虚拟机里面已经安装好了opencv的库。 二、…...
[答疑]DDD伪创新哪有资格和仿制药比
DDD领域驱动设计批评文集 做强化自测题获得“软件方法建模师”称号 《软件方法》各章合集 远航 2025-1-24 10:40 最近的热门话题仿制药,想到您经常批评的伪创新,这两者是不是很像? UMLChina潘加宇 伪创新哪有资格和仿制药比。 仿制药的…...
C#,入门教程(05)——Visual Studio 2022源程序(源代码)自动排版的功能动画图示
上一篇: C#,入门教程(04)——Visual Studio 2022 数据编程实例:随机数与组合https://blog.csdn.net/beijinghorn/article/details/123533838https://blog.csdn.net/beijinghorn/article/details/123533838 新来的徒弟们交上来的C#代码&#…...
DIY QMK量子键盘
最近放假了,趁这个空余在做一个分支项目,一款机械键盘,量子键盘取自固件名称QMK(Quantum Mechanical Keyboard)。 键盘作为计算机或其他电子设备的重要输入设备之一,通过将按键的物理动作转换为数字信号&am…...
C++ 堆栈分配的区别
这两种声明方式有什么区别 1.使用 new 关键字动态分配内存 动态分配:使用 new 关键字会在堆(heap)上分配内存,并返回一个指向该内存位置的指针。生命周期:对象的生命周期不会随着声明它的作用域结束而结束࿰…...
两轮车租赁数字化升级:从物联网架构到运营效率提升
1. 两轮车租赁模式升级:从传统痛点看数字化解决方案最近和几个在欧洲做短途出行和即时配送的朋友聊天,大家不约而同地提到了一个趋势:两轮车,特别是电动两轮车的租赁市场,正在经历一场静悄悄但深刻的模式升级。这背后&…...
BilibiliDown:5步快速下载B站视频的免费跨平台神器
BilibiliDown:5步快速下载B站视频的免费跨平台神器 【免费下载链接】BilibiliDown (GUI-多平台支持) B站 哔哩哔哩 视频下载器。支持稍后再看、收藏夹、UP主视频批量下载|Bilibili Video Downloader 😳 项目地址: https://gitcode.com/gh_mirrors/bi/B…...
Silk v3解码器终极指南:高效转换微信QQ语音为MP3格式
Silk v3解码器终极指南:高效转换微信QQ语音为MP3格式 【免费下载链接】silk-v3-decoder [Skype Silk Codec SDK]Decode silk v3 audio files (like wechat amr, aud files, qq slk files) and convert to other format (like mp3). Batch conversion support. 项目…...
MATLAB 2024 升级指南:彻底卸载旧版,高效部署新版
1. 为什么需要彻底卸载旧版MATLAB? 每次MATLAB大版本更新都会带来新功能和性能优化,但很多用户直接覆盖安装后常遇到各种奇怪问题。我去年帮实验室处理过几十台电脑的升级故障,90%的问题都源于旧版残留文件。比如有位同学复现图像处理代码时&…...
在Matlab中绘制圆锥三维曲面图
这篇博文按参考书绘制圆锥三维曲面图,是在“在Matlab中绘制圆锥三维曲面图”的基础上,调整Z的表达式得到的。已知:z(x^2y^2)^(1/2)。要求:绘制[-20,20]区间的曲面图。在matlab命令行窗口输入以下程序:x-20:…...
AI智能体安全防护实战:基于AgentGuard构建可控Agent安全护栏
1. 项目概述:当AI智能体需要“安全护栏”最近在折腾AI智能体(Agent)的开发,一个绕不开的痛点就是“安全性”。我们费尽心思调教出一个能自主规划、调用工具、执行任务的智能体,结果它可能在用户一个刁钻的提问下&#…...
如何3分钟为Windows 11 LTSC系统恢复微软商店:一键安装完整指南
如何3分钟为Windows 11 LTSC系统恢复微软商店:一键安装完整指南 【免费下载链接】LTSC-Add-MicrosoftStore Add Windows Store to Windows 11 24H2 LTSC 项目地址: https://gitcode.com/gh_mirrors/ltscad/LTSC-Add-MicrosoftStore 你是否正在使用Windows 11…...
STM32CubeMX配置避坑指南:搞定F103C8T6最小系统板的时钟与调试口
STM32CubeMX配置避坑指南:搞定F103C8T6最小系统板的时钟与调试口 当你第一次拿到STM32F103C8T6最小系统板时,CubeMX的图形化配置界面看起来是如此友好。但现实往往比理想骨感——代码下载后毫无反应、调试器连接失败、LED闪烁频率诡异。这些问题十有八九…...
CircuitPython音频输出与PWM伺服电机控制实战指南
1. 项目概述与核心价值如果你正在用像Adafruit的Feather M0、ItsyBitsy或者Circuit Playground Express这类小巧的微控制器板子做项目,想让它们“开口说话”或者“动手干活”,那么音频输出和伺服电机控制就是你绕不开的两项核心技能。前者能让你的项目发…...
AI驱动全栈开发:RapidFireAI如何实现端到端自动化与效率革命
1. 项目概述:当AI遇上“速射”,一个全栈开发者的效率革命最近在GitHub上闲逛,发现一个名字很酷的项目——RapidFireAI/rapidfireai。光看名字,“RapidFire”(速射)加上“AI”,就让人感觉这玩意儿…...
