深度学习:YOLO算法与其优化

文章目录

  • YOLO简介
  • 优化
    • 交并比(Intersection Over Union)
    • 非最大值抑制(Non-max Suppression)
    • 锚框(Anchor Boxes)

YOLO简介

本体是将原始图片划分为若干小格子(如 19 × 19 19\times 19 19×19),对每个格子都有一个高维输出,包含是否有需检测物体、物体种类及检测框的坐标与尺寸,总的输出就是一个 19 × 19 × n c 19\times 19\times n_c 19×19×nc的矩阵。以下是一个简化的 3 × 3 3\times 3 3×3版本与其对应的输出示意:
深度学习:YOLO算法与其优化_第1张图片
YOLO算法的优点主要是:

  1. YOLO会直接输出边界框的坐标位置,且它允许神经网络输出任意长宽比的边界框,同时输出的坐标位置也更为精确,不受限于滑动窗口的步长。
  2. YOLO通过卷积实现的,只需要用一个卷积网络,使得所有 3 × 3 3\times 3 3×3 19 × 19 19\times 19 19×19个网格所需的计算被大量地共享 。所以这是一个非常有效率的算法。YOLO实际上运行起来非常快,甚至可以运用在实时的目标识别上。

优化

交并比(Intersection Over Union)

用来衡量输出与标准答案的接近程度,算是代价函数,简写为IoU。顾名思义,IoU计算的是交集与并集的比例,即计算输出标出的物体区域和标准答案这两个区域的交集与并集之比。一般情况下,当IoU > 0.5 >0.5 >0.5时我们就认为判断正确,当然也可以根据个人要求自由调整,这个阈值越高我们对两个边框重合度的要求就越高。
深度学习:YOLO算法与其优化_第2张图片
此外,IoU的值还可以用在非最大值抑制中。

非最大值抑制(Non-max Suppression)

当我们采用较密集的网格划分(如 19 × 19 19\times 19 19×19)时,一个完整的物体可能会被划分到不同的网格中。虽然理论上讲,物体检测的中心点只有一个,也只会存在于一个网格中。但在实际过程中,网络的运算结果可能会判定出多个中心点,从而输出多个检测框:
深度学习:YOLO算法与其优化_第3张图片
为了让每个物体只输出一个检测框,我们就需要用到非最大值抑制。其实该算法的理念非常简单,对于有重叠的检测框,我们取检测概率最大的检测框(调亮),然后将与这个框重叠比较多(即IoU值高)检测框抑制(调暗):
深度学习:YOLO算法与其优化_第4张图片
如果去掉被调暗的检测框,就是我们的最终输出。注意对于不同类别的物体探测最好分开依次进行非最大值抑制,搭配后面的锚框算法。

锚框(Anchor Boxes)

我们注意到,非最大值抑制或许可以排除同一物体的多个重复检测框,但如果是在同一个网格内刚好有两个物体的中心点,网络很可能无法得到一个正确的输出。比如下面这个情况,人和车的中心点都在同一个网格,:深度学习:YOLO算法与其优化_第5张图片
为此,我们加入了锚框,即一些预先定义了形状比例的检测框:
深度学习:YOLO算法与其优化_第6张图片
之后每个网格对应的输出通道数也随之增加,一部分描述锚框1形状的检测框的检测概率、坐标与类别;另一部分描述锚框2形状的检测框(判断检测框跟哪个锚框最接近可以用IoU值比较)。这样,每个检测框的属性不仅有其所属的网格,还有其所属的锚框。换言之,每个网格就不再只能容纳一个检测框的中心点了,而是可以容纳与锚框个数相同的中心点。以下是对于网格中有两个物体以及网格中只有车的两种情况,输出矩阵的示例:
深度学习:YOLO算法与其优化_第7张图片
但是,锚框也是有局限的,它将每个网格的容量从1个提升到了“锚框数量”个,但在物体个数超出锚框数量后算法依然会出错。其次,如果同一个锚框也有多个物体对应,算法同样只能抛弃掉其余物体,也就是说每个网格中的单个锚框容量也只有1。这两种情况下,可能需要自行编写一些对应的挑选机制。

虽然锚框算法还是有不少局限,但是在密集网格划分(如 19 × 19 19\times 19 19×19)下,上述情况还是很罕见的,总体来讲锚框算法已经能够应对不少物体重叠的特殊情况。且对于形状差异比较大(如人和车)的物体检测锚框算法能实现专门化探测。

锚框的形状可以手动设计,也可以利用K均值算法将待检测物体自动分为K个聚类,并求出每个聚类最合适的长宽比。

你可能感兴趣的:(深度学习与神经网络,深度学习,算法,计算机视觉)