文章目录

  • 前言
  • 物体检测基础
  • YOLO —— 对图像碎片进行物体检测
  • 检测单个物体
  • 同时检测多个物体
  • 多边界框的处理 —— IOU方法
  • 参考链接


前言

YOLO是目前比较流行的物体检测算法,有着体积小,检测准确度高的强大优点。这里对YOLO的核心思想知识点,使用可视化的方法做一总结。

物体检测基础

YOLO是用于识别图像中的物体的网络。这类网络解决的问题通常是找到图片中是否存在某种物体(如是否有狗或人),以及找到物体在图片中的位置并标记出来(如使用红色方框标记物体)。

比如,对于一个检测图片中人和狗的网络来说,在神经网络的输出端,需要表达两类信息:

  1. 某物体是否存在于图片中。通常会使用数字01来分别表示目标物体不存在目标物体存在
  2. 图像识别 食物 图像识别物体_yolo

  3. 如果目标物体存在,目标物体在图片中的位置。YOLO使用物体的中心坐标物体的长、宽来表示。
  4. 图像识别 食物 图像识别物体_深度学习_02

YOLO —— 对图像碎片进行物体检测

YOLO作为一个图像物体检测算法,输出一个向量来表示图像中目标物体的信息

图像识别 食物 图像识别物体_机器学习_03

图像识别 食物 图像识别物体_机器学习_04:图像中是否不存在任何目标物体,1代表存在,0代表完全不存在
图像识别 食物 图像识别物体_深度学习_05:目标物体几何中心的横坐标
图像识别 食物 图像识别物体_深度学习_06:目标物体几何中心的纵坐标
图像识别 食物 图像识别物体_图像识别 食物_07:目标物体的宽度
图像识别 食物 图像识别物体_深度学习_08:目标物体的高度
图像识别 食物 图像识别物体_计算机视觉_09:是否存在类别1的物体(狗)
图像识别 食物 图像识别物体_计算机视觉_10:是否存在类别2的物体(人)

检测单个物体

比如,将下面的图片传入训练好的YOLO网络,就会得到这样的一个向量。根据这个向量标出对应的物体中心和方形轮廓,就会得我们想要的结果。

图像识别 食物 图像识别物体_yolo_11

当图片中没有任何目标物体时,图像识别 食物 图像识别物体_机器学习_04 的值为0,向量中的其他值就不必理会。

图像识别 食物 图像识别物体_深度学习_13

同时检测多个物体

但是如果图中同时有多个目标物体,一个向量不够用怎么办?

图像识别 食物 图像识别物体_深度学习_14

直觉性的答案是将原本的 图像识别 食物 图像识别物体_计算机视觉_15 的向量扩大,使之同时包含 图像识别 食物 图像识别物体_机器学习_16 个物体的信息,也就是变成 图像识别 食物 图像识别物体_机器学习_17 (形如下图)的格式。
图像识别 食物 图像识别物体_图像识别 食物_18

图像识别 食物 图像识别物体_深度学习_19:图像中是否存在第k个目标物体,1代表存在,0代表完全不存在
图像识别 食物 图像识别物体_yolo_20:第k个目标物体几何中心的横坐标
图像识别 食物 图像识别物体_计算机视觉_21:第k个目标物体几何中心的纵坐标
图像识别 食物 图像识别物体_图像识别 食物_22:第k个目标物体的宽度
图像识别 食物 图像识别物体_机器学习_23:第k个目标物体的高度
图像识别 食物 图像识别物体_计算机视觉_24:第k个目标物体是否属于类别1(狗)
图像识别 食物 图像识别物体_机器学习_25:第k个目标物体是否属于类别2(人)

但由于神经网络的输出结构是固定的,无法灵活的根据情况来自由变动,那么一种简单的解决方法就是让用于表示输出的向量足够大(比如每次检测 图像识别 食物 图像识别物体_yolo_26 个物体,神经网络每次输出一个 图像识别 食物 图像识别物体_yolo_27

YOLO所使用的思想的一大杰出之处就是优雅的解决了这个问题。

它将图片分割为数个小的碎片(比如 图像识别 食物 图像识别物体_yolo_28),然后对于每个碎片进行单一物体检测。这样一来,只要切割图像得到的单个碎片足够小,就能够保证每个图像碎片中的目标物体数量足够少(比如只有1~2个)。

图像识别 食物 图像识别物体_深度学习_29

这样一来,对于每个图像碎片,我们可以让神经网络只尝试找到固定数量个目标物体即可,神经网络的输出格式就可以固定下来(比如我们设为 图像识别 食物 图像识别物体_深度学习_30 个碎片,每个碎片 图像识别 食物 图像识别物体_计算机视觉_31 个目标物体,那么神经网络的输出就是一个 图像识别 食物 图像识别物体_深度学习_32

下图就是一个例子。(不过值得注意的是,为了便于表示,对目标物体的中心坐标、宽度、高度做了归一化处理,可能与YOLO算法的实际情况不符。其次,对于每个碎片中目标物体的中心坐标,究竟是碎片内的局部目标物体的中心坐标,还是目标物体在没打碎图像前的全局中心坐标,参考资料没讲解清楚,这里存疑。笔者按照局部目标物体的中心坐标的方法进行处理。)

图像识别 食物 图像识别物体_图像识别 食物_33

多边界框的处理 —— IOU方法

通过使用上述方法,将目标图片切割成小碎片,然后逐一进行检测,得到的检测结果就是这样一个 图像识别 食物 图像识别物体_yolo_34 的矩阵(这里假设切割图片为 图像识别 食物 图像识别物体_yolo_28

图像识别 食物 图像识别物体_计算机视觉_36

但是目标检测问题中,经常会遇见的问题是出现多个边界框,都画出来的话显然会造成混乱:这么多个边界框对应的究竟是几个目标物体?对于某个目标物体来说,哪个边界框属于它?对应某一目标物体的多个边界框中,哪个最精确?

该如何选择边界框呢?

一种直觉性的方法是保留准确度最大的边界框。但是这个方法的问题是,只会保留 图像识别 食物 图像识别物体_图像识别 食物_37 个边界框用于标出图像中狗的位置、图像识别 食物 图像识别物体_图像识别 食物_37

这一问题的常用解法是利用IOU(交并比)判断两个边界框是否属于同一物体。计算方法是,对于任意两个边框,用二者重叠部分(交集)的面积,除以二者合并起来(并集)的面积,得到一个比值。图像化公式见下图

图像识别 食物 图像识别物体_机器学习_39

通常我们会设定一个阈值,当IOU超过这个阈值,就判断两个边框属于同一个物体。这样一来,就能首先确定每个目标物体对应那些边界框,随后再借助每个边界框所对应的精确度,找出属于每个目标物体的最精确的边界框。(利用这种方法而非粗暴的找全局最大值,从而提高物体检测精确度的方法,被称为Non maximum suppression非极大值抑制