Ultralytics 的神经网络模块库(ultralytics/nn/modules/)是整个 YOLO 系列模型的核心构建基石。它将卷积运算、注意力机制、特征融合块、检测/分割/姿态头以及 Transformer 组件高度解耦为独立的 nn.Module 子类,使得通过 YAML 配置即可灵活组合出不同架构。本文将从设计哲学出发,逐一拆解六大模块文件的职责、关键算子的数学原理与数据流,并提供模块间的横向对比与继承关系图,帮助高级开发者在自定义模型时精准选用。

模块文件总览与分层架构

模块库由六个文件构成,各司其职,形成从原子操作到复合块的层级堆叠:

ultralytics/nn/modules/
├── conv.py          # 原子卷积算子:Conv、DWConv、GhostConv、RepConv、CBAM 等
├── block.py         # 复合特征块:Bottleneck、C2f、C3、C3k2、SPP、PSA、ABlock 等
├── transformer.py   # Transformer 组件:AIFI、MLP、MSDeformAttn、解码器层等
├── head.py          # 任务头:Detect、Segment、Pose、OBB、Classify、RTDETRDecoder 等
├── activation.py    # 激活函数:AGLU(自适应门控线性单元)
└── utils.py         # 辅助函数:bias_init、inverse_sigmoid、多尺度可变形注意力

任务头 (head.py)

注意力与Transformer (transformer.py)

复合块层 (block.py)

原子层 (conv.py)

Conv
Conv2d + BN + SiLU

DWConv
深度可分离卷积

GhostConv
廉价特征生成

RepConv
重参数化卷积

CBAM
通道+空间注意力

Bottleneck
标准瓶颈块

C2f
CSP 快速实现

C3 / C3k2 / C3x
CSP 变体

SPPF
空间金字塔池化

PSA / C2PSA
位置敏感注意力

ABlock / A2C2f
区域注意力块

AIFI
注意力内特征交互

MSDeformAttn
多尺度可变形注意力

DeformableDecoderLayer

Detect
目标检测头

Segment
实例分割头

Pose / Pose26
姿态估计头

OBB / OBB26
旋转目标检测头

RTDETRDecoder
端到端解码器

C3k2

C3TR

所有模块通过 init.py__all__ 统一导出,并在 tasks.py 的模型构建流程中被注册和实例化。上层系统(YAML 解析器 → parse_model())仅通过类名字符串引用模块,实现了配置驱动的零代码模型定制。

Sources: init.py, conv.py


原子卷积算子(conv.py)

Conv:一切卷积的基类

Conv 是整个模块库中最基础的构建单元,封装了 Conv2d → BatchNorm2d → Activation 三段式流水线。其默认激活函数为 SiLUx * sigmoid(x)),通过 act 参数可替换或禁用。

class Conv(nn.Module):
    default_act = nn.SiLU()
    def __init__(self, c1, c2, k=1, s=1, p=None, g=1, d=1, act=True):
        self.conv = nn.Conv2d(c1, c2, k, s, autopad(k, p, d), groups=g, dilation=d, bias=False)
        self.bn = nn.BatchNorm2d(c2)
        self.act = self.default_act if act is True else act if isinstance(act, nn.Module) else nn.Identity()

核心设计要点:autopad(k, p, d) 函数根据核大小 k 和膨胀率 d 自动计算 “same” 填充,确保输出空间维度可预测。forward_fuse() 方法在推理阶段跳过 BN 层(权重已融合进卷积核),减少计算开销。

Sources: conv.py

卷积变体横向对比

模块 核心思想 参数效率 适用场景
Conv 标准 Conv+BN+Act 基准 通用特征变换
Conv2 3×3 + 1×1 并行分支,可融合 ≈2× Conv 训练时增强表达,推理时融合加速
DWConv 深度可分离卷积,groups=gcd(c1,c2) ≈1/k² Conv 轻量化场景
LightConv 1×1 Conv + DWConv 组合 HGNetV2 骨干
GhostConv 主卷积生成一半通道,廉价操作补齐另一半 ≈0.5× Conv 极致轻量
RepConv 3×3 + 1×1 + 可选 BN 恒等分支,推理融合 训练:多分支;推理:单分支 RT-DETR、重参数化架构
ConvTranspose 转置卷积 + BN + Act 同 Conv 上采样(分割解码器)
Focus 空间切片→通道堆叠→卷积,H/W 减半、C×4 YOLOv5 骨干入口

