Coursera 笔记

Module 03 · Object Detection

YOLO AlgorithmYOLO 算法

Coursera ↗

在本视频中,我们将把目标检测的所有组件结合在一起,构成 YOLO 目标检测算法。首先,我们来了解如何构建训练集。


构建训练集

假设你正在训练一个算法来检测三种物体:行人、汽车 和 摩托车。同时,你还需要明确 背景类,即不属于这三类的物体也需要标注为背景。

输入输出维度说明

  • 假设你使用 两个锚框,那么输出 y 的维度为 3x3,这是因为你使用的是 3x3 网格单元。
  • 输出维度:
    • 第一维为 3x3(表示网格单元的数量)。
    • 第二维为 2,表示有 两个锚框(Anchor Boxes)。
    • 第三维为 8,这表示每个锚框对应的输出维度。8包括:
      • 5:包含了 Pc(物体存在的概率) 和 边界框参数(Bounding Box),即 PC, PX, PY, PH, PW。
      • 3:表示物体的 类别(C1, C2, C3),即行人、汽车和摩托车。

因此,输出 y 的维度可以表示为:
3x3x2x8 或 3x3x16。


训练过程:为每个网格单元生成目标向量 y

  1. 空网格单元的处理:
  • 对于没有目标物体的网格单元,例如左上角的网格单元,其对应的目标向量 y 应该如下:
    • Pc = 0(没有物体存在)。
    • 对应的 锚框 和 类别 的其他部分都为“不关心” (don’t care)。
  1. 包含目标物体的网格单元:
  • 假设在某个网格单元中检测到了一辆 汽车,该汽车的边界框比高稍宽。
  • 假设有两个锚框,锚框1是较为方形的,锚框2稍微宽一些。
    • 如果汽车的形状与锚框2更匹配,那么该汽车的目标向量 y 应该如下:
      • 对于锚框1,Pc = 0。
      • 对于锚框2,Pc = 1(表示物体是汽车)。
      • 包括汽车的 边界框信息 和 类别标签(C2 = 1)。

通过这种方式,每个网格单元都会输出一个 16维向量(3x3x16)。在实际应用中,可能会使用更大的网格(如 19x19),并且可以使用更多的锚框(例如 5个锚框)。


YOLO的训练过程

你会训练一个 卷积神经网络(ConvNet)输入图像(例如 100x100x3),并最终输出一个形状为 3x3x16 或 3x3x2x8 的输出卷积结果。


YOLO目标检测:预测过程

给定一个图像,神经网络 会输出一个形状为 3x3x2x8 的张量,其中每个网格单元会输出一个向量。例如:

  • 对于网格单元 左上角,如果没有物体,神经网络应该输出 0(没有物体),并且其它值将被视为“噪声”。
  • 对于检测到 汽车 的网格单元,神经网络应该:
    • 对 锚框1 输出 0(没有汽车)。
    • 对 锚框2 输出正确的边界框信息和类别标签(C2=1),并忽略其它值。


非极大值抑制(NMS)

接下来,我们使用 非极大值抑制(NMS)来优化预测结果。

  1. 每个网格单元的预测:
  • 如果你使用 两个锚框,每个网格单元会输出两个预测的边界框。
  • 一些边界框可能有很低的概率(Pc),因此需要去除低概率的预测。
  1. 去除低概率预测:
  • 对于那些概率低的预测,即使神经网络认为该物体的概率较低,我们也应该将其去除。
  1. 对每个类别分别执行NMS:
  • 如果你要检测 三类物体(行人、汽车、摩托车),你需要对每个类别分别运行 NMS:
    • 对 行人类别运行NMS。
    • 对 汽车类别运行NMS。
    • 对 摩托车类别运行NMS。
      这样可以确保每个类别的物体都被准确检测到。


总结:YOLO目标检测算法

YOLO(You Only Look Once)是一种非常高效的目标检测算法,集成了计算机视觉领域中许多最优秀的想法。它通过将图像划分为网格,并在每个网格上预测多个边界框,从而实现高效的目标检测。


YOLO的应用

  • 你将在本周的练习中有机会 实践实现 YOLO算法的各个组件,并加深对目标检测的理解。
  • 此外,视频后还有一个 可选的视频,可以根据自己的兴趣选择观看。

下周再见! 🎥