目标检测

什么是目标检测

目标检测是一种计算机视觉方法,用于定位图像或视频中的目标实例。目标检测算法通常利用机器学习或深度学习来生成有意义的结果。当人类观看图像或视频时,我们可以在瞬间识别并定位感兴趣的目标。目标检测旨在使用计算机实现这种智能。

为什么目标检测如此重要

目标检测是高级驾驶辅助系统 (ADAS) 中使用的一项关键技术,它使汽车能够检测车道和行人以提高道路安全性。在视觉检查、机器人、医学成像、视频监控和基于内容的图像检索等应用中,目标检测也是必不可少的组成部分。

截图:高速公路上车辆照片上应用了标签,使用目标检测进行识别。

使用目标检测来识别和定位车辆。

目标检测的工作原理

使用深度学习进行目标检测

您可以使用各种方法来执行目标检测。常见的使用卷积神经网络 (CNN)(如 YOLO、SSD 或 R-CNN)的基于深度学习的方法会自动学习检测图像中的目标。

您可以从两种主要方法中进行选择,以入门使用深度学习进行目标检测:

  • 使用预训练的目标检测器。多个深度学习目标检测器基于大型数据集训练,可以检测常见目标,如人、车辆或图像文本,而无需进一步训练。
  • 创建并训练自定义目标检测器。要根据您的特定需求量身定制目标检测器,您可以使用迁移学习。这种方法使您能够以预训练网络为基础,并针对您的应用进一步细化。与从头开始训练相比,这种方法可以更快地提供结果,因为目标检测器已经基于数千甚至数百万个图像进行训练。
图像:一辆汽车驶近停车标志的街景。使用目标检测,该标志由预训练模型来标注并且包括一个置信水平。

使用预训练的 R-CNN 检测停车标志。请参阅 MATLAB 代码示例。

无论您是使用预训练的目标检测器还是创建自定义的目标检测器,都需要决定您更喜欢哪种类型的目标检测网络。

电路板、高速公路场景和开放水域上的船只的图像,其中检测到并标注了目标。

使用预训练的 YOLOX 网络检测感兴趣区域 (ROI) 中的小电路板特征、车辆和目标。请参阅 MATLAB 代码示例。

使用机器学习进行目标检测

机器学习方法也常用于目标检测,它们提供不同于深度学习的方法。常见的机器学习方法包括:

  • 聚合通道特征 (ACF)
  • 使用有向梯度直方图 (HOG) 特征的支持向量机 (SVM) 分类
  • 用于人脸或上身检测的 Viola-Jones 算法

与基于深度学习的方法一样,您可以选择从预训练的目标检测器开始,或创建自定义的目标检测器来适应您的应用。与基于深度学习的工作流中的自动特征选择相比,使用机器学习时,您需要手动选择目标的识别特征。

用于目标检测的机器学习与深度学习之比较

目标检测的最佳方法取决于您的应用和尝试解决的问题。在机器学习和深度学习之间进行选择时,想想您是否有功能强大的 GPU 和大量标注训练图像。如果您没有同时具备这两者,则机器学习方法可能是更好的选择。当您有更多图像时,深度学习方法往往更适用,GPU 则有助于减少训练模型所需的时间。

其他目标检测方法

除了基于深度学习和机器学习的目标检测之外,根据您的应用,其他几种常见方法也可能适用:

  • 图像分割和斑点分析,该方法使用简单的目标属性,如大小、形状或颜色
  • 实例分割,该方法预测每个目标的精确形状和面积的逐像素分割掩膜
  • 关键点检测,该方法预测目标上的特定相关点
  • 基于特征的目标检测,该方法使用特征提取、匹配和 RANSAC 来估计目标的位置
杂乱无章地摆放各个物体的桌面;使用目标检测识别出一个拆钉盒。

MATLAB 中的目标检测。使用点特征匹配在杂乱的场景中检测到拆钉盒。请参阅 MATLAB 代码示例。

使用 MATLAB 进行目标检测

只需几行 MATLAB® 代码,您就可以无需成为专家即可构建用于目标检测的机器学习模型和深度学习模型。

用 App 自动标注训练图像

MATLAB 提供交互式 App 来准备训练数据和自定义卷积神经网络。为目标检测器标注测试图像枯燥乏味,获得足够的训练数据来创建高性能的目标检测器也会花费大量时间。图像标注器可让您在一个图像集合中以交互方式标注目标,并提供内置算法来自动标注您的真实值数据。对于自动驾驶应用,您可以使用真实值标注器;对于视频处理工作流,您可以使用视频标注器

以交互方式创建目标检测算法并在框架间互操作

自定义一个现有 CNN 或者从头开始创建一个 CNN 可能容易出现架构问题,从而浪费宝贵的训练时间。深度网络设计器不仅使您能够以交互方式构建、编辑和可视化深度学习网络,还提供分析工具以用于在训练网络之前检查架构问题。

借助 MATLAB,您可以使用 ONNX™ (Open Neural Network Exchange) 的导入与导出功能通过 TensorFlow™-Keras、PyTorch® 和 Caffe2 等框架与网络和网络架构进行互操作。

图中显示由 ONNX 支持的 MATLAB 与包括 TensorFlow、Caffe2、PyTorch、MXNet、Core ML、Chainer 和 Cognitive Toolkit 在内的框架之间的互操作性。

从 TensorFlow、PyTorch 和 ONNX 模型导入和导出到这些模型。参阅示例

为部署自动生成优化的代码

在使用 MATLAB 创建算法后,您可以利用自动化工作流,通过 GPU Coder™ 生成 TensorRT 或 CUDA® 代码以执行硬件在环测试。生成的代码可与现有工程集成,以及用于在桌面 GPU 或嵌入式 GPU(如 NVIDIA® Jetson™ 或 NVIDIA Drive 平台)上验证目标检测算法。