Contents — find the section you need
在机器人能够“拿起桌上的杯子”或“避开前方行人”之前,它首先必须从摄像头图像中理解图像中有什么以及在哪里。这种理解正是目标检测和语义分割的任务。两者经常被放在一起讨论,但它们本质上是不同的——无论是在输出结果的精细程度上,还是在底层问题的框架上。本文将从基础入手,通过它们的3D对应物以及清晰的对比分析,对两者进行深入探讨。
车辆感知摄像头图片:Car Mobileye 系统的窗口摄像头 (Ranbar, CC BY-SA 4.0), Wikimedia Commons.代表性输入摄像头,并非对最新产品规格的声明。
0. 本文涵盖内容
-
目标检测和语义分割各自的实际输出
-
目标检测的运行流程(特征提取 → 检测头)
-
从 R-CNN 到 YOLO、DETR 和 DINO 的地标算法发展历程,以及它们设计理念的差异
-
两阶段与单阶段分割的权衡,以及基于 Transformer 的检测器的适用范围
-
分割算法如何从 FCN 演变为 Mask2Former
-
一张表格清晰地展示了目标检测、语义分割、实例分割和全景分割之间的区别
-
点云上 3D 目标检测和 3D 语义分割的基础知识
-
如何为机器人、自动驾驶、监控和 AR 选择合适的技术
1. 简答:什么是检测和分割
一句话概括:目标检测回答“图像中目标的位置”。 语义分割通过矩形(边界框)来表示“每个像素是什么”,而语义分割**则通过为图像着色来回答“每个像素是什么”。两者都具有相同的根本目标——理解图像——但它们的分辨率却截然不同。
在此基础上,又衍生出两个任务。实例分割像语义分割一样为像素着色,但它还能区分同一类别中的各个对象(例如,画面中的三个不同的人)。全景分割将实例分割与处理“不可计数”的背景(例如道路或天空)所需的语义分割相结合,生成一个单一的、最大程度完整的输出。下文第 9 节将以表格形式阐述这四种方法之间的关系。
图:Duskcoil。由一个示意图场景和共享几何体生成;非测量模型输出。
2. 什么是目标检测? (类别/边界框/置信度)
对于单张图像,目标检测会输出一组三元组,每个三元组对应一个目标:
-
类别:目标是什么(预定义类别之一,例如“人”、“汽车”、“椅子”等)
-
边界框:包含目标的矩形,通常以中心点加上宽度和高度((x, y, w, h))表示,或者以左上角/右下角((x_1, y_1, x_2, y_2))表示
-
置信度:模型对特定边界框-类别组合的置信度分数(0-1)
图像分类返回一个单一答案——“这张图片是什么”——但目标检测必须同时回答“有多少个目标、它们在哪里以及它们是什么类型”。正是“目标数量本身未知”这一特性,使得目标检测从根本上来说比分类更难。一张给定的图像可能包含零个目标,也可能包含一百个——输出数量的可变性正是驱动下文讨论的所有技巧的设计约束。
3. 检测是如何实现的?
面对输出数量可变的问题,几乎所有现代检测算法都遵循相同的两阶段流程:首先从整张图像中提取特征图,然后用大量候选位置(锚框,或稍后讨论的Transformer“查询”)对该特征图进行分块,最后针对每个候选位置判断“是目标还是背景”,如果是目标,则进一步判断“目标的类别以及精确位置”。
图 2 — 特征提取器(主干)将图像压缩成特征图,检测头同时在此基础上进行分类和边界框回归。
在检测头内部,两个回归/分类问题被有效地同时解决:“此候选位置是否存在对象,如果存在,属于哪个类别?”以及“此候选位置(锚点)应移动多少才能与实际对象对齐?”将这两个问题合并为一个加权和损失,即从 Fast R-CNN 开始广泛使用的多任务损失。
其中,p 表示预测的类别概率,p^{*} 表示真实类别,t 表示预测的边界框校正值,t^{*} 表示基于真实边界框的目标校正值。指示符 \mathbb{1}[p^{*} > 0] 表示“仅计算实际包含目标的候选框的位置回归误差,不计算背景的位置回归误差”——背景候选框没有可供回归的真实边界框,因此这种限制是合理的。\lambda 用于调整回归项相对于分类的权重。
4. 地标检测算法
地标检测算法的发展历程最容易从两个方面来理解:“如何缩小候选区域”和“如何预测边界框本身”。
R-CNN(Girshick 等人,2014)使用经典的图像处理算法选择性搜索从图像中裁剪出约 2000 个候选区域,然后分别将每个区域输入卷积神经网络 (CNN) 进行分类。虽然准确率很高,但速度极其缓慢,因为每个候选区域都需要运行一次 CNN。
Fast R-CNN(Girshick,2015)仅将整幅图像输入 CNN 一次以构建单个特征图,然后从该特征图中裁剪出候选区域(RoI 池化)——从而消除了每个区域的冗余计算。
Faster R-CNN(Ren、He、Girshick、Sun,2015)更进一步,用一个小型区域提议网络 (RPN) 代替了候选区域的生成,将提议生成、分类和回归集成到一个网络中。这三代算法共同构成了所谓的两阶段检测器。
SSD(Liu 等人,2016)和 YOLO(Redmon 等人,2015-2016)开创了单阶段检测器的先河,它们完全省略了候选区域阶段,直接从特征图上的每个位置预测类别和边界框。速度显著提升,但早期的 YOLO 在小目标识别精度方面落后于双阶段检测器。
RetinaNet(Lin 等人,2017)通过引入新的损失函数 Focal Loss,解决了困扰单阶段检测器的类别不平衡问题——背景候选区域的数量远远超过目标候选区域,导致训练过程被背景候选区域主导——结果表明,单阶段检测器的精度最终可以与双阶段检测器相媲美。
FCOS(Tian 等人,2019)完全无锚框:它不预先定义一组不同尺寸和宽高比的锚框,而是直接回归每个特征图像素到目标边界的距离,从而避免了锚框设计所需的超参数调优。
DETR、Deformable DETR 和 DINO 使用 Transformer 将检测问题重构为集合预测问题——这是下一节的主题。
5. 两阶段 vs. 单阶段
两阶段检测器和单阶段检测器的区别仅在于一个问题:候选区域缩小是否作为一个独立的阶段存在?
| 方面 | 两阶段(例如 Faster R-CNN) | 单阶段(例如 YOLO) |
|---|---|---|
| 流程 | 候选区域生成 (RPN) → 每个区域的分类和回归 | 直接在特征图上的每个位置进行分类和回归 |
| 准确率 | 通常较高,尤其是在小型/密集目标上 | 近几代算法已基本缩小了差距 |
| 推理速度 | 相对较慢(仍需对每个候选对象进行处理) | 快速,适合实时应用 |
| 计算成本 | 与候选对象数量成正比 | 与图像大小大致成正比,可预测 |
| 实现/调优难度 | 阶段越多,越复杂 | 流程越简单 |
| 应用场景 | 离线处理,以准确率优先的检查/分析 | 车辆和机器人中的实时感知 |
这两个系列算法长期以来都依赖非极大值抑制 (NMS) 作为后处理方法来减少重叠的候选对象。对于某个物体生成的多个候选框中,任何与其他候选框重叠度(IoU:交并比)超过阈值的框都会被舍弃,具体定义如下:
A 和 B 是两个框所占据的区域;它们的重叠区域除以它们的并区域即可得到一个介于 0 和 1 之间的分数。较高的 IoU 值表明这两个框很可能指向同一个物体,因此置信度较低的框会被舍弃。非极大值检测 (NMS) 有效,但它在物体密集排列的情况下可能会出现误判——接下来要讨论的 DETR 系列算法完全消除了这一缺陷。
6. Transformer 时代的检测 (DETR / Deformable DETR / DINO)
DETR(Carion 等人,2020,Facebook AI)从根本上改变了检测的实现方式。该方法不使用锚框和NMS,而是通过Transformer编码器提取图像特征,并将固定数量的“查询”(代表候选对象的可学习向量)传递给解码器,直接输出相应数量的框类对。在训练过程中,预测集和真实集通过匈牙利算法进行一对一匹配,并根据匹配结果计算损失。
y_i是第i个真实对象,\hat{y}_{\sigma(i)}是排列\sigma下分配给它的预测值,\mathfrak{S}_N是N个元素的所有排列的集合。也就是说:找到能够以最小总成本将预测值与真实值一一对应的排列 \hat{\sigma}——只有在确定了这种对应关系之后,才能计算通常的分类损失和回归损失。由于任何对象都不可能被分配多个预测值,因此从定义上来说,非极大值抑制(NMS)就变得不必要了。
DETR 也存在一个缺点:对整幅图像进行完全的自注意力机制计算量很大,模型需要大量的训练轮数才能收敛。可变形 DETR(Zhu 等人,2020)引入了一种可变形注意力机制,其中每个查询只关注一小部分已学习的采样点,而不是整幅图像,从而在大幅降低计算量的同时显著加快了收敛速度。 DINO(Zhang 等人,2022;“改进去噪锚框的 DETR”)添加了一些技巧,例如使用对比去噪查询来提高训练稳定性,以及使用混合查询选择从特征图初始化查询,从而在当时的 DETR 系列检测器中达到了最高的准确率。基于 Transformer 的检测器现在与 YOLO 系列一起,成为生产环境中两大主流方向之一。
7. 什么是语义分割?
语义分割预测图像中每个像素所属的类别。它的输出不是边界框,而是与输入图像分辨率相同的“类别图”,其中每个像素都包含一个类别 ID。
目标检测用粗略的矩形来近似目标,而语义分割可以以像素分辨率表示目标的实际轮廓——这对于细长的形状(例如路缘石)或复杂的轮廓(例如树枝)来说是一个真正的优势。权衡之处在于:即使同一帧中出现多个相同类别的实例,语义分割也无法区分它们——所有“人”像素都被涂成相同的颜色,导致个体数量丢失。实例分割正是为了弥补这一缺陷,下文将对此进行介绍。
8. 地标分割算法
全卷积网络 (FCN)(Long、Shelhamer 和 Darrell,2015)从图像分类卷积神经网络 (CNN) 中移除了全连接层,仅保留卷积层,因此该网络可以直接对任意大小的输入进行像素级预测。它是该领域的起点——第一个将语义分割确立为单一的、端到端可训练网络的设计。
U-Net(Ronneberger 等人,2015)最初是为医学图像分割而提出的,它将编码器(在提取特征的同时进行下采样)与解码器(在重建图像的同时进行上采样)对称地排列,并通过“跳跃连接”将分辨率匹配的编码器层和解码器层直接连接起来。这种设计——既能保留精细的边界细节,又能生成高分辨率的输出——成为了一种标准架构,并被广泛应用于医学以外的领域。
SegNet(Badrinarayanan 等人)在编码器池化过程中会精确地记住最大值所在的位置(“池化索引”),然后在解码器上采样过程中重用该记录,从而高效地恢复边界。PSPNet(Zhao 等人,2017)引入了一个金字塔池化模块,该模块对多个尺度上的区域特征进行平均,从而捕捉到仅靠狭窄感受野无法获取的整幅图像上下文信息。
DeepLab 系列(Chen 等人)的核心是空洞卷积——通过扩大卷积核抽头之间的间隙来拓宽感受野,同时又不牺牲分辨率——从 v1 版本发展到 v3+ 版本(2018 年)。HRNet(Wang 等人,2019 年)颠覆了传统方法:它并非先进行下采样再恢复分辨率,而是在整个网络中并行地保持高分辨率特征流,并持续地在不同分辨率之间交换信息。
SegFormer(Xie 等人,2021 年)将分层 Transformer 编码器与轻量级的纯 MLP 解码器相结合,以极其简洁的设计实现了高精度和高效率。 Mask2Former(Cheng 等人,2022)将分割重新定义为“固定数量的查询,每个查询预测一个掩码和一个类别”,并通过“掩码注意力”将每个查询的注意力限制在前一层预测的掩码区域——这既实现了快速收敛,又提供了一个能够同时处理语义分割、实例分割和全景分割的单一架构。
9. 比较检测/语义分割/实例分割/全景分割
如果我们沿着两个维度来组织目前介绍的四个任务,它们的意义就变得清晰了:它们是否能够区分同一类别的不同实例,以及它们是否能够处理“背景”——例如道路、天空或墙壁等不可计数的物体。
| 任务 | 输出单元 | 区分实例 | 处理背景 | 地标算法 | 关键指标 |
|---|---|---|---|---|---|
| 目标检测 | 边界框 | 是(每个实例一个框) | 否 | Faster R-CNN、YOLO、DETR | mAP |
| 语义分割 | 逐像素类别标签 | 否(同一类别合并为一种颜色) | 是 | FCN、DeepLab、SegFormer | mIoU |
| 实例分割 | 逐像素掩码 | 是(每个实例使用单独的掩码) | 否 | Mask R-CNN、Mask2Former | AP(基于掩码 IoU) |
| 全景分割 | 逐像素类别 + 实例 ID | 是(仅前景) | 是(仅类别,无实例 ID) | Panoptic FPN、Mask2Former | PQ(全景质量) |
如表格所示,全景分割(由 Kirillov 等人于 2019 年提出)兼具实例分割和语义分割的优点。前景对象(例如人和汽车等可计数物体)像实例分割一样,按实例进行区分;背景——例如道路和天空等不可计数的事物——仅获得一个类别标签,就像语义分割一样。如果你试图完整且详尽地描述单张图像,最终会得到这种全景图形式——这是一种观察所有四个任务之间关系的有效方法。
评估指标 mIoU(平均交并比)计算每个类别 c 的真实区域 G_c 和预测区域 P_c 之间的 IoU,然后对所有类别取平均值。
检测的 mAP 衡量的是边界框级别的一致性,而 mIoU 衡量的是像素级别的一致性——这种指标差异恰好反映了每个任务对“正确”的定义差异。
10. 三维目标检测
自动驾驶车辆和机器人通常需要直接从激光雷达点云(而非二维图像)中检测物体的三维位置、大小和方向。点云不像二维图像那样具有网格结构,因此卷积神经网络(CNN)无法直接处理点云数据——如何将这种不规则数据转换为规则数据是三维目标检测的核心设计挑战。
SECOND(Yan等人,2018)将点云分割成三维体素(立方体单元),并使用稀疏卷积跳过大部分不包含点的体素,从而显著降低三维CNN的计算成本。PointPillars(Lang等人,2019)进一步简化了这一过程,将点聚合到垂直的“柱状”结构中,而不是体素中,这样网络就可以使用普通的二维卷积而不是三维卷积来处理这些柱状结构,从而显著提升了速度。 PV-RCNN(Shi 等人,2020)将基于体素的处理效率与直接处理点云(PointNet 风格)带来的精确定位相结合,采用了一种混合点-体素设计。CenterPoint(Yin 等人,2021)引入了一种无锚点的 3D 检测方法:将目标检测为单个中心点,然后从该中心点回归出目标的宽度、高度、深度和方向,并将其与 PointPillars 或 VoxelNet 风格的骨干网络结合使用,以获得更高的精度。
这些方法大多具有一个共同的设计理念:在运行检测头之前,将点云信息投影到鸟瞰图(BEV)——一个从正上方看到的 2D 特征图。压缩高度信息虽然牺牲了一些细节,但却能够在与普通 2D 检测器相同的框架内处理“目标在路面上的位置”这一信息——这对于驾驶至关重要。
11. 三维语义分割
三维语义分割为点云中的每个点(或激光雷达的每个激光回波)分配一个类别标签。同样,如何处理不规则的点云数据是区分主要方法的关键所在。
PointNet++(Qi 等人,2017)直接将点云数据输入网络,无需体素化或其他转换,通过对相邻点进行分组并分层聚合特征,为基于点的方法奠定了基础。RandLA-Net(Hu 等人,2020)解决了导致大规模点云处理成本高昂的邻域搜索瓶颈问题,它将随机采样与局部特征聚合模块相结合,弥补了随机采样会丢失的信息,即使处理城市尺度的点云也能达到实用的速度。
RangeNet++(Milioto 等人,2019)完全跳过了 3D 处理:它利用激光雷达自身的扫描顺序,将点云投影到 2D“距离图像”上,然后运行一个普通的 2D CNN,最后将结果投影回 3D——利用 2D CNN 工具的成熟度来提高速度。Cylinder3D(Zhu 等人,2021)注意到室外激光雷达点云从传感器向外辐射,因此采用圆柱坐标而非笛卡尔坐标进行体素化,以处理由此产生的距离密度衰减。SPVNAS(Tang 等人,2020)通过稀疏点-体素卷积融合了基于点和基于体素的处理,然后应用神经架构搜索(NAS)自动寻找在精度/速度之间取得良好平衡的配置。
与二维情况类似,三维语义分割的发展历程可以理解为“保留点作为点”(基于点)和“转换为规则网格”(基于体素或深度图像)之间的反复权衡,每种方法在精度、速度和内存方面各有侧重。
12. 实践中如何选择合适的方法
具体使用检测还是分割,以及采用哪种算法,很大程度上取决于应用场景。
-
机械臂/抓取:准确了解目标物体的轮廓至关重要,因此实例分割(例如 Mask2Former)最为适用——仅凭边界框无法揭示物体的真实形状或找到合适的抓取点。
-
自动驾驶:实时性能至关重要,因此 2D 检测依赖于单阶段检测器(例如 YOLO 系列),而 3D 检测则依赖于以效率为导向的基于纯电动汽车 (BEV) 的 3D 检测器,例如 PointPillars 或 CenterPoint。语义/全景分割通常会叠加在检测结果之上,以识别可行驶区域。
-
监控/安防摄像头:目标类别(人、车辆)通常有限,漏检比速度更重要,因此可以使用两阶段检测器或高精度的基于 Transformer 的检测器。
-
增强现实/虚拟现实:确定虚拟物体在现实世界中的锚定位置通常意味着使用语义分割来识别平面和物体区域,然后应用传感器融合(参见配套文章)来实现真正的 3D 对齐。
在资源受限的边缘设备上,速度和资源占用通常比精度更重要——轻量级的 YOLO 变体或精简版的 SegFormer。对于精确的离线分析(医学成像、卫星图像),精度至关重要,因此两阶段检测器或 Mask2Former 类模型更受青睐。实际上,实时性能和精度之间的权衡是决策中最重要的因素。
有关最新进展——无 NMS 架构、开放词汇检测、Segment Anything 系列的基础模型——请参阅目标检测技术趋势和语义分割技术趋势。
13. 总结
目标检测将目标捕获为矩形;语义分割逐像素捕获目标——这两种图像理解任务的分辨率不同。检测技术的演进历程从两阶段(Faster R-CNN)到单阶段(YOLO),再到完全舍弃锚框和非极大值检测(NMS)的基于Transformer的检测器(DETR/DINO);分割技术的演进历程则从全卷积网络(FCN)到U-Net和DeepLab,再到基于Transformer的SegFormer/Mask2Former。在此基础上,又衍生出实例分割(它增加了对每个对象的区分)、全景分割(它将两者结合起来)以及基于3D点云的分割方法——最终选择哪种方法取决于具体情况需要的是精度还是速度。
检测和分割的输出有何区别?
检测通常返回框和类别;分割返回像素区域。
根据定位、轮廓和实例识别需求进行选择。
评论
请先登录。
暂无数据。