YOLOv13改进策略【注意力机制篇】| 添加SE、CBAM、ECA、CA经典注意力,即插即用

本文基于 YOLOv13 官方仓库(iMoonLab/yolov13,ultralytics 8.3.63 fork) 实测整理,Windows/CPU 环境全程可跑(flash_attn 自动降级为标准注意力)。注意力机制模块本身与模型版本无关,但插入位置、yaml 层号、注册细节在 v13 里完全不同,这篇把四个最经典的注意力模块——SE、CBAM、ECA、CA——一次性按 v13 重讲,并给出可直接复制运行的 yaml。

前言

YOLOv13(清华团队,HyperACE 超图 + FullPAD 全流水线聚合架构)把检测 backbone 换成了 DSC3k2/A2C2f/DSConv 的全新组合,还引入了 HyperACE 超图模块和 7 个 FullPAD_Tunnel 门控——注意力的插入位置必须按 v13 结构重新规划(backbone 末端是 A2C2f,全网 7 个门控的引用都要同步顺移)。这篇以 SE/CBAM/ECA/CA 四个经典模块为例,演示注意力模块如何接入 v13:结构分析、插入点选择、层号顺移、注册适配,全套实测验证。

专栏目录:YOLOv13改进目录一览

专栏地址:YOLOv13改进专栏——持续更新各方向即插即用改进

一、先看懂 YOLOv13 的结构:插入点变了

对照官方 yolov13.yaml(节选,层号从 0 数起):

backbone:
  - [-1, 1, Conv,  [64, 3, 2]]          # 0-P1/2
  - [-1, 1, Conv,  [128, 3, 2, 1, 2]]   # 1-P2/4
  - [-1, 2, DSC3k2,  [256, False, 0.25]]# 2
  - [-1, 1, Conv,  [256, 3, 2, 1, 4]]   # 3-P3/8
  - [-1, 2, DSC3k2,  [512, False, 0.25]]# 4
  - [-1, 1, DSConv,  [512, 3, 2]]       # 5-P4/16
  - [-1, 4, A2C2f, [512, True, 4]]      # 6
  - [-1, 1, DSConv,  [1024, 3, 2]]      # 7-P5/32
  - [-1, 4, A2C2f, [1024, True, 1]]     # 8  ★backbone末端
head:
  - [[4, 6, 8], 2, HyperACE, [...]]     # 9  ★超图模块,吃三个尺度
  - [-1, 1, nn.Upsample, [...]]         # 10
  - [ 9, 1, DownsampleConv, []]         # 11
  - [[6, 9], 1, FullPAD_Tunnel, []]     # 12 ★门控引用了第9层!
  ...(共7个FullPAD_Tunnel分散在全网)
  - [[23, 27, 31], 1, Detect, [nc]]     # 32

YOLOv13 结构的三大关键点:

  1. 没有 SPPF 和 C2PSA:backbone 末端是 A2C2f(层8),注意力的插入位置必须重新规划;
  2. HyperACE(层9)聚合 [4,6,8] 三个尺度,是 v13 的增强核心;
  3. 7 个 FullPAD_Tunnel 把增强特征分发回全网,它们的 from 引用横跨 4-27 层——插入任何新层,这些引用全部要顺移,漏一个就报错。

插入点选择:本文选在 层 8(backbone 末端 A2C2f)之后,其他合理位置还有层 9 后(HyperACE 之后)、层 17/21/26/30 后(Neck 各尺度),方法相同。新层成为 第 9 层,后面所有层顺移 +1(这就是为什么下文 yaml 里 head 的引用统一 +1)。

二、四个模块原理速览

模块本身与模型版本无关,这里简要回顾。四个都是通道/空间重加权类注意力,区别在于"如何生成权重"。

2.1 SE:Squeeze-and-Excitation 通道注意力(CVPR 2018)

SE 只做一件事:让每个通道自己学一个重要性系数。

  • Squeeze:对特征图沿空间维度做全局平均池化,把 (B, C, H, W) 压成 (B, C),得到每个通道的全局描述;
  • Excitation:用两层全连接(先降维 C → C/r,再升维回 C,中间 ReLU,最后 Sigmoid)学出 C 个 0~1 之间的权重;
  • 权重乘回原特征图,重要通道被放大,冗余通道被抑制。

降维比例 r 控制复杂度,常用 16。

2.2 CBAM:通道 + 空间串联注意力(ECCV 2018)

