首页 > 其他分享 >YOLOv8改进 | 注意力篇 | YOLOv8引入CA注意力机制

YOLOv8改进 | 注意力篇 | YOLOv8引入CA注意力机制

时间:2024-08-29 23:23:51浏览次数:10  
标签:__ nn self 注意力 C2f YOLOv8 CA

1.CA介绍

摘要:最近关于移动网络设计的研究已经证明了通道注意力(例如,挤压和激励注意力)对于提升模型性能的显着有效性,但它们通常忽略了位置信息,而位置信息对于生成空间选择性注意力图很重要。 在本文中,我们通过将位置信息嵌入到通道注意力中,提出了一种新颖的移动网络注意力机制,我们称之为“协调注意力”。 与通过 2D 全局池化将特征张量转换为单个特征向量的通道注意力不同,坐标注意力将通道注意力分解为两个 1D 特征编码过程,分别沿两个空间方向聚合特征。 通过这种方式,可以沿一个空间方向捕获远程依赖性,同时可以沿另一空间方向保留精确的位置信息。 然后将所得的特征图分别编码为一对方向感知和位置敏感的注意力图,这些注意力图可以互补地应用于输入特征图以增强感兴趣对象的表示。 我们的坐标注意力很简单,可以灵活地插入经典移动网络,例如 MobileNetV2、MobileNeXt 和 EfficientNet,几乎没有计算开销。 大量实验表明,我们的坐标注意力不仅有利于 ImageNet 分类,而且更有趣的是,在下游任务(例如对象检测和语义分割)中表现更好。

官方论文地址:https://arxiv.org/pdf/2103.02907

官方代码地址:https://github.com/houqb/CoordAttention

简单介绍: 坐标注意力机制是一种创新的注意力机制,它巧妙地结合了通道注意力与位置信息的优势,旨在显著增强移动网络的性能。这种机制通过对特征张量在垂直和水平两个空间维度上进行1D全局池化,精确地捕获了沿这两个方向的关键特征,不仅保留了精细的位置信息,还成功捕捉了长距离依赖性。这两个维度上捕获的特征图随后被独立地编码成具有方向感知和位置敏感性的注意力图。这些注意力图随后通过乘法操作作用于输入特征图,以精准地突出和强化图像中感兴趣的对象表示。

CA模块结构图:

2.核心代码

import torch
import torch.nn as nn
import math
import torch.nn.functional as F


class h_sigmoid(nn.Module):
    def __init__(self, inplace=True):
        super(h_sigmoid, self).__init__()
        self.relu = nn.ReLU6(inplace=inplace)

    def forward(self, x):
        return self.relu(x + 3) / 6


class h_swish(nn.Module):
    def __init__(self, inplace=True):
        super(h_swish, self).__init__()
        self.sigmoid = h_sigmoid(inplace=inplace)

    def forward(self, x):
        return x * self.sigmoid(x)


