←上一篇 ↓↑ 下一篇→
2.12 总结 回到目录 3.2 特征点检测

目标定位 (Object Localization)

大家好,欢迎回来,这一周我们学习的主要内容是对象检测,它是计算机视觉领域中一个新兴的应用方向,相比前两年,它的性能越来越好。在构建对象检测之前,我们先了解一下对象定位,首先我们看看它的定义。

图片分类任务我们已经熟悉了,就是算法遍历图片,判断其中的对象是不是汽车,这就是图片分类。这节课我们要学习构建神经网络的另一个问题,即定位分类问题。这意味着,我们不仅要用算法判断图片中是不是一辆汽车,还要在图片中标记出它的位置,用边框或红色方框把汽车圈起来,这就是定位分类问题。其中“定位”的意思是判断汽车在图片中的具体位置。这周后面几天,我们再讲讲当图片中有多个对象时,应该如何检测它们,并确定出位置。比如,你正在做一个自动驾驶程序,程序不但要检测其它车辆,还要检测其它对象,如行人、摩托车等等,稍后我们再详细讲。

本周我们要研究的分类定位问题,通常只有一个较大的对象位于图片中间位置,我们要对它进行识别和定位。而在对象检测问题中,图片可以含有多个对象,甚至单张图片中会有多个不同分类的对象。因此,图片分类的思路可以帮助学习分类定位,而对象定位的思路又有助于学习对象检测,我们先从分类和定位开始讲起。

图片分类问题你已经并不陌生了,例如,输入一张图片到多层卷积神经网络。这就是卷积神经网络,它会输出一个特征向量,并反馈给softmax单元来预测图片类型。

如果你正在构建汽车自动驾驶系统,那么对象可能包括以下几类:行人、汽车、摩托车和背景,这意味着图片中不含有前三种对象,也就是说图片中没有行人、汽车和摩托车,输出结果会是背景对象,这四个分类就是softmax函数可能输出的结果。

这就是标准的分类过程,如果你还想定位图片中汽车的位置,该怎么做呢?我们可以让神经网络多输出几个单元,输出一个边界框。具体说就是让神经网络再多输出4个数字,标记为 bx,by,bhb_x,b_y,b_hbx​,by​,bh​ 和 bwb_wbw​ ,这四个数字是被检测对象的边界框的参数化表示。

我们先来约定本周课程将使用的符号表示,图片左上角的坐标为(0,0),右下角标记为(1,1)。要确定边界框的具体位置,需要指定红色方框的中心点,这个点表示为(bx,byb_x,b_ybx​,by​),边界框的高度为 bhb_hbh​ ,宽度为 bwb_wbw​ 。因此训练集不仅包含神经网络要预测的对象分类标签,还要包含表示边界框的这四个数字,接着采用监督学习算法,输出一个分类标签,还有四个参数值,从而给出检测对象的边框位置。此例中, bxb_xbx​ 的理想值是0.5,因为它表示汽车位于图片水平方向的中间位置;byb_yby​ 大约是0.7,表示汽车位于距离图片底部 310\frac3{10}103​ 的位置; bhb_hbh​ 约为0.3,因为红色方框的高度是图片高度的0.3倍; bwb_wbw​ 约为0.4,红色方框的宽度是图片宽度的0.4倍。

下面我再具体讲讲如何为监督学习任务定义目标标签 yyy 。

请注意,这有四个分类,神经网络输出的是这四个数字和一个分类标签,或分类标签出现的概率。目标标签 yyy 的定义如下:y=[pcbxbybhbwc1c2c3]y=\left[\begin{matrix} p_c\\b_x\\b_y\\b_h\\b_w\\c_1\\c_2\\c_3 \end{matrix}\right]y=⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎡​pc​bx​by​bh​bw​c1​c2​c3​​⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎤​
它是一个向量,第一个组件 pcp_cpc​ 表示是否含有对象,如果对象属于前三类(行人、汽车、摩托车),则 pc=1p_c=1pc​=1 ,如果是背景,则图片中没有要检测的对象,则 pc=0p_c=0pc​=0 。我们可以这样理解 pcp_cpc​ ,它表示被检测对象属于某一分类的概率,背景分类除外。

