【YOLO v5 v7 v8 小目标改进】ODConv:在卷积核所有维度(数量、空间、输入、输出)上应用注意力机制来优化传统动态卷积

ODConv:在卷积核所有维度(数量、空间、输入、输出)上应用注意力机制来优化传统的动态卷积

    • 提出背景
      • 传统动态卷积
      • 全维动态卷积
      • 效果
    • 小目标涨点
      • YOLO v5 魔改
      • YOLO v7 魔改
      • YOLO v8 魔改

 


论文:https://openreview.net/pdf?id=DmpCfq6Mg39

代码:https://github.com/OSVAI/ODConv

 

提出背景

在过去的十年里,我们见证了深度卷积神经网络(CNN)在许多计算机视觉应用中的巨大成功。

构建深度CNN的最常见方法是堆叠多个卷积层以及其他基本层,并预先定义特征连接拓扑。

通过手工工程和自动搜索对CNN架构设计的巨大进步,许多流行的分类骨架已经被提出。

最近的工作表明,将注意力机制融入卷积块可以进一步提高现代CNN的性能。

问题1:提高CNN性能

  • 解法:引入注意力机制。
  • 之所以使用这个解法,是因为注意力机制可以加强CNN通过鼓励有用的特征通道同时抑制不重要的特征通道,从而提高表示能力。

问题2:动态卷积的设计限制

  • 子解法1:多维度注意力机制(ODConv)
    • 之所以使用ODConv,是因为现有的动态卷积方法只关注卷积核数量的一个维度,而忽略了卷积核空间的其他三个维度(空间大小、输入通道数和输出通道数),限制了捕获丰富上下文线索的能力。
  • 子解法2:减少模型大小
    • 之所以使用这个子解法,是因为传统的动态卷积在替换常规卷积时会增加n倍的卷积参数,导致模型大小大幅增加。通过动态卷积分解方法,可以获得更紧凑且竞争力的模型。

传统动态卷积

在这里插入图片描述
上图是 DyConv(a 传统的动态卷积)和ODConv(b 本文的全维动态卷积)的结构图比较。

在DyConv中,使用全局平均池化(GAP)、全连接层(FC)和Sigmoid激活函数来计算单个注意力标量 α w i αw_i αwi,这个标量用于加权卷积核 W i W_i Wi

相比之下,ODConv采用了更复杂的多维度注意力机制来计算四种类型的注意力( α s i , α c i , α f i , 和 α w i αs_i, αc_i, αf_i, 和 αw_i αsi,αci,αfi,αwi),这些注意力分别对应于卷积核空间的不同维度。

四个不同的注意力通过四个分支生成,并通过Sigmoid或Softmax函数进行归一化。

这些注意力分别沿着卷积核空间的空间维度、输入通道维度、输出通道维度和卷积核数量维度被计算出来,并且以并行的方式应用于卷积核。

 

全维动态卷积

ODConv通过在任何卷积层利用新颖的多维度注意力机制来学习卷积核空间所有四个维度上的四种注意力,这些注意力相互补充,逐步应用它们可以显著增强CNN的基本卷积操作的特征提取能力。

让我们以ODConv在任何卷积层利用新颖的多维度注意力机制来学习卷积核空间所有四个维度上的四种注意力为例,举一个具体的应用场景来说明这种方法的有效性。

ODConv解法

  • 子特征1:空间尺寸注意力。ODConv学习不同空间尺寸的卷积核的重要性,从而能够更好地捕捉图像的局部和全局特征。之所以使用空间尺寸注意力,是因为不同大小的特征图对于捕获图像中的不同尺度信息至关重要。

  • 子特征2:输入通道注意力。通过调整对不同输入通道的关注程度,ODConv可以更有效地整合来自不同特征通道的信息。之所以使用输入通道注意力,是因为不同的特征通道可能包含不同的信息,对最终的识别任务有不同的贡献。

  • 子特征3:输出通道注意力。ODConv通过学习对输出通道的不同关注,优化了特征的表示。之所以使用输出通道注意力,是为了强化模型的能力,以区分和识别图像数据集中的细粒度类别。

  • 子特征4:卷积核数量注意力。通过动态调整不同卷积核的权重,ODConv能够根据输入图像的特征自适应地选择最适合的卷积核组合。之所以使用卷积核数量注意力,是因为它允许模型根据输入特征的复杂度动态调整其表示能力,从而在保持效率的同时提高准确性。

在这里插入图片描述
(a) αs_i:空间维度注意力,它将不同的权重分配给卷积核的每个空间位置。

(b) αc_i:输入通道维度注意力,它将不同的权重分配给卷积核的每个输入通道。

© αf_i:输出通道维度注意力,它将不同的权重分配给卷积核的每个输出滤波器。

(d) αw_i:卷积核维度注意力,它将一个整体的权重分配给整个卷积核集合。

因此,即使是使用单个卷积核的ODConv也能与现有的具有多个卷积核的动态卷积对手竞争或胜出,大大减少了额外的参数。

