大核注意力 LKA | Visual Attention Network

在这里插入图片描述

论文名称:《Visual Attention Network》

论文地址:2202.09741 (arxiv.org)


尽管最初是为自然语言处理任务而设计的,但自注意力机制最近在各个计算机视觉领域迅速崭露头角。然而,图像的二维特性给计算机视觉中的自注意力应用带来了三大挑战。(1) 将图像视为一维序列忽视了它们的二维结构。(2) 二次复杂性对于高分辨率图像来说成本太高。(3) 它只能捕捉空间适应性而忽略了通道适应性。在本文中,我们提出了一种新的线性注意力机制,称为大核注意力 (LKA),以实现自适应和长距离关联,同时避免自注意力的缺点。此外,我们还基于 LKA 提出了一种神经网络,即视觉注意力网络 (VAN)。虽然极其简单,VAN 在各种任务中超越了类似尺寸的视觉转换器 (ViTs) 和卷积神经网络 (CNNs),包括图像分类、目标检测、语义分割、全景分割、姿势估计等。例如,VAN-B6ImageNet 基准测试中取得了 87.8% 的准确率,并在全景分割方面创造了新的最先进性能(58.2 PQ)。此外,VAN-B2ADE20K 基准上的语义分割上比 Swin-T 高出 4%mIoU50.146.1),在 COCO 数据集上的目标检测中高出 2.6%AP48.846.2)。这为社区提供了一种新方法和简单但强大的基准。


问题背景

自注意力机制虽然在自然语言处理(NLP)领域取得了巨大成功,但在应用于计算机视觉时存在几个主要挑战。首先,它将二维图像视为一维序列,忽略了图像的二维结构。其次,二次复杂度的计算在高分辨率图像处理时非常昂贵。此外,自注意力仅捕捉空间适应性,而忽略了通道适应性。为了克服这些缺点,LKA提出了一种新的线性注意力机制,旨在提供长距离关联,同时避免传统自注意力机制的不足。


核心概念

LKA的核心概念在于融合卷积和自注意力的优势,包括局部结构信息、长距离依赖和适应性。它通过将大核卷积分解为三个部分来实现这一点:一个深度卷积(Depthwise Convolution)、一个深度扩张卷积(Depthwise Dilation Convolution)、以及一个点卷积(Pointwise Convolution)。这种分解使得模型可以在保持较低计算复杂度的同时,捕获长距离关系和通道维度的适应性。


模块的操作步骤

在这里插入图片描述

不同模块的结构:(a) 提出的大核注意力 (LKA);(b) 非注意力模块;© 用加法替代 LKA 中的乘法;(d) 自注意力。值得注意的是,(d) 是为一维序列设计的。

在这里插入图片描述

大核卷积的分解示意图。标准卷积可以分解为三部分:深度卷积 (DW-Conv)、深度扩张卷积 (DW-D-Conv) 和逐点卷积 (1×1 Conv)。彩色网格表示卷积核的位置,黄色网格表示中心点。示意图显示,一个 13×13 卷积被分解为一个 5×5 的深度卷积、一个膨胀率为 3 5×5 深度扩张卷积和一个逐点卷积。注意:上图中省略了零填充。


LKA模块的操作步骤包括以下几个关键部分:

  1. 深度卷积:处理局部结构信息。
  2. 深度扩张卷积:捕获长距离依赖。
  3. 点卷积:进行通道间的交互。

这一过程通过三部分来增强自注意力的长距离关联,同时保持局部信息。通过融合不同类型的卷积,LKA为特征的自适应调整提供了灵活性。


文章贡献

本文的主要贡献在于提出了一种新的线性注意力机制LKA,并基于此构建了视觉骨干网络VANLKA吸收了卷积和自注意力的优点,并避免了它们的缺点。此外,VAN在多种视觉任务中表现出色,包括图像分类、目标检测、语义分割、全景分割、姿态估计等。


实验结果与应用

实验结果表明,VANImageNet-1KCOCO等多个基准测试中取得了优异的表现。例如,VAN-B6ImageNet基准测试中取得了87.8%的准确率,并在COCO的全景分割任务中创造了新的记录。它在多个视觉任务上超过了许多传统的CNN和自注意力模型。


