LabHub

博客

SOTA 分割·检测模型解析 — SAM、DETR 与 YOLO 的谱系

한국어English日本語中文

引言

在计算机视觉里,回答"什么在哪里"这个问题有两条主线:目标检测(object detection)和图像分割(segmentation)。检测用矩形框圈出物体,给出位置与类别;分割则以像素为单位描出物体的边界。本文以架构原理为核心,梳理这两个领域的代表模型沿着怎样的思路谱系演进而来。

先说明一个前提。视觉领域的 SOTA 变化非常快,特定基准上的排名和数值会随版本、设置而变动。因此本文不聚焦具体的排行榜名次,而是聚焦每个模型引入的核心概念,以及这个概念对后续研究留下的影响。不确定的最新规格不做断言,只在系列层面描述。

目标检测的谱系

两阶段检测:R-CNN 系列

检测领域早期的深度学习方法采用"先提取可能存在物体的候选区域,再对每个候选区域分类"的两阶段结构。R-CNN 开启了这条路线,此后在速度与精度上不断改进。

两阶段系列精度高,但候选生成与判定分离的结构,使其在实时推理上相对沉重。

单阶段检测:YOLO 与 SSD

单阶段检测省去了候选区域生成这一步,把图像划分成网格,在每个位置一次性预测出框和类别。正如"You Only Look Once"这个名字所说,一次前向传播即完成检测。

单阶段系列在速度与精度之间取得平衡,在实务中被广泛使用。尤其是 YOLO,历经多个版本,持续改进骨干网络、特征融合(neck)、损失函数与训练技巧。由于各版本的细节结构和性能各不相同,这里只梳理系列层面的走向:"从单阶段、基于锚框出发,逐步吸收无锚(anchor-free)和端到端要素,成为实时检测的代表系列。"

锚框与 NMS:两个人工设计的旋钮

传统检测器依赖两个人工设计的要素。

这两个要素工作得很好,但需要超参数调优,也让流水线无法做到"完全端到端"。接下来的 DETR,正是瞄准了这一点。

Transformer 检测:DETR

DETR(DEtection TRansformer,arXiv 2005.12872)把检测重新定义为集合预测(set prediction)问题。核心思路是不再依赖网格、锚框、NMS,而是让 Transformer 直接输出一组物体的集合。

其基本思路如下。

        DETR 检测流水线(概念图)

  图像
    |
  [CNN 骨干]  --> 特征图
    |
  [Transformer 编码器]  (全局 self-attention)
    |
  [Transformer 解码器] <-- 物体查询集合(例如 N 个)
    |
  每个查询 -> (框坐标, 类别 或 "无物体")
    |
  用匈牙利匹配与真值 1:1 对应进行训练
    |
  结果:无需 NMS,直接输出物体集合

DETR 在概念上很优雅,但早期版本收敛慢,且对小物体较弱。后续研究针对这些问题做了改进。

综合来看,检测的大方向经历了"两阶段(精度高但沉重)→ 单阶段(快、适合实时)→ Transformer 集合预测(端到端、去除后处理)"的演进,而在实务中,这三个系列依然会根据目标共存。

检测系列对比

系列代表候选生成后处理特点
两阶段Faster R-CNNRPNNMS精度高,相对较重
单阶段YOLO、SSD无(直接预测)NMS快,适合实时
TransformerDETR 系列物体查询不需要(集合预测)端到端,概念简洁

表中的精度、速度应理解为各系列的一般倾向,而非绝对排名。实际数值会因骨干网络、输入分辨率、训练数据、版本而有很大差异。

图像分割的三类任务

分割以像素为单位回答"什么在哪里"。按目标不同分为三类。

   同一场景,三种分割视角

  语义:   [人][人][人]  -> 全部归为一种"人"的颜色
  实例:   [人1][人2][人3] -> 逐个体的掩码
  全景:   things(人1,2,3) + stuff(道路、天空) 统一处理

分割架构的演进

Segment Anything:可提示分割

思路的转变

Segment Anything(SAM,arXiv 2304.02643)改变了看待分割的方式。以往的分割模型大多针对特定数据集训练,为像素赋予"固定的类别集合"。SAM 则提出了可提示分割(promptable segmentation)这一任务:给定点、框、粗略掩码等提示,即使没有类别名称,也能分割出该提示所指向的对象。

结构

SAM 大致由三部分构成。

        SAM 结构(概念图)

  图像 --> [图像编码器(较重,只计算一次)] --> 图像嵌入
                                                    |
  提示(点/框/掩码) --> [提示编码器] --> 提示嵌入
                                                    |
                                                    v
                        [轻量掩码解码器] --> 掩码(多个)
                                                    |
                        存在歧义时输出多个候选掩码 + 置信度分数

数据引擎

SAM 中常被提及的另一个关键点是其构建大规模掩码数据的方式。通过模型与人工轮流生成、检验掩码的迭代过程,构建出了人工难以独力完成的规模的掩码数据。"将多种物体按提示分离出来"这种泛化能力,很大程度上正是来自这种大规模、多样化的数据。

