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

本文主要是介绍【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 魔改

这篇关于【YOLO v5 v7 v8 小目标改进】ODConv:在卷积核所有维度(数量、空间、输入、输出)上应用注意力机制来优化传统动态卷积的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/764662

相关文章

SpringShell命令行之交互式Shell应用开发方式

《SpringShell命令行之交互式Shell应用开发方式》本文将深入探讨SpringShell的核心特性、实现方式及应用场景,帮助开发者掌握这一强大工具,具有很好的参考价值,希望对大家有所帮助,如... 目录引言一、Spring Shell概述二、创建命令类三、命令参数处理四、命令分组与帮助系统五、自定

SpringBoot应用中出现的Full GC问题的场景与解决

《SpringBoot应用中出现的FullGC问题的场景与解决》这篇文章主要为大家详细介绍了SpringBoot应用中出现的FullGC问题的场景与解决方法,文中的示例代码讲解详细,感兴趣的小伙伴可... 目录Full GC的原理与触发条件原理触发条件对Spring Boot应用的影响示例代码优化建议结论F

SpringRetry重试机制之@Retryable注解与重试策略详解

《SpringRetry重试机制之@Retryable注解与重试策略详解》本文将详细介绍SpringRetry的重试机制,特别是@Retryable注解的使用及各种重试策略的配置,帮助开发者构建更加健... 目录引言一、SpringRetry基础知识二、启用SpringRetry三、@Retryable注解

MySQL 分区与分库分表策略应用小结

《MySQL分区与分库分表策略应用小结》在大数据量、复杂查询和高并发的应用场景下,单一数据库往往难以满足性能和扩展性的要求,本文将详细介绍这两种策略的基本概念、实现方法及优缺点,并通过实际案例展示如... 目录mysql 分区与分库分表策略1. 数据库水平拆分的背景2. MySQL 分区策略2.1 分区概念

Spring Shell 命令行实现交互式Shell应用开发

《SpringShell命令行实现交互式Shell应用开发》本文主要介绍了SpringShell命令行实现交互式Shell应用开发,能够帮助开发者快速构建功能丰富的命令行应用程序,具有一定的参考价... 目录引言一、Spring Shell概述二、创建命令类三、命令参数处理四、命令分组与帮助系统五、自定义S

SpringKafka错误处理(重试机制与死信队列)

《SpringKafka错误处理(重试机制与死信队列)》SpringKafka提供了全面的错误处理机制,通过灵活的重试策略和死信队列处理,下面就来介绍一下,具有一定的参考价值,感兴趣的可以了解一下... 目录引言一、Spring Kafka错误处理基础二、配置重试机制三、死信队列实现四、特定异常的处理策略五

MySQL中动态生成SQL语句去掉所有字段的空格的操作方法

《MySQL中动态生成SQL语句去掉所有字段的空格的操作方法》在数据库管理过程中,我们常常会遇到需要对表中字段进行清洗和整理的情况,本文将详细介绍如何在MySQL中动态生成SQL语句来去掉所有字段的空... 目录在mysql中动态生成SQL语句去掉所有字段的空格准备工作原理分析动态生成SQL语句在MySQL

C语言函数递归实际应用举例详解

《C语言函数递归实际应用举例详解》程序调用自身的编程技巧称为递归,递归做为一种算法在程序设计语言中广泛应用,:本文主要介绍C语言函数递归实际应用举例的相关资料,文中通过代码介绍的非常详细,需要的朋... 目录前言一、递归的概念与思想二、递归的限制条件 三、递归的实际应用举例(一)求 n 的阶乘(二)顺序打印

Python通过模块化开发优化代码的技巧分享

《Python通过模块化开发优化代码的技巧分享》模块化开发就是把代码拆成一个个“零件”,该封装封装,该拆分拆分,下面小编就来和大家简单聊聊python如何用模块化开发进行代码优化吧... 目录什么是模块化开发如何拆分代码改进版:拆分成模块让模块更强大:使用 __init__.py你一定会遇到的问题模www.

Java调用C++动态库超详细步骤讲解(附源码)

《Java调用C++动态库超详细步骤讲解(附源码)》C语言因其高效和接近硬件的特性,时常会被用在性能要求较高或者需要直接操作硬件的场合,:本文主要介绍Java调用C++动态库的相关资料,文中通过代... 目录一、直接调用C++库第一步:动态库生成(vs2017+qt5.12.10)第二步:Java调用C++