YOLO改进系列之注意力机制(CloAttention模型介绍)

news2024/10/7 9:18:14

CloAttention来自清华大学的团队提出的一篇论文CloFormer,作者从频域编码的角度认为现有的轻量级视觉Transformer中,大多数方法都只关注设计稀疏注意力,来有效地处理低频全局信息,而使用相对简单的方法处理高频局部信息。很少有方法尝试结合共享和上下文感知权重的优势来处理高频局部信息。模型引入了AttnConv,将普通卷积运算中的全局共享权重和注意力操作中的上下文感知权重结合起来,相比于Transformer能够更好地捕捉高频的局部信息,相比于传统卷积操作能够更好地处理图像中不同位置的关系。
论文地址:https://arxiv.org/pdf/2303.17803.pdf
代码仓库:https://github.com/qhfan/CloFormer

模型结构

CloFormer整体结构如下图所示,本文关注于CloAttention,即下图的Clo block模块。
在这里插入图片描述

CloFormer采用两分支的结构。在局部分支中,AttnConv利用深度可分离卷积(depth-wise Convolution),其具有共享权重来提取局部特征。然后,利用上下文感知权重来增强局部特征。与以前通过局部自注意力生成上下文感知权重的方法不同,AttnConv使用门控机制生成上下文感知权重,引入了更强的非线性。在全局分支中,使用传统的注意力操作帮助模型捕捉低频的全局信息,但对K和V进行了下采样来减少参数量。最后使用一种简单的方法来融合局部分支和全局分支的输出。
CloFormer包含四个stage,每个stage由Clo Block和ConvFFN组成。首先将输入图像通过conv stem得到token,stem由四个卷积层组成,每个卷积层的步距分别是2,2,1,1。然后通过四个stage提取分层特征。最后利用全局平均池化和全连接层来生成预测。
ConvFFN
用ConvFFN取代普通的FFN,将局部信息融入到FFN过程中。ConvFFN与普通的FFN之间的主要区别在于,ConvFFN在GeLU激活之后采用深度可分离卷积(Depth-wise Conv),这使ConvFFN能够聚合局部信息。由于使用了深度可分离卷积,ConvFFN可以直接下采样,而不需要引入PatchMerge模块。
CloFormer使用两种类型的ConvFFN。第一种是直接利用跳跃连接的In-Stage ConvFFN。另一种是两个stage的ConvFFN,在其跳跃连接中,分别利用DWConv和Full-Connected Layer对输入信息进行下采样和升维。
Clo block
Clo block由一个局部分支和一个全局分支组成。在全局分支中,首先对K和V进行下采样,然后对Q、K、V执行传统注意力过程,以提取低频全局信息。全局分支有效减少了计算注意力所需的Flop的数量,并且还使模型具有全局感受野。然而,尽管它有效地捕获了低频全局信息,但它对于高频局部信息的处理有所欠缺。因此在局部分支中提出AttnConv克服这一缺点,AttnConv的结构如下图所示。
在这里插入图片描述

卷积:传统的残差块仅依靠卷积算子来收集高频局部信息,如上图(a)示,每个token,卷积算子使用卷积核中国的权重对其相邻token进行加权求和。卷积核中的权重是全局共享的,并且对于不同的token保持不变。

局部自注意力:如上图(b)示。与卷积相比,局部自注意力使每个token能够通过特定于token的权重从其相邻token中收集信息。这种方法利用上下文感知权重来提取高频局部表示,其中不同位置的token与其相邻token计算相似度分数,根据相似度分数收集信息。

AttnConv:如上图(c)示。Q、K和V是通过线性变换得到的,首先使用共享权重(DWConv)对V进行信息聚合。然后,通过比传统注意力操作更强的非线性方法来生成上下文感知权重。然后使用这些权重来增强局部特征。同时利用了共享权重和上下文感知权重。与传统卷积相比,AttnConv中上下文感知权重的使用时模型在局部感知过程中能够更好地适应输入内容。与局部自注意力相比,共享权重的引入使模型能够更好地处理高频信息,从而提高了性能。此外,我们的生成上下文感知权重的方法引入了比局部自我注意更强的非线性,获得了更好的性能。需要注意的是,AttnConv中使用的所有运算都是基于卷积的,保留了卷积的平移等变特性。

