Skip to content
Published on

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

分享
Authors

引言

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

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

目标检测的谱系

两阶段检测:R-CNN 系列

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

  • R-CNN:用选择性搜索(selective search)提取候选区域,将每个区域送入 CNN 提取特征,再由分类器判定。精度高,但每个候选都要重复跑一次 CNN,速度非常慢。
  • Fast R-CNN:整张图像只过一次 CNN,用 RoI Pooling 从共享特征图中裁剪出每个候选的特征并复用。大幅削减了重复计算。
  • Faster R-CNN:把候选区域的生成本身也整合进了神经网络(Region Proposal Network,RPN)。至此,检测的全流程成为一个可端到端训练的整体。

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

单阶段检测:YOLO 与 SSD

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

  • YOLO:将图像划分为网格,每个网格单元直接回归出框坐标和类别概率。速度快,适合实时应用。
  • SSD(Single Shot Detector):在多个分辨率的特征图上预测不同尺寸的框,同时兼顾小物体和大物体。

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

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

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

  • 锚框(anchor):预先设定的多种尺寸、比例的基准框。模型以锚框为基准调整(回归)出物体框。
  • NMS(Non-Maximum Suppression):当同一个物体出现多个重叠框时,事后剔除得分较低的重复框的后处理步骤。

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

Transformer 检测:DETR

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

其基本思路如下。

  • CNN 骨干网络提取图像特征,Transformer 编码器整理出全局关系。
  • 解码器接收一组学习得到的物体查询(object query),每个查询预测一个物体(或"无物体")。
  • 训练时用匈牙利匹配(Hungarian matching)将预测与真值一对一配对,从源头上避免出现重复预测。这样一来,NMS 后处理就不再需要了。
        DETR 检测流水线(概念图)

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

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

  • Deformable DETR:不再关注整张特征图,只对少数参考点周围施加注意力(attention),加快了收敛速度,提升了小物体的性能。
  • DINO 等改进系列:通过改进查询初始化、去噪训练(denoising)等方式,进一步提升精度与收敛速度的后续系列。

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

检测系列对比

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

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

图像分割的三类任务

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

  • 语义分割(semantic segmentation):为每个像素赋予一个类别,不区分同类中的不同个体。例如:把道路、天空、人这些区域各自染色,但把三个人视为同一块。
  • 实例分割(instance segmentation):用像素掩码区分各个物体(实例)。三个人会被分离成三个不同的掩码。
  • 全景分割(panoptic segmentation):统一了语义与实例。不可数的背景区域(stuff)按语义处理,可数的物体(things)按实例处理,从而完整描述整个场景。
   同一场景,三种分割视角

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

分割架构的演进

  • FCN(Fully Convolutional Network):用卷积替代全连接层,开辟了对任意尺寸输入做逐像素分类的道路。
  • U-Net:编码器收缩以获取上下文,解码器恢复以还原细节,同时用跳跃连接(skip connection)传递低层次的位置信息。在医学影像等领域被广泛使用。
  • Mask R-CNN:在 Faster R-CNN 基础上加入掩码预测分支,成为实例分割的标准方法。是将检测与分割统一在一个框架内的代表案例。
  • 基于掩码的 Transformer 方法:近年来,尝试把语义、实例、全景统一到单一"掩码集合预测"框架下的 Transformer 系列研究非常活跃。可以看作是 DETR 的集合预测思路扩展到了分割领域。

Segment Anything:可提示分割

思路的转变

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

结构

SAM 大致由三部分构成。

        SAM 结构(概念图)

  图像 --> [图像编码器(较重,只计算一次)] --> 图像嵌入
                                                    |
  提示(点/框/掩码) --> [提示编码器] --> 提示嵌入
                                                    |
                                                    v
                        [轻量掩码解码器] --> 掩码(多个)
                                                    |
                        存在歧义时输出多个候选掩码 + 置信度分数
  • 图像编码器:通常是较重的 Vision Transformer,对图像编码一次。由于该嵌入会被复用,同一张图像上处理多个提示时可以很快。
  • 提示编码器:把点、框、掩码等提示转换为嵌入。
  • 掩码解码器:结合图像嵌入与提示嵌入输出掩码。当提示存在歧义时(例如点在衣服上的某一点,到底是"衣服"还是"人"),会同时给出多个候选掩码及各自的置信度分数。

数据引擎

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

SAM 的意义与局限

  • 意义:SAM 展示了不受限于特定类别的通用分割的可能性。与其他检测器、识别器组合使用时,它可以成为诸如"把这个框内的物体抠成掩码"这类下游任务的强力组件。
  • 局限:SAM 本身不会直接赋予"这是一只猫"这样的语义标签,类别识别需要另外的模型或提示设计。此外,图像编码器较重,实时、轻量环境下需要轻量化变体或后续研究的支持。

