吴恩达深度学习笔记:卷积神经网络(Foundations of Convolutional Neural Networks)3.5-3.6

news2024/10/17 15:31:30

目录

  • 第四门课 卷积神经网络(Convolutional Neural Networks)
    • 第三周 目标检测(Object detection)
      • 3.5 Bounding Box 预测(Bounding box predictions)
      • 3.6 交并比(Intersection over union)

第四门课 卷积神经网络(Convolutional Neural Networks)

第三周 目标检测(Object detection)

3.5 Bounding Box 预测(Bounding box predictions)

在上一个视频中,你们学到了滑动窗口法的卷积实现,这个算法效率更高,但仍然存在问题,不能输出最精准的边界框。在这个视频中,我们看看如何得到更精准的边界框。

在这里插入图片描述
在滑动窗口法中,你取这些离散的位置集合,然后在它们上运行分类器,在这种情况下,这些边界框没有一个能完美匹配汽车位置,也许这个框(编号 1)是最匹配的了。还有看起来这个真实值,最完美的边界框甚至不是方形,稍微有点长方形(红色方框所示),长宽比有点向水平方向延伸,有没有办法让这个算法输出更精准的边界框呢?
在这里插入图片描述
其中一个能得到更精准边界框的算法是 YOLO 算法,YOLO(You only look once)意思是你只看一次,这是由 Joseph Redmon,Santosh Divvala,Ross Girshick 和 Ali Farhadi 提出的算法。

是这么做的,比如你的输入图像是 100×100 的,然后在图像上放一个网格。为了介绍起来简单一些,我用 3×3 网格,实际实现时会用更精细的网格,可能是 19×19。基本思路是使用图像分类和定位算法,前几个视频介绍过的,然后将算法应用到 9 个格子上。(基本思路是,采用图像分类和定位算法,本周第一个视频中介绍过的,逐一应用在图像的 9 个格子中。)更具体一点,你需要这样定义训练标签,所以对于 9 个格子中的每一个指定一个标签𝑦,𝑦是 8 维的,和你之前看到的一样,
𝑦 = [ p c b x b y b h b w c 1 c 2 c 3 ] \begin{bmatrix} p_c \\ b_x \\ b_y \\ b_h \\ b_w \\ c_1 \\ c_2 \\ c_3 \end{bmatrix} pcbxbybhbwc1c2c3 ,𝑝𝑐等于 0 或 1 取决于这个绿色格子中是否有图像。然后𝑏𝑥、𝑏𝑦、𝑏ℎ和𝑏𝑤作用就是,如果那个格子里有对象,那么就给出边界框坐标。然后𝑐1、𝑐2和𝑐3就是你想要识别的三个类别,背景类别不算,所以你尝试在背景类别中识别行人、汽车和摩托车,那么𝑐1、𝑐2和𝑐3可以是行人、汽车和摩托车类别。这张图里有 9 个格子,所以对于每个格子都有这么一个向量。

在这里插入图片描述
我们看看左上方格子,这里这个(编号 1),里面什么也没有,所以左上格子的标签向
量𝑦是 [ 0 ? ? ? ? ? ? ? ] \begin{bmatrix} 0 \\ ? \\ ? \\ ? \\ ? \\ ? \\ ? \\ ? \end{bmatrix} 0??????? 。然后这个格子(编号 2)的输出标签𝑦也是一样,这个格子(编号 3),还有其他什么也没有的格子都一样。

现在这个格子呢?讲的更具体一点,这张图有两个对象,YOLO 算法做的就是,取两个对象的中点,然后将这个对象分配给包含对象中点的格子。所以左边的汽车就分配到这个格子上(编号 4),然后这辆 Condor(车型:神鹰)中点在这里,分配给这个格子(编号 6)。所以即使中心格子(编号 5)同时有两辆车的一部分,我们就假装中心格子没有任何我们感兴趣的对象,所以对于中心格子,分类标签𝑦和这个向量类似,和这个没有对象的向量类似,即𝑦 = [ 0 ? ? ? ? ? ? ? ] \begin{bmatrix} 0 \\ ? \\ ? \\ ? \\ ? \\ ? \\ ? \\ ? \end{bmatrix} 0??????? 。而对于这个格子,这个用绿色框起来的格子(编号 4),目标标签就是这样的,这里有一个对象,𝑝𝑐 = 1,然后你写出𝑏𝑥、𝑏𝑦、𝑏ℎ和𝑏𝑤来指定边界框位置,然后还有类别 1是行人,那么𝑐1 = 0,类别 2 是汽车,所以𝑐2 = 1,类别 3 是摩托车,则数值𝑐3 = 0,即𝑦 = [ 1 b x b y b h b w 0 1 0 ] \begin{bmatrix} 1\\ b_x \\ b_y \\ b_h \\ b_w \\ 0 \\ 1 \\ 0 \end{bmatrix} 1bxbybhbw010
右边这个格子(编号 6)也是类似的,因为这里确实有一个对象,它的向量应该是这个样子的,𝑦 = [ 1 b x b y b h b w 0 1 0 ] \begin{bmatrix} 1\\ b_x \\ b_y \\ b_h \\ b_w \\ 0 \\ 1 \\ 0 \end{bmatrix} 1bxbybhbw010 ,作为目标向量对应右边的格子。