CBAM 认为只加权通道还不够,空间上"看哪里"同样重要,于是把两个子模块串联:

  1. 通道注意力:在 SE 基础上加强——全局平均池化和全局最大池化双路并行,共享同一个多层感知机(降维→ReLU→升维),两路输出相加过 Sigmoid 得到通道权重;
  2. 空间注意力:沿通道维分别取平均值和最大值,得到两张单通道图,拼接后用一个 7×7 卷积压缩成空间权重图,Sigmoid 后逐像素乘回特征图。

⚠️ 一个很多人不知道的细节:ultralytics 框架其实已经内置了 CBAM,但它是简化版——内置的 ChannelAttention 只有平均池化 + 单层不降维卷积,没有论文中的双池化共享 MLP 结构。做毕业论文/期刊实验时,建议使用下面的论文原版实现 CBAMAtt 并在文中注明出处,创新性和严谨性都更好。本文注册名用 CBAMAtt 以避开与内置 CBAM 的重名冲突。

2.3 ECA:无降维的高效通道注意力(CVPR 2020)

ECA 指出了 SE 的一个问题:降维全连接是有害的——它切断了通道与其权重之间的直接对应关系。ECA 的做法极其简洁:

  • 同样先全局平均池化,但不做任何降维;
  • 让 C 个权重经过一个一维卷积(kernel 大小为 k),让相邻通道之间交换信息;
  • k 不用手调,按公式 k = |log₂(C)/γ + b/γ| 自适应计算(γ=2, b=1,取最近的奇数)。

参数量几乎为零(只有一个 k×k 的一维卷积核),效果却常与 SE 持平甚至更好。

2.4 CA:方向感知的坐标注意力(CVPR 2021)

SE 和 ECA 都只建模了通道关系,丢失了位置信息;CBAM 用大卷积核补位置信息但感受野受限。CA 的思路是把全局池化拆成方向:

  • 沿高度方向池化得 (H,1)、沿宽度方向池化得 (1,W),分别保留某一方向上的长程依赖;
  • 两路拼接 → 1×1 卷积降维 → BN + HardSwish → 再拆开,各自经 1×1 卷积恢复维度后 Sigmoid,得到高度、宽度两组权重;
  • 两组权重分别与特征图相乘,相当于给每个像素位置一个"行权重 × 列权重"的组合,既建模通道又精确定位。

对小目标和长条形目标尤其友好,是检测任务里涨点比较稳的一个模块。

三、实现代码

六个类整体粘贴即可(SE、ChannelAtt、SpatialAtt、CBAMAtt、ECA、CA)。为避免与框架内置的 ChannelAttention / SpatialAttention / CBAM 重名冲突,论文原版类名带 Att 后缀。

import torch
from torch import nn
import math


