跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像AI 生图工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
PythonAI算法

深入理解 YOLOv11 算法核心模块与结构

YOLOv11 基于 YOLOv8 架构优化,在同等精度下参数量降低约 20%。详细解析了动态卷积、C2f、C3k、PSA 等核心模块的代码实现与结构原理,涵盖从基础卷积到注意力机制的完整架构,适合希望深入理解模型底层逻辑的开发者参考。

板砖工程师发布于 2026/3/15更新于 2026/7/2337 浏览
深入理解 YOLOv11 算法核心模块与结构

YOLOv11 继承自 YOLOv8,在保持同等精度的前提下,参数量降低了约 20%。为了更直观地理解其架构演进,我们结合核心代码与结构图,逐一拆解其中的关键模块。

1. 动态卷积层

动态卷积允许网络根据输入特征自适应调整权重,提升泛化能力。

YOLOv11 整体结构

def autopad(k, p=None, d=1):
    """自动填充以保持输出形状相同"""
    if d > 1:
        k = d * (k - 1) + 1 if isinstance(k, int) else [d * (x - 1) + 1 for x in k]
    if p is None:
        p = k // 2 if isinstance(k, int) else [x // 2 for x in k]
    return p

class DynamicConv(nn.Module):
    """动态卷积层"""
    def __init__(self, c1, c2, k=1, s=1, p=None, g=1, d=1, act=True, num_experts=4):
        super().__init__()
        .conv = nn.Sequential(
            DynamicConv_Single(c1, c2, kernel_size=k, stride=s,
                               padding=autopad(k, p, d), dilation=d, groups=g, num_experts=num_experts),
            nn.BatchNorm2d(c2),
            nn.SiLU()  act  nn.Identity()
        )
     ():
         .conv(x)
self
if
else
def
forward
self, x
return
self

2. 标准卷积层

这是最基础的构建块,包含卷积、批归一化和激活函数。

Conv 层结构

class Conv(nn.Module):
    """卷积层,包含卷积、批归一化和激活函数"""
    def __init__(self, in_channels, out_channels, kernel_size=3, stride=1, padding=None, groups=1, act=True):
        super(Conv, self).__init__()
        self.conv = nn.Conv2d(in_channels, out_channels, kernel_size, stride, autopad(kernel_size, padding), groups=groups, bias=False)
        self.bn = nn.BatchNorm2d(out_channels)
        self.act = nn.SiLU() if act else nn.Identity()
    def forward(self, x):
        return self.act(self.bn(self.conv(x)))

3. Bottleneck 结构

瓶颈模块通过压缩通道再扩展的方式,在减少计算量的同时保留信息。

Bottleneck 结构

class Bottleneck(nn.Module):
    """标准瓶颈模块,包含两个卷积层"""
    def __init__(self, c1, c2, shortcut=True, g=1, k=(3, 3), e=0.5):
        super(Bottleneck, self).__init__()
        c_ = int(c2 * e)
        self.cv1 = Conv(c1, c_, k[0], 1)
        self.cv2 = Conv(c_, c2, k[1], 1)
        self.add = shortcut and c1 == c2
    def forward(self, x):
        return x + self.cv2(self.cv1(x)) if self.add else self.cv2(self.cv1(x))

4. C2f 层

C2f 结合了多个 Bottleneck 模块,在小网络中表现优异,有助于加速处理。

C2f 结构

class C2f(nn.Module):
    def __init__(self, c1, c2, n=1, shortcut=False, g=1, e=0.5):
        super().__init__()
        self.c = int(c2 * e)
        self.cv1 = Conv(c1, 2 * self.c, 1, 1)
        self.cv2 = Conv((2 + n) * self.c, c2, 1)
        self.m = nn.ModuleList(Bottleneck(self.c, self.c, shortcut, g, k=((3, 3), (3, 3)), e=1.0) for _ in range(n))
    def forward(self, x):
        y = list(self.cv1(x).chunk(2, 1))
        y.extend(m(y[-1]) for m in self.m)
        return self.cv2(torch.cat(y, 1))
    def forward_split(self, x):
        y = self.cv1(x).split((self.c, self.c), 1)
        y = [y[0], y[1]]
        y.extend(m(y[-1]) for m in self.m)
        return self.cv2(torch.cat(y, 1))

5. C3k 层

C3k 是 C3 系列的改进版,通常用于平衡速度与精度。

C3k 结构

class C3k(nn.Module):
    """C3k 模块,包含多个瓶颈模块"""
    def __init__(self, c1, c2, n=1, shortcut=False, g=1, e=0.5, k=3):
        super(C3k, self).__init__()
        c_ = int(c2 * e)
        self.m = nn.Sequential(*(Bottleneck(c1, c2, shortcut, g, k=(k, k), e=e) for _ in range(n)))
    def forward(self, x):
        return self.m(x)

6. C3k2 层

在大网络中,C3k2 往往替代 C3k,进一步增强了特征融合能力。

C3k2 结构

class C3k2(C2f):
    def __init__(self, c1, c2, n=1, c3k=False, e=0.5, g=1, shortcut=True):
        super().__init__(c1, c2, n, shortcut, g, e)
        self.m = nn.ModuleList(
            C3k(self.c, self.c, 2, shortcut, g) if c3k else Bottleneck(self.c, self.c, shortcut, g) for _ in range(n)
        )