如果检测到对象,就输出被检测对象的边界框参数 bx、by、bhb_x、b_y、b_hbx​、by​、bh​ 和 bwb_wbw​ 。最后,如果存在某个对象,那么 pc=1p_c=1pc​=1 ,同时输出 c1、c2c_1、c_2c1​、c2​ 和 c3c_3c3​ ,表示该对象属于1-3类中的哪一类,是行人,汽车还是摩托车。鉴于我们所要处理的问题,我们假设图片中只含有一个对象,所以针对这个分类定位问题,图片最多只会出现其中一个对象。

我们再看几个样本,假如这是一张训练集图片,标记为 xxx ,即上图的汽车图片。而在 yyy 当中,第一个元素 pc=1p_c=1pc​=1 ,因为图中有一辆车, bx、by、bhb_x、b_y、b_hbx​、by​、bh​ 和 bwb_wbw​ 会指明边界框的位置,所以标签训练集需要标签的边界框。图片中是一辆车,所以结果属于分类2,因为定位目标不是行人或摩托车,而是汽车,所以 c1=0,c2=1,c3=0,c1、c2c_1=0,c_2=1,c_3=0,c_1、c_2c1​=0,c2​=1,c3​=0,c1​、c2​ 和 c3c_3c3​ 中最多只有一个等于1。

这是图片中只有一个检测对象的情况,如果图片中没有检测对象呢?如果训练样本是这样一张图片呢?

这种情况下, pc=0,yp_c=0,ypc​=0,y 的其它参数将变得毫无意义,这里我全部写成问号,表示“毫无意义”的参数,因为图片中不存在检测对象,所以不用考虑网络输出中边界框的大小,也不用考虑图片中的对象是属于 c1、c2c_1、c_2c1​、c2​ 和 c3c_3c3​ 中的哪一类。针对给定的被标记的训练样本,不论图片中是否含有定位对象,构建输入图片 xxx 和分类标签 yyy 的具体过程都是如此。这些数据最终定义了训练集。

最后,我们介绍一下神经网络的损失函数,其参数为类别 yyy 和网络输出 y^\hat{y}y^​ ,如果采用平方误差策略,则 L(y^,y)=(y^1−y1)2+(y^2−y2)2+⋯+(y^8−y8)2L(\hat{y},y)=(\hat{y}_1-y_1)^2+(\hat{y}_2-y_2)^2+\cdots+(\hat{y}_8-y_8)^2L(y^​,y)=(y^​1​−y1​)2+(y^​2​−y2​)2+⋯+(y^​8​−y8​)2 ,损失值等于每个元素相应差值的平方和。

如果图片中存在定位对象,那么 y1=1y_1=1y1​=1 ,所以 y1=pcy_1=p_cy1​=pc​ ,同样地,如果图片中存在定位对象, pc=1p_c=1pc​=1 ,损失值就是不同元素的平方和。

另一种情况是, y1=0y_1=0y1​=0 ,也就是 pc=0p_c=0pc​=0 ,损失值是 (y^1−y1)2(\hat{y}_1-y_1)^2(y^​1​−y1​)2 ,因为对于这种情况,我们不用考虑其它元素,只需要关注神经网络输出 pcp_cpc​ 的准确度。

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

为了让大家了解对象定位的细节,这里我用平方误差简化了描述过程。实际应用中,你可以不对 c1、c2、c3c_1、c_2、c_3c1​、c2​、c3​ 和softmax激活函数应用对数损失函数,并输出其中一个元素值,通常做法是对边界框坐标应用平方差或类似方法,对 pcp_cpc​ 应用逻辑回归函数,甚至采用平方预测误差也是可以的。

以上就是利用神经网络解决对象分类和定位问题的详细过程,结果证明,利用神经网络输出批量实数来识别图片中的对象是个非常有用的算法。下节课,我想和大家分享另一种思路,就是把神经网络输出的实数集作为一个回归任务,这个思想也被应用于计算机视觉的其它领域,也是非常有效的,所以下节课见。

课程板书





←上一篇 ↓↑ 下一篇→
2.12 总结 回到目录 3.2 特征点检测

