物体检测是一种使用神经网络对图像中的物体进行定位和分类的技术。这项计算机视觉任务应用广泛,从医学成像到自动驾驶汽车,无所不包。
物体检测与其他计算机视觉技术重叠,但开发人员仍然将其视为一项独立的工作。
图像分类(或图像识别)旨在根据定义的类别对图像进行分类。一个基本示例是 CAPTCHA 图像测试,其中一组图像可以组织为带有停车标志的图像和不带停车标志的图像。图像分类为整个图像分配一个标签。
相比之下,物体检测根据指定的类别描绘图像中的各个物体。图像分类将图像分为带停车标志的图像和不带停车标志的图像,而物体检测对图像中的所有道路标志以及汽车和人等其他物体进行定位和分类。
图像分割(或语义分割)与对象检测类似,但更精确。与对象检测类似,分割根据语义类别描绘图像中的对象。但是,分割不使用框标记对象,而是在像素级别划分对象。
要理解物体检测的内部机制,需要更广泛的计算机视觉和数字图像处理基础。本节提供了一般概述。
在计算机视觉领域,图像在表示为 f(x,y) 的 2D 坐标平面上会以连续函数的形式进行表示。经过数字化处理后,图像会经历两大流程:采样和量化。简而言之,这两个流程会共同将连续图像函数转换为像素元素的离散网格结构。然后,计算机可根据视觉相似度和像素的接近度将图像分割为若干离散的区域。3
通过使用注释接口标记图像,用户可以将特定对象定义为特定像素级特征(例如,面积、灰度值等)的区域。当给定输入图像时,对象检测模型会将具有与训练数据集中定义的特征相似的区域识别为同一对象。这样,对象检测就是模式识别的一种形式。对象检测模型本身不识别对象,而是汇集大小、形状、颜色等属性,并根据从手动注释的训练数据中推断出的视觉模式对区域进行分类。4
例如,自动驾驶汽车的物体检测模型并不识别行人,而是识别一组形成表征行人物体的一般模式的特征(如训练数据中所定义)。
虽然不同的模型系列使用不同的架构,但用于对象检测的深度学习模型遵循一般结构。它们由脊椎、颈部和头部组成。
主干从输入图像中提取特征。通常,主干来自预训练分类模型的一部分。特征提取会产生无数不同分辨率的特征图,主干将其传递到颈部。该结构的后一部分连接了每个图像的特征图。然后,该架构将分层特征图传递给头部,由头部预测每个特征集的边界框和分类分数。
两级检测器将头部的对象定位和分类分开,而单级检测器将这些任务结合起来。前者通常返回更高的定位精度,而后者执行速度更快。5
交并比 (IoU) 是对象检测模型中常见的评估指标。边界框是根据模型预测的四边形输出,用于划分检测到的对象。IoU 计算两个边界框的交集面积(即框的重叠部分的面积)与它们的并集面积(即两个框的总面积之和)的比率:6
我们可将此方程形象化为:
模型会通过计算预测框与基准真实值框之间的 IoU,从而使用 IoU 来衡量预测准确性。模型架构还会使用 IoU 来生成最终的边界框预测。由于模型通常最初会为单个检测到的物体生成数百个边界框预测,因此模型会使用 IoU 来进行加权,并将边界框预测合并到每个检测到的物体的单个对应框中。
其他指标可用于对象检测模型的不同评估。全局交并比 (GIoU) 是 IoU 的修改版本,它考虑了对象定位的改进,而基本 IoU 仍然会返回空值。7 对象检测研究还采用常见的信息检索指标,例如平均精确度和召回率。
有许多机器学习方法可以完成对象检测任务。示例包括 Viola-Jones 框架8 和方向梯度直方图。9然而,最近的对象检测研究和开发主要集中在卷积神经网络 (CNN) 上。因此,本页重点介绍对象检测研究中讨论最多的两类 CNN。请注意,这些模型是使用基准数据集(例如 Microsoft COCO 数据集或 ImageNet)进行测试和比较的。
R-CNN(基于区域的卷积神经网络)是一种两阶段检测器,它使用一种称为区域建议的方法,为每个图像生成 2000 个区域预测。然后,R-CNN 将提取的区域伸缩变换为统一大小,并通过单独的网络运行这些区域,进行特征提取和分类。每个区域根据其分类的置信度进行排名。然后,R-CNN 拒绝与得分较高的选定区域有一定 IoU 重叠的区域。其余不重叠和排名靠前的分类区域是模型的输出。10 正如预期的那样,这种架构计算成本高昂且速度缓慢。Fast R-CNN 和 Faster R-CNN 是后续修改版本,它们可以缩小 R-CNN 架构的大小,从而减少处理时间,同时提高准确性。11
YOLO (You Only Look Once) 是基于开源 CNN 框架 Darknet 的单级检测架构系列。YOLO 架构于 2016 年首次开发,它会优先考虑速度。事实上,YOLO 的速度使其更适用于实时对象检测,并为其赢得了最先进对象检测方法的常见称谓。YOLO 在几个方面不同于 R-CNN。R-CNN 会通过多个网络传递提取的图像区域,而这些网络可分别提取特征并对图像进行分类;相比之下,YOLO 则会将这些操作压缩到一个网络中执行。其次,较之 R-CNN 的约 2,000 个候选区域,YOLO 会对每个图像进行不到 100 次的边界框预测。除了速度优于 R-CNN 之外,YOLO 产生的背景假负例也更少,虽然它的定位误差更高。12 自开创以来,YOLO 已进行多轮更新,且通常更侧重速度和准确性。13
虽然最初是为物体检测而开发的,但 R-CNN 和 YOLO 的后续版本也可以训练分类和分割模型。具体来说,Mask R-CNN 将物体检测和分割相结合,而 YOLOv5 可以训练单独的分类、检测和分割模型。
当然,除了 R-CNN 和 YOLO,还有许多其他模型架构。SSD 和 Retinanet 是另外两种模型,它们使用类似于 YOLO 的简化架构。14 DETR 是 Facebook(现为 Meta)开发的另一种架构,它将 CNN 与transformer 模型相结合,其性能与 Faster R-CNN 相当。15
在许多用例中,物体检测本身并不是目的,而是大型计算机视觉任务中的一个阶段。
自动驾驶汽车广泛采用对象检测技术来识别汽车和行人等对象。特斯拉的 Autopilot AI 就是这样一个示例。由于速度的提高,YOLO 和 SimpleNet 等简单架构显然更适合自动驾驶。16
对象检测可协助完成视觉检查任务。例如,对象检测的大量研究调查了各种指标和模型,而这些指标和模型可用于识别 X 射线和 MRI 扫描等医学影像中疾病的生理学指标。在这一领域,鉴于此类疾病医学图像的稀缺,因而很多研究均致力于改善数据集不平衡问题。17
视频监控可以采用实时对象检测来跟踪与犯罪相关的对象,例如安全摄像头镜头中的枪支或刀具。通过检测此类对象,安全系统可以进一步预测和预防犯罪。研究人员使用 R-CNN 和 YOLO 开发了枪支检测算法。18
不平衡的数据集是困扰对象检测任务的一个问题,因为在许多特定于域的数据集中,阴性样本(即没有相关对象的图像)的数量远远超过阳性样本。这是医学图像的一个特殊问题,因为在医学图像中很难获得疾病的阳性样本。最近的研究利用数据增强来扩展有限数据集并实现多样化,以提高模型性能。19
对象检测过往的发展主要集中在 2D 图像上。最近,研究人员已开始转向 3D 图像与视频的对象检测应用。运动模糊和摄像机焦点移动会导致在跨视频帧识别对象时出现问题。研究人员探索了一系列方法和架构,以帮助在这些条件下实现跨帧对象跟踪;例如,循环神经网络架构长短期记忆 (LSTM)20 以及基于 transformer 的模型。21 transformer 已被用于加快对象检测模型的速度,以便执行实时检测任务。并行处理技术是此项工作中另一值得注意的研究领域。22