对未来工作的启示

LKA的成功展示了新的线性注意力机制在计算机视觉中的潜力。未来的研究可以进一步探索这种机制在其他领域的应用,或将其与其他注意力机制相结合。此外,LKA的低计算复杂度特点使其在移动设备和资源受限环境中的应用前景广阔。


代码

import torch
from torch import nnclass LKA(nn.Module):def __init__(self, dim):super().__init__()self.conv0 = nn.Conv2d(dim, dim, 5, padding=2, groups=dim)self.conv_spatial = nn.Conv2d(dim, dim, 7, stride=1, padding=9, groups=dim, dilation=3)self.conv1 = nn.Conv2d(dim, dim, 1)def forward(self, x):u = x.clone()attn = self.conv0(x)attn = self.conv_spatial(attn)attn = self.conv1(attn)return u * attnif __name__ == "__main__":input = torch.rand(3, 64, 64, 64)model = LKA(64)output = model(input)print(output.size())

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Vue】组件化编程

定义 实现应用中局部功能代码和资源的集合 为什么要用组件化编程? 传统方式编写:依赖关系混乱,不好维护,且代码复用率不高 模块化编写:只关注解决js,复用js,简化js的编写与效率 组件方式编写:好维护、复用率更高、提高运行效率 在组件出现之前,我们开发基本都是用htm…

GD32E103C8T6 封装LQFP-48 GigaDevice(兆易创新) 单片机

GD32E103C8T6 是由GigaDevice(兆易创新)公司生产的一款基于ARM Cortex-M4内核的32位MCU(微控制器)。以下是GD32E103C8T6的一些主要功能和参数介绍: 主要功能: 高性能ARM Cortex-M4内核: 采用120MHz的ARM …

修复所有 bug 并不能解决所有问题

原文:jeffpsherman - 2024.04.08 在软件领域,如同在制造业,有些问题是由于 bug 或“特殊原因”引发的,而有些则是“常见原因”,这是由于系统设计和实现的性质所导致的。修复 bug 就是移除特殊原因,消除 bu…

基于SpringBoot的合家云社区物业管理平台 - 项目介绍

合家云社区物业管理平台 2.合家云需求&设计 2.1 项目概述 2.1.1 项目介绍 合家云社区物业管理平台是一个全新的 ”智慧物业解决方案“,是一款互联网的专业社区物业管理系统。平台通过社区资产管理、小区管理、访客管理、在线报修、意见投诉等多种功能模块&a…

指针笔试题模拟

题目一 int main() {int a[5] { 1, 2, 3, 4, 5 };int *ptr (int *)(&a 1);printf( "%d,%d", *(a 1), *(ptr - 1));return 0; } 1*(a1)可以等价于a[1],即第一个打印的是数组第二个下标的元素:2 2 而ptr拿到的是整个数组的地…

C语言之详细讲解文件操作