class SE(nn.Module):
    """SE通道注意力 (Hu et al., CVPR 2018, SENet)。"""

    def __init__(self, c1, reduction=16):
        super().__init__()
        self.avg_pool = nn.AdaptiveAvgPool2d(1)
        self.fc = nn.Sequential(
            nn.Linear(c1, c1 // reduction, bias=False),
            nn.ReLU(inplace=True),
            nn.Linear(c1 // reduction, c1, bias=False),
            nn.Sigmoid(),
        )

    def forward(self, x):
        b, c, _, _ = x.shape
        y = self.avg_pool(x).view(b, c)      # Squeeze: (B,C)
        y = self.fc(y).view(b, c, 1, 1)      # Excitation: (B,C,1,1)
        return x * y.expand_as(x)


class ChannelAtt(nn.Module):
    """通道注意力:双池化 + 共享MLP(CBAM论文原版)。"""

    def __init__(self, c1, ratio=16):
        super().__init__()
        self.avg_pool = nn.AdaptiveAvgPool2d(1)
        self.max_pool = nn.AdaptiveMaxPool2d(1)
        self.mlp = nn.Sequential(
            nn.Conv2d(c1, c1 // ratio, 1, bias=False),
            nn.ReLU(inplace=True),
            nn.Conv2d(c1 // ratio, c1, 1, bias=False),
        )
        self.sigmoid = nn.Sigmoid()

    def forward(self, x):
        out = self.mlp(self.avg_pool(x)) + self.mlp(self.max_pool(x))
        return self.sigmoid(out)


class SpatialAtt(nn.Module):
    """空间注意力:通道均值+最大值拼接后7x7卷积。"""

    def __init__(self, kernel_size=7):
        super().__init__()
        assert kernel_size in (3, 7)
        self.conv = nn.Conv2d(2, 1, kernel_size, padding=kernel_size // 2, bias=False)
        self.sigmoid = nn.Sigmoid()

    def forward(self, x):
        avg_out = torch.mean(x, dim=1, keepdim=True)
        max_out, _ = torch.max(x, dim=1, keepdim=True)
        return self.sigmoid(self.conv(torch.cat([avg_out, max_out], dim=1)))


class CBAMAtt(nn.Module):
    """CBAM (Woo et al., ECCV 2018):先通道后空间。"""

    def __init__(self, c1, ratio=16, kernel_size=7):
        super().__init__()
        self.ca = ChannelAtt(c1, ratio)
        self.sa = SpatialAtt(kernel_size)

    def forward(self, x):
        x = self.ca(x) * x   # 通道重加权
        return self.sa(x) * x  # 空间重加权,返回完整特征图


class ECA(nn.Module):
    """ECA高效通道注意力 (Wang et al., CVPR 2020)。"""

    def __init__(self, c1, k_size=None):
        super().__init__()
        if k_size is None:  # 自适应核大小: k = |log2(C)/2 + 1/2|,取奇数
            t = int(abs((math.log(c1, 2) + 1) / 2))
            k_size = t if t % 2 else t + 1
        self.avg_pool = nn.AdaptiveAvgPool2d(1)
        self.conv = nn.Conv1d(1, 1, kernel_size=k_size,
                              padding=k_size // 2, bias=False)
        self.sigmoid = nn.Sigmoid()

    def forward(self, x):
        y = self.avg_pool(x)                            # (B,C,1,1)
        y = self.conv(y.squeeze(-1).transpose(-1, -2))  # (B,1,C),跨通道一维卷积
        y = y.transpose(-1, -2).unsqueeze(-1)           # (B,C,1,1)
        return x * self.sigmoid(y).expand_as(x)


class CA(nn.Module):
    """坐标注意力 Coordinate Attention (Hou et al., CVPR 2021)。"""

    def __init__(self, c1, reduction=32):
        super().__init__()
        self.pool_h = nn.AdaptiveAvgPool2d((None, 1))  # 沿宽度池化 -> (H,1)
        self.pool_w = nn.AdaptiveAvgPool2d((1, None))  # 沿高度池化 -> (1,W)
        mip = max(8, c1 // reduction)
        self.conv1 = nn.Conv2d(c1, mip, 1, 1, 0)
        self.bn1 = nn.BatchNorm2d(mip)
        self.act = nn.Hardswish(inplace=True)
        self.conv_h = nn.Conv2d(mip, c1, 1, 1, 0)
        self.conv_w = nn.Conv2d(mip, c1, 1, 1, 0)

    def forward(self, x):
        identity = x
        n, c, h, w = x.size()
        x_h = self.pool_h(x)                       # (N,C,H,1)
        x_w = self.pool_w(x).permute(0, 1, 3, 2)   # (N,C,W,1)
        y = torch.cat([x_h, x_w], dim=2)           # (N,C,H+W,1) 共享编码
        y = self.act(self.bn1(self.conv1(y)))
        x_h, x_w = torch.split(y, [h, w], dim=2)
        x_w = x_w.permute(0, 1, 3, 2)              # (N,C,1,W)
        a_h = torch.sigmoid(self.conv_h(x_h))      # 行权重
        a_w = torch.sigmoid(self.conv_w(x_w))      # 列权重
        return identity * a_w * a_h

四、添加步骤(v13 版,注意注册分支)

1. 修改 ultralytics/nn/modules/block.py

六个类整体粘贴到文件末尾(yolov13 的 block.py 有 60 个类,粘贴到末尾即可)。

2. 修改 ultralytics/nn/modules/__init__.py

⚠️ v13 坑①:from .block import (...) 块的最后一项 DSC3k2 没有尾逗号(__all__ 元组的最后一项 "DSConv" 同样没有),直接在闭合括号前插入新行会报 SyntaxError: invalid syntax。插入后记得给上一行补逗号。

两处改动——from .block import (...) 与 __all__ 都要加:

# ① 在 from .block import ( ... ) 列表末尾追加导出名
from .block import (
    ...
    DSC3k2,   # ← 补上这个逗号
    SE,
    CBAMAtt,
    ECA,
    CA,
)

# ② 在 __all__ 元组末尾追加同样的名字(注意最后一项是 "DSConv",给它补逗号)
__all__ = (
    ...
    "DSC3k2",
    "DSConv",   # ← 补上这个逗号
    "SE",
    "CBAMAtt",
    "ECA",
    "CA",
)

3. 修改 ultralytics/nn/tasks.py

from ultralytics.nn.modules import (...) 导入块同样以无尾逗号的 DSC3k2 结尾,补逗号后追加:

from ultralytics.nn.modules import (
    ...
    DSC3k2,    # ← 补上这个逗号
    SE,        # 新增
    CBAMAtt,   # 新增(论文原版,避开内置 CBAM)
    ECA,       # 新增
    CA,        # 新增
)

4. parse_model() 里加注册分支(本篇关键新坑)

⚠️ v13 新坑:SE/CBAMAtt/ECA/CA 都属于"只需输入通道数"的模块——yaml 里写 [] 空参数,需要把输入通道 ch[f] 自动塞进第一个参数。v13 原版的 parse_model() 没有任何注意力模块的现成分支(只有 AIFI、HGStem/HGBlock、FullPAD_Tunnel 等结构模块的分支),需要自己在 elif m is FullPAD_Tunnel: 之后、else: 之前加一条集合分支:

        elif m in {SE, CBAMAtt, ECA, CA}:  # 注意力模块:只需输入通道数
            args.insert(0, ch[f])

这一行的含义:这类模块的第一个参数永远是输入通道数 ch[f],其余参数(如 reduction=16、kernel_size)由模块默认值兜底,yaml 中写 [] 即可。集合里的名字必须和上面导入的名字一一对应;SimAM 这类无参数模块不需要这个分支,走默认 else: c2 = ch[f] 透传即可。

五、yaml 模型文件

新建 yolov13n-SE.yaml(文件名里的 n 会自动匹配 scales 中的 n 尺度)。这里把注意力加在 层 8(backbone 末端的 A2C2f)之后,成为 第 9 层(c1=256,因为 v13n 的 width=0.25,1024×0.25=256)——新增层后所有层号都要顺移 +1,7 个 FullPAD_Tunnel、Concat、DownsampleConv、Detect 的引用全部同步更新,可直接复制运行:

# Ultralytics YOLOv13n + SE/CBAM/ECA/CA 🚀
# 基于官方 yolov13.yaml,在 backbone 末端(原层8 A2C2f)后插入注意力层9
nc: 80 # number of classes
scales:
  n: [0.50, 0.25, 1024]
  s: [0.50, 0.50, 1024]
  l: [1.00, 1.00, 512]
  x: [1.00, 1.50, 512]
backbone:
  # [from, repeats, module, args]
  - [-1, 1, Conv, [64, 3, 2]]          # 0-P1/2
  - [-1, 1, Conv, [128, 3, 2, 1, 2]]   # 1-P2/4
  - [-1, 2, DSC3k2, [256, False, 0.25]]# 2
  - [-1, 1, Conv, [256, 3, 2, 1, 4]]   # 3-P3/8
  - [-1, 2, DSC3k2, [512, False, 0.25]]# 4
  - [-1, 1, DSConv, [512, 3, 2]]       # 5-P4/16
  - [-1, 4, A2C2f, [512, True, 4]]     # 6
  - [-1, 1, DSConv, [1024, 3, 2]]      # 7-P5/32
  - [-1, 4, A2C2f, [1024, True, 1]]    # 8
  - [-1, 1, SE, []]                    # 9 ★SE(新增层,后续层号全部+1)
head:
  - [[4, 6, 8], 2, HyperACE, [512, 8, True, True, 0.5, 1, "both"]] # 10
  - [-1, 1, nn.Upsample, [None, 2, "nearest"]]  # 11
  - [ 10, 1, DownsampleConv, []]                # 12(原from 9→10)
  - [[6, 10], 1, FullPAD_Tunnel, []]            # 13(原9→10)
  - [[4, 11], 1, FullPAD_Tunnel, []]            # 14(原10→11)
  - [[8, 12], 1, FullPAD_Tunnel, []]            # 15(原11→12)
  - [-1, 1, nn.Upsample, [None, 2, "nearest"]]  # 16
  - [[-1, 13], 1, Concat, [1]]                  # 17 cat backbone P4
  - [-1, 2, DSC3k2, [512, True]]                # 18
  - [[-1, 10], 1, FullPAD_Tunnel, []]           # 19(原9→10)
  - [ 18, 1, nn.Upsample, [None, 2, "nearest"]] # 20
  - [[-1, 14], 1, Concat, [1]]                  # 21 cat backbone P3
  - [-1, 2, DSC3k2, [256, True]]                # 22
  - [ 11, 1, Conv, [256, 1, 1]]                 # 23(原10→11)
  - [[22, 23], 1, FullPAD_Tunnel, []]           # 24(原21/22→22/23)
  - [-1, 1, Conv, [256, 3, 2]]                  # 25
  - [[-1, 19], 1, Concat, [1]]                  # 26 cat head P4
  - [-1, 2, DSC3k2, [512, True]]                # 27
  - [[-1, 10], 1, FullPAD_Tunnel, []]           # 28(原9→10)
  - [ 27, 1, Conv, [512, 3, 2]]                 # 29(原26→27)
  - [[-1, 15], 1, Concat, [1]]                  # 30 cat head P5
  - [-1, 2, DSC3k2, [1024,True]]                # 31
  - [[-1, 12], 1, FullPAD_Tunnel, []]           # 32(原11→12)
  - [[24, 28, 32], 1, Detect, [nc]]             # 33 Detect(P3,P4,P5)

换成 CBAM / ECA / CA 只需改第 9 行的模块名:把 - [-1, 1, SE, []] 改成 - [-1, 1, CBAMAtt, []]、- [-1, 1, ECA, []] 或 - [-1, 1, CA, []] 即可,其余层号与引用完全不用动(四个模块插入位置、输入输出通道一致,c1 都是 256)。

六、成功运行结果

yolo detect train model=yolov13n-SE.yaml data=mydata.yaml epochs=100 imgsz=640 batch=16

Python 方式(推荐,能继承预训练权重,收敛更快):

from ultralytics import YOLO

model = YOLO("yolov13n-SE.yaml").load("yolov13n.pt")
model.train(data="mydata.yaml", epochs=100, imgsz=640, batch=16)

本文实测(YOLOv13 官方仓库,Windows CPU,v13n 结构):

基线 yolov13n:  2,494,151 parameters, 6.5 GFLOPs
+SE:            2,502,343 parameters, 6.5 GFLOPs   第9层=SE []
+CBAMAtt:       2,502,441 parameters, 6.6 GFLOPs   第9层=CBAMAtt []
+ECA:           2,494,156 parameters, 6.5 GFLOPs   第9层=ECA []
+CA:            2,500,831 parameters, 6.5 GFLOPs   第9层=CA []

✅ 单元与整网断言全部通过:第 9 层分别为 SE / CBAMAtt / ECA / CA,层号顺移后的 34 层(0~33)yaml 全部引用正确;四个模块在 yaml 中互换均验证通过,模型正常构建并训练。

模型ParamsGFLOPs参数量增量说明
YOLOv13n 基线2.49M6.5-官方结构(不含SPPF/C2PSA)
+SE2.50M6.5+8,192通道注意力,即插即用
+CBAMAtt2.50M6.6+8,290通道+空间双重加权
+ECA2.49M6.5+5近乎零成本的涨点方案
+CA2.50M6.5+6,680方向感知,小目标友好

提示:以上为 YOLOv13n(width=0.25,层9 输入通道 c1=256)实测值;mAP 消融请在你自己的数据集上完成——同一模块在不同任务上的表现可能相反,这正是消融实验的价值所在。

七、总结

v13 迁移的四个关键:插入点按 v13 结构重新选(backbone 末端是 A2C2f 不是 C2PSA,新层插在层 8 后成为层 9)、FullPAD_Tunnel/Concat/DownsampleConv/Detect 的引用层号全量顺移 +1、导入块尾逗号要自己补(from .block import 最后一项 DSC3k2、__all__ 最后一项 DSConv 都没有逗号)、别忘了给 parse_model 加 elif m in {SE, CBAMAtt, ECA, CA} 注册分支(v13 原版没有现成注意力分支,要自己加;这类"只需输入通道数"的模块必须塞 ch[f],否则 yaml 写 [] 会报错)。四个模块都是即插即用,开销极小:ECA 近乎零参数,SE/CA 只加几千参数,CBAM 多一个空间分支也才 +8,290。

选型建议:一般小目标多优先试 CA/CBAMAtt,算力紧张优先试 ECA;具体涨点一定要在自己的数据集上做消融。

觉得有帮助的话,点赞收藏关注三连支持一下,评论区欢迎交流你的实验结果~

专栏目录:YOLOv13改进目录一览 专栏地址:YOLOv13改进专栏——持续更新各方向即插即用改进

YOLOv8 改进涨点 | 模块即插即用 直接可用 在目标检测任务中,注意力机制能够帮助模型聚焦于图像中的关键区域,显著提升检测精度。。创建模块代码注册模块修改任务解析tasks.py创建YAML配置文件模块核心优势适用场景计算开销SOCA捕获二阶统计信息,增强通道间相关性需要精细特征区分的场景中等SK自适应多尺度核选择多尺度目标检测中等偏高显式特征聚集-分配机制全局上下文建模中等A2-Net双线性注意力,高效全局交互复杂场景理解中等偏高CrissCross线性复杂度全局上下文高分辨率输入,长距离依赖较低。 阅读详情

相关推荐

YOLOv13 添加注意力机制的小技巧与优化策略

摘要: YOLOv13通过改进网络架构(增强的CSPNet主干、优化的PANet颈部结构、动态检测头)显著提升目标检测性能。注意力机制通过特征增强、多尺度适应和长程依赖建模进一步优化检测效果。本文详细探讨了在YOLOv13中集成注意力机制的关键技术:1)注意力模块在主干、颈部和头部的插入位置选择;2)轻量级注意力(ECA、Coordinate Attention)优选与任务适配改进;3)参数初始化、学习率设置等优化策略;4)动态注意力机制实现输入自适应计算。实验表明,合理应用注意力可在保持实时性的同时显著提

FJN110的博客 2575

YOLOv12改进目录一览 | 涉及卷积层、轻量化、注意力、损失函数、Backbone、SPPF、Neck、检测头等全方位改进

1️⃣ 什么!不知道如何改进模型⁉️ 本专栏所使用并改进的每一个模块均包含详细的模块分析、原理讲解、个人总结、多种改进方式以及完整的修改流程,所有改进100%可直接运行,性价比极高。2️⃣ 找不到合适的模块⁉️ 所有改进点均为近三年顶会,顶刊提出的先进算法,将其融入到中,并进行二次创新,新颖度高,创新度高,能够适应不同的任务场景。3️⃣ 不确定自己改进的步骤、结果是否正确⁉️ 订阅专栏即可进群享受模型训练、模型改进、论文写作、投稿选刊,从入门到论文的各种答疑内容,非常适合新手。4️⃣ 团队内发表数篇SCI论

Limiiiing的博客 2万+

YOLOv11改进目录一览 | 涉及卷积层、轻量化、注意力、损失函数、Backbone、SPPF、Neck、检测头等全方位改进

如今各种网络模型更新迭代越来越快,计算机视觉相关的文章也越来越多,多到一些普通,通用的改进点无法达到发表的要求。本专栏正是解决这个问题!如何寻找创新点?为什么要使用这个模块?如何才能提升模型的精度?这是贯穿我们研究始终的问题。创新点在这个专栏中我已经整理好了,这已经省去了大部分时间,但是当我们使用这些新的模块去优化已有的模型,如何才能提升模型的精度,才是我们要达到的最终目标。当然我们可以使用传统的A+B+C的方法去堆积模块,然后是进行大量的实验去排列组合以实现最终的精度提升,这无可厚非。

Limiiiing的博客 6万+

YOLOv13改进目录一览 | 涉及卷积层、轻量化、注意力、损失函数、Backbone、SPPF、Neck、检测头等全方位改进

1️⃣ 已更新种不同的改进方案,专栏内的每篇文章皆,均可顺利运行。2️⃣ 订阅专栏即可进群获取以及从的各种答疑内容。3️⃣ 全新的YOLOv13改进专栏,,只为更好的满足论文发表的要求。专栏内容,专栏实时评分,全网最高,质量保证。🎫。。

Limiiiing的博客 9096

YOLOv9改进目录一览 | 涉及卷积层、轻量化、注意力、损失函数、Backbone、SPPF、Neck、检测头等全方位改进

如何寻找创新点?为什么要使用这个模块?如何才能提升模型的精度?这是贯穿我们研究始终的问题。创新点在这个专栏中我已经整理好了,这已经省去了大部分时间,但是当我们使用这些新的模块去优化已有的模型,如何才能提升模型的精度,才是我们要达到的最终目标。当然我们可以使用传统的A+B+C的方法去堆积模块,然后是进行大量的实验去排列组合以实现最终的精度提升,这无可厚非。

Limiiiing的博客 4199

YOLOv5改进系列(31)——添加Dual-ViT注意力机制(TPAMI 2023|京东提出多尺度双视觉Transformer,降低计算开销)

YOLOv5改进系列(31)——添加Dual-ViT注意力机制(TPAMI 2023|京东提出多尺度双视觉Transformer,降低计算开销)

路人贾的博客 2246

YOLOv8改进目录一览 | 涉及卷积层、轻量化、注意力、损失函数、Backbone、SPPF、Neck、检测头等全方位改进

1️⃣本专栏已更新150多种不同的改进方法,所使用并改进的每一个模块均包含详细的模块分析、原理讲解、个人总结、多种改进方式以及完整的修改流程,所有改进100%可直接运行。2️⃣所有改进点均为近三年顶会,顶刊提出的先进算法,将其融入到中,紧跟学术热点,适应不同的任务场景。3️⃣团队内发表数篇SCI论文,熟悉完整的发表流程,订阅专栏即可进群享受模型训练、模型改进、论文写作、投稿选刊,从入门到论文的各种答疑内容。4️⃣专栏内容会持续更新,最近更新时间:2024-12-24。项目介绍在大家购买专栏后,加入学

Limiiiing的博客 1万+

yolov5之魔化修改

yolov5魔改

deep_love1314的博客 2825

YOLOv13改进策略【注意力机制篇】| 注意力全家族横评:12个模块一表选型

# 一、总表:12 个模块同框对比以下数据全部为 YOLOv13n(width=0.25,插入位置:层 8 之后,c1=256)上的实测值:| 模块 | 出处 | 机制类型 | 参数增量 | GFLOPs | 注册方式 || ---- | ---- | -------- | -------- | ------ | -------- || SimAM | ICML 2021 | 能量函数 3D 加权 || 6.6 | 免注册分支(透传) || EMA | ICASSP 2023 | 分组多尺度+跨空间 |

qq_53329130的博客 18

YOLOv10改进目录一览 | 涉及卷积层、轻量化、注意力、损失函数、Backbone、SPPF、Neck、检测头等全方位改进

如何寻找创新点?为什么要使用这个模块?如何才能提升模型的精度?这是贯穿我们研究始终的问题。创新点在这个专栏中我已经整理好了,这已经省去了大部分时间,但是当我们使用这些新的模块去优化已有的模型,如何才能提升模型的精度,才是我们要达到的最终目标。当然我们可以使用传统的A+B+C的方法去堆积模块,然后是进行大量的实验去排列组合以实现最终的精度提升,这无可厚非。

Limiiiing的博客 1万+

YOLO26改进目录一览 | 涉及卷积层、轻量化、注意力、损失函数、Backbone、SPPF、Neck、检测头等全方位改进

1️⃣ 什么!不知道如何改进模型⁉️ 本专栏已更新260多种不同的改进方法,所使用并改进的每一个模块均包含详细的模块分析、原理讲解、个人总结、多种改进方式以及完整的修改流程,所有改进100%可直接运行,性价比极高。2️⃣ 找不到合适的模块⁉️ 所有改进点均为近三年顶会,顶刊提出的先进算法,将其融入到中,并进行二次创新,新颖度高,创新度高,能够适应不同的任务场景。3️⃣ 不确定自己改进的步骤、结果是否正确⁉️ 订阅专栏即可进群享受模型训练、模型改进、论文写作、投稿选刊,从入门到论文的各种答疑内容,非常适合新手

Limiiiing的博客 6167

【YOLO系列】YOLOv5超详细解读(源码详解+入门实践+改进)

一文带你详细了解YOLOv5(含YOLO系列论文讲解+源码详解+入门实践+算法改进)

路人贾的博客 25万+

YOLOv13改进策略【注意力机制篇】| ICML 2021 SimAM 无参数注意力,零参即插即用

SimAM 无参数注意力迁移到 YOLOv13(ultralytics 8.3.63):零参数即插即用、无需 parse_model 注册分支的简洁接入方式,含原理讲解、完整代码与 yaml,附运行结果验证。

qq_53329130的博客 25

YOLOv13改进策略【注意力机制篇】| 2024 MLCA 混合局部通道注意力,局部全局融合

MLCA 混合局部通道注意力在 YOLOv13 上的接入实战:融合通道、空间、局部与全局信息的模块原理、完整代码、yaml 配置与实测参数量对比(ultralytics 8.3.63 全流程验证)。

qq_53329130的博客 30

YOLOv5改进系列(28)——添加DSConv注意力卷积(ICCV 2023|用于管状结构分割的动态蛇形卷积)

YOLOv5改进系列(28)——添加DSConv注意力卷积(ICCV 2023|用于管状结构分割的动态蛇形卷积)

路人贾的博客 3158

Halcon相机标定实战:从参数设置到精度优化全解析

本文详细解析Halcon相机标定的全流程,从基础概念到实战技巧,涵盖参数设置、精度优化及常见问题解决方案。通过实际案例和代码示例,帮助读者掌握工业视觉项目中相机标定的关键技术,提升测量精度和系统稳定性。

weixin_29279153的博客 315

SPSS_Process—简单&平行&链式中介模型

本篇文章介绍采用SPSS的插件Process对简单中介、链式中介、平行中介模型进行检验的操作方法及结果解读。

m0_54401011的博客 4万+

Mplus实战:三变量随机截距交叉滞后模型(RI-CLPM)语法详解与扩展

本文详细解析了Mplus中三变量随机截距交叉滞后模型(RI-CLPM)的构建原理与语法实现。通过将变量分解为稳定的个体间差异与动态的个体内波动,模型能更纯净地揭示多变量间的纵向交互影响。文章以工作压力、睡眠质量与工作满意度为例,提供了完整的语法模板、关键参数设置(如NOCOV命令、残差相关)及结果解读指南,帮助研究者避开常见误区,稳健分析复杂动态关系。

wdx0123456的博客 922

经典EMC案例-汽车车载电子行车记录仪显示屏EMC BCI整改案例

拿到这款汽车前装车载电子行车记录仪,小编首先在实验室还原客户描述的现象,确定现象符合客户的描述,再根据现象出现的对应频率做好记录,因为通常BCI FAIL的现象不局现于一个频率点,然后通过这些现象及频点,再结合产品的构造、线束,分析构思出大致解决方案。

jack_luo4913的博客 3729

sentaurus学习笔记(HFET_pGate_GaN仿真)(五)

`(sdedr:define-constant-profile`和`(sdedr:define-constant-profile-region`命令用于定义并应用一个恒定的活性硼掺杂浓度剖面`"ndop_GaN_gate_const"`到氮化镓栅极层上,其值为`NpGaN_gate`。- `"Oxide"`指定了这一层的材料名称(在这里代表氧化层),而`"nucleation"`是这一层在仿真中的标识名称。- `"GaN"`指定了这一层的材料名称,而`"GaN_gate"`是这一层在仿真中的标识名称。

qq_52640792的博客 936

大数据知识面试题-通用(2026版)

序列号 内容 链接 1 大数据知识面试题-通用(2022版) 待续… 2 大数据知识面试题-Hadoop(2022版) 待续… 3 大数据知识面试题-MapReduce和yarn(2022版) 待续… 4 大数据知识面试题-Zookeepr (2022版) 待续… 5 大数据知识面试题-Hive (2022版) 待续… 6 大数据知识面试题-Flume(2022版) 待续… 7 大数据知识面试题-Hbase(2022版) 待续… 8 大数据知识面试题-sqoop(....

拉格朗日的学习笔记 2万+

【AI Agent系列】【MetaGPT】9. 一句话订阅专属信息 - 订阅智能体进阶,实现一个更通用的订阅智能体(2)

订阅智能体进阶(2)。不用爬虫,直接提取网页信息。从RunSubscription分离出AddSubscriptionTask的action,并且让SubscriptionRunner单独运行。

同学小张的博客 1578

MTK Camera HAL 与 FeaturePipe 架构解析:从硬件抽象到功能管线的工程落地路径

MTK 的 Camera 系统在 Android 平台下采用高度模块化的 HAL 与 FeaturePipe 架构组合,分别承担着底层硬件抽象与上层功能封装的职责。通过将 ISP、3A 算法、Sensor 驱动与图像处理节点解耦封装于功能链条中,联发科平台实现了灵活可控的影像能力调度机制。本文将基于真实项目实践,系统解析 MTK Camera HAL 与 FeaturePipe 架构的设计思路、核心模块与运行机制,结合 AE/AWB/AF 控制流、Buffer 管理策略、功能管线构建方法与多线程调度实现方式

努力分享一些人工智能、计算机视觉、影像等相关的知识干货! 1563

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

下一篇: YOLOv13改进策略【注意力机制篇】| ICML 2021 SimAM 无参数注意力,零参即插即用
Tingmanyi
博客等级 码龄6年 4粉丝 75原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值