普通 YOLO 检测 与 YOLO-seg(实例分割)差在哪里

Ultralytics 里名字差一个 -segyolo11n.ptyolo11n-seg.pt 不是换皮,是 多了一条输出支路。下面按「输入一路怎么走、最后多出什么」写,少用比喻,方便你对照代码和 Netron 里的图。


1. 共同点:前面大半条路是一样的

两条线通常都包含:

  1. Backbone:把输入图像压成多层特征图(空间变小、通道变多),提取边缘、纹理、形状等层次信息。
  2. Neck(如 FPN / PAN):把不同分辨率的特征再融合,让大目标、小目标都能被照顾到。

到 Neck 为止,检测版和分割版往往共用同一套权重里的这部分(同一权重文件里不会「前半截两套参数」;你换 -seg 权重,是整网一起换,不是只换后半截)。说「共享」指的是 设计上一套骨干+颈,不是指你可以在 n 检测权重上「只接一个分割头」不训练就用。


2. 检测版:多一个「检测头」就够了

从 Neck 出来,接 Detection Head。它干的事可以概括成:在多个尺度的特征图上,对每个 锚点 / 网格位置 预测:

  • 有没有目标(objectness)、
  • 框相对网格的偏移(得到 BBox)、
  • 类别概率。

输出:一组稀疏结果——每个实例几个数(框 + 类 + 分),没有「每个像素属于谁」的稠密图。

所以:框是粗粒度的外接矩形;框和某区域在几何上相交,不等于人体像素真的进了那个区域。


3. 分割版:在检测之上再加「分割头」

-seg同一套 Neck 特征(或与之对齐的特征)上,再挂 Segmentation(实例掩码)分支。它和检测头 并行从融合特征里取信息,不是「Backbone 跑两遍」。

它多出来的东西(概念上):

  • 对每个 保留下来的检测实例,再预测一组 与掩码相关的量(常见实现里不是对整图 H×W 每个位置单独跑一层全分类,而是用 相对低分辨率的 mask 原型 / 系数 组合出每实例一张 mask,再 上采样 到和框或原图对齐;具体连接方式以你导出的 ONNX 为准)。
  • 推理结果里除了 boxes,还有 masks:每张实例一张 0~1 或 logits 再 sigmoid 的稠密图(实现里经常是 小于原图 的尺寸,需要 resize 或库里的对齐逻辑对齐到原图)。

所以表格里更准确的一句是:检测头负责「实例在哪、哪类」;分割头负责「这个实例占哪些像素(近似)」


4. 对照表(记这个就够开会)

项目普通检测 yolo11n实例分割 yolo11n-seg
典型权重后缀.pt,无 -seg.pt,带 -seg
Neck 之后检测头检测头 + 掩码分支
必备输出框、类、置信度框、类、置信度 + 每实例 mask
算力、显存相对小通常更大(多一条支路 + 上采样/后处理)
适用只要「有没有、框在哪」要轮廓、抠图、和任意 ROI 做像素与等

5. 和 Python 里 results 的对应关系

from ultralytics import YOLO

model = YOLO("yolo11n-seg.pt", task="segment")
results = model(img, verbose=False)

r0 = results[0]
# 检测头侧:框、置信度、类别
if r0.boxes is not None:
    xyxy = r0.boxes.xyxy      # 像素坐标,形状 [N, 4]
    conf = r0.boxes.conf      # [N]
    cls = r0.boxes.cls        # [N]

# 分割头侧:掩码(可能需在原图尺寸上再对齐)
if r0.masks is not None:
    m = r0.masks.data         # 常见 [N, Hm, Wm],float;N 与保留的实例数一致
    # 对齐到原图 (H, W) 用库接口或 cv2.resize,勿与 letterbox 逆变换搞反

检测-only 的权重里 masks 一般为 None-seg 权重在有人检出且未被过滤掉时才有 mask。


6. 部署和量产时多惦记三件事(和「是不是 seg」强相关)

  1. 图更大、支路更多:同样 imgsz-seg 往往比纯检测慢、占内存多;板子上用 端到端时间 测,别只盯 NPU 子图。
  2. 导出图里算子:常见有 ResizeSigmoidMul 等,是否全进 NPU 要看 SDK;回退 CPU 时延迟可能陡增。
  3. INT8:掩码边缘对量化误差敏感,量化后 阈值 τ、形态学 可能要重新扫一遍。

7. 一句话收尾

普通 YOLO:Neck 后面主要是 检测头,输出框+类+分。
YOLO-seg:Neck 后面 检测头还在,另外加 掩码分支,给每个实例一张 像素级(或对齐到像素)的 mask

结构差异可以记成 「多一条支路、多一类输出」;不必记「第几个车间」,记 数据流和 results 里多出来的字段 更实在。


Ultralytics 各版本张量名、默认 imgsz、是否默认 letterbox 以当前文档为准;要抠实现细节请 export 成 ONNX 用 Netron 打开看一遍。

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