深度学习吴恩达课程系列(10)

第三周、目标检测

3.1目标定位

在这里插入图片描述

请注意,这有四个分类,神经网络输出的是这四个数字和一个分类标签,或分类标签出现的概率。目标标签𝑦的定义如下:
在这里插入图片描述
第一个组件𝑝𝑐表示是否含有对象,如果检测到对象,就输出被检测对象的边界框参数𝑏𝑥、𝑏𝑦、𝑏和𝑏𝑤。那么𝑝𝑐 = 1,同时输出𝑐1、𝑐2和𝑐3,表示该对象属于 1-3 类中的哪一类,是行人,汽车还是摩托车。

因为定位目标不是行人或摩托车,而是汽车,所以𝑐1 = 0,𝑐2 = 1,𝑐3 = 0,𝑐1、𝑐2和𝑐3中最多只有一个等于 1。

这种情况下,𝑝𝑐 = 0,𝑦的其它参数将变得毫无意义,这里我全部写成问号。

神经网络的损失函数:
在这里插入图片描述

回顾一下,当𝑦1 = 1时,也就是这种情况(编号 1),平方误差策略可以减少这 8 个元素预测值和实际输出结果之间差值的平方。如果𝑦1 = 0,𝑦 矩阵中的后 7 个元素都不用考虑(编号 2),只需要考虑神经网络评估𝑦1(即𝑝𝑐)的准确度。

3.2特征点检测

假设你正在构建一个人脸识别应用,出于某种原因,你希望算法可以给出眼角的具体位置。眼角坐标为(𝑥, 𝑦),你可以让神经网络的最后一层多输出两个数字𝑙𝑥和𝑙𝑦,作为眼角的坐标值。

选定特征点个数,并生成包含这些特征点的标签训练集,然后利用神经网络输出脸部关键特征点的位置。

检测脸部特征也是计算机图形效果的一个关键构造模块,比如实现脸部扭曲,头戴皇冠等等。当然为了构建这样的网络,你需要准备一个标签训练集,也就是图片𝑥和标签𝑦的集合,这些点都是人为辛苦标注的。

如果你对人体姿态检测感兴趣,你还可以定义一些关键特征点,如胸部的中点,左肩,左肘,腰等等。然后通过神经网络标注人物姿态的关键特征点,再输出这些标注过的特征点,就相当于输出了人物的姿态动作。

3.3目标检测

重复上述操作,不过这次我们选择一个更大的窗口,截取更大的区域:
在这里插入图片描述

这种算法叫作滑动窗口目标检测,因为我们以某个步幅滑动这些方框窗口遍历整张图片,对这些方形区域进行分类,判断里面有没有汽车。
滑动窗口目标检测算法也有很明显的缺点,就是计算成本,因为你在图片中剪切出太多小方块,卷积网络要一个个地处理。

3.4滑动窗口卷积实现

softmax 单元所输出的 4 个分类出现的概率。
在这里插入图片描述
这里显示的都是平面图,而不是 3D 图像。
在这里插入图片描述
因为最大池化参数为 2,相当于以大小为 2 的步幅在原始图片上应用神经网络:
在这里插入图片描述
总结一下滑动窗口的实现过程,在图片上剪切出一块区域,假设它的大小是 14×14,把它输入到卷积网络。继续输入下一块区域,大小同样是 14×14,重复操作,直到某个区域识别到汽车。

3.5Bounding Box预测

最完美的边界框甚至不是方形,稍微有点长方形(红色方框所示),长宽比有点向水平方向延伸,有没有办法让这个算法输出更精准的边界框呢?
在这里插入图片描述
其中一个能得到更精准边界框的算法是 YOLO 算法。

本周第一个视频中介绍过的,逐一应用在图像的 9 个格子中。更具体一点,你需要这样定义训练标签,所以对于 9 个格子中的每一个指定一个标签𝑦,𝑦是 8 维的,和你之前看到的一样,𝑦 = [ 𝑝𝑐 𝑏𝑥𝑏𝑦𝑏ℎ 𝑏𝑤𝑐1𝑐2𝑐3 ] ,𝑝𝑐等于 0 或 1 取决于这个绿色格子中是否有图像。然后𝑏𝑥、𝑏𝑦、𝑏ℎ和𝑏𝑤作用就是,如果那个格子里有对象,那么就给出边界框坐标。然后𝑐1、𝑐2和𝑐3。
在这里插入图片描述
重申一下,把对象分配到一个格子的过程是,你观察对象的中点,然后将这个对象分配到其中点所在的格子,所以即使对象可以横跨多个格子,也只会被分配到 9 个格子其中之一。