所以对于这里 9 个格子中任何一个,你都会得到一个 8 维输出向量,因为这里是 3×3 的网格,所以有 9 个格子,总的输出尺寸是 3×3×8,所以目标输出是 3×3×8。因为这里有 3×3格子,然后对于每个格子,你都有一个 8 维向量𝑦,所以目标输出尺寸是 3×3×8。

对于这个例子中,左上格子是 1×1×8,对应的是 9 个格子中左上格子的输出向量。所以对于这 3×3 中每一个位置而言,对于这 9 个格子,每个都对应一个 8 维输出目标向量𝑦,其中一些值可以是 dont care-s(即?),如果这里没有对象的话。所以总的目标输出,这个图片的输出标签尺寸就是 3×3×8。

在这里插入图片描述
如果你现在要训练一个输入为 100×100×3 的神经网络,现在这是输入图像,然后你有一个普通的卷积网络,卷积层,最大池化层等等,最后你会有这个,选择卷积层和最大池化层,这样最后就映射到一个 3×3×8 输出尺寸。所以你要做的是,有一个输入𝑥,就是这样的输入图像,然后你有这些 3×3×8 的目标标签𝑦。当你用反向传播训练神经网络时,将任意输入𝑥映射到这类输出向量𝑦。

在这里插入图片描述
所以这个算法的优点在于神经网络可以输出精确的边界框,所以测试的时候,你做的是喂入输入图像𝑥,然后跑正向传播,直到你得到这个输出𝑦。然后对于这里 3×3 位置对应的 9个输出,我们在输出中展示过的,你就可以读出 1 或 0(编号 1 位置),你就知道 9 个位置之一有个对象。如果那里有个对象,那个对象是什么(编号 3 位置),还有格子中这个对象的边界框是什么(编号 2 位置)。只要每个格子中对象数目没有超过 1 个,这个算法应该是没问题的。一个格子中存在多个对象的问题,我们稍后再讨论。但实践中,我们这里用的是比较小的 3×3 网格,实践中你可能会使用更精细的 19×19 网格,所以输出就是 19×19×8。这样的网格精细得多,那么多个对象分配到同一个格子得概率就小得多。

重申一下,把对象分配到一个格子的过程是,你观察对象的中点,然后将这个对象分配到其中点所在的格子,所以即使对象可以横跨多个格子,也只会被分配到 9 个格子其中之一,就是 3×3 网络的其中一个格子,或者 19×19 网络的其中一个格子。在 19×19 网格中,两个对象的中点(图中蓝色点所示)处于同一个格子的概率就会更低。

在这里插入图片描述
所以要注意,首先这和图像分类和定位算法非常像,我们在本周第一节课讲过的,就是它显式地输出边界框坐标,所以这能让神经网络输出边界框,可以具有任意宽高比,并且能输出更精确的坐标,不会受到滑动窗口分类器的步长大小限制。其次,这是一个卷积实现,你并没有在 3×3 网格上跑 9 次算法,或者,如果你用的是 19×19 的网格,19 平方是 361 次,所以你不需要让同一个算法跑 361 次。相反,这是单次卷积实现,但你使用了一个卷积网络,有很多共享计算步骤,在处理这 3×3 计算中很多计算步骤是共享的,或者你的 19×19 的网格,所以这个算法效率很高。

在这里插入图片描述
事实上 YOLO 算法有一个好处,也是它受欢迎的原因,因为这是一个卷积实现,实际上它的运行速度非常快,可以达到实时识别。在结束之前我还想给你们分享一个小细节,如何编码这些边界框𝑏𝑥、𝑏𝑦、𝑏ℎ和𝑏𝑤,我们在下一张幻灯片上讨论。

