首页 > 其他分享 >【YOLOv8改进 - 注意力机制】ContextAggregation : 上下文聚合模块,捕捉局部和全局上下文,增强特征表示

【YOLOv8改进 - 注意力机制】ContextAggregation : 上下文聚合模块,捕捉局部和全局上下文,增强特征表示

时间:2024-07-26 16:41:25浏览次数:6  
标签:聚合 conv self 矩阵 YOLOv8 channels ContextAggregation 上下文

YOLOv8目标检测创新改进与实战案例专栏

专栏目录: YOLOv8有效改进系列及项目实战目录 包含卷积,主干 注意力,检测头等创新机制 以及 各种目标检测分割项目实战案例

专栏链接: YOLOv8基础解析+创新改进+实战案例

介绍

image-20240724150933240

摘要

卷积神经网络(CNNs)在计算机视觉中无处不在,具有众多高效的变体。最近,最初在自然语言处理(NLP)中引入的Transformers越来越多地被应用于计算机视觉领域。尽管早期采用者继续使用CNN骨干网络,但最新的网络是端到端的、无CNN的Transformer解决方案。一个最近令人惊讶的发现表明,基于简单多层感知机(MLP)的解决方案,即使没有传统的卷积或Transformer组件,也能生成有效的视觉表示。虽然CNNs、Transformers和MLP-Mixers可以被认为是完全不同的架构,但我们提供了一个统一的视角,表明它们实际上是神经网络堆栈中聚合空间上下文的一种更普遍的方法的特例。我们提出了CONTAINER(CONText AggregatIon NEtwoRk),这是一个多头上下文聚合的通用构建模块,能够像Transformers一样利用长程交互,同时仍然利用局部卷积操作的归纳偏差,从而实现更快的收敛速度,这通常在CNNs中可见。我们的CONTAINER架构在ImageNet上使用22M参数实现了82.7%的Top-1准确率,相比DeiT-Small提高了2.8个百分点,并且只需200个epoch就能收敛到79.9%的Top-1准确率。与基于Transformer的方法相比,后者在依赖更大输入图像分辨率的下游任务中不具备良好的扩展性,我们的高效网络CONTAINER-LIGHT可以应用于DETR、RetinaNet和Mask-RCNN等目标检测和实例分割网络,获得令人印象深刻的检测mAP分别为38.9、43.8、45.1,和掩码mAP为41.3,相比使用可比计算和参数规模的ResNet-50骨干分别提高了6.6、7.3、6.9和6.6个点。与DeiT在DINO框架上的自监督学习相比,我们的方法也取得了可喜的结果。代码已在GitHub发布。

文章链接

论文地址:论文地址

代码地址:代码地址

基本原理

关键组成部分和机制

  1. 输入表示

    • 输入图像表示为 $X \in \mathbb{R}^{C \times H \times W}$,其中 $C$ 是通道数, $H \times W$ 是空间维度。该图像被展平为一系列标记 ${X_i \in \mathbb{R}^C | i = 1, \ldots, N}$,其中 $N = H \times W$。
  2. 亲和矩阵

    • 定义亲和矩阵 $A \in \mathbb{R}^{N \times N}$ 以表示上下文聚合的邻域。该矩阵决定了信息在特征空间中的传播方式。聚合函数可以表示为:
      $$
      Y = (A V) W_1 + X,
      $$

      其中 $V \in \mathbb{R}^{N \times C}$ 是通过线性投影 $V = X W_2$ 从 $X$ 获得的变换版本。 $W_1$ 和 $W_2$ 是可学习参数。

  3. 多头聚合

    • 为了增加建模能力,使用多个亲和矩阵,创建几条上下文信息的路径。多头版本的聚合函数为:
      $$
      Y = \text{Concat}(A_1 V_1, \ldots, A_M V_M) W_2 + X,
      $$

      其中每个 $A_m$ (对 $m = 1, \ldots, M$)是表示特征空间内不同关系的亲和矩阵,增强了相比单头版本的表示能力。

  4. 不同架构中的上下文聚合

    • Transformers:利用基于投影的query-key对之间相似性动态生成的亲和矩阵。自注意机制可以表示为:
      $$
      A_{sa}^m = \text{Softmax}\left(\frac{Q_m K_m^T}{\sqrt{C/M}}\right),
      $$
      其中 $Q_m$ 和 $K_m$ 是query和key投影。这种方法捕捉实例级信息,但计算密集。

    • 深度卷积:并行融合空间和通道信息,使用从卷积核导出的静态和稀疏亲和矩阵。这种方法高效且适合捕捉局部上下文。

    • MLP-Mixer:使用转置MLP操作进行上下文聚合,具有密集亲和矩阵:
      $$
      A_{mlp} = (W_{MLP})^T,
      $$
      其中 $W_{MLP}$ 是可学习参数。

  5. 统一框架:CONTAINER

    • CONTAINER(上下文聚合网络)模块通过可学习参数结合静态和动态亲和矩阵,提供灵活而强大的上下文聚合方法。一般形式为:
      $$
      Y = (\alpha A(X) + \beta A)V W_2 + X,
      $$
      其中 $A(X)$ 是动态亲和矩阵, $A$ 是静态亲和矩阵。 $\alpha$ 和 $\beta$ 是可学习参数。

