天天看点

3.8--3.10 Anchor Boxes YOLO 算法 候选区域 吴恩达 第四门课 卷积神经网络 -第三周 目标检测

3.8 Anchor Boxes

到目前为止,对象检测中存在的一个问题是每个格子只能检测出一个对象,如果你想让一个格子检测出多个对象,你可以这么做,就是使用 anchor box 这个概念,我们从一个例子开始讲吧。

3.8--3.10 Anchor Boxes YOLO 算法 候选区域 吴恩达 第四门课 卷积神经网络 -第三周 目标检测
3.8--3.10 Anchor Boxes YOLO 算法 候选区域 吴恩达 第四门课 卷积神经网络 -第三周 目标检测

而 anchor box 的思路是,这样子,预先定义两个不同形状的 anchor box,或者 anchorbox 形状,你要做的是把预测结果和这两个 anchor box 关联起来。一般来说,你可能会用更多的 anchor box,可能要 5 个甚至更多,但对于这个视频,我们就用两个 anchor box,这样介绍起来简单一些。

3.8--3.10 Anchor Boxes YOLO 算法 候选区域 吴恩达 第四门课 卷积神经网络 -第三周 目标检测
3.8--3.10 Anchor Boxes YOLO 算法 候选区域 吴恩达 第四门课 卷积神经网络 -第三周 目标检测

总结一下,用 anchor box 之前,你做的是这个,对于训练集图像中的每个对象,都根据那个对象中点位置分配到对应的格子中,所以输出 y 就是 3×3×8,因为是 3×3 网格,对于每个网格位置,我们有输出向量,包含Pc,然后边界框参数bx, b𝑦 , bℎ 和bw ,然后c 1 ,c2 ,c3 。

3.8--3.10 Anchor Boxes YOLO 算法 候选区域 吴恩达 第四门课 卷积神经网络 -第三周 目标检测
3.8--3.10 Anchor Boxes YOLO 算法 候选区域 吴恩达 第四门课 卷积神经网络 -第三周 目标检测

3.9 YOLO 算法(Putting it together: YOLO algorithm)

3.8--3.10 Anchor Boxes YOLO 算法 候选区域 吴恩达 第四门课 卷积神经网络 -第三周 目标检测

我们先看看如何构造你的训练集,假设你要训练一个算法去检测三种对象,行人、汽车和摩托车,你还需要显式指定完整的背景类别。这里有 3 个类别标签,如果你要用两个 anchorbox,那么输出 y 就是 3×3×2×8,其中 3×3 表示 3×3 个网格,2 是 anchor box 的数量,8 是向量维度,8 实际上先是 5(pc,bx,by,bw )再加上类别的数量(c 1 ,c 2 ,c 3 )。你可以将它看成是 3×3×2×8,或者 3×3×16。要构造训练集,你需要遍历 9 个格子,然后构成对应的目标向量y。

3.8--3.10 Anchor Boxes YOLO 算法 候选区域 吴恩达 第四门课 卷积神经网络 -第三周 目标检测
3.8--3.10 Anchor Boxes YOLO 算法 候选区域 吴恩达 第四门课 卷积神经网络 -第三周 目标检测
3.8--3.10 Anchor Boxes YOLO 算法 候选区域 吴恩达 第四门课 卷积神经网络 -第三周 目标检测
3.8--3.10 Anchor Boxes YOLO 算法 候选区域 吴恩达 第四门课 卷积神经网络 -第三周 目标检测
3.8--3.10 Anchor Boxes YOLO 算法 候选区域 吴恩达 第四门课 卷积神经网络 -第三周 目标检测
3.8--3.10 Anchor Boxes YOLO 算法 候选区域 吴恩达 第四门课 卷积神经网络 -第三周 目标检测