SAM 的意义与局限

开放词汇检测与分割

传统检测器只能识别训练时见过的固定类别列表。开放词汇(open-vocabulary)方法正是要打破这一限制。利用图文联合训练得到的表示(例如把图像和文本对齐到同一空间的对比学习系列),即使是训练时没有明确标注的类别,也能通过文本描述来指示查找。

将 SAM 系列的可提示分割与开放词汇检测组合,就能构建出"用文本指示要找什么,再把该目标分离为像素掩码"的流水线。检测、分割、语言对齐表示像组件一样彼此结合,是近来趋势的一个特征。

骨干网络的演进:谁在提取特征

检测、分割模型大体可分为"骨干网络(backbone)+ 颈部(neck)+ 头部(head)"三部分。其中骨干网络是从图像中提取特征的核心组件,骨干网络的进步在很大程度上带动了检测、分割性能的提升。

   检测、分割模型的 3 段式结构(概念图)

  图像
    |
  [骨干网络]  --> 各种分辨率的特征图
    |
  [颈部(FPN 等)]  --> 跨尺度特征融合
    |
  [头部]  --> 框/类别 或 掩码预测

骨干网络的选择是精度与速度之间的一个重要旋钮。重型骨干网络精度高但速度慢,轻量骨干网络速度快但在困难场景中会有所损失。实务中要根据目标延迟与精度选择骨干网络,需要的话可以从预训练权重开始。

评价指标:mAP 与 IoU

理解检测、分割结果是如何被判定为"好/坏"的,能让你更准确地读懂基准数值。

   IoU 概念(以框为例)

  IoU = 交集面积 / 并集面积

  匹配好:  预测与真值大面积重叠 --> IoU 高
  没对上:  重叠很小 --> IoU 低

  通常 IoU 阈值(例如 0.5)以上就算作"命中的检测"

需要注意的是,仅凭一个 mAP 数值很难给模型排序。同样的 mAP,在小物体、大物体、特定类别上的强弱可能不同。此外,基准数据集的特性(城市道路、室内、航拍等)不同,排名也可能反转。数值只有配合"在哪个数据集、以怎样的 IoU 标准测得"一起看,才有意义。

损失函数的视角

检测、分割模型通常合并多个损失来训练。理解每个损失在教模型学什么,有助于理解模型的行为。

损失设计往往左右着精度与稳定性。例如,如果没能妥善处理背景不平衡,模型可能会偏向于预测"全部都是背景"。

这里要记住的一点是,多个损失之间的权重平衡会改变模型的倾向。给框回归较大的权重,位置会更准,但分类可能变得不稳定,反之亦然。强调困难样本的损失有助于抓住稀有物体,但如果标签噪声较多,反而有学到噪声的风险。可以把损失理解为告诉模型"应该更看重什么"的一种语言。

实务流水线与常见错误

整理一下构建实际检测、分割系统时反复会遇到的一些点。

   典型的检测流水线(概念图)

  数据采集/标注
    |
  预处理·增强(裁剪、色彩变换、马赛克拼接等)
    |
  用预训练骨干网络训练
    |
  在验证集上测量 mAP + 调优阈值
    |
  用部署环境数据做微调
    |
  轻量化(量化等)后部署
    |
  运营中收集误检/漏检 -> 反馈回数据

最常见的错误,是想当然地认为"基准数值好,我们的问题也能解决好"。要时刻验证基准与实际领域之间的差距,养成用自己的数据重新测量的习惯。

检测与分割的结合

近来趋势的一大特点,是检测、分割、语言彼此像组件一样结合。梳理一下代表性的组合方式。

这类组合之所以可能,是因为每个组件都能独立发展,同时又通过标准化的接口(框、掩码、文本嵌入)相连。理解谱系,也就是理解这些组件可以如何被组装起来。

实时检测的视角

在实务中,检测常常受限于延迟。大致左右实时检测的要素如下。

YOLO 系列长期以来被视为实时检测的代表,原因在于它在不大幅牺牲精度的前提下,均衡地处理了这些要素。不过,哪个版本"最好",取决于目标延迟、精度要求和部署硬件,因此最好避免给出绝对结论。

优势与局限一览

方法优势局限
Faster R-CNN稳定的高精度相对不适合实时
YOLO/SSD实时推理速度快在极小物体、密集场景中可能吃力
DETR 系列端到端,无需 NMS早期版本收敛慢(后续版本已改善)
Mask R-CNN统一了检测与实例分割流水线较重
SAM类别无关的通用分割缺乏语义标签,编码器较重
开放词汇可用自由文本指示精度因领域、表达方式而异

谱系一览