实现代码

CloAttention Block的实现代码如下所示:
在这里插入图片描述

YOLOv5模型改进

本文在YOLOv5目标检测算法的Backbone和Head部分分别加入CloAttention来增强目标提取能力,以下分别是在Backbone以及Head中改进的模型结构和参数(以YOLOv5s为例)。
在Backbone部分
在这里插入图片描述
在这里插入图片描述

在Head部分
在这里插入图片描述
在这里插入图片描述

总结

CloAttention模块引入了AttnConv,将普通卷积运算中的全局共享权重和注意力操作中的上下文感知权重结合起来,相比于Transformer能够更好地捕捉高频的局部信息,相比于传统卷积操作能够更好地处理图像中不同位置的关系。此外,CloAttention可进一步应用于YOLOv7、YOLOv8等模型中,欢迎大家关注本博主的微信公众号 BestSongC,后续更多的资源如模型改进、可视化界面等都会在此发布。另外,本博主最近也在MS COCO数据集上跑了一些YOLOv5的改进模型,实验表明改进后的模型能在MS COCO 2017验证集上分别涨点1-3%,感兴趣的朋友关注后回复YOLOv5改进。

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

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

相关文章

内网穿透(frp和proxychains4)

一、准备工作 需要三台机器,去哦这里准备的是win7(目标主机),kali(攻击者),红帽(跳板) 攻击机(kali):192.168.10.15 跳板机&#xff0…

Python二级 每周练习题26

