主要内容

本页采用了机器翻译。点击此处可查看英文原文。

YOLO v2 入门指南

“只需看一次” (YOLO) v2 目标检测器采用单阶段目标检测网络。YOLO v2 的运行速度快于两阶段深度学习目标检测器,例如基于卷积神经网络的区域检测器 (Faster R-CNN)。

YOLO v2 模型会对输入图像运行深度学习卷积神经网络 (CNN),从而生成网络预测结果。目标检测器对预测结果进行解码,并生成边界框。

YOLO v2 使用锚框来检测图像中的目标类别。有关详细信息,请参阅Anchor Boxes for Object Detection。YOLO v2 针对每个锚框预测以下三个属性:

  • 交并比 (IoU) - 预测每个锚框的对象性得分。

  • 锚框偏移量 - 调整锚框的位置

  • 类别概率 - 预测分配给每个锚框的类别标签。

图中显示了特征图中每个位置的预定义锚框(虚线),以及应用偏移量后的优化位置。与某个类匹配的框以彩色显示。

使用预训练的 YOLO v2 检测器检测目标

若要使用预训练的 YOLO v2 网络进行目标检测,首先需通过指定受支持的预训练网络名称来创建一个 yolov2ObjectDetector 对象。预训练网络包括:

  • darknet19-coco - 一个基于 DarkNet-19 的 YOLO v2 网络。

  • tiny-yolov2-coco - 一个微型 YOLO v2 网络,具有更少的滤波器和更少的卷积层。

这两个网络都是在 COCO 数据集上训练的,能够识别 COCO 数据集中的 80 个类别。要下载这些 YOLO v2 预训练网络,您必须安装 Computer Vision Toolbox™ YOLO v2 目标检测模型支持包。

创建预训练的 YOLO v2 目标检测器后,请使用 detect 函数进行目标检测。

使用预训练的 YOLO v2 检测器进行迁移学习

您对一个预训练的 YOLO v2 检测器进行迁移学习。通过指定网络名称("darknet19-coco""tiny-yolov2-coco"),或指定一个包含预训练 YOLO v2 网络的 dlnetwork 对象,来创建一个预训练的 yolov2ObjectDetector 对象。要配置 YOLO v2 网络以进行迁移学习,还需指定锚框和新的目标类。如果希望网络进行多尺度训练,请通过设置 TrainingImageSizes 属性来指定多种训练图像尺寸。

若要利用预训练的 YOLO v2 检测器及标注过的训练数据进行迁移学习,请使用 trainYOLOv2ObjectDetector 函数。

完成迁移学习后,请使用 detect 函数检测目标。

训练自定义 YOLO v2 神经网络

如果您希望对 YOLO v2 网络架构进行更精细的控制,则可以创建一个自定义的 YOLO v2 网络。您可以按照以下步骤,将预训练的特征提取网络转换为自定义的 YOLO v2 网络。有关示例,请参阅Create Custom YOLO v2 Object Detection Network

  1. 使用 imagePretrainedNetwork (Deep Learning Toolbox) 函数加载一个预训练的卷积神经网络 (CNN),例如 MobileNet v2。

  2. 从基础网络中选择一个特征提取层。该层是检测头的输入。

  3. 创建一个 yolov2ObjectDetector 对象,指定基础特征提取网络和特征提取层的名称。此外,请指定类名和锚框作为训练网络的输入。您可以设置其他属性来调整 YOLO v2 目标检测器的行为:

    • 如果希望网络进行多尺度训练,请通过设置 TrainingImageSize 属性来指定多种训练图像尺寸。

    • 如果想要提高对小型目标的检测精度,请通过指定 ReorganizeLayerSource 属性来添加一个重组分支。

    yolov2ObjectDetector 对象会删除基础网络中特征提取层之后的所有层。该对象还组装了一个检测头,该检测头末端包含一个深度拼接层和一个 yolov2TransformLayer 层,后者将卷积神经网络 (CNN) 的原始输出转换为生成目标检测结果所需的形式。最后,该对象将特征提取层的输出连接到检测头。图中展示了检测头的各层结构。

    当您可选地包含一个重组分支时,该对象会在网络中添加 spaceToDepthLayerdepthConcatenationLayer (Deep Learning Toolbox)。空间-深度层从基础网络中提取低级特征。深度拼接层将检测头生成的上层特征与下层特征进行融合。图中展示了一个包含重组分支的修改后网络。

提示

与逐层构建基础网络相比,使用预训练网络通常要快得多,也简单得多。不过,如果您需要构建基础网络,可以使用交互式 App 深度网络设计器 (Deep Learning Toolbox),或者使用 addLayers (Deep Learning Toolbox)connectLayers (Deep Learning Toolbox) 等函数。

创建自定义的 YOLO v2 网络后,请使用 trainYOLOv2ObjectDetector 函数在标注数据集上对该网络进行训练。有关示例,请参阅使用 YOLO v2 深度学习进行目标检测

训练完网络后,使用 detect 函数检测目标。

代码生成

如需了解如何使用 YOLO v2 目标检测器(由 yolov2ObjectDetector 对象创建)生成 CUDA® 代码,请参阅Code Generation for Object Detection by Using YOLO v2

为深度学习标注训练数据

您可以使用图像标注器视频标注器真实值标注器 (Automated Driving Toolbox)以交互方式对像素进行标注,并导出标注数据用于训练。这些 App 还可用于为目标检测标注矩形感兴趣区域 (ROI)、为图像分类标注场景标签,以及为语义分割标注像素。若要根据任何标注员导出的真实值对象创建训练数据,可以使用 objectDetectorTrainingDatapixelLabelTrainingData 函数。有关详细信息,请参阅Training Data for Object Detection and Semantic Segmentation

参考

[1] Redmon, Joseph, and Ali Farhadi. “YOLO9000: Better, Faster, Stronger.” In 2017 IEEE Conference on Computer Vision and Pattern Recognition (CVPR), 6517–25. Honolulu, HI: IEEE, 2017. https://doi.org/10.1109/CVPR.2017.690.

[2] Redmon, Joseph, Santosh Divvala, Ross Girshick, and Ali Farhadi. "You only look once: Unified, real-time object detection." Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition (CVPR), 779–788. Las Vegas, NV: CVPR, 2016.

另请参阅

App

对象

函数

主题