DWConv 通过 g=math.gcd(c1, c2) 将分组数设为输入输出通道数的最大公约数,当 c1==c2 时退化为纯深度卷积。GhostConv 遵循华为 GhostNet 哲学:先用 1×1 Conv 生成 c2//2 个特征,再用 5×5 DWConv 生成另一半,最终在通道维拼接。

RepConv 实现了经典的重参数化技巧:训练时保持 3×3 Conv、1×1 Conv 和可选的 BN 恒等三条并行分支;推理时调用 fuse_convs() 将三条分支数学等价地融合为单个 3×3 Conv,实现零额外推理开销。其 get_equivalent_kernel_bias() 方法通过 _fuse_bn_tensor() 将 BN 参数吸收进卷积权重,再将 1×1 核 zero-pad 到 3×3 尺寸后逐元素相加。

Sources: conv.py

CBAM:通道-空间双路注意力

CBAM(Convolutional Block Attention Module)由 ChannelAttentionSpatialAttention 串联组成。通道注意力通过全局平均池化 → 1×1 Conv → Sigmoid 生成通道权重 x * sigmoid(fc(pool(x)));空间注意力沿通道维计算 mean 和 max → 拼接 → 7×7 Conv → Sigmoid 生成空间掩码。两者串联施加:先通道校准再空间聚焦。

Sources: conv.py

辅助操作:Concat、Index

Concat 在指定维度上拼接多个张量,是 FPN/PANet 中跨层特征融合的基础操作。Index 从列表中选取特定索引的张量,用于 CBFuse 等需要选择性路由的场景。

Sources: conv.py


复合特征块(block.py)

Bottleneck:标准瓶颈块

Bottleneck 实现了经典的 two-layer 瓶颈结构:cv1(1×1) 降维 → cv2(3×3) 特征提取,当 shortcut=Truec1==c2 时添加残差连接。e 参数控制中间通道数 c_ = int(c2 * e),默认 0.5 即压缩一半。

class Bottleneck(nn.Module):
    def forward(self, x):
        return x + self.cv2(self.cv1(x)) if self.add else self.cv2(self.cv1(x))

Sources: block.py

CSP 家族:C2、C2f、C3、C3k2、C3x

CSP(Cross Stage Partial)网络族是 YOLO 架构的核心特征融合范式,通过分流-处理-合并策略在梯度流丰富性和计算效率间取得平衡。

模块 分流策略 合并策略 Bottleneck 数 关键差异
C2 cv1 输出 split 为两半 cat(m(a), b) → cv2 n 原始 CSP,两路分流
C2f cv1 输出 chunk 为两半,逐个通过 Bottleneck cat([a, b, m1(b), m2(...), ...]) → cv2 n 渐进式特征拼接,比 C2 更丰富
C3 两条独立 1×1 Conv 分流 cat(m(cv1(x)), cv2(x)) → cv3 n 三卷积分流,经典 YOLOv8 块
C3x 继承 C3 同 C3 n Bottleneck 使用十字卷积核 (1,3)(3,1)
C3k2 继承 C2f 同 C2f n 内部可用 C3k 块(自定义核大小)或 PSABlock
C3f 两条独立 1×1 Conv 分流 cat([cv2(x), cv1(x), m1(...), ...]) → cv3 n C3 的快速变体,类似 C2f 的渐进拼接

C2f 的核心创新在于其渐进式拼接(progressive concatenation)模式:输入经 cv1 扩展到 2c 通道后 chunk 为两个 c 通道的子张量,第一个子张量逐个通过 n 个 Bottleneck,每次 Bottleneck 的输出都与之前的特征在通道维拼接,最终所有特征经 cv2 融合回 c2 通道。这种设计使得梯度可以沿着多条路径回传,极大缓解了深层网络中的梯度消失问题。