开放词汇检测与分割

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

  • 思路:把类别当作文本嵌入,而不是固定的整数标签来处理。可以用"红色雨伞"这样自由的表达来指定目标。
  • 效果:无需每次针对新类别重新训练即可指示查找,灵活性高。
  • 注意:自由文本指示的准确度会因对象、表达方式、领域不同而有很大差异。实务中需要针对目标领域进行验证。

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

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

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

  • CNN 骨干网络:像 ResNet 系列这样,深层堆叠卷积、分层学习局部模式。长期以来一直是检测、分割的标准骨干网络。
  • 特征金字塔(FPN):把不同分辨率的特征图上下连接起来,同时处理小物体(高分辨率)和大物体(低分辨率)。是多尺度检测的核心组件。
  • Vision Transformer 骨干网络:把图像切成分块(patch),用注意力学习全局关系。分层式 Transformer 骨干网络能同时兼顾局部性与全局性,也被广泛用作检测、分割的骨干网络。
   检测、分割模型的 3 段式结构(概念图)

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

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

评价指标:mAP 与 IoU

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

  • IoU(Intersection over Union):预测区域与真值区域的重叠程度。用交集除以并集得到,越接近 1 说明匹配得越好。无论是框还是掩码,它都是衡量"重叠了多少"的基本尺度。
  • 精确率、召回率(precision·recall):精确率是"预测中命中的比例",召回率是"真值中被找出的比例"。两者往往此消彼长,需要一起看。
  • AP、mAP(mean Average Precision):在多个置信度阈值下求精确率-召回率曲线下的面积,再按类别取平均。是检测、实例分割的代表性指标。
   IoU 概念(以框为例)

  IoU = 交集面积 / 并集面积

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

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

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

损失函数的视角

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

  • 分类损失:教模型判断每个位置、候选属于哪个类别(或属于背景)。为应对背景占绝大多数的不平衡问题,有时会使用对困难样本加权的损失。
  • 框回归损失:把预测框调整得更接近真值框。既有直接度量坐标差异的方式,也有把 IoU 本身当作损失的方式。
  • 掩码损失(分割):逐像素比较掩码与真值。像素分类损失或衡量区域重叠的损失会一起使用。
  • 匹配损失(DETR 系列):将预测集合与真值集合 1:1 配对后,只对配对成功的对计算上述损失。

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

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

实务流水线与常见错误

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

  • 数据占 8 成:符合领域特点的标注数据的数量与质量,决定了性能的高低。光照、角度、遮挡多样的数据有助于泛化。
  • 类别不平衡:常见类别与稀有类别的比例差距过大时,稀有类别会被忽视。可通过采样、加权、数据增强来缓解。
  • 小物体问题:小物体在特征图上占的像素少,很容易被漏检。高分辨率输入、多尺度特征(FPN)、切块(tiling)推理都有帮助。
  • 领域差异(domain gap):训练数据与实际部署环境不同时,性能会下降。需要用部署环境的数据做微调或做领域适应。
  • 后处理调优:NMS 阈值、置信度阈值这类数值,需要根据目标(召回优先还是精确率优先)来调整。
   典型的检测流水线(概念图)

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

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

检测与分割的结合

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

  • 检测 + SAM:用检测器得到物体框,把该框作为 SAM 的提示得到精细掩码。"什么在哪里"由检测负责,"像素边界"由 SAM 负责。
  • 开放词汇检测 + SAM:用文本指示目标得到框,再用 SAM 抠出掩码,需要的话再用追踪器跨帧跟踪。
  • 分割 + 深度/3D:把分割掩码与深度信息结合,就能知道"这个物体在哪里、有多远",这在机器人、AR 领域很有用。

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

实时检测的视角

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

  • 骨干网络轻量化:用计算量更少的骨干网络和高效的特征融合来提升吞吐量。
  • 无锚、端到端要素:通过减少后处理与调优负担来简化流水线。
  • 调整输入分辨率:降低分辨率会更快,但会牺牲小物体的性能,两者需要权衡。
  • 硬件与量化:降低精度(量化)或针对特定加速器做优化,以提升吞吐量。

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 系列则凭借无需后处理的简洁,不断扩大自己的地盘。每个系列都站在不同的权衡点上,实务则根据自己想站在哪个权衡点来做选择。

什么情况选什么

  • 精度优先,延迟有余地:Faster R-CNN 这样的两阶段检测器,或骨干网络较强的检测器。需要精细实例分割时,选 Mask R-CNN 系列。
  • 实时是刚需(监控、机器人、移动端):YOLO 系列这样的单阶段检测器,配合轻量骨干网络与量化。
  • 想减少后处理调优:DETR 系列的端到端方案。不过要考虑训练成本与收敛问题。
  • 需要精细掩码,类别要灵活:用检测器找到目标,再用 SAM 抠出掩码的组合。
  • 要经常处理新类别:用开放词汇检测,以文本指示。但领域验证必不可少。

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

结语

检测与分割的发展,可以概括为"把人工设计的组件逐一吸收进学习之中的过程"。候选生成被 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 负责,这是一种职责分工。