如果你感觉有收获,欢迎给我打赏 ———— 以激励我输出更多优质内容 练习一: 从键盘输入任意字符串,按照下面要求分离字符串中的字符: 1、分别取出该字符串的第偶数位的元素(提醒注意:是按照从左往右数的 方式确定字…

【Linux】Ubuntu16.04系统查看已安装的python版本,及其配置

前情提示:我已经在Ubuntu16.04里用源码安装了python3.8.11,Ubuntu16.04系统默认安装2.7.12与3.5.2 1.查看已安装版本 python2 --version #查看python2安装版本 python3 --version #查看python3安装版本 python3.5 --version #查看python3.5安装…

Python入门:一文详解Python列表(List)操作方法

文章目录 前言一、创建一个列表二、访问列表中的值三、更新列表四、删除列表元素六、Python列表截取七、Python列表操作的函数和方法关于Python技术储备一、Python所有方向的学习路线二、Python基础学习视频三、精品Python学习书籍四、Python工具包项目源码合集①Python工具包②…

Java学习之路 —— Day1(环境配置、变量)

文章目录 前言1. 搭建Java开发环境1.1 下载java1.2 JDK组成1.3 使用idea开发 2. java基本语法2.1 变量类型2.2 Scanner输入2.3 随机数2.4 数组 前言 已经好久没有写博客了,打开这个网站有一种熟悉又陌生的感觉。 前段时间一直在准备秋招,现在也告一段落…

MySQL集群高可用架构之MHA

目录 一、概念: 1、MHA的工作流程: 2、MHA工作原理: 二、MHA实验: 一、概念: MHA:masterhight availabulity:基于主库的高可用环境下,实现主从复制以及故障切换 主从的架构&…

Swift 警惕“隐式异步(implicitly asynchronous)”方法的执行陷阱

概览 actor 是 Swift 5.5 中一个“不可思议”的新类型,可以把它看做成一个数据同步器。actor 中所有属性和方法都会被自动“串行”(serializes)访问和执行,从而有效避免了数据竞争的发生。 不过,在一些微妙的情境下使…

Axure原型设计工具怎么样?有替代软件吗?

Axurerp是一种快速原型设计工具,可以制作高度互动的HTML原型。设计师不仅可以使用Axure绘制线框图和原型,还可以在Axurerp中完成一系列用户体验设计。在本文中,我们将根据用户体验设计师的真实经验,触发用户体验设计师的实际工作&…

绕过PPL机制窃取凭证

Mimikatz窃取凭证攻击 正常权限cmd情况下mimikatz是无法直接提权的,所以窃取密码更是不行的。 但管理员权限下的mimikatz是可以获取到主机登陆密码的。 PPL安全机制 在此之前,用户只需要使用SeDebugPrivilege令牌权限即可获取任意进程的所有访问权限;随后Windows8.1 在此…

阿里云 OSS使用介绍

1、什么是阿里云 OSS? OSS 为 Object Storage Service,即对象存储服务。是阿里云提供的海量、安全、低成本、高可靠的云存储服务。 OSS 具有与平台无关的 RESTful API 接口,可以在任意应用、任意时间、任意地点 存储与访问 任何类型的数据。…

算法的时间复杂度!!!很懵逼吧~

度量一个程序的执行时间通常有两种方法:事后统计的方法、事前估算法 1.事后统计的方法 这种方法可行,但是有两个问题: 一是要想对设计的算法的运行性能进行评测,需要实际运行该程序;二是所得时间的统计量依赖于计算机的硬件、软件等环境因素,这种方式,…

PostGIS学习教程五:数据

教程的数据是有关纽约市的四个shapefile文件和一个包含社会人口经济数据的数据表。在前面一节我们已经将shapefile加载为PostGIS表,在后面我们将添加社会人口经济数据。 下面描述了每个数据集的记录数量和表属性。这些属性值和关系是我们以后分析的基础。 要在pgAdm…

2021年09月 Scratch(一级)真题解析#中国电子学会#全国青少年软件编程等级考试

一、单选题(共25题,每题2分,共50分) 第1题 如下图所示,小明想要做一个文字逐字出现的动画效果,他画出了程序的流程图,以下哪个程序可以实现? A: B: C: D: 答案&#

PP-YOLO: An Effective and Efficient Implementation of Object Detector(2020.8)

文章目录 Abstract1. Introduction先介绍了一堆前人的work自己的workexpect 2. Related Work先介绍别人的work与我们的区别 3.Method3.1. ArchitectureBackboneDetection NeckDetection Head 3.2. Selection of TricksLarger Batch SizeEMADropBlockIoULossIoU AwareGrid Sensi…

Elasticsearch:ES|QL 快速入门

警告:此功能处于技术预览阶段,可能会在未来版本中更改或删除。 Elastic 将努力解决任何问题,但技术预览版中的功能不受官方 GA 功能的支持 SLA 的约束。目前的最新发行版为 Elastic Stack 8.11。 Elasticsearch 查询语言 (ES|QL) 提供了一种强…

MySQL8.0学习笔记

1. CMD命令 1.1 数据库启动与停止 (1) 启动数据库:net start mysql80 (2) 停止数据库:net stop mysql80 1.2 数据库连接与退出 (1) 连接数据库:mysql [-hlocalhost -P3306] -uroot -p[123456] // 本地数据库可省略-h -P (2) 退出数据库…

Opencv!!在树莓派上安装Opencv!

一、更新树莓派系统 sudo apt-get update sudo apt-get upgrade二、安装python-opencv sudo apt-get install libopencv-dev sudo apt-get install python3-opencv三、查看是否安装成功 按以下命令顺序执行: python import cv2 cv2.__version__如果出现版本号&a…

【luckfox】2、添加lcd spi屏st7735和gc9306

前言 本章使用fbtft添加spi lcd st7735/gc9306。 fbtft生成fb0设备,后续通过lvgl可以实现自定义界面绘制。 代码参考 https://gitee.com/openLuat/LuatOS/blob/master/components/lcd/luat_lcd_gc9306x.c 硬件是合宙的,合宙esp32有支持,仿…

Linux内存问题排查

目录 概念工具 概念 工具 vmstat:查看内存变化情况 通过vmstat,可以看到空闲列是否一直是减少的趋势,而缓冲和缓存一直不变,说明存在内存泄漏 top/htop ps pmap:查看进程的内存分布 bcc工具: memlea…

实战Leetcode(五)

Practice makes perfect! 实战一: 思路:我们要用复制的节点来组成一个新的链表,而原链表的节点随机指向其中一个节点,我们首先给每一个节点都复制并且插入到原来节点的后面,然后用复制的节点指向我们原来节…