ODConv可以作为一种插入式设计用于替代许多CNN架构中的常规卷积,与现有的动态卷积设计相比,它在模型准确性和效率之间取得了更好的平衡。

 

在传统的CNN中,每个卷积层都使用固定的卷积核来处理输入的图像或特征图,这意味着无论输入数据如何,都会应用相同的卷积核。

然而,这种方法并不总是最优的,因为不同的输入图像可能需要不同的特征提取方式来更好地识别物体。

ODConv通过引入一种新颖的多维度注意力机制来解决这个问题。

具体来说,它在任何给定的卷积层中,不仅仅学习一个卷积核,而是学习一组卷积核,每个卷积核都针对卷积核空间的一个特定维度(如卷积核的空间尺寸、输入通道数、输出通道数和卷积核数量)。

然后,它使用输入特征动态地决定这些卷积核的注意力权重,使得网络能够根据输入图像的不同特征自适应地调整其卷积操作。

例如,如果输入图像是一只猫,ODConv可能会赋予识别猫特征(如毛发纹理或尾巴形状)更有用的卷积核更高的注意力权重。

相反,如果输入图像是一只鸟,它可能会增加那些能够捕捉到鸟的特征(如羽毛或翅膀形状)的卷积核的权重。

通过这种方式,ODConv能够为每个输入图像动态地优化其卷积操作,从而在不同的图像分类任务中实现更高的准确性,同时减少了需要的额外参数数量,因为它甚至可以使用单个卷积核与现有的多卷积核动态卷积方法竞争或超越它们的性能。

效果

ODConv的核心原理是引入一种全新的多维度注意力机制,这种机制不仅考虑卷积核的数量维度(如传统的动态卷积所做的),而且还同时考虑卷积核的空间维度、输入通道维度和输出通道维度。

这种方法允许网络根据输入数据的具体特点,在多个层面上动态调整其卷积核的权重,从而提高特征提取的能力。

ODConv通过在所有卷积核维度上应用注意力机制来优化传统的动态卷积,这样做可以提供更精细的特征处理能力,并提高模型对输入数据变化的适应性和敏感性。

这种细粒度的动态调整使得ODConv能够在增加很少或没有额外计算成本的情况下,提高模型的准确性和效率。

通过在轻量级CNN模型中应用ODConv,我们可以显著提高模型对图像的识别准确率,而不会带来太多的额外计算成本。

例如,将ODConv集成到MobileNetV2中,可能会在ImageNet测试集上获得比原始模型更高的分类准确率,同时保持模型的轻量级特性。

这种方法通过综合考虑卷积核的所有维度上的注意力,有效地增强了特征的表达力,解决了轻量级CNN在复杂任务上性能不足的问题。

小目标涨点

更新中…

YOLO v5 魔改

YOLO v7 魔改

YOLO v8 魔改

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

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

相关文章

LeetCode54题:螺旋矩阵(python3)

