(13)10张结构图,深入理解YOLOv11算法各个模块

(13)10张结构图,深入理解YOLOv11算法各个模块

YOLOv11继承自YOLOv8,使同等精度下参数量降低20%。

在这里插入图片描述

一、yolo v11核心代码和对应的结构

(1)动态卷积层

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__() self.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() if act else nn.Identity() ) def forward(self, x): return self.conv(x) 

(2)卷积层

image-20241214123406653
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() # 使用SiLU激活函数 def forward(self, x): return self.act(self.bn(self.conv(x))) 

(3)Bottleneck结构

image-20241214154638949
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 # 是否使用shortcut连接 def forward(self, x): """前向传播,使用shortcut连接""" return x + self.cv2(self.cv1(x)) if self.add else self.cv2(self.cv1(x)) 

(4)C2f层

​ C2f层使用了2个Bottleneck模块,在小网络会使用这个模块。

image-20241214160813691
class C2f(nn.Module): def __init__(self, c1, c2, n=1, shortcut=False, g=1, e=0.5): """Initializes a CSP bottleneck with 2 convolutions and n Bottleneck blocks for faster processing.""" super().__init__() self.c = int(c2 * e) # hidden channels self.cv1 = Conv(c1, 2 * self.c, 1, 1) self.cv2 = Conv((2 + n) * self.c, c2, 1) # optional act=FReLU(c2) 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): """Forward pass using split() instead of chunk().""" 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层

image-20241214163211679
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) # hidden channels self.m = nn.Sequential(*(Bottleneck(c1, c2, shortcut, g, k=(k, k), e=e) for _ in range(n))) # 创建n个瓶颈模块 def forward(self, x): return self.m(x) # 前向传播 

(6)C3K2层

​ 实际就使用看2个上面讲的C3K层,在大网络会使用这个模块。

image-20241214164856010
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动态卷积

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))) # 创建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层

image-20241214165337258

(9)PSA层

​ 这些模块负责自注意力(self-attention)和前馈(feed-forward)操作。PSABlock 类实现了神经网络中的位置敏感注意力块。这个类封装了应用多头注意力和前馈神经网络层的功能,并可选地包含快捷连接。

image-20241214171145038
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模块:这个模块实现了一个带有注意力机制的卷积块,目的是提升特征提取和处理的效果。
image-20241214172508365

**注意力机制的卷积块 **:

image-20241214182853058

代码:

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)) 

二、yolo入门实战教程

​ 视频教程点击:《吐血录制,yolo11猫狗实时检测实战项目,从零开始写yolov11代码》,视频全程25分钟,或B站搜“AI莫大猫”。

image-20241212090014863

​ 从零训练自己的数据集。

三、往期回顾

(1)yolo11猫狗实时检测实战项目,从零开始写yolov11代码
(2)yolo实战:从零开始学yolo之yolov1的技术原理
(3)YOLOv1训练过程,新手入门
高清动画,3分钟揭秘神经网络技术原理

在这里插入图片描述

Transfermer的Q、K、V设计的底层逻辑

Read more

你以为你在部署 AI 助手,其实也可能在打开一扇“数据侧门”:OpenClaw 安全风险全解析

你以为你在部署 AI 助手,其实也可能在打开一扇“数据侧门”:OpenClaw 安全风险全解析

🔥 个人主页:杨利杰YJlio❄️ 个人专栏:《Sysinternals实战教程》《Windows PowerShell 实战》《WINDOWS教程》《IOS教程》《微信助手》《锤子助手》《Python》《Kali Linux》《那些年未解决的Windows疑难杂症》🌟 让复杂的事情更简单,让重复的工作自动化 你以为你在部署 AI 助手,其实也可能在打开一扇“数据侧门”:OpenClaw 安全风险全解析 * * 1、你以为你在装 AI 助手,其实你可能在给系统加一个“高权限自动化入口” * 2、OpenClaw 和普通 AI 最大的区别,到底在哪里? * 3、我为什么说:OpenClaw 更像“拿到部分权限的数字操作员”? * 4、为什么说 AI 助手不是“更聪明的搜索框”? * 5、OpenClaw 的 5

By Ne0inhk
人工智能:自然语言处理在法律领域的应用与实战

人工智能:自然语言处理在法律领域的应用与实战

人工智能:自然语言处理在法律领域的应用与实战 学习目标 💡 理解自然语言处理(NLP)在法律领域的应用场景和重要性 💡 掌握法律领域NLP应用的核心技术(如合同分析、法律文本分类、案例检索) 💡 学会使用前沿模型(如BERT、GPT-3)进行法律文本分析 💡 理解法律领域的特殊挑战(如法律术语、多语言处理、数据隐私) 💡 通过实战项目,开发一个合同分析应用 重点内容 * 法律领域NLP应用的主要场景 * 核心技术(合同分析、法律文本分类、案例检索) * 前沿模型(BERT、GPT-3)在法律领域的使用 * 法律领域的特殊挑战 * 实战项目:合同分析应用开发 一、法律领域NLP应用的主要场景 1.1 合同分析 1.1.1 合同分析的基本概念 合同分析是对合同文本进行分析和处理的过程。在法律领域,合同分析的主要应用场景包括: * 合同审查:自动审查合同(如“条款分析”、“风险评估”

By Ne0inhk
本地离线部署AI大模型:OpenClaw + Ollama + Qwen3.5:cloud/Qwen3:0.6b 超详细教程(无需GPU)

本地离线部署AI大模型:OpenClaw + Ollama + Qwen3.5:cloud/Qwen3:0.6b 超详细教程(无需GPU)

前言 随着开源大模型越来越成熟,我们完全可以在自己电脑上本地运行AI,不联网、不上传数据、免费使用,隐私性极强。 今天这篇文章,我会一步步带你完成:Ollama + Qwen3.5:cloud(主力模型)+ Qwen3:0.6b(轻量备选)+ OpenClaw 的本地部署,实现一个属于自己的本地聊天AI,兼顾效果与低配置适配。 一、项目介绍 本项目实现本地离线运行阿里通义千问系列大模型(Qwen3.5:cloud 主力模型 + Qwen3:0.6b 轻量备选模型),全程不需要云端API,不需要高性能显卡,普通电脑就能跑,可根据自身电脑配置选择对应模型。 用到的工具: * Ollama:最简单的本地大模型管理工具,一键拉取、运行、管理模型 * Qwen3.5:cloud:阿里云开源的轻量高性能大语言模型,对话效果强、适配本地部署,作为主力使用

By Ne0inhk

《OpenClaw架构与源码解读》· 第 14 章 安全模型:把 AI 放在家里但不「放飞」它

第 14 章 安全模型:把 AI 放在家里但不「放飞」它 OpenClaw 拥有极强的操作能力:它可以读写你的文件、操控浏览器、发送你的邮件、运行 Shell 命令……这意味着一旦安全模型设计不当,它就可能成为一个巨大的攻击面。 本章系统地梳理 OpenClaw 的安全设计:从信任边界划定,到每个执行环节的权限控制,再到审计日志和常见误区。 14.1 信任边界:谁能让 OpenClaw 做什么 14.1.1 五层信任模型 可以把 OpenClaw 的信任边界抽象成五层: 层 1: 设备层(谁能接触你的机器?) 层 2: 账号层(谁能向 Gateway 发请求?) 层 3:

By Ne0inhk