BACK
AI Vision · YOLO26 · Multi-head

YOLO26 Multimodal

基于 YOLO26 的多模态视觉检测系统,通过可复用的 Backbone 与 Neck 架构,设计三个独立检测头,在单次前向推理中同时输出目标检测、关键点定位与实例分割三类结果。

Role独立开发者
Duration3 months
StackYOLO26 / PyTorch
YOLO26 Multi-head

一个模型,三重感知

在实际视觉检测场景中,我们往往需要同时获取目标的位置(检测框)、形态(关键点)和轮廓(分割掩码)。 传统方案通常需要为每种任务单独训练一个模型,再通过多模型级联或集成的方式组合输出——这不仅增加了系统复杂度,也带来了不可忽视的推理延迟。

YOLO26 Multimodal 项目的核心思路是:利用 YOLO26 的可复用 Backbone 和 Neck 提取统一的多尺度特征, 然后设计三个独立的 Detection Head、Keypoint Head 和 Segmentation Head,分别指向各自的损失函数和输出格式。 整个系统在单次前向推理中同时输出三类结果,实现了「一次计算,多重感知」。

多头架构设计

整体架构遵循 YOLO 系列的 One-Stage 设计哲学,但在 Head 层做了关键创新。传统 YOLO 的 Head 通常只负责单一的检测任务(bounding box + class), 而我们将 Head 拆分为三个功能独立的分支,每个分支有自己的输出通道数、激活函数和损失计算逻辑。

这种设计的最大优势在于特征复用——Backbone 和 Neck 提取的特征被三个 Head 共享,避免了重复计算。 同时,每个 Head 可以独立训练和微调,互不干扰。当只需要其中某一类输出时,可以单独关闭其他 Head,实现灵活的功能裁剪。

可复用的特征提取基座

YOLO26 的 Backbone 基于 CSP(Cross Stage Partial)架构,采用 CBS(Conv + BN + SiLU)模块作为基础构建单元, 通过 C2f 模块实现跨阶段的特征融合。Neck 部分使用 PAN-FPN(Path Aggregation Network + Feature Pyramid Network)结构, 实现自顶向下和自底向上的双向特征聚合。

关键设计:我们在 Neck 的输出端增加了通道分离机制(Channel Split),将融合后的特征图按通道维度拆分为三组, 分别送入 Detection Head、Keypoint Head 和 Segmentation Head。这种轻量级的分离方式比直接复制特征图更高效, 参数量仅增加 0.3%,但能有效减少不同任务之间的梯度冲突。

三头设计详解

📦
Detection Head
负责目标检测任务,输出 bounding box 坐标 (x, y, w, h)、objectness score 和类别概率。 采用 Decoupled Head 设计,分类和回归分支独立,使用 CIoU Loss 作为定位损失。 Anchor-free 模式,直接回归中心点偏移和宽高,支持 NMS 后处理。
🎯
Keypoint Head
负责关键点检测任务,输出预定义的 K 个关键点坐标及其可见性标签。 采用 Heatmap-based 方案,每个关键点生成 H×W 的高斯热力图,使用 MSE Loss 训练。 支持可变关键点数量(如人体 17 点、面部 68 点、手部 21 点),通过配置文件灵活定义。
🎭
Segmentation Head
负责实例分割任务,为每个检测到的目标生成像素级掩码。 采用 Mask Prototype + Coefficients 方案(类似 YOLACT),轻量级掩码解码器仅需 1ms。 输出 128×128 的掩码原型,通过检测头的系数向量线性组合生成最终掩码,兼顾精度与速度。

多任务损失函数设计

三个 Head 各自拥有独立的损失函数,总损失为加权和:

L_total = λ₁ · L_det + λ₂ · L_kpt + λ₃ · L_seg

其中 L_det 包括 CIoU 定位损失、分类 BCE 损失和 objectness BCE 损失; L_kpt 使用关键点热力图的 MSE 损失加上可见性分类损失; L_seg 采用 Dice Loss + BCE Loss 的组合,对前景/背景不平衡更鲁棒。

权重系数通过实验调优确定:λ₁=1.0, λ₂=0.5, λ₃=0.8。我们还引入了动态权重调整策略—— 在训练初期增大 L_det 的权重让模型先学会定位,中后期逐步提升 L_kpt 和 L_seg 的权重让模型精细化形态输出。

训练策略

数据集方面,我们收集并标注了约 12,000 张多任务标注图像,每张图像同时包含检测框、关键点坐标和分割掩码三类标注。 数据增强采用 Mosaic + MixUp + Random HSV + 水平翻转的组合策略,并针对关键点任务做了特殊的几何变换(确保关键点坐标同步变换)。

训练采用 AdamW 优化器,初始学习率 1e-3,余弦退火调度。Batch size 为 32(4×8 GPU), 总训练 epoch 为 300。前 50 epoch 使用 Warmup + 冻结 Backbone 策略,仅训练 Neck 和三个 Head, 加速收敛并避免早期的梯度震荡。

核心推理代码

多头推理的前向传播流程

multimodal_infer.py
import torch
from yolo26 import YOLO26MultiHead
# Initialize multi-head model
model = YOLO26MultiHead(
backbone='cspdarknet26',
neck='pan_fpn',
heads={'det': 80, 'kpt': 17, 'seg': 32},
channel_split=True
)
model.load_state_dict(torch.load('yolo26_multi_best.pt'))
model.eval()
# Single forward pass → triple output
with torch.no_grad():
det_out, kpt_out, seg_out = model(image)
# Detection: boxes + classes
boxes = det_out.boxes.xyxy # [N, 4]
scores = det_out.scores # [N, num_classes]
# Keypoints: [N, K, 3] (x, y, visibility)
keypoints = kpt_out.points
# Segmentation: [N, H, W] binary masks
masks = seg_out.masks
print(f"Det: {len(boxes)} | Kpt: {keypoints.shape[1]} pts | Mask: {masks.shape}")

实验结果

48.2
mAP (det)
72.6
AP (kpt)
38.5
AP (seg)
18ms
Latency

与三模型级联方案相比,多头架构在检测 mAP 仅下降 0.8 的情况下,推理速度提升了 2.3 倍(18ms vs 42ms), 参数量减少了 37%。这证明了特征共享 + 通道分离策略的有效性——在多任务学习中, 共享特征提取器不仅能减少计算量,还能通过任务间的正则化效应提升泛化能力。