C3k2 在 C2f 基础上提供了更灵活的内部块选择:当 c3k=True 时使用 C3k(支持自定义核大小的 CSP 块),当 attn=True 时使用 Bottleneck + PSABlock 的组合,否则使用标准 Bottleneck。

Sources: block.py, block.py

空间金字塔池化:SPP、SPPF、SPPELAN

模块 池化方式 核心优势
SPP 多核并行 MaxPool (5,9,13),结果拼接 多尺度感受野,经典设计
SPPF 同一核(5)串行池化 3 次,结果拼接 等效 SPP(k=(5,9,13)),但计算更快
SPPELAN 3 次串行 MaxPool + ELAN 融合 RT-DETR 风格,更强的特征融合

SPPF 的关键洞察:对同一特征连续 3 次 MaxPool(k=5, stride=1, padding=2) 等效于分别使用 k=5、9、13 的并行池化,但计算量更低。其实现通过 y.extend(self.m(y[-1]) for _ in range(n)) 简洁地实现了串行池化链。

Sources: block.py, block.py

下采样模块:ADown、AConv、SCDown

ADown 采用分流下采样策略:输入先经过 avg_pool2d(k=2, s=1) 平滑,然后沿通道维 chunk 为两半——前半走 3×3 Conv (stride=2),后半走 MaxPool(k=3, s=2) + 1×1 Conv,最后拼接。这种设计在保持信息完整性的同时实现 2× 空间下采样。

SCDown 实现了空间-通道分离下采样:先 1×1 Conv 做通道映射,再深度可分离 Conv (groups=c2) 做空间下采样,两步解耦使得计算量最小化。

Sources: block.py, block.py

CIB 与 C2fCIB

CIB(Compact Inverted Block)采用倒残差结构:DWConv(3×3) → 1×1 扩展 → RepVGGDW/深度Conv → 1×1 压缩 → DWConv(3×3),可选残差连接。C2fCIB 在 C2f 框架中将标准 Bottleneck 替换为 CIB,lk 参数控制是否使用大核(RepVGGDW 的 7×7 深度卷积)。

Sources: block.py

DFL:分布焦点损失积分模块

DFL(Distribution Focal Loss)将边界框回归从直接预测坐标值改为预测离散分布。其核心实现是一个不可学习的 1×1 Conv,权重被固定为 [0, 1, 2, ..., reg_max-1]

self.conv = nn.Conv2d(c1, 1, 1, bias=False).requires_grad_(False)
self.conv.weight.data[:] = nn.Parameter(x.view(1, c1, 1, 1))  # x = torch.arange(c1)

前向传播时,先将预测 reshape 为 (B, 4, reg_max, anchors) 维度,在 reg_max 维度上 softmax 后与固定权重加权求和,得到期望坐标值。这种设计使模型能够学习边界框的分布而非单一值,显著提升定位精度。

Sources: block.py


注意力机制(block.py 内)

Attention:高效自注意力

Attention 实现了专为 2D 特征图优化的自注意力机制。它通过单个 1×1 Conv 同时计算 Q、K、V(qkv = Conv(dim, h, 1, act=False)),将 QKV 拆分后执行标准缩放点积注意力。关键创新在于引入了深度卷积位置编码pe = Conv(dim, dim, 3, g=dim, act=False)),将位置信息以残差方式注入注意力输出,避免了对显式位置编码的依赖。

Sources: block.py

PSA 与 C2PSA:位置敏感注意力

PSA(Position-Sensitive Attention)采用 CSP 分流架构:输入经 cv1 扩展后 split 为 a、b 两支,a 直通,b 经过 Attention + FFN 处理后与 a 拼接,经 cv2 融合。C2PSA 进一步将 PSA 扩展为可堆叠版本,用 nn.Sequential(*PSABlock) 替代单次注意力,允许通过 n 参数控制注意力层数。

PSABlock 内部组合了 Attention 模块和一个两层的 FFN(Conv(c, 2c, 1) → Conv(2c, c, 1, act=False)),均带残差连接,形成完整的 Transformer-like 块。

Sources: block.py

AAttn 与 ABlock:区域注意力

