本节摘要:实例分割不仅像素分类,还区分同类不同实例。本节讲它在自动驾驶多目标跟踪中的作用——每辆车是独立个体。
阅读完本节,你应当能够:
语义分割把所有"车"标一类,但自动驾驶要跟踪每辆车,需区分"哪辆是哪辆"。实例分割既像素分类又区分实例,给每个目标精确轮廓和独立 ID。
| 场景 | 语义分割 | 实例分割 |
|---|---|---|
| 3 辆车 | 都标"车"类 | 车A、车B、车C 分开 |
| 用途 | 可行驶区域 | 多目标跟踪 |
| 输出 | 类别图 | 实例掩码列表 |
实例分割为多目标跟踪提供基础——每辆车是独立个体,可分别跟踪和预测。
| 模型 | 特点 |
|---|---|
| Mask R-CNN | Faster R-CNN + 分割分支,经典 |
| YOLACT | 实时实例分割 |
| SOLOv2 | anchor-free 实例分割 |
| Mask2Former | Transformer,现代 SOTA |
自动驾驶实时性要求,用 YOLACT 等轻量实例分割。
每个实例输出:
实例分割是跟踪的基础:每帧实例分割 → 帧间实例关联 → 多目标跟踪。实例 ID 帮助跨帧关联同一目标。
⚠️ 实例分割很重:同时做分类+分割+实例区分,计算量大。自动驾驶常只在需要时用,或用轻量版本(YOLACT)。
💡 关键直觉:实例分割像素分类+区分同类实例,每辆车独立。为多目标跟踪、精细避障、行为预测提供基础。比检测和语义分割重,用轻量模型(YOLACT)或按需用。
下一节讲 3D 目标检测。
Mask R-CNN 是在 Faster R-CNN 检测头之外并联一个掩码分支。检测头给出每个候选框的类别和位置,掩码分支在候选框内部做像素级分类。它的关键设计是 RoIAlign:Faster R-CNN 用 RoIPool 把不同大小的候选框池化成固定尺寸特征,RoIPool 的两次量化会损失空间位置精度;RoIAlign 改用双线性插值,在浮点坐标上采样,让掩码精度明显提升。掩码分支用"每个类别一个二值掩码"的解耦设计,避免类别间竞争,比"所有类别一个掩码再分类"的效果更好。
图像 -> 特征图(FPN) -> RPN 候选框 -> 检测头(类别+框) -> NMS -> 掩码头(每个类别掩码) -> 实例掩码
Mask R-CNN 精度高但速度慢,量产方案更常用 one-stage 方法。YOLACT 提出原型掩码加系数线性组合的思路:先对整图预测一组原型掩码和每个实例的一组线性系数,实例掩码等于系数加权原型掩码,因为掩码不需要对每个框单独计算,速度很快。SOLOv2 走 anchor-free 路线,把实例分割分解为"实例中心区域预测加掩码预测",也绕开了候选框两阶段。评估实例分割用 mask AP——在掩码 IoU 阈值下的平均精度,和检测 AP 类似,只是把 IoU 换成掩码重叠度。自动驾驶里实例分割通常只在需要精确轮廓(精细泊车、狭窄空间通过)时启用,平时用检测加语义分割组合就够。一个工程细节:实例分割的输出可以直接喂给跟踪,把每帧的实例掩码和已有轨迹的掩码算 IoU,超过阈值就关联,比用 2D 框关联更稳——掩码包含了目标的实际形状,遮挡时即使框有偏移,重叠部分的掩码仍然能对得上。
补充实例分割与语义分割在工程选型上的差异:语义分割只需要一个全局类别图,显存占用稳定;实例分割要维护"实例列表",每个实例的掩码独立存储,在拥挤场景下实例数可能上百,内存和管理开销显著上升。因此很多系统做"按需实例分割"——平时只跑语义分割,当检测到某个区域目标密集或需要精细轮廓时,才在该区域局部启动实例分割分支。这种按需计算是量产系统控制平均算力占用的常见手段,也体现了感知工程里"精度与资源始终要权衡"的原则。