这里有两辆车,我们有个 3×3 网格,我们以右边的车为例(编号 1),红色格子里有个对象,所以目标标签𝑦就是,𝑝𝑐 = 1,然后𝑏𝑥、𝑏𝑦、𝑏ℎ和𝑏𝑤,然后𝑐1 = 0,𝑐2 = 1,𝑐3 = 0,即𝑦 = [ 1 b x b y b h b w 0 1 0 ] \begin{bmatrix} 1\\ b_x \\ b_y \\ b_h \\ b_w \\ 0 \\ 1 \\ 0 \end{bmatrix} 1bxbybhbw010 。你怎么指定这个边界框呢?

在这里插入图片描述
在 YOLO 算法中,对于这个方框(编号 1 所示),我们约定左上这个点是(0,0),然后右下这个点是(1,1) ,要指定橙色中点的位置,𝑏𝑥大概是 0.4,因为它的位置大概是水平长度的0.4,然后𝑏𝑦大概是 0.3,然后边界框的高度用格子总体宽度的比例表示,所以这个红框的宽度可能是蓝线(编号 2 所示的蓝线)的 90%,所以𝑏ℎ是 0.9,它的高度也许是格子总体高度的一半,这样的话𝑏𝑤就是 0.5。换句话说,𝑏𝑥、𝑏𝑦、𝑏ℎ和𝑏𝑤单位是相对于格子尺寸的比例,所以𝑏𝑥和𝑏𝑦必须在 0 和 1 之间,因为从定义上看,橙色点位于对象分配到格子的范围内,如果它不在 0 和 1 之间,如果它在方块外,那么这个对象就应该分配到另一个格子上。这个值(𝑏ℎ和𝑏𝑤)可能会大于 1,特别是如果有一辆汽车的边界框是这样的(编号 3 所示),那么边界框的宽度和高度有可能大于 1。

指定边界框的方式有很多,但这种约定是比较合理的,如果你去读 YOLO 的研究论文,YOLO 的研究工作有其他参数化的方式,可能效果会更好,我这里就只给出了一个合理的约定,用起来应该没问题。不过还有其他更复杂的参数化方式,涉及到 sigmoid 函数,确保这个值(𝑏𝑥和𝑏𝑦)介于 0 和 1 之间,然后使用指数参数化来确保这些(𝑏ℎ和𝑏𝑤)都是非负数,因为 0.9 和 0.5,这个必须大于等于 0。还有其他更高级的参数化方式,可能效果要更好一点,但我这里讲的办法应该是管用的。

这就是 YOLO 算法,你只看一次算法,在接下来的几个视频中,我会告诉你一些其他的思路可以让这个算法做的更好。在此期间,如果你感兴趣,也可以看看 YOLO 的论文,在前几张幻灯片底部引用的 YOLO 论文。

Redmon, Joseph, et al. “You Only Look Once: Unified, Real-Time Object Detection.” (2015):779-788.

不过看这些论文之前,先给你们提个醒,YOLO 论文是相对难度较高的论文之一,我记得我第一次读这篇论文的时候,我真的很难搞清楚到底是怎么实现的,我最后问了一些我认识的研究员,看看他们能不能给我讲清楚,即使是他们,也很难理解这篇论文的一些细节。所以如果你看论文的时候,发现看不懂,这是没问题的,我希望这种场合出现的概率要更低才好,但实际上,即使是资深研究员也有读不懂研究论文的时候,必须去读源代码,或者联系作者之类的才能弄清楚这些算法的细节。但你们不要被我吓到,你们可以自己看看这些论文,如果你们感兴趣的话,但这篇论文相对较难。现在你们了解了 YOLO 算法的基础,我们继续讨论别的让这个算法效果更好的研究。

3.6 交并比(Intersection over union)

你如何判断对象检测算法运作良好呢?在本视频中,你将了解到并交比函数,可以用来评价对象检测算法。在下一个视频中,我们用它来插入一个分量来进一步改善检测算法,我们开始吧。

在这里插入图片描述
在对象检测任务中,你希望能够同时定位对象,所以如果实际边界框是这样的,你的算法给出这个紫色的边界框,那么这个结果是好还是坏?所以交并比(loU)函数做的是计算两个边界框交集和并集之比。两个边界框的并集是这个区域,就是属于包含两个边界框区域(绿色阴影表示区域),而交集就是这个比较小的区域(橙色阴影表示区域),那么交并比就是交集的大小,这个橙色阴影面积,然后除以绿色阴影的并集面积。