核心代码

class ContextAggregation(nn.Module):


    def __init__(self, in_channels, reduction=1):
        super(ContextAggregation, self).__init__()
        self.in_channels = in_channels
        self.reduction = reduction
        self.inter_channels = max(in_channels // reduction, 1)

        conv_params = dict(kernel_size=1, act_cfg=None)

        self.a = ConvModule(in_channels, 1, **conv_params)
        self.k = ConvModule(in_channels, 1, **conv_params)
        self.v = ConvModule(in_channels, self.inter_channels, **conv_params)
        self.m = ConvModule(self.inter_channels, in_channels, **conv_params)
        self.init_weights()

    def init_weights(self):
        for m in (self.a, self.k, self.v):
            caffe2_xavier_init(m.conv)
        constant_init(self.m.conv, 0)

    def forward(self, x):

        n = x.size(0)
        c = self.inter_channels
        a = self.a(x).sigmoid()
        k = self.k(x).view(n, 1, -1, 1).softmax(2)
        v = self.v(x).view(n, 1, c, -1)
        y = torch.matmul(v, k).view(n, c, 1, 1)
        y = self.m(y) * a
        return x + y

task与yaml配置

详见:https://blog.csdn.net/shangyanaf/article/details/140664662

标签:聚合,conv,self,矩阵,YOLOv8,channels,ContextAggregation,上下文
From: https://www.cnblogs.com/banxia-frontend/p/18325683

相关文章

  • 【YOLOv8改进- 多模块融合改进】GhostConv + ContextAggregation 幽灵卷积与上下文聚
    YOLOv8目标检测创新改进与实战案例专栏专栏目录:YOLOv8有效改进系列及项目实战目录包含卷积,主干注意力,检测头等创新机制以及各种目标检测分割项目实战案例专栏链接:YOLOv8基础解析+创新改进+实战案例ContextAggregation介绍摘要卷积神经网络(CNNs)在计算机视觉中无......
  • YOLOV8训练过程中的那些事
    经过一系列的折腾,终于可以开始训练模型了,好在官网上提供了多种情况下的训练代码,直接使用即可。官网提供的代码如下:点击查看代码fromultralyticsimportYOLO#加载模型model=YOLO("yolov8n.yaml")#从YAML中创建一个新的模型model=YOLO("yolov8n.pt")#使用一个......
  • YOLOv8改进 | 主干网络 | ⭐重写星辰Rewrite the Stars⭐【CVPR2024】
     秋招面试专栏推荐:深度学习算法工程师面试问题总结【百面算法工程师】——点击即可跳转......
  • 在安卓上运行yolov8目标检测模型(ncnn)
    在安卓上运行yolov8目标检测模型(ncnn)关于首次发表日期:2024-07-25本人不会Java和Android,如有错误,敬请指出主要是整理一下以下资料https://medium.com/@gary.tsai.advantest/top-tutorials-for-deploying-custom-yolov8-on-android-️-dd6746afc1e6https://github.com/FeiGeCh......
  • 【YOLOv8】实战一:手把手教你使用YOLOv8实现实时目标检测
    前言从2015年首次发布以来,YouOnlyLookOnce(YOLO)系列计算机视觉模型一直是该领域最受欢迎的模型之一。其中,YOLO架构的核心创新是将目标检测任务视为回归问题,从而使模型同时对所有目标边界框和类别概率生成预测。在过去的八年中,这种架构创新催生了一系列YOLO模型。之......
  • 在Python多处理中执行二进制信号量或互斥体以进行上下文切换操作
    我正在尝试自动化win应用程序和java应用程序之间的同步关系。我的标准是:启动win和jav应用程序在jav应用程序中执行命令等待jav应用程序的响应使用jav应用程序的响应到Windows应用程序作为输入。在jav应用程序中执行命令win应用程序......
  • 【瑞芯微RV1126(深度学习模型部署)】部署自己训练的yolov8-seg,实现足型检测!
    前言如果按照本系列第一篇博客那样交叉编译了opencv,那本文有些步骤就不用了,比如交叉编译工具链的下载,所以自己斟酌步骤。本系列第一篇:https://blog.csdn.net/m0_71523511/article/details/139636367本系列第二篇:https://blog.csdn.net/m0_71523511/article/details/14058......
  • 基于YOLOv8的汽车跟踪计数(创新点,功能实现保姆级教程)
    效果如视频所示:  YOLOV8github地址:GitHub-ultralytics/ultralytics:NEW-YOLOv8......
  • Python:添加异常上下文
    假设我想提出一个异常并提供额外的处理信息;最好的做法是什么?我想出了以下方法,但对我来说有点可疑:definternal_function():raiseValueError("smellysocks!")defcontext_function():try:internal_function()exceptExceptionase:......
  • 更改YoloV8分割颜色
    我是YoloV8训练任务的新手,想了解如何更改模型执行的分割的颜色。任何指导我的帮助将不胜感激。当然,我可以帮助解决这个问题。可以通过修改用于可视化的代码或函数来更改YOLOv8分割的颜色。以下是两种方法:方法1:修改plots.py找到......