AAttn(Area Attention)是 YOLO11 引入的高效注意力机制,支持将特征图划分为多个区域(area 参数)进行独立注意力计算,大幅降低注意力的二次复杂度。当 area > 1 时,输入被 reshape 为 B * area 个子特征分别计算注意力,计算完再恢复原始 batch 维度。

ABlock 将 AAttn 与一个两层 MLP 组合,形成完整的注意力块:x = x + attn(x); x = x + mlp(x)A2C2f 则在 C2f 框架中集成 ABlock,支持通过 a2 参数切换 ABlock/C3k 模式,以及通过 residual 参数启用带可学习 gamma 的残差连接。

Sources: block.py

MaxSigmoidAttnBlock 与 C2fAttn

MaxSigmoidAttnBlock 实现了一种引导式注意力机制:通过 guide 张量(通常来自更高层语义特征)生成注意力权重。计算流程为:embedguide 做矩阵乘法 → max pooling → 缩放 → sigmoid 加权投影特征。C2fAttn 在 C2f 框架中额外添加一个 MaxSigmoidAttnBlock 处理最后一个 Bottleneck 的输出,实现注意力增强的特征融合

Sources: block.py


Transformer 组件(transformer.py)

AIFI:注意力内特征交互

AIFI(Attention-based Intra-scale Feature Interaction)继承自 TransformerEncoderLayer,专为 2D 特征图设计。它的核心创新是在标准 Transformer 编码器基础上添加了 2D 正弦-余弦位置编码

pos_embed = self.build_2d_sincos_position_embedding(w, h, c)  # [1, h*w, c]
x = super().forward(x.flatten(2).permute(0, 2, 1), pos=pos_embed)
return x.permute(0, 2, 1).view([-1, c, h, w])

位置编码将 embed_dim 四等分,分别对宽/高维度的正弦和余弦编码,然后拼接。C3TR 模块将 AIFI 集成到 C3 框架中,用于 RT-DETR 的编码器阶段。

Sources: transformer.py

TransformerBlock 与 TransformerLayer

TransformerLayer 实现了一个简化的 Transformer 层(省略了 LayerNorm):x = MHA(q, k, v) + x; x = fc2(fc1(x)) + xTransformerBlock 在其基础上添加了可学习位置嵌入(nn.Linear)和可选的通道适配 Conv,将 2D 特征图展平为序列后处理。

Sources: transformer.py

MSDeformAttn:多尺度可变形注意力

MSDeformAttn 是 Deformable DETR 的核心组件,它允许每个注意力头在每个尺度上采样 n_points 个位置,而非处理整个特征图。其参数化包括:sampling_offsets(采样偏移)、attention_weights(注意力权重)、value_projoutput_proj(值投影和输出投影)。偏移初始化采用均匀分布在单位圆上的策略,确保初始时各头的关注方向均匀分布。

前向传播中,参考框(refer_bbox)支持两种模式:2D 点参考(中心坐标)和 4D 框参考(中心+宽高),采样位置通过参考点加偏移计算得到,最终通过 multi_scale_deformable_attn_pytorch() 函数执行双线性采样和加权聚合。

Sources: transformer.py

DeformableTransformerDecoder

DeformableTransformerDecoderLayer 每层包含三段:自注意力 → 多尺度可变形交叉注意力 → FFN,每段后接残差连接和 LayerNorm。DeformableTransformerDecoder 堆叠 num_layers 个解码层,并在每层后执行边界框迭代精炼:refined_bbox = sigmoid(bbox_pred + inverse_sigmoid(refer_bbox))。训练时所有层的输出都被收集用于辅助损失计算;推理时仅返回 eval_idx 指定层的输出。

Sources: transformer.py


任务检测头(head.py)

Detect:通用检测头基类

Detect 是所有 YOLO 检测头的基类,接收多尺度特征图列表,输出边界框回归和分类预测。其核心架构包含三组并行卷积序列:

  • cv2(边界框回归头):对每个尺度 Conv(x, c2, 3) → Conv(c2, c2, 3) → Conv2d(c2, 4*reg_max, 1),输出 DFL 格式的分布预测
  • cv3(分类头):默认使用 DWConv+Conv 的双分支结构,增强分类特征表达
  • dfl:分布焦点损失积分模块

