YOLO实例分割详细解析 YOLO 的实例分割Instance Segmentation其实是在YOLO 检测Object Detection的基础上增加了一条Mask 分支。很多人学习 YOLO Seg 的时候容易陷入代码Segment Head、Proto、Coeff但是如果没有理解整个思想看源码会很痛苦。建议按照下面这个顺序理解图像分割是什么 → 为什么YOLO能够做分割 → YOLO Seg整体结构 → Mask如何生成 → Loss如何训练 → 推理过程 → 与Mask R-CNN区别 → YOLOv8/YOLO11源码分析一、先理解什么叫实例分割我们先看看几个任务输入图片 ↓ Classification分类 ↓ 猫 ------------------------------------ Detection检测 ↓ ┌─────────┐ │ 猫 │ └─────────┘ ------------------------------------ Semantic Segmentation语义分割 ↓ ██████████ ██████████ 所有猫都是同一种颜色 ------------------------------------ Instance Segmentation实例分割 ↓ ██ ████ ██ ████ 每只猫都是一个独立maskYOLO Seg做的是Instance Segmentation实例分割输出类别 bbox score mask例如person bbox confidence mask dog bbox confidence mask所以一个目标 bbox mask二、为什么YOLO能够做分割YOLO本来就是Backbone ↓ Neck ↓ Detection Head输出类别 位置 置信度那如果要做分割怎么办答案非常简单再预测一个Mask。所以YOLO Seg变成Backbone │ Neck(PAFPN) ┌──────────────┐ │ │ Detection Head Mask Head检测Head负责bbox cls scoreMask Head负责mask但是问题来了。如果每个目标直接预测640×640 409600个像素假设100个目标就是409600 ×100 ≈4000万个数太大了。所以YOLO采用了一种非常聪明的方法。三、YOLO Seg最大的创新——Prototype MaskYOLO Seg并不是每个目标预测一个完整Mask。而是所有目标共享一套Mask模板Prototype每个目标只预测组合系数Coefficient。这就是论文最大的思想。可以理解成先生成 32张基础Mask 然后每个目标告诉你 这些Mask怎么组合。举个例子。网络输出Prototype 32 × 160 × 160可以理解成Proto1 Proto2 Proto3 ... Proto32例如Proto1████ ████Proto2■■■■Proto3▒▒▒▒…这些Mask没有任何意义。它们不是人 车 狗而是一些基础纹理。有点像PCA里的基。或者神经网络自动学习出来的Basis。四、每个目标只预测32个系数例如检测Head输出bbox cls score coeffcoeff就是32维 例如 [ 0.2 -1.1 0.5 ... ]那么最终Mask就是Mask Coeff × Prototype数学表达M Σ ci × Proto_i例如Mask 0.2×Proto1 1.5×Proto2 - 0.8×Proto3 ...于是32张模板组合出来这一只狗。另一只狗coeff 不同所以生成另一张Mask。五、整个网络结构YOLO Seg可以画成输入640×640 │ Backbone │ Neck(FPN) ┌──────────────┐ │ │ Detection Head Proto HeadDetection Head输出每个Anchor Pointbbox cls score 32 coeffProto Head输出32 × 160 × 160注意Proto只有一份。所有目标共享。六、为什么Proto只有160×160640输入YOLO一般Stride4所以640 ↓ 160Proto大小160×160为什么不用640×640原因就是计算太大。160×16025600640×640409600差了16倍。所以YOLO最后Mask生成以后再Upsample回原图大小。七、Mask是怎么生成的假设Proto32 × 160 × 160Coeff32首先把Proto展开32 × 25600Coeff1 × 32矩阵乘法1×32 × 32×25600 ↓ 1×25600恢复160×160就是Mask。最后Sigmoid得到0~1每个像素都是概率。八、为什么还要Crop生成出来Mask以后其实是整个图片的Mask。例如████████████ ████████████ ████████████但是检测框只有□□□□于是YOLO只保留BBox内部。外面全部0就是Crop Mask。这一步非常重要。否则不同目标Mask会互相污染。九、推理全过程整个推理图片 ↓ Backbone ↓ Neck ↓ Detection Head ↓ bbox cls score coeff ↓ Proto Head ↓ Prototype ↓ Coeff×Prototype ↓ Mask ↓ Crop ↓ Upsample ↓ 最终Mask整个过程就是BBox Coeff Prototype十、Loss如何计算YOLO Seg总LossLoss Box Loss Cls Loss DFL Loss Mask Loss其中前三项与检测模型完全一致。新增的是Mask Loss。Mask Loss通常使用BCE Loss即预测Mask VS GT Mask逐像素计算Binary Cross Entropy。有些版本也可以结合Dice LossFocal Loss不过在 Ultralytics 的 YOLOv8/YOLO11 实现中默认实例分割训练主要采用BCE 风格的 Mask Loss检测部分仍然使用 Box、Classification 和 DFL 等损失。十一、为什么Prototype方案这么优秀假设每个目标直接预测Mask100个目标 × 160×160 256万个像素如果采用PrototypeProto 32×160×160 819200 Coeff 100×32 3200总量约82万相比直接预测减少了约3 倍以上的输出而且目标越多优势越明显。Prototype 只计算一次后续每个目标只需要预测少量系数因此内存占用更低推理速度更快更适合实时检测这也是 YOLO Seg 能够保持实时性的关键原因之一。十二、与 Mask R-CNN 的区别对比项YOLO SegMask R-CNN是否一阶段是否是否使用 ROI否是Mask 生成Prototype Coefficient每个 ROI 单独预测推理速度很快较慢精度较高通常更高实时性很好一般Mask R-CNN的思路是每个检测框都裁剪出一个 ROI再单独预测一个小尺寸 Mask因此计算量会随着目标数量增加而增加。YOLO Seg则只生成一套共享 Prototype每个目标预测一组系数进行线性组合因此更高效。十三、YOLOv8/YOLO11 分割 Head 的输出以 640×640 输入为例YOLOv8/YOLO11 的分割模型通常包含三个检测尺度P3、P4、P5以及一个 Prototype 分支。大致输出如下具体通道数会随类别数变化Detection Head P3 bbox cls 32 coeff P4 bbox cls 32 coeff P5 bbox cls 32 coeff Proto Head 32×160×160因此每个候选目标最终都会拥有边界框bbox类别class置信度score32 维 Mask 系数coeff这些系数与共享的 Prototype 相乘后即可恢复该目标的实例 Mask。十四、学习源码时建议重点关注的几个模块如果你准备深入阅读 Ultralytics YOLOv8/YOLO11 的源码建议重点理解下面几个模块它们构成了整个实例分割流程Segment Head在检测 Head 基础上增加 Mask Coefficient 的预测。Proto ModuleProto Head生成共享的 Prototype Masks。Mask 组合过程将coeff × proto得到目标 Mask。Crop Mask依据预测框裁剪 Mask仅保留目标区域。Mask Loss训练阶段计算预测 Mask 与真实 Mask 的误差。推理后处理Mask 上采样到原图尺寸并与检测结果一起输出。十五、一张图总结整个 YOLO Seg 流程输入图片 │ Backbone Neck │ ┌────────────┴────────────┐ │ │ Detection Head Proto Head (bbox/cls/score/coeff) (32×160×160) │ │ └──────────┬──────────────┘ │ coeff × Prototype矩阵乘法 │ 得到目标 Mask │ Crop 到预测框区域 │ Upsample 到原图尺寸 │ 输出 bbox class mask核心总结理解 YOLO 分割最重要的是把握三个核心思想实例分割 检测 MaskYOLO 保留检测框预测同时为每个目标增加一个实例 Mask。共享 Prototype 每目标 Coefficient网络只生成一套共享的 Prototype每个目标只预测一组系数通过线性组合得到自己的 Mask。这是 YOLO 实时实例分割的核心设计。推理流程Backbone → Detection Head Proto Head → coeff × proto → Crop → Upsample → 最终 Mask。只要真正理解了Prototype、Coefficient 和线性组合这三个概念再去阅读 Ultralytics 的Proto、SegmentHead 以及ops.process_mask()等源码就会发现代码基本就是上述流程的工程化实现。