【Ultralytics】「10」深度解析 神经网络模块库:卷积、注意力、检测头等核心算子
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、多尺度可变形注意力
所有模块通过 init.py 的 __all__ 统一导出,并在 tasks.py 的模型构建流程中被注册和实例化。上层系统(YAML 解析器 → parse_model())仅通过类名字符串引用模块,实现了配置驱动的零代码模型定制。
原子卷积算子(conv.py)
Conv:一切卷积的基类
Conv 是整个模块库中最基础的构建单元,封装了 Conv2d → BatchNorm2d → Activation 三段式流水线。其默认激活函数为 SiLU(x * 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)由 ChannelAttention 和 SpatialAttention 串联组成。通道注意力通过全局平均池化 → 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=True 且 c1==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。
空间金字塔池化: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)) 简洁地实现了串行池化链。
下采样模块: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) 做空间下采样,两步解耦使得计算量最小化。
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 张量(通常来自更高层语义特征)生成注意力权重。计算流程为:embed 和 guide 做矩阵乘法 → 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)) + x。TransformerBlock 在其基础上添加了可学习位置嵌入(nn.Linear)和可选的通道适配 Conv,将 2D 特征图展平为序列后处理。
Sources: transformer.py
MSDeformAttn:多尺度可变形注意力
MSDeformAttn 是 Deformable DETR 的核心组件,它允许每个注意力头在每个尺度上采样 n_points 个位置,而非处理整个特征图。其参数化包括:sampling_offsets(采样偏移)、attention_weights(注意力权重)、value_proj 和 output_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_cv2 和 one2one_cv3,训练时同时输出 one-to-many 和 one-to-one 两组预测,推理时仅使用 one-to-one 分支并通过 postprocess() 的 TopK 选择替代 NMS。
推理流程中,_get_decode_boxes() 调用 make_anchors() 生成锚点,经 DFL 积分后通过 dist2bbox() 将分布预测转换为坐标,再乘以 stride 映射回原图尺度。
Sources: head.py
检测头继承体系
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 通过可逆变换将关键点分布映射到标准正态分布,训练时利用其对数似然作为正则化损失,提升关键点预测的可靠性和不确定性估计能力。
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 输出视觉嵌入,cv4(ContrastiveHead 或 BNContrastiveHead)计算视觉-文本相似度。ContrastiveHead 对特征做 L2 归一化后通过爱因斯坦求和计算相似度,乘以可学习的 logit_scale 并加上可学习的 bias。
YOLOEDetect 进一步引入了文本提示残差(reprta = Residual(SwiGLUFFN))和空间感知视觉提示嵌入(SAVPE),支持同时接受文本和视觉提示。fuse() 方法可将文本特征融合进模型权重,实现免提示推理。
Sources: head.py
RTDETRDecoder:端到端 Transformer 解码器
RTDETRDecoder 是一个完整的端到端检测解码器,包含:骨干特征投影层(input_proj)、多尺度可变形 Transformer 解码器(DeformableTransformerDecoder)、查询选择机制、去噪训练组件。其前向流程为:
- 编码器输入处理:多尺度特征经 1×1 Conv 投影到统一维度,展平拼接
- 锚点生成:
_generate_anchors()在各尺度特征图上生成网格锚点 - 查询选择:编码器输出经
enc_score_head评分,取 TopK 作为初始查询 - 解码:
DeformableTransformerDecoder迭代精炼边界框和分类分数 - 去噪训练:
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 | 重参数化瓶颈块 |
设计模式总结与扩展指南
模块库遵循以下核心设计模式:
- 统一接口:所有模块均继承
nn.Module,通过(c1, c2, ...)通道参数构造,接收张量返回张量,与nn.Sequential完全兼容 - 渐进式继承:
Detect → Segment → Segment26、C3 → C3k、C2f → C2fPSA等继承链确保代码复用最大化 - 训练/推理双模式:
forward_fuse()、fuse_convs()等方法在模型导出时将多分支结构融合为单路,实现零额外推理成本 - 端到端/非端到端统一:
end2end参数通过one2one/one2many属性对切换预测分支,同一架构支持两种训练范式
扩展自定义模块时,只需在 ultralytics/nn/modules/ 中创建新的 nn.Module 子类,并在 __init__.py 的 __all__ 中注册,tasks.py 中的 parse_model() 即可通过 YAML 配置自动识别和实例化。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)