什么是文件 与普通文件载体不同,文件是以硬盘为载体存储在计算机上的信息集合,文件可以是文本文档、图片、程序等等。文件通常具有点三个字母的文件扩展名,用于指示文件类型(例如,图片文件常常以KPEG格式保存并且文件…

第5篇:创建Nios II工程之Hello_World<四>

Q:最后我们在DE2-115开发板上演示运行Hello_World程序。 A:先烧录编译Quartus硬件工程时生成的.sof文件,在FPGA上成功配置Nios II系统;然后在Nios II Eclipse窗口右键点击工程名hello_world,选择Run As-->Nios II …

C#利用IDbCommand实现通用数据库脚本执行程序

目录 关于 ExecuteNonQuery 数据库脚本程序的执行流程 范例运行环境 通用类的设计 引用 DAL类 实现代码 小结 关于 ExecuteNonQuery 在.net 应用中,在数据库中执行脚本程序是经常用到的功能,如数据操作(新增、修改、删除等&#xff0…

C语言趣味代码(四)

这一篇主要编写几个打字练习的小程序,然后通过这些小程序的实现来回顾复习我们之前学过的知识,然后通过这写打字练习的小程序来提升我们的打字技术和编程技术。 1. 打字练习 1.1 基本打字练习 1.1.1 基本实现 首先我们来制作一个用于计算并显示输入一…

github two-factor authentication是个啥?

最近在逛github时,总是时不时会弹出一下界面,很烦 看到红框里的文字,这明显是强制要求做这个认证,如果不认证4天后账号将不可访问,所以今天花点时间看看怎么做这个认证,点“Enable 2FA now”进入这个界面&a…

普通用户执行source报错,sudo: source:找不到命令的解决方案

一、问题描述 当修改/etc/profile文件(环境变量)后,想让该环境变量立刻生效。需要执行source命令。命令如下: sudo source /etc/profile 执行这个后,不像别人的执行成功,反而报错了。错误信息如下&#…

linux下安装anaconda

顺手点个关注吧,谢谢! 一、下载安装包 https://repo.anaconda.com/archive/ 或者使用命令 wget https://repo.anaconda.com/archive/Anaconda3-5.3.1-Linux-x86_64.sh2.赋予权限并安装 # 给文件执行权限 chmod 777 Anaconda3-5.3.1-Linux-x86_64.sh# 执…

商汤研究院招大模型实习生

商汤研究院招大模型实习生,base上海、北京,400/day。福利:每天50租房补贴,20的餐补。晚上8点之后回去有额外的25元晚餐餐补,10点之后回去可以免费用滴滴。 组内的大模型工作大概分两个方向: 1.3B、3B等小…

基于opencv的单目相机标定

openCv版本:4.4.0 从源码处拷贝标定代码出来使用,需要拷贝samples/cpp/tutorial_code/calib3d/camera_calibration 需要的文件如下: -rw-rw-r-- 1 rog rog 28490 Jul 18 2020 camera_calibration.cpp -rw-rw-r-- 1 rog rog 3152 Jul 18 …

判断前端入参是否空否则提示前端写法

vue2中 前端先声明一个变量,用于alert判断 在templeat中定义一个提示语句 然后在点击事件时判断一下是否展示

【Linux】NFS网络文件系统搭建

一、服务端配置 #软件包安装 [roothadoop01 ~]# yum install rpcbind nfs-utils.x86_64 -y [roothadoop01 ~]# mkdir /share#配置文件修改 #格式为 共享资源路径 [主机地址] [选项] # [roothadoop01 ~]# vi /etc/exports /share 192.168.10.0/24(rw,sync,no_root_squash) #…

python数据可视化:集中趋势统计堆叠柱状图barplot()

【小白从小学Python、C、Java】 【计算机等考500强证书考研】 【Python-数据分析】 python数据可视化: 集中趋势统计 堆叠柱状图 barplot() [太阳]选择题 请问关于以下代码表述错误的选项是? import seaborn as sns import matplotlib.pyplot as plt im…

cx_Oracle.DatabaseError: DPI-1047: Cannot locate a 64-bit Oracle Client library

pip install cx_Oracleimport cx_Oracle 再导入该模块进行数据库连接的时候报错 这个错误表明您的Python环境是64位的,但是您尝试使用的Oracle客户端库(oci.dll)是32位的 根据官方给出的文档进行查看 cx_Oracle 8 Installation — cx_Ora…

Rancher 应用商店离线环境使用

前言 Rancher (v2.5 ) 应用商店可以方便的安装 Helm3 构建的应用,并且支持私有 helm 应用仓库,方便了内网离线环境下的使用。本文以内网离线环境为前提、以 MySQL 5.7.43 版本为应用举例,从零开始手把手教你如何制作并应用。 1、环境准备 1.…

Leetcode—1017. 负二进制转换【中等】(string列表初始化、反向迭代器)

2024每日刷题(120) Leetcode—1017. 负二进制转换 实现代码 class Solution { public:string baseNeg2(int n) {string ans;while(n ! 0) {ans to_string(n & 1);n -(n >> 1);}return ans.empty() ? "0": string{ans.rbegin(),…