路径的长度即为矩阵中的元素数量,当路径的长度达到矩阵中的元素数量时即为完整路径,将该路径返回。 循环打印: “从左向右、从上向下、从右向左、从下向上” 四个方向循环打印。 class Solution:def spiralOrder(self, matrix: List[List[i…

计算机网络_2.2物理层下面的传输媒体

2.2物理层下面的传输媒体 一、传输媒体的分类二、导向型传输媒体1、同轴电缆2、双绞线3、光纤(1)光纤通信原理(2)光纤组成(4)多模光纤与单模光纤对比(5)光纤的波长与规格&#xff08…

AttributeError: ‘list‘ object has no attribute ‘view‘

问题描述 训练yolov9的时候遇到了下面的问题。 In loss_tal.py: pred_distri, pred_scores torch.cat([xi.view(feats[0].shape[0], self.no, -1) for xi in feats], 2).split( (self.reg_max * 4, self.nc), 1) The error is as follows: AttributeError: list …

NLP - 神经网络与反向传播

使用神经网络进行命名实体识别(二值词窗分类) 根据上下文窗口 建立词向量 通过一个神经网络层,通过一个逻辑分类器,得到这个概率是属于特定实体词的预测概率。 另一个分类器来比较说明 这个词是哪个实体类型(比较概率…

赵本山与高秀敏夫妇本想找范伟要那1200元电视机垫款,却不好意思向范伟开口--小品《面子》(中1)的台词

赵本山与高秀敏夫妇本想找范伟要那1200元电视机垫款,却不好意思向范伟开口 --小品《面子》(中1)的台词 表演者:赵本山 高秀敏 范伟 (接上) 高秀敏:咱俩抓紧提事啊 赵本山:不着急…

Python 迭代器和生成器的妙用

本文将探讨python的迭代器和生成器在实际场景中的一些巧妙用法。掌握迭代器和生成器的使用,能够让开发者在解决实际问题时更加得心应手。 Python 迭代器的妙用 Python 的迭代器是一个实现了迭代器协议的对象,它包含方法 __iter__() 和 __next__()。迭代…

实现任意系统下载office文件的域控

一.背景 最近用户提出需求:某个系统A下载的excel文档需要进行权限控制,比如只能下载文档的用户(即文档owner)查看或者编辑,其他人想要查看或者编辑,需要文档owner进行手动设置,当然也可以手动取…

初识C语言—指针

.h 头文件(函数的声明,类型的声明,头文件的包含) .c 源文件(函数实现) 浮点数的四舍五入,不能用你肉眼看到的数值来计算,因为浮点数在内存中有可能不能精确保存。 内存&#xff1a…

ICML23 - Synthetic Data for Model Selection

前言 如果你对这篇文章感兴趣,可以点击「【访客必读 - 指引页】一文囊括主页内所有高质量博客」,查看完整博客分类与对应链接。 本文关注的问题为:是否可以使用合成数据(Synthetic Data)用于模型选择?即不…

多输入多输出 | Matlab实现RIME-BP霜冰算法优化BP神经网络多输入多输出预测

多输入多输出 | Matlab实现RIME-BP霜冰算法优化BP神经网络多输入多输出预测 目录 多输入多输出 | Matlab实现RIME-BP霜冰算法优化BP神经网络多输入多输出预测预测效果基本介绍程序设计往期精彩参考资料 预测效果 基本介绍 多输入多输出 | Matlab实现RIME-BP霜冰算法优化BP神经网…

MySQL 外键约束 多表联查 联合查询

外键约束 外键用来让两张表的数据之间建立连接,从而保证数据的一致性和完整性。 有一张学生表和班级表,学生表通过班级表的ID引用到该班级,从而进行关联,而通过外键约束可以保证数据的一致性完整性。 如学生ID18关联到课程ID1号…

瑞吉苍穹外卖如何拓展?已经经过不同公司多轮面试。项目中会问到哪些问题?以及问题如何解决?

别催了,别催了,先收藏吧。 作者大大正在加班加点完成。 文章会尽快发布,关注收藏,尽请期待。 想要加入并查阅作者的知识库可以联系作者 不要白嫖,通过后,附上关注和收藏截图。 已有众多小伙伴加入 目前…

MySql安全加固:可信IP地址访问控制 设置密码复杂度

MySql安全加固:可信IP地址访问控制 & 设置密码复杂度 1.1 可信IP地址访问控制1.2 设置密码复杂度 💖The Begin💖点点关注,收藏不迷路💖 1.1 可信IP地址访问控制 当您在创建用户时使用’%作为主机部分,…

Day20-磁盘管理

Day20-磁盘管理 1. cut 切:2. 磁盘历史和内外部物理结构介绍2.1 磁盘发展趋势和实现措施2.2 磁盘知识的体系结构2.3 机械磁盘的外部结构2.4 SSD固态硬盘的外部结构2.5 固态硬盘内部结构2.6 缓存在服务器各硬件上的速度和大小对比另类维度图解,从上到下由高速到低速&…

2024现代Android开发趋势

2024现代Android开发趋势 在当今的Android开发领域,我们看到了许多令人兴奋的技术和趋势,这些技术和趋势正在改变着应用程序的开发方式和用户体验。让我们一起深入探讨2024年现代Android开发的主要方向和关键技术。 无处不在的Kotlin Kotlin已经成为An…

202435读书笔记|《半小时漫画中国史》——读点经济学与历史,生活更美好,趣味烧脑土地制度、商鞅变法、华丽丽的丝绸之路这里都有

202435读书笔记|《半小时漫画中国史》——读点经济学与历史,生活更美好,趣味烧脑土地制度、商鞅变法、华丽丽的丝绸之路这里都有 1. 土地政策、度量衡及税收2. 商鞅变法3. 西汉经济4. 西汉盐铁大辩论5. 西汉丝绸之路 《半小时漫画中国史:经济…

吸猫毛空气净化器哪个好?推荐除猫毛效果好宠物空气净化器品牌

当下有越来越多的家庭选择养宠物!尽管家里变得更加温馨,但养宠可能会带来异味和空气中的毛发增多可能会带来健康问题,这是一个大问题! 不想家里弥漫着异味,特别是来自宠物便便的味道,所以需要一款能够处理…

打印100-200之间的素数

#include <stdio.h>int prime(int n){int i 1;for(i 2;i < n;i){if(n % i 0)return 0;}return 1; } //打印100-200之间的素数 int main() {int n 0;int j 100;for(j 100;j < 200;j){if(prime(j)){printf("%d是素数\n",j);n;}}printf("100-200…

【center-loss 中心损失函数】 原理及程序解释(更新中)

文章目录 前言问题引出open-set问题抛出 解决方法softmax函数、softmax-loss函数解决代码&#xff08;center_loss.py&#xff09;原理程序解释 代码运用 如何梯度更新首先了解一下基本的梯度下降算法然后 补充&#xff1a;外围知识模型 前言 学习一下&#xff1a; 中心损失函…

【刷题】位运算

消失的两个数字 消失的两个数字 “单身狗”进阶版思路 class Solution { public:vector<int> missingTwo(vector<int>& nums) {int ret 0;int n nums.size();for(int i 0; i < n; i){ret ^ (nums[i] ^ i);}ret ^ (n ^ (n 1) ^ (n 2));// 按位异或的…