端到端检测模式end2end=True)时会额外深拷贝 one2one_cv2one2one_cv3,训练时同时输出 one-to-many 和 one-to-one 两组预测,推理时仅使用 one-to-one 分支并通过 postprocess() 的 TopK 选择替代 NMS。

推理流程中,_get_decode_boxes() 调用 make_anchors() 生成锚点,经 DFL 积分后通过 dist2bbox() 将分布预测转换为坐标,再乘以 stride 映射回原图尺度。

Sources: head.py

检测头继承体系

Detect

+cv2: box regression head

+cv3: classification head

+dfl: DFL module

+forward(x)

+_inference(x)

+decode_bboxes()

Segment

+cv4: mask coefficient head

+proto: Proto module

+nm: number of masks

Segment26

+proto: Proto26 module

OBB

+cv4: angle prediction head

+ne: angle parameters

OBB26

+forward_head()

Pose

+cv4: keypoint head

+kpt_shape:(n_kpts, dims)

+kpts_decode()

Pose26

+cv4_kpts: separate keypoint head

+cv4_sigma: uncertainty head

+flow_model: RealNVP

Classify

+pool: AdaptiveAvgPool2d

+linear: Linear layer

WorldDetect

+cv3: embedding features

+cv4: ContrastiveHead

YOLOEDetect

+cv4: BNContrastiveHead

+reprta: text prompt residual

+savpe: spatial-aware VPE

+fuse(txt_feats)

v10Detect

+max_det: int

YOLOESegment

YOLOESegment26

Sources: head.py

Segment 与 Proto:实例分割头

Segment 在 Detect 基础上添加了 cv4(掩码系数预测头)和 Proto(原型生成模块)。Proto 模块将最高分辨率特征图通过 Conv → ConvTranspose(2×) → Conv → Conv 上采样后输出 nm 个原型掩码。推理时,掩码通过 掩码 = 原型 × 掩码系数的矩阵乘法 动态生成。

Segment26(YOLO26 分割头)替换为 Proto26,它引入了多尺度特征融合语义分割辅助头:将 backbone 各层特征通过 1×1 Conv 对齐后逐元素相加,再经 Proto 生成原型;训练时额外输出语义分割图用于辅助监督。

Sources: head.py, block.py, block.py

Pose 与 Pose26:姿态估计头

Pose 头在 Detect 基础上添加 cv4 预测关键点坐标。kpts_decode() 方法将归一化的关键点预测解码为像素坐标:xy = (pred * 2 + anchor - 0.5) * stride,可见性通过 sigmoid 计算。

Pose26 是重大升级:将关键点预测分解为坐标头(cv4_kpts)和不确定性头(cv4_sigma),并集成 RealNVP(Real-valued Non-Volume Preserving)流模型。RealNVP 通过可逆变换将关键点分布映射到标准正态分布,训练时利用其对数似然作为正则化损失,提升关键点预测的可靠性和不确定性估计能力。

Sources: head.py, block.py

OBB 与 OBB26:旋转目标检测头

OBB 头在 Detect 基础上添加 cv4 预测旋转角度(ne=1),角度通过 sigmoid 映射到 [0, π/4]OBB26 的关键区别在于输出原始角度预测(不经过 sigmoid),提供了更大的角度表达自由度。

Sources: head.py

Classify:分类头

Classify 头采用经典设计:Conv → AdaptiveAvgPool2d(1) → Dropout → Linear → softmax。中间通道数固定为 1280(与 EfficientNet-B0 对齐),训练时返回原始 logits,推理时返回 softmax 概率。

Sources: head.py

WorldDetect 与 YOLOEDetect:开放词汇检测

WorldDetect 将分类头替换为对比学习范式:cv3 输出视觉嵌入,cv4ContrastiveHeadBNContrastiveHead)计算视觉-文本相似度。ContrastiveHead 对特征做 L2 归一化后通过爱因斯坦求和计算相似度,乘以可学习的 logit_scale 并加上可学习的 bias