把前面梳理的内容按时间顺序整理成发展谱系,如下所示。留意每个阶段把前一阶段的哪些部分吸收进了学习之中,就能看清整体图景。

   检测、分割的发展谱系(概念图)

  [检测]
  R-CNN --> Fast R-CNN --> Faster R-CNN   (把候选生成吸收进 RPN)
       \--> YOLO / SSD                    (去掉候选生成,单阶段)
            \--> DETR                     (去掉锚框·NMS,集合预测)
                 \--> Deformable/DINO 等  (改善收敛·小物体)

  [分割]
  FCN --> U-Net                           (编码器-解码器,跳跃连接)
       \--> Mask R-CNN                    (检测+实例分割)
            \--> 掩码 Transformer 系列     (统一的掩码集合预测)

  [通用化]
  SAM (可提示分割)
  + 开放词汇 (用文本指示)
  = 组件拼装式视觉系统

这条谱系中反复出现的模式是"把人工手动调优的要素,替换为可学习的组件"。带着这个视角,就能很快判断出新出现的模型落在谱系的哪个位置。

补充一点,这条谱系并不是"新的完全取代旧的"这样的故事。Faster R-CNN 这样的两阶段检测器,在精度至上的场合依然被使用;YOLO 系列依然是实时检测的标准;DETR 系列则凭借无需后处理的简洁,不断扩大自己的地盘。每个系列都站在不同的权衡点上,实务则根据自己想站在哪个权衡点来做选择。

什么情况选什么

答案不是唯一的,通常需要组合多个组件来适配目标。这正是理解谱系的实用意义所在。

结语

检测与分割的发展,可以概括为"把人工设计的组件逐一吸收进学习之中的过程"。候选生成被 RPN 取代,后处理被集合预测取代,固定类别被文本对齐表示取代。SAM 又在此基础上加了一条轴:"用提示分割任意物体"。

核心不在于某个模型某一时刻的排名,而在于每个模型引入的概念像组件一样被重新组合,让整个视觉系统变得更加灵活。即便新的 SOTA 不断出现,理解这条谱系的思路,能让你更快跟上变化。

最后,想强调一个实务者的态度。与其无条件搬用基准排行榜上排名最高的模型,不如先明确自己的问题所要求的权衡点(延迟对精度、框对掩码、固定类别对自由指示)。一旦这个权衡点确定下来,在本文梳理的谱系之上挑选、拼装合适的组件就会容易得多。模型会不断变化,但处理权衡的思路会长久地留存下来。

参考资料

小测验

Q1: 两阶段检测与单阶段检测的根本区别是什么? 两阶段先生成候选区域,再对每个候选分类(例如 Faster R-CNN)。单阶段没有候选生成步骤,直接从图像一次性预测出框和类别(例如 YOLO、SSD)。单阶段通常更快。

Q2: DETR 为什么能去掉 NMS? 因为训练时用匈牙利匹配把预测与真值 1:1 配对,从源头上避免出现重复预测。由于是集合预测方式,不需要事后剔除重叠的框。

Q3: 语义分割、实例分割、全景分割的区别是什么? 语义分割只为每个像素赋予类别,不区分个体。实例分割把各个物体分别分离为独立的掩码。全景分割则统一二者:背景(stuff)按语义处理,物体(things)按实例处理。

Q4: SAM 所说的"可提示分割"是什么? 给定点、框、粗略掩码等提示,即使没有类别名称,也能分割出对应的目标。它追求的是不受限于固定类别集合的通用分割。

Q5: 为什么 SAM 的图像编码器与掩码解码器的计算成本不同? 图像编码器较重,但每张图像只计算一次,嵌入可以复用。掩码解码器较轻,因此在同一张图像上可以快速处理多个提示。

Q6: 开放词汇检测的核心思路是什么? 把类别当作文本嵌入而非固定的整数标签来处理,从而可以用自由文本指示那些训练时没有明确标注的对象。它利用了图文对齐的表示。

Q7: 举出 SAM 的一个局限。 SAM 只生成掩码,不会直接赋予"这是什么"这样的语义标签。类别识别需要另外的模型,而且图像编码器较重,实时、轻量环境下需要轻量化处理。

Q8: 为什么在选择检测模型时很难断定绝对排名? 因为精度与速度会因骨干网络、输入分辨率、训练数据、版本、部署硬件而有很大差异。根据目标延迟与精度要求来挑选系列,才是现实的做法。

Q9: IoU 与 mAP 各自衡量的是什么? IoU 衡量预测区域与真值区域的重叠程度(交集/并集),是基本尺度。mAP 是在多个置信度阈值下求精确率-召回率曲线下面积,再按类别取平均得到的数值,是检测、实例分割的代表性指标。

Q10: 在检测、分割模型的"骨干网络+颈部+头部"结构中,颈部(FPN 等)的作用是什么? 它融合不同分辨率的特征图,以便同时处理小物体(高分辨率)和大物体(低分辨率)。是多尺度检测的核心组件。

Q11: 为什么"基准 mAP 高"不能保证解决实际问题? 因为基准数据集的特性可能与实际部署领域不同。光照、角度、类别分布不同会导致性能下降,因此用自己的数据重新验证很重要。

Q12: 检测器与 SAM 组合的典型方式是什么? 用检测器得到物体框,把该框作为 SAM 的提示,得到精细的像素掩码。"什么在哪里"由检测器负责,"像素边界"由 SAM 负责,这是一种职责分工。

评论

还没有评论。

登录后即可发表评论