class CoordAtt(nn.Module):
    def __init__(self, inp, reduction=32):
        super(CoordAtt, self).__init__()
        oup = inp
        self.pool_h = nn.AdaptiveAvgPool2d((None, 1))
        self.pool_w = nn.AdaptiveAvgPool2d((1, None))

        mip = max(8, inp // reduction)

        self.conv1 = nn.Conv2d(inp, mip, kernel_size=1, stride=1, padding=0)
        self.bn1 = nn.BatchNorm2d(mip)
        self.act = h_swish()

        self.conv_h = nn.Conv2d(mip, oup, kernel_size=1, stride=1, padding=0)
        self.conv_w = nn.Conv2d(mip, oup, kernel_size=1, stride=1, padding=0)

    def forward(self, x):
        identity = x

        n, c, h, w = x.size()
        x_h = self.pool_h(x)
        x_w = self.pool_w(x).permute(0, 1, 3, 2)

        y = torch.cat([x_h, x_w], dim=2)
        y = self.conv1(y)
        y = self.bn1(y)
        y = self.act(y)

        x_h, x_w = torch.split(y, [h, w], dim=2)
        x_w = x_w.permute(0, 1, 3, 2)

        a_h = self.conv_h(x_h).sigmoid()
        a_w = self.conv_w(x_w).sigmoid()

        out = identity * a_w * a_h

        return out

3.YOLOv8中添加CA方式  

3.1 在ultralytics/nn下新建Extramodule

3.2 在Extramodule里创建CA

在CA.py文件里添加给出的CA代码

添加完CA代码后,在ultralytics/nn/Extramodule/__init__.py文件中引用

3.3 在task.py里引用

在ultralytics/nn/tasks.py文件里引用Extramodule

在task.py找到parse_model(ctrl+f可以直接搜索parse_model位置)

添加如下代码:

        elif m in {CoordAtt}:
            c2 = ch[f]
            args = [c2, *args]

4.新建一个yolov8CA.yaml文件

# Ultralytics YOLO 

标签:__,nn,self,注意力,C2f,YOLOv8,CA
From: https://blog.csdn.net/tsg6698/article/details/141690722

相关文章

  • P10013 [集训队互测 2023] Tree Topological Order Counting
    Description给定一颗\(n\)个点的有根树,\(1\)是根,记\(u\)的父亲是\(fa_u\)。另给出一长度为\(n\)的权值序列\(b\)。称一个长度为\(n\)的排列\(a\)为这颗树的合法拓扑序,当且仅当\(\forall2\leu\len,a_u>a_{fa_u}\)。对每个点\(u\),定义\(f(u)\)为,在所有这......
  • YOLOv8改进 | Neck篇 | YOLOv8引入BiFPN双向特征金字塔网络
    1.BiFPN介绍摘要:模型效率在计算机视觉中变得越来越重要。在本文中,我们系统地研究了用于目标检测的神经网络架构设计选择,并提出了几个提高效率的关键优化。首先,我们提出了一种加权双向特征金字塔网络(BiFPN),它可以轻松快速地进行多尺度特征融合;其次,我们提出了一种复合缩放方法......
  • The Power of Scale for Parameter-Efficient Prompt Tuning
    系列论文研读目录文章目录系列论文研读目录论文题目含义Abstract1Introduction2PromptTuning2.1DesignDecisions2.2UnlearningSpanCorruption3Results3.1ClosingtheGap3.2AblationStudy4ComparisontoSimilarApproaches5ResiliencetoDomainShif......
  • 【Canvas与艺术】夏日绝句 李清照
    【成图】【代码】<!DOCTYPEhtml><htmllang="utf-8"><metahttp-equiv="Content-Type"content="text/html;charset=utf-8"/><head><title>夏日绝句</title><styletype="text/css">......
  • Simscape入门小知识1——Mechanics Explorer
    前言Simscape模型搭建完毕后运行,模型就显示在MechanicsExplorer这个可视化工具里。本篇简单介绍一下该工具的各项操作。1.布局主要有三个窗口:可视化窗口:交互模型树窗口:模型搭建的逻辑关系模型属性窗口:某部件的属性1.1可视化窗口旋转:按住鼠标滚轮移动平移:shift+按住鼠标......
  • IDEA报错:Error running 'XXXApplication' Error running XXXXApplication. Command li
     IDEA启动SpringBoot项目报错Errorrunning'XXXApplication'ErrorrunningXXXXApplication.Commandlineistoolong.ShortenthecommandlineviaJARmanifestorviaaclasspathfileandrerun   点击在高版本IDEA下只需要点击就会自动选择  低版本......
  • Php:Call to a member function fetch_all() on bool in ... #0 {main} thrown in ...
    一、软件版本  软件版本:phpstudy_proV8.2.9;二、错误描述  在编写完连接数据库,执行相关的操作的代码之后,在浏览器运行时报如下错误:Fatalerror:UncaughtError:Calltoamemberfunctionfetch_all()onboolinD:\phpstudy_pro\WWW\test2.cc\contact.php:77St......
  • 【Cocos Creator深度探索】打造极致游戏体验:Camera的妙用与实战技巧
    引言在CocosCreator这个强大的游戏开发平台中,Camera(相机)是连接游戏世界与玩家视野的桥梁。它不仅决定了玩家能看到什么,还直接影响着游戏的视觉效果和沉浸感。今天,我们就来深入探讨CocosCreator中Camera的妙用与实战技巧,让你的游戏更加引人入胜。Camera基础认知在CocosCre......
  • 各种注意力评分函数的实现
    预备知识本文基于MXNet进行实现,需要对于注意力机制有一定初步了解。也需要对Python有足够了解。另外这里稍加说明,在注意力机制中,本质上是“注意”的位置,即加权计算后进行Softmax回归的结果。在Nadaraya-Watson核回归中,首先具有一个键值对(key-value),输入称为一个查询(query),对于......
  • Orcale Database 23ai Free 安装
    下载安装包并解压文件下载地址https://download.oracle.com/otn-pub/otn_software/db-express/WINDOWS.X64_234000_free.zip官网下载网址https://www.oracle.com/cn/database/technologies/oracle-database-software-downloads.html#db_free下载完成后解压创建数据库......