𝑏𝑥、𝑏𝑦、𝑏和𝑏𝑤单位是相对于格子尺寸的比例。

3.6交叉比

在这里插入图片描述
一般约定,在计算机检测任务中,如果𝑙𝑜𝑈 ≥ 0.5,就说检测正确,如果预测器和实际边界框完美重叠,loU 就是 1,因为交集就等于并集。

人们定义 loU 这个概念是为了评价你的对象定位算法是否精准,但更一般地说,loU 衡量了两个边界框重叠地相对大小。

3.7非极大值抑制

假设你需要在这张图片里检测行人和汽车,你可能会在上面放个 19×19 网格,理论上这辆车只有一个中点,所以它应该只被分配到一个格子里,左边的车子也只有一个中点,所以理论上应该只有一个格子做出有车的预测。

最后可能会对同一个对象做出多次检测,所以非极大值抑制做的就是清理这些检测结果。这样一辆车只检测一次,而不是每辆车都触发多次检测。

首先看看每次报告每个检测结果相关的概率𝑝𝑐,际上是𝑝𝑐乘以𝑐1、𝑐2或𝑐3。现在我们就说,这个𝑝𝑐检测概率,首先看概率最大的那个,这个例子(右边车辆)中是 0.9。

接下来,逐一审视剩下的矩形,找出概率最高,𝑝𝑐最高的一个,然后非极大值抑制算法就会去掉其他 loU 值很高的矩形。

所以这就是非极大值抑制,非最大值意味着你只输出概率最大的分类结果,但抑制很接近,但不是最大的其他预测结果,所以这方法叫做非极大值抑制。

现在要实现非极大值抑制,你可以做的第一件事是,去掉所有边界框,我们就将所有的预测值,所有的边界框𝑝𝑐小于或等于某个阈值,比如𝑝𝑐 ≤ 0.6的边界框去掉。

接下来剩下的边界框,没有抛弃没有处理过的,你就一直选择概率𝑝𝑐最高的边界框,然后把它输出成预测结果,这个过程就是上一张幻灯片,取一个边界框,让它高亮显示,这样你就可以确定输出做出有一辆车的预测。

3.8Anchor Boxes

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

我们就用两个 anchor box,这样介绍起来简单一些。
在这里插入图片描述
总结一下,用 anchor box 之前,你做的是这个,对于训练集图像中的每个对象,都根据那个对象中点位置分配到对应的格子中,所以输出𝑦就是 3×3×8,因为是 3×3 网格,对于每个网格位置,我们有输出向量,包含𝑝𝑐,然后边界框参数𝑏𝑥, 𝑏𝑦, 𝑏ℎ和𝑏𝑤,然后𝑐1, 𝑐2, 𝑐3。

3.9YOLO算法

检测三种对象,行人、汽车和摩托车,你还需要显式指定完整的背景类别。这里有 3 个类别标签,如果你要用两个 anchor box,那么输出 𝑦 就是 3×3×2×8,其中 3×3 表示 3×3 个网格,2 是 anchor box 的数量,8 是向量维度,8 实际上先是 5(𝑝𝑐, 𝑏𝑥, 𝑏𝑦, 𝑏ℎ, 𝑏𝑤)再加上类别的数量(𝑐1, 𝑐2, 𝑐3)。你可以将它看成是 3×3×2×8,或者 3×3×16。

如果你使用两个 anchor box,那么对于 9 个格子中任何一个都会有两个预测的边界框,其中一个的概率𝑝𝑐很低。来你抛弃概率很低的预测,去掉这些连神经网络都说,这里很可能什么都没有,所以你需要抛弃这些(编号 2 所示)。
在这里插入图片描述
最后,如果你有三个对象检测类别,你希望检测行人,汽车和摩托车,那么你要做的是,对于每个类别单独运行非极大值抑制,算法的输出最好能够检测出图像里所有的车子,还有所有的行人(编号 3 所示)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

身影王座

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值