7. C3k 动态卷积

将动态卷积引入 C3k 结构,旨在进一步提升模型的适应性。

class C3k_DynamicConv(C3k):
    """C3k 模块,使用动态卷积"""
    def __init__(self, c1, c2, n=1, shortcut=False, g=1, e=0.5, k=3):
        super().__init__(c1, c2, n, shortcut, g, e, k)
        c_ = int(c2 * e)
        self.m = nn.Sequential(*(Bottleneck_DynamicConv(c_, c_, shortcut, g, k=(k, k), e=1.0) for _ in range(n)))

class C3k2_DynamicConv(C3k2):
    """C3k2 模块,使用动态卷积"""
    def __init__(self, c1, c2, n=1, c3k=False, e=0.5, g=1, shortcut=True):
        super().__init__(c1, c2, n, c3k, e, g, shortcut)
        self.m = nn.ModuleList(C3k_DynamicConv(self.c, self.c, 2, shortcut, g) if c3k else Bottleneck_DynamicConv(self.c, self.c, shortcut, g, k=(3, 3), e=1.0) for _ in range(n))

8. FFN 层

前馈神经网络层负责非线性变换,增强特征表达能力。

FFN 结构

9. PSA 层

位置敏感注意力(PSA)模块引入了自注意力机制,帮助模型关注关键区域。

PSA 结构

class PSABlock(nn.Module):
    def __init__(self, c, attn_ratio=0.5, num_heads=4, shortcut=True) -> None:
        super().__init__()
        self.attn = Attention(c, attn_ratio=attn_ratio, num_heads=num_heads)
        self.ffn = nn.Sequential(Conv(c, c * 2, 1), Conv(c * 2, c, 1, act=False))
        self.add = shortcut
    def forward(self, x):
        x = x + self.attn(x) if self.add else self.attn(x)
        x = x + self.ffn(x) if self.add else self.ffn(x)
        return x

10. C2PSA 层

结合卷积与注意力机制的混合模块,进一步优化特征提取效果。

C2PSA 结构 注意力机制的卷积块:

Attention Block

class C2PSA(nn.Module):
    def __init__(self, c1, c2, n=1, e=0.5):
        super().__init__()
        assert c1 == c2
        self.c = int(c1 * e)
        self.cv1 = Conv(c1, 2 * self.c, 1, 1)
        self.cv2 = Conv(2 * self.c, c1, 1)
        self.m = nn.Sequential(*(PSABlock(self.c, attn_ratio=0.5, num_heads=self.c // 64) for _ in range(n)))
    def forward(self, x):
        a, b = self.cv1(x).split((self.c, self.c), dim=1)
        b = self.m(b)
        return self.cv2(torch.cat((a, b), 1))

目录

  1. 1. 动态卷积层
  2. 2. 标准卷积层
  3. 3. Bottleneck 结构
  4. 4. C2f 层
  5. 5. C3k 层
  6. 6. C3k2 层
  7. 7. C3k 动态卷积
  8. 8. FFN 层
  9. 9. PSA 层
  10. 10. C2PSA 层
  • 免费图片AI生成工具免费生成了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 免费图片视频在线生成30秒,将你的创意变成现实开始设计
  • X/Twitter免费视频下载器免登陆无限额度免费视频解析下载了解详情
  • 100+免费在线小游戏爽一把
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • AI 绘画报错修复:CheckpointLoaderSimple 模型缺失处理
  • C++核心特性解析:函数重载、引用、内联函数、auto 与 nullptr
  • SpringBoot + Vue 构建 Python 在线调试器方案
  • Unitree SDK2 Python 完整配置与使用指南
  • AgentDoG: 面向 AI 智能体安全与防护的诊断护栏框架
  • C++ 二叉搜索树简单实现:增删查改全攻略
  • JNI 开发:C++ Debug 正常 Release 返回 NaN 原因解析
  • GitHub Copilot Pro 学生免费权益获取与 VS Code 配置指南
  • OpenCode 开源 AI 编程助手:从入门到精通
  • Logseq 本地部署与 cpolar 远程访问配置指南
  • 基于 YOLO 与 LLM 的 Web 目标检测与智能分析系统
  • Web 团队开发 App:是否应该选择 Capacitor
  • Whisper.cpp 离线语音识别快速入门
  • Linux 进程控制详解
  • OpenClaw 龙虾机器人 Windows 系统部署指南
  • BR8654 蓝牙 6.0 SOC 芯片技术规格与特性
  • 文心一言 4.0 调用性能优化实战
  • ClawX 可视化 AI 智能体使用指南
  • Claude Code 跨平台安装与配置指南(Win/Linux/Mac)
  • OpenClaw Web Search 配置与渠道选择指南

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • RSA密钥对生成器

    生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online

  • Mermaid 预览与可视化编辑

    基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online

  • 随机西班牙地址生成器

    随机生成西班牙地址(支持马德里、加泰罗尼亚、安达卢西亚、瓦伦西亚筛选),支持数量快捷选择、显示全部与下载。 在线工具,随机西班牙地址生成器在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • curl 转代码

    解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online