最后你要运行一下这个非极大值抑制,为了让内容更有趣一些,我们看看一张新的测试图像,这就是运行非极大值抑制的过程。如果你使用两个 anchor box,那么对于 9 个格子中任何一个都会有两个预测的边界框,其中一个的概率𝑞 𝑑 很低。但 9 个格子中,每个都有两个预测的边界框,比如说我们得到的边界框是是这样的,注意有一些边界框可以超出所在格子的高度和宽度(编号 1 所示)。接下来你抛弃概率很低的预测,去掉这些连神经网络都说,这里很可能什么都没有,所以你需要抛弃这些(编号 2 所示)。

3.8--3.10 Anchor Boxes YOLO 算法 候选区域 吴恩达 第四门课 卷积神经网络 -第三周 目标检测

最后,如果你有三个对象检测类别,你希望检测行人,汽车和摩托车,那么你要做的是,于每个类别单独运行非极大值抑制,处理预测结果所属类别的边界框,用非极大值抑制来处理行人类别,用非极大值抑制处理车子类别,然后对摩托车类别进行非极大值抑制,运行三次来得到最终的预测结果。所以算法的输出最好能够检测出图像里所有的车子,还有所有的行人(编号 3 所示)。这就是 YOLO 对象检测算法,这实际上是最有效的对象检测算法之一,包含了整个计算机视觉对象检测领域文献中很多最精妙的思路。

3.10 候选区域(选修)(Region proposals (Optional)

所谓的候选区域,这在计算机视觉领域是非常有影响力的概念。我把这个视频定为可选视频是因为我用到候选区域这一系列算法的频率没有那么高,但当然了,这些工作是很有影响力的,

滑动窗法,你使用训练过的分类器,在这些窗口中全部运行一遍,然后运行一个检测器,看看里面是否有车辆,行人和摩托车。现在你也可以运行一下卷积算法,这个算法的其中一个缺点是,它在显然没有任何对象的区域浪费时间。

3.8--3.10 Anchor Boxes YOLO 算法 候选区域 吴恩达 第四门课 卷积神经网络 -第三周 目标检测

所以这里这个矩形区域(编号 1)基本是空的,显然没有什么需要分类的东西。也许算法会在这个矩形上(编号 2)运行,而你知道上面没有什么有趣的东西。

3.8--3.10 Anchor Boxes YOLO 算法 候选区域 吴恩达 第四门课 卷积神经网络 -第三周 目标检测
3.8--3.10 Anchor Boxes YOLO 算法 候选区域 吴恩达 第四门课 卷积神经网络 -第三周 目标检测
3.8--3.10 Anchor Boxes YOLO 算法 候选区域 吴恩达 第四门课 卷积神经网络 -第三周 目标检测

所以这个细节就是所谓的分割算法,你先找出可能 2000 多个色块,然后在这 2000 个色块上放置边界框,然后在这 2000 个色块上运行分类器,这样需要处理的位置可能要少的多,可以减少卷积网络分类器运行时间,比在图像所有位置运行一遍分类器要快。特别是这种情况,现在不仅是在方形区域(编号 5)中运行卷积网络,我们还会在高高瘦瘦(编号 6)的区域运行,尝试检测出行人,然后我们在很宽很胖的区域(编号 7)运行,尝试检测出车辆,同时在各种尺度运行分类器。

这就是 R-CNN 或者 区域 CNN 的特色概念,现在看来 R-CNN 算法还是很慢的。所以有一系列的研究工作去改进这个算法,所以基本的 R-CNN 算法是使用某种算法求出候选区域,然后对每个候选区域运行一下分类器,每个区域会输出一个标签,有没有车子?有没有行人?有没有摩托车?并输出一个边界框,这样你就能在确实存在对象的区域得到一个精确的边界框。

澄清一下,R-CNN 算法不会直接信任输入的边界框,它也会输出一个边界框bx,by,bz和bw,这样得到的边界框比较精确,比单纯使用图像分割算法给出的色块边界要好,所以它可以得到相当精确的边界框。

现在R-CNN算法的一个缺点是太慢了。