3.1 目标定位-深度学习第四课《卷积神经网络》-Stanford吴恩达教授相关推荐

  1. 深度学习第四课——卷积神经网络(week 1)

    目录 一.前言 1.1 卷积 1.2 其他滤波器 1.3 Padding 1.3.1 解释 1.3.2 填充多少像素的选择 1.4 卷积步长 1.5 三维卷积 1.6 单层卷积网络 1.7 深度卷积神 ...

  2. 2.19 总结-深度学习-Stanford吴恩达教授

    ←上一篇 ↓↑ 下一篇→ 2.18 Logistic 损失函数的解释 回到目录 3.1 神经网络概览 文章目录 总结 习题 第 11 题 第 12 题 第 13 题 第 14 题 第 15 题 第 1 ...

  3. 4.11 一维到三维推广-深度学习第四课《卷积神经网络》-Stanford吴恩达教授

    ←上一篇 ↓↑ 下一篇→ 4.10 风格代价函数 回到目录 4.12 总结 一维到三维推广 (1D and 3D Generalizations of Models) 你已经学习了许多关于卷积神经网络 ...

  4. 4.1 什么是人脸识别-深度学习第四课《卷积神经网络》-Stanford吴恩达教授

    ←上一篇 ↓↑ 下一篇→ 3.11 总结 回到目录 4.2 One-Shot 学习 什么是人脸识别 (What is face recognition?) 欢迎来到第四周,即这门课卷积神经网络课程的最 ...

  5. 1.8 简单卷积网络示例-深度学习第四课《卷积神经网络》-Stanford吴恩达教授

    ←上一篇 ↓↑ 下一篇→ 1.7 单层卷积网络 回到目录 1.9 池化层 简单卷积网络示例 (A Simple Convolution Network Example) 上节课,我们讲了如何为卷积网络 ...

  6. 3.12 总结-深度学习-Stanford吴恩达教授

    ←上一篇 ↓↑ 下一篇→ 3.11 随机初始化 回到目录 4.1 深层神经网络 文章目录 总结 习题 第 21 题 第 22 题 第 23 题 第 24 题 第 25 题 第 26 题 第 27 题 ...

  7. 深度学习教程(6) | 神经网络优化算法(吴恩达·完整版)

    作者:韩信子@ShowMeAI 教程地址:https://www.showmeai.tech/tutorials/35 本文地址:https://www.showmeai.tech/article-d ...

  8. 机器学习和深度学习到底怎么学?顶尖专家吴恩达告诉你

    机器学习和深度学习到底怎么学? 在外国版知乎上,有位网友问:新手如何学习机器学习?学习完MOOC的课程后有没有能力阅读研究论文或者真正的做出一点研究成果? 这个困惑很多人的问题吴恩达给出了详细的回答, ...

  9. 3.5 向量化实现的解释-深度学习-Stanford吴恩达教授

    ←上一篇 ↓↑ 下一篇→ 3.4 多个例子中的向量化 回到目录 3.6 激活函数 向量化实现的解释 (Explanation for Vectorized Implementation) 在上一个视频 ...

最新文章

  1. 出现PNG文件错误的解决方案AAPT err(Facade for 1773557322): libpng error: Not a PNG file
  2. ubuntu 修改root密码
  3. 有人顶贴,是对你的肯定
  4. oracle z中rowid,oracle 10g中的ROWID
  5. 【Android】SlidingTabs
  6. 付费依赖专家有没有用?
  7. 作者:李大中(1976-),男,中国联合网络通信集团有限公司信息化事业部数据中心工程师...
  8. php二分法实力,php常见的几种排序以及二分法查找
  9. 栈和队列8 - 数据结构和算法30
  10. yolov5环境配置-Anaconda3 + Pytorch1.8 + Cuda10.2 + cuDnn8.2.0 + opencv3.2.0
  11. android应用程序开发_如何开始进行Android应用程序开发
  12. 计算机联锁架的构成,TYJL-II计算机联锁的特点
  13. Python网络爬虫(二):小说下载器
  14. c++ protobuf中repeated类型使用——序列化
  15. Unity网络编程教学视频(本人第一次录制)
  16. 【原创】OpenDDS笔记(一) Windows环境下的开发实例
  17. windows 8 Surface 会成功吗?
  18. VMwares设置共享文件夹
  19. 博主联系方式汇总(非诚勿扰)
  20. 洋河梦之蓝M9政府专供 是真是假?

热门文章

  1. Springboot 简单的定时器
  2. 如何使用matlab中的胞元数组
  3. Android 自动生成表格
  4. Linux和Windows路由配置
  5. Android深度探索读书笔记 第七章
  6. SQL Server学习1(建数据库,建表,建约束)
  7. CodeSmith输错license后的解决办法
  8. ubuntu搭建Tomcat7.0
  9. UA MATH571B 试验设计V 2K析因设计简介
  10. sqlserver表变量