在这里插入图片描述
一般约定,在计算机检测任务中,如果𝑙𝑜𝑈 ≥ 0.5,就说检测正确,如果预测器和实际边界框完美重叠,loU 就是 1,因为交集就等于并集。但一般来说只要𝑙𝑜𝑈 ≥ 0.5,那么结果是可以接受的,看起来还可以。一般约定,0.5 是阈值,用来判断预测的边界框是否正确。一般是这么约定,但如果你希望更严格一点,你可以将 loU 定得更高,比如说大于 0.6 或者更大的数字,但 loU 越高,边界框越精确。

所以这是衡量定位精确度的一种方式,你只需要统计算法正确检测和定位对象的次数,你就可以用这样的定义判断对象定位是否准确。再次,0.5 是人为约定,没有特别深的理论依据,如果你想更严格一点,可以把阈值定为 0.6。有时我看到更严格的标准,比如 0.6 甚至 0.7,但很少见到有人将阈值降到 0.5 以下。

人们定义 loU 这个概念是为了评价你的对象定位算法是否精准,但更一般地说,loU 衡量了两个边界框重叠地相对大小。如果你有两个边界框,你可以计算交集,计算并集,然后求两个数值的比值,所以这也可以判断两个边界框是否相似,我们将在下一个视频中再次用到这个函数,当我们讨论非最大值抑制时再次用到。

在这里插入图片描述

好,这就是 loU,或者说交并比,不要和借据中提到的我欠你钱的这个概念所混淆,如果你借钱给别人,他们会写给你一个借据,说:“我欠你这么多钱(I own you this much money)。”,这也叫做 loU。这是完全不同的概念,这两个概念重名。

现在介绍了 loU 交并比的定义之后,在下一个视频中,我想讨论非最大值抑制,这个工具可以让 YOLO 算法输出效果更好,我们下一个视频继续。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2216106.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

leetcode36:有效的数独

请你判断一个 9 x 9 的数独是否有效。只需要 根据以下规则 ,验证已经填入的数字是否有效即可。 数字 1-9 在每一行只能出现一次。数字 1-9 在每一列只能出现一次。数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。(请参考示例图) 注…

详解腐烂的苹果(图+代码+广度优先遍历)

描述 给定一个 nm nm 的网格,其中每个单元格中可能有三种值中的一个 0 , 1 , 2。其中 0 表示这个格子为空、1 表示这个格子有一个完好的苹果,2 表示这个格子有一个腐烂的苹果。腐烂的苹果每分钟会向上下左右四个方向的苹果传播一次病菌,并导…

Elsevier旗下老牌TOP上榜On Hold名单!原因涉及“论文工厂”?

【SciencePub学术】上个月突发“On Hold”近10本期刊,看来科睿唯安又是闷声干大事。大家注意,On Hold期间,提交的论文是不能被检索到的,甚至此类期刊有可能随时被WOS目录剔除,所以请大家注意甄别,谨慎投递&…

快速理解http的get和post

在网络通信中,HTTP 协议扮演着非常重要的角色,而不同的 HTTP 方法决定了客户端与服务器之间的交互方式。 这里讲一下最常用的两种方法——GET 和 POST。 一、GET 方法 GET 方法用于从服务器获取资源。 这就像去图书馆借书——你向图书馆请求一本特定的…

Linux系统:sudo systemctl reload apache2命令作用

sudo systemctl reload apache2命令作用 sudo systemctl reload apache2 是一个用于重新加载 Apache Web服务器的命令。这个命令并不会停止然后重新启动服务,而是尝试重新加载配置文件,并对正在运行的服务进行无中断的重新加载。这通常用于在更改了Apach…

Karmada核心概念

以下内容为翻译,原文地址 Karmada 是什么? | karmada 一、Karmada核心概念 一)什么是Karmada 1、Karmada:开放,多云,多集群Kubernetes业务流程 Karmada (Kubernetes Armada)是一个Kubernetes管理系统&…

省出一套黑神话,光威神武DDR5 6800 C32 32GB内存条:游戏玩家的高性能选择

在游戏的世界里,每一帧的流畅度都可能决定胜负,尤其是那些对硬件规格要求较高的游戏来说,PC上每一种硬件的性能表现都至关重要。对于追求极致游戏体验的玩家来说,一款高性能的内存条是不可或缺的。前些年很多人可能还比较关注国际…

Linux下内核空间和用户空间内存映射图详解

目录 一、简介二、内存空间定义三、内存权限四、内存空间映射图4.1 32位系统4.2 64位系统4.3 映射空间解析 五、其他相关链接1、关于linux下内存管理内容总结2、Linux内核中kzalloc分配内存时用的参数GFP_KERNEL详解3、Linux下stream内存带宽测试参数和示例详解附源码总结 一、…

K8s的储存