YOLOEDetect 进一步引入了文本提示残差(reprta = Residual(SwiGLUFFN))和空间感知视觉提示嵌入SAVPE),支持同时接受文本和视觉提示。fuse() 方法可将文本特征融合进模型权重,实现免提示推理

Sources: head.py

RTDETRDecoder:端到端 Transformer 解码器

RTDETRDecoder 是一个完整的端到端检测解码器,包含:骨干特征投影层(input_proj)、多尺度可变形 Transformer 解码器(DeformableTransformerDecoder)、查询选择机制、去噪训练组件。其前向流程为:

  1. 编码器输入处理:多尺度特征经 1×1 Conv 投影到统一维度,展平拼接
  2. 锚点生成_generate_anchors() 在各尺度特征图上生成网格锚点
  3. 查询选择:编码器输出经 enc_score_head 评分,取 TopK 作为初始查询
  4. 解码DeformableTransformerDecoder 迭代精炼边界框和分类分数
  5. 去噪训练get_cdn_group() 对真值标签和框添加噪声后作为对比去噪查询

推理时输出 (bs, 300, 4+nc) 的预测张量,完全无需 NMS 后处理。

Sources: head.py


激活函数与辅助工具

AGLU:自适应门控线性单元

AGLU 实现了参数化激活函数 exp((1/λ) * softplus(κx - log(λ))),其中 λκ 均为可学习参数。Softplus 使用负 β(β=-1),使得函数具有非单调特性。λ 被 clamp 到最小 0.0001 避免除零。

Sources: activation.py

辅助工具函数

函数 用途
bias_init_with_prob(p) 根据先验概率计算偏置初始化值 -log((1-p)/p)
linear_init(module) 使用 Kaiming 均匀分布初始化线性层
inverse_sigmoid(x) 计算逆 sigmoid log(x/(1-x)),用于 RTDETR 边界框精炼
_get_clones(module, n) 深拷贝模块 n 次,用于构建解码器层
multi_scale_deformable_attn_pytorch() PyTorch 实现的多尺度可变形注意力核心计算

Sources: utils.py


全量模块索引

以下表列出模块库中所有公开导出的模块,按功能分类:

卷积与基础操作

模块名 文件 一句话描述
Conv conv.py Conv2d + BN + SiLU 标准卷积
Conv2 conv.py 3×3 + 1×1 并行可融合卷积
DWConv conv.py 深度可分离卷积
DWConvTranspose2d conv.py 深度转置卷积
LightConv conv.py 1×1 + DWConv 轻量卷积
GhostConv conv.py GhostNet 风格廉价特征卷积
RepConv conv.py 重参数化多分支卷积
ConvTranspose conv.py 转置卷积 + BN + Act
Focus conv.py 空间切片到通道的聚焦模块
Concat conv.py 张量拼接
Index conv.py 列表索引选择
CBAM conv.py 通道-空间双路注意力
ChannelAttention conv.py 通道注意力
SpatialAttention conv.py 空间注意力

特征融合块

模块名 文件 一句话描述
Bottleneck block.py 标准残差瓶颈块
BottleneckCSP block.py CSP 风格瓶颈块
C1 block.py 单卷积 CSP 瓶颈
C2 block.py 双卷积 CSP 瓶颈
C2f block.py C2 快速实现,渐进式特征拼接
C3 block.py 三卷积 CSP 瓶颈
C3x block.py 十字卷积核 C3 变体
C3k2 block.py 支持自定义核/注意力的 C2f 变体
C3f block.py C3 的快速渐进拼接变体
C3Ghost block.py GhostBottleneck 版 C3
C3TR block.py Transformer 版 C3
RepC3 block.py RepConv 版 C3
CIB block.py 紧凑倒残差块
C2fCIB block.py CIB 版 C2f
C2fAttn block.py 注意力增强 C2f
C2fPSA block.py PSA 版 C2f
C2PSA block.py 可堆叠 PSA CSP 块

池化与下采样

