什么是对象检测?

你需要知道三件事

目标检测是一种用于定位图像或视频中物体实例的计算机视觉技术。对象检测算法通常利用机器学习深度学习产生有意义的结果。当人类观看图像或视频时,我们可以在瞬间识别和定位感兴趣的对象。对象检测的目标是使用计算机复制这种智能。

为什么物体检测很重要

物体检测是先进的驾驶辅助系统(ADAS)背后的一项关键技术,该系统使汽车能够检测车道或进行行人检测,以提高道路安全。目标检测在视频监控或图像检索系统等应用中也很有用。

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

它是如何工作的

基于深度学习的目标检测

您可以使用各种技术来执行对象检测。流行的基于深度学习的方法使用卷积神经网络(cnn),如R-CNN和YOLO v2,自动学习检测图像中的物体。

你可以从两个关键的方法中选择开始使用深度学习的对象检测:

  • 创建并训练自定义对象检测器。要从头开始训练自定义对象检测器,您需要设计一个网络体系结构来学习感兴趣的对象的特征。您还需要编译一组非常大的标签数据来训练CNN。自定义对象检测器的结果可能是显著的。也就是说,你需要在CNN中手动设置图层和权重,这需要大量的时间和训练数据。
  • 使用预先训练过的物体检测器。许多对象检测工作流使用深度学习杠杆迁移学习,这种方法使您能够从预训练的网络开始,然后根据应用程序对其进行微调。这种方法可以提供更快的结果,因为对象检测器已经对数千甚至数百万张图像进行了训练。

使用预先训练的R-CNN检测停止标志。参见示例

无论您是创建自定义对象检测器还是使用预训练的对象检测器,都需要决定要使用哪种类型的对象检测网络:两级网络还是单级网络。

两级网络

两级网络的初始阶段,如R-CNN及其变体,识别地区的建议,或可能包含对象的图像子集。第二阶段对区域内的对象进行分类。两级网络可以获得非常精确的目标检测结果;然而,它们通常比单级网络慢。

R-CNN(顶部)和快速R-CNN(底部)目标检测的高级架构。

单级网络

在单级网络中,例如约洛v2, CNN对整个图像的区域进行网络预测使用锚箱,并对预测进行解码以生成对象的最终边界框。单级网络可能比两级网络快得多,但它们可能无法达到相同的精度水平,尤其是对于包含小对象的场景。

YOLO v2对象检测概述。

基于机器学习的目标检测

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

  • 聚合信道特性(ACF)
  • 基于方向梯度直方图(HOG)特征的SVM分类
  • 维奥拉-琼斯算法用于人脸或上半身检测

使用ACF目标检测算法跟踪行人。参见示例

与基于深度学习的方法类似,您可以选择从一个预先训练的对象检测器开始,或创建一个定制的对象检测器来适合您的应用程序。与基于深度学习的工作流中的自动特征选择相比,使用机器学习时需要手动选择对象的识别特征。

机器学习与深度学习用于目标检测

确定对象检测的最佳方法取决于您的应用程序和您试图解决的问题。在选择机器学习和深度学习时,要记住的主要考虑因素是你是否有强大的GPU和大量标记好的训练图像。如果这两个问题的答案都是否定的,那么机器学习方法可能是更好的选择。当你有更多的图像时,深度学习技术往往工作得更好,gpu减少了训练模型所需的时间。

其他目标检测方法

除了基于深度学习和机器学习的对象检测,还有一些其他常见的技术可能是足够的,这取决于您的应用程序,如:

  • 图像分割和斑点分析,使用简单的对象属性,如大小、形状或颜色
  • 基于特征的目标检测,使用特征提取,匹配,以及兰萨克估计一个物体的位置

使用点特征匹配在杂乱场景中进行目标检测。参见示例

基于MATLAB的目标检测

只有几行MATLAB®代码中,您可以构建用于对象检测的机器学习和深度学习模型,而无需成为专家。

使用应用程序自动标记训练图像

MATLAB提供交互式应用程序来准备训练数据和定制卷积神经网络。为目标探测器标记测试图像是一件单调乏味的事情,需要花费大量的时间才能获得足够的训练数据来创建性能良好的目标探测器。这个图像标签应用程序允许您以交互方式标记图像集合中的对象,并提供内置算法来自动标记地面实况数据。对于自动驾驶应用程序,您可以使用地面真理贴标机应用程序,对于视频处理工作流,您可以使用视频标签应用程序

以交互方式创建对象检测算法并在框架之间进行互操作

定制一个现有的CNN或者从头创建一个CNN很容易出现架构问题,这可能会浪费宝贵的培训时间。的深度网络设计师app使您能够以交互方式构建、编辑和可视化深度学习网络,同时还提供了一个分析工具,用于在培训网络之前检查体系结构问题。

使用MATLAB,您可以通过TensorFlow等框架与网络和网络体系结构进行互操作™-使用ONNX的Keras、PyTorch和Caffe2™ (开放式神经网络交换)导入和导出功能。

从ONNX导入和导出到ONNX。参见示例

自动生成用于部署的优化代码

使用MATLAB创建算法后,可以利用自动化工作流生成TensorRT或CUDA®代码与GPU编码器™执行硬件在环测试。生成的代码可以与现有的项目集成,并且可以用于验证桌面GPU或嵌入式GPU(例如英伟达)上的对象检测算法。®Jetson或NVIDIA驱动平台。