一 configmap 1.1 configmap的功能 configMap用于保存配置数据,以键值对形式存储。 configMap 资源提供了向 Pod 注入配置数据的方法。 镜像和配置文件解耦,以便实现镜像的可移植性和可复用性。 etcd限制了文件大小不能超过1M 1.2 configmap的使用场…

【C++】———— 日期类练习

目录 前言 时间类定义 成员函数具体实现 1.获取某年某月天数 2.构造函数 3.析构函数 4.拷贝构造 5.日期类的运算符重载 5.1赋值运算符重载 5.2 和 - - 的前置后置 5.3日期比较(> , < , > ,< , ,!) 5.4 、 、- 、- 5.5日期减日期&#xff0c;求差值…

搜维尔科技:Geomagic Touch触觉力反馈应用于医疗、工业、科研、危险环境等遥操作技术

医疗机器人遥操作&#xff1a; 在医疗领域&#xff0c;该设备可用于控制医疗机器人进行手术模拟训练。例如&#xff0c;外科医生可以通过 Geomagic Touch 设备操控机器人的末端器械&#xff0c;在虚拟环境中进行手术操作练习。医生在操作设备时能感受到机器人与虚拟组织或器官…

【可答疑】基于51单片机的自动洗手器(含仿真、代码、报告、演示视频等)

✨哈喽大家好&#xff0c;这里是每天一杯冰美式oh&#xff0c;985电子本硕&#xff0c;大厂嵌入式在职0.3年&#xff0c;业余时间做做单片机小项目&#xff0c;有需要也可以提供就业指导&#xff08;免费&#xff09;~ &#x1f431;‍&#x1f409;这是51单片机毕业设计100篇…

前端布局与响应式设计综合指南(三)

​&#x1f308;个人主页&#xff1a;前端青山 &#x1f525;系列专栏&#xff1a;Css篇 &#x1f516;人终将被年少不可得之物困其一生 依旧青山,本期给大家带来Css篇专栏内容:前端布局与响应式设计综合指南(三) 目录 42、px/em/rem有什么区别&#xff1f;为什么通常给font-s…

JavaScript object(2)

这样的话&#xff0c;就变成只读了。

2022年华为杯数学建模竞赛D题论文和代码

PISA架构芯片资源排布研究 随着全球“芯”缺浪潮的持续发酵&#xff0c;作为“工业粮食”的芯片技术成为我国亟待突围的产业之一。PISA作为兼具良好处理速度与可编程性的交换芯片架构&#xff0c;有效缓解了传统固定功能的交换芯片研发效率低下的问题。为充分发挥芯片能力&…

2024-10-15 学习人工智能的Day7

在简单的了解完学习人工智能所需的高数、线代、概率论后&#xff0c;我们又重新开始了国庆的学习&#xff0c;因为已经有十余天没有接触python&#xff0c;所以今天的内容主要是对之前学习的python的回顾与总结&#xff0c;然后对各个部分进行了简单的实践&#xff0c;在最后学…

IPV6学习汇总

一、ICMPV6 ICMPv6&#xff08;Internet Control Message Protocol version 6&#xff09;&#xff0c;即互联网控制信息协议版本六&#xff0c;是为了与IPv6配套使用而开发的互联网控制信息协议。以下是关于ICMPv6的详细介绍&#xff1a; 一、基本功能 ICMPv6向源节点报告关…

【C#】使用Visual Studio创建Windows Forms应用程序计算对角线之和

文章目录 使用Visual Studio创建Windows Forms应用程序计算对角线之和步骤 1: 创建新的Windows Forms应用程序项目步骤 2: 设计窗体步骤 3: 编写代码步骤 4: 运行程序步骤 5: 运行结果 使用Visual Studio创建Windows Forms应用程序计算对角线之和 大家好&#xff01;今天&…

HCIP-HarmonyOS Application Developer 习题(十)

1、HarmonyOS设备A上的应用通过调用分布式任务调度的能力continuesbility&#xff0c;向设备B的应用发起跨端迁移&#xff0c;此过程属于跨端迁移中的哪个流程? A、流转准备 B、流转进行 C、流转结束 D、流转完成 答案&#xff1a;D 分析&#xff1a; 2、为了帮助用户通过全局…

大数据之hadoop(hdfs部分)

1.引入:为什么需要分布式存储? 一个服务器能存入海量数据吗?显然是不能,所以构建分布式解决了存入问题.多台服务器的协调工作也是性能的横向扩展. 总结: 1.数据量太大&#xff0c;单机存储能力有上限&#xff0c;需要靠数量来解决问题 2.数量的提升带来的是网络传输、磁盘读…