模块名 文件 一句话描述
SPP block.py 空间金字塔池化
SPPF block.py 快速空间金字塔池化
SPPELAN block.py SPP + ELAN 融合
ELAN1 block.py 4 卷积 ELAN
RepNCSPELAN4 block.py CSP-ELAN 重参数化
AConv block.py 平均池化 + 卷积下采样
ADown block.py 分流下采样
SCDown block.py 分离式下采样
RepVGGDW block.py 重参数化深度卷积

注意力与 Transformer

模块名 文件 一句话描述
Attention block.py 2D 自注意力 + 深度位置编码
PSABlock block.py 位置敏感注意力块
PSA block.py 位置敏感注意力 CSP 模块
AAttn block.py 区域注意力
ABlock block.py 区域注意力块
A2C2f block.py 区域注意力 C2f
MaxSigmoidAttnBlock block.py 最大 Sigmoid 引导注意力
ImagePoolingAttn block.py 图像池化跨模态注意力
AIFI transformer.py 2D 特征图 Transformer 编码器层
TransformerBlock transformer.py 完整 ViT 块
TransformerLayer transformer.py 简化 Transformer 层
TransformerEncoderLayer transformer.py 标准 Transformer 编码器层
MSDeformAttn transformer.py 多尺度可变形注意力
DeformableTransformerDecoderLayer transformer.py 可变形解码器层
DeformableTransformerDecoder transformer.py 可变形解码器
MLP transformer.py 可配置多层感知机
MLPBlock transformer.py 单层 MLP 块
LayerNorm2d transformer.py 2D 层归一化

检测/分割/姿态/分类头

模块名 文件 一句话描述
Detect head.py 通用 YOLO 检测头
Segment head.py 实例分割头
Segment26 head.py YOLO26 分割头(Proto26)
Pose head.py 姿态估计头
Pose26 head.py YOLO26 姿态头(RealNVP 流)
OBB head.py 旋转目标检测头
OBB26 head.py YOLO26 旋转目标头
Classify head.py 分类头
WorldDetect head.py 开放词汇检测头
YOLOEDetect head.py YOLOE 文本视觉提示检测头
YOLOESegment head.py YOLOE 分割头
YOLOESegment26 head.py YOLOE YOLO26 风格分割头
v10Detect head.py YOLOv10 无 NMS 检测头
RTDETRDecoder head.py RT-DETR 端到端解码器
LRPCHead head.py 轻量区域提案与分类头

辅助与特殊模块

模块名 文件 一句话描述
DFL block.py 分布焦点损失积分
Proto block.py YOLO 掩码原型生成
Proto26 block.py YOLO26 多尺度掩码原型
ContrastiveHead block.py 对比学习分类头
BNContrastiveHead block.py BN 版对比学习头
HGStem block.py PPHGNetV2 Stem 块
HGBlock block.py PPHGNetV2 HG 块
GhostBottleneck block.py GhostNet 瓶颈块
ResNetLayer block.py ResNet 层
CBLinear block.py 通道分支线性层
CBFuse block.py 通道分支特征融合
TorchVision block.py TorchVision 模型加载封装
RealNVP block.py RealNVP 流模型
SwiGLUFFN block.py SwiGLU 前馈网络
Residual block.py 残差连接包装器
SAVPE block.py 空间感知视觉提示嵌入
RepBottleneck block.py 重参数化瓶颈块

设计模式总结与扩展指南

模块库遵循以下核心设计模式:

  1. 统一接口:所有模块均继承 nn.Module,通过 (c1, c2, ...) 通道参数构造,接收张量返回张量,与 nn.Sequential 完全兼容
  2. 渐进式继承Detect → Segment → Segment26C3 → C3kC2f → C2fPSA 等继承链确保代码复用最大化
  3. 训练/推理双模式forward_fuse()fuse_convs() 等方法在模型导出时将多分支结构融合为单路,实现零额外推理成本
  4. 端到端/非端到端统一end2end 参数通过 one2one/one2many 属性对切换预测分支,同一架构支持两种训练范式

扩展自定义模块时,只需在 ultralytics/nn/modules/ 中创建新的 nn.Module 子类,并在 __init__.py__all__ 中注册,tasks.py 中的 parse_model() 即可通过 YAML 配置自动识别和实例化。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