吴恩达深度学习课程笔记-Classes 4

简介:

Classes 4 卷积神经网络

1卷积神经网络

1 计算机视觉

应用:

  • 图片分类
  • 图片识别
  • 目标检测
  • 风格迁移
  • .... ...

1.2 边缘检测

在这里插入图片描述
在这里插入图片描述
边缘检测算子中的数字用于进行边缘检测
计算机视觉不一定要去使用那些研究者们所选择的这九个数字,而是将这 9 个数字当成学习参数

1.3 padding

在这里插入图片描述
valid: 不填充,卷积后尺寸变小
same: 填充,卷积后尺寸不变

这也是为什么通常将卷积核设置为奇数的充分原因

1.4 步长

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
卷积操作:向下取整

1.5 三维卷积

在这里插入图片描述
按照计算机视觉的惯例,当你的输入有特定的高宽和通道数时,你的过滤器可以有不同的高,不同的宽,但是必须一样的通道数。

在这里插入图片描述
注意:

  • 多个卷积核的情况,结果数与卷积核的数量一致。
  • 两个过滤器,也就是有两个特征(检测两个特征)。

在这里插入图片描述
在这里插入图片描述
参数计算:
(每个卷积核的参数+1个bias) * 卷积核的个数
在这里插入图片描述

1.6 简单例子

在这里插入图片描述
逐层提取特征,在最后一层进行特征展开,为一个向量,输入到逻辑回归或者softmax分类器,得到最终分类结果。
在这里插入图片描述

1.7 池化层pooling

除了卷积层,卷积网络也经常使用池化层来缩减模型的大小,提高计算速度,同时提高所提取特征的鲁棒性。

  • 最大池化: max pooling 输出的每个元素都是其对应颜色区域中的最大元素值。
    在这里插入图片描述

最大化运算的实际作用就是,如果在过滤器中提取到某个特征,那么保留其最大值。如果没有提取到这个特征,可能在右上象限中不存在这个特征,那么其中的最大值也还是很小,这就是最大池化的直观理解。

  • 平均池化: 选取的不是每个过滤器的最大值,而是平均值
    在这里插入图片描述
  • 一般而言,最大池化比平均池化要常用些,但例外就是深度很深的神经网络,可以用平均池化来分解规模为 7×7×1000 的网络的表示层,在整个空间内求平均值,得到1×1×1000,取代全连接层。
  • 输入通道与输出通道个数相同,因为我们对每个通道都做了池化。
  • 池化过程中没有需要学习的参数。执行反向传播时,反向传播没有参数适用于最大池化。

池化层的反向传播
需要保证传递的loss(或者梯度)总和不变

  • mean pooling: 把一个patch中的值求取平均来做pooling,那么反向传播的过程也就是把某个元素的梯度等分为n份分配给前一层,这样就保证池化前后的梯度(残差)之和保持不变
  • max pooling: 把梯度直接传给前一层某一个像素,而其他像素不接受梯度,也就是为0

1.8 卷积神经网络例子

在这里插入图片描述

  • 人们在计算神经网络有多少层时,通常只统计具有权重和参数的层。因为池化层没有权重和参数,只有一些超参数。这里,我们把 CONV1和 POOL1 共同作为一个卷积,并标记为Layer1
  • 常规做法是,尽量不要自己设置超参数,而是查看文献中别人采用了哪些超参数,选一个在别人任务中效果很好的架构,那么它也有可能适用于自己的应用程序
  • 找到整合基本构造模块最好方法就是大量阅读别人的案例

1.9 为什么使用卷积

和只用全连接层相比,卷积层的两个主要优势在于参数共享和稀疏连接。

  • 参数共享:每个特征检测器以及输出都可以在输入图片的不同区域中使用同样的参数,以便提取垂直边缘或其它特征
  • 稀疏连接:依赖于这个 3×3 的输入的单元格,右边这个输出单元(元素 0)仅与 36 个输入特征中 9 个相连接。而且其它像素值都不会对输出产生任影响。

在这里插入图片描述

2 实例探究

在计算机视觉任务中表现良好的神经网络框架往往也适用于其它任务, 完全可以借鉴别人的神经网络框架来解决自己的问题。

2.1 经典网络

  • LeNet-5 的网络结构
    在这里插入图片描述

左往右看,随着网络越来越深,图像的高度和宽度在缩小,从最初的 32×32 缩小到 28×28,再到 14×14、10×10,最后只有 5×5。与此同时,随着网络层次的加深,通道数量一直在增加,从 1 增加到 6 个,再到 16 个。
一种模式至今仍然经常用到,就是一个或多个卷积层后面跟着一个池化层,然后又是若干个卷积层再接一个池化层,然后是全连接层,最后是输出,这种排列方式很常用。

* AlexNet
在这里插入图片描述

  • 这些层分别拆分到两个不同的 GPU 上,同时还专门有一个方法用于两个 GPU 进行交流
  • 叫作“局部响应归一化层”(Local Response Normalization),即 LRN 层
  • VGG
    VGG16在这个网络中包含 16 个卷积层和全连接层

在这里插入图片描述

  • padding都是same,conv层输出的尺寸没有变化。
  • 由 64 翻倍变成 128,再到 256 和 512。作者可能认为 512 已经足够大了,所以后面的层就不再翻倍了。无论如何,每一步都进行翻倍,或者说在每一组卷积层进行过滤器翻倍操作,正是设计此种网络结构的另一个简单原则。
  • 随着网络的加深,图像的高度和宽度都在以一定的规律不断缩小,每次池化后刚好缩小一半,而通道数量在不断增加,而且刚好也是在每组卷积操作后增加一倍。

2.2 残差网络ResNet

在这里插入图片描述
在残差网络中有一点变化,我们将𝑎[𝑙]直接向后,拷贝到神经网络的深层,在 ReLU 非线性激活函数前加上𝑎[𝑙],这是一条捷径。𝑎[𝑙]的信息直接到达神经网络的深层,不再沿着主路径传递。
𝑎[𝑙+2] = 𝑔(𝑧[𝑙+2] + 𝑎[𝑙])

在这里插入图片描述

  • 使用残差块能够训练更深的神经网络
  • 这种方式确实有助于解决梯度消失和梯度爆炸问题,让我们在训练更深网络的同时,又能保证良好的性能

在这里插入图片描述
为什么效果好:

  • 残差块最差的效果是与原有的一样(w、b为0),只是多了几层
  • 隐藏层单元学到一些有用信息,那么它可能比学习恒等函数表现得更好
  • ResNets 使用了许多 same 卷积,所以这个𝑎[𝑙]的维度等于这个输出层的维度。之所以能实现跳跃连接是因为 same 卷积保留了维度,所以很容易得出这个捷径连接,并输出这两个相同维度的向量
    在这里插入图片描述

2.3 为 1×1 卷积、 Network in Network

在这里插入图片描述
作用:

  • 1×1 卷积是压缩或增加通道数量,并减少计算量
  • 提供非线性函数功能

2.4 inception网络

在这里插入图片描述
使用 same 卷积,保持维度不变

  • 基本思想是 Inception 网络不需要人为决定使用哪个过滤器或者是否需要池化,而是由网络自行确定这些参数,你可以给网络添加这些参数的所有可能值,然后把这些输出连接起来,让网络自己学习它需要什么样的参数,采用哪些过滤器组合。
    在这里插入图片描述

28×28×256 的输出。通道连接实际就是把所有方块连接在一起的操作。

  • GoogleLeNet
    在这里插入图片描述

2.5 数据增强

当训练计算机视觉模型的时候,数据增强会有所帮助。

  • 垂直镜像
    在这里插入图片描述
  • 随机裁剪
    在这里插入图片描述
  • 旋转
  • 扭曲变形
  • 局部弯曲
  • 彩色转换: R、G 和 B 三个通道上加上不同的失真值
    在这里插入图片描述

2.6 计算机视觉现状

  • 数据量少:传统机器学习方法,手工特征工程,迁移学习等
  • 数据量大:深度学习方法

提升基准测试或者竞赛:

  • 集成:训练多个分类器,取均值
  • multi-crop:对同一张图随机裁剪10次,得到10张图,然后取平均结果

3 目标检测

3.1 目标定位

算法判断图片中是不是一辆汽车,还要在图片中标记出它的位置,用边框或红色方框把汽车圈起来,这就是定位分类问题
在这里插入图片描述
在这里插入图片描述
目标检测在原有的图像分类基础上又增加了几个输出:边界框𝑏𝑥,𝑏𝑦, 𝑏ℎ和𝑏𝑤,这四个数字是被检测对象的边界框的参数化表示。
标签

在这里插入图片描述
第一个组件𝑝𝑐表示是否含有对象,如果对象属于前三类(行人、汽车、摩托车),则𝑝𝑐 = 1,如果是背景,则图片中没有要检测的对象,则𝑝𝑐 = 0。我们可以这样理解𝑝𝑐,它表示被检测对象属于某一分类的概率,背景分类除外。

𝑝𝑐 = 1,同时输出𝑐1、𝑐2和𝑐3,表示该对象属于 1-3 类中的哪一类。
在这里插入图片描述
损失函数:
在这里插入图片描述

3.2 特征点检测

神经网络可以通过输出图片上特征点的(𝑥, 𝑦)坐标来实现对目标特征的识别
在这里插入图片描述
准备一个卷积网络和一些特征集,将人脸图片输入卷积网络,输出 1 或 0, 1 表示有人脸,0 表示没有人脸,然后输出(𝑙1𝑥,𝑙1𝑦)……直到(𝑙64𝑥,𝑙64𝑦)。这里我用𝑙代表一个特征,这里有129 个输出单元,其中1表示图片中有人脸,因为有64个特征,64×2=128,所以最终输出 128+1=129 个单元

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

3.3 目标检测

滑动窗检测:
在这里插入图片描述
滑动窗口目标检测算法接下来会继续处理第二个图像,即红色方框稍向右滑动之后的区域,并输入给卷积网络,因此输入给卷积网络的只有红色方框内的区域,再次运行卷积网络,然后处理第三个图像,依次重复操作,直到这个窗口滑过图像的每一个角落。

  • 优点:表现良好
  • 缺点:计算成本太高,因为在图片中剪切出太多小方块,卷积网络要一个个地处理。如果间隔步伐太大,显然会减少输入卷积网络的窗口个数,但是粗糙间隔尺寸可能会影响性能

3.4 滑动窗口的实现

在这里插入图片描述
不需要把输入图像分割成四个子集,分别执行前向传播,
而是把它们作为一张图片输入给卷积网络进行计算,其中的公共区域可以共享很多计算。
在这里插入图片描述

3.5 bound box预测

在滑动窗口法中,你取这些离散的位置集合,然后在它们上运行分类器,在这种情况下,这些边界框没有一个能完美匹配汽车位置。
yolo算法可以获得准确的方格。在图像上放一个网格。基本思路是使用图像分类和定位算法。对于每个格子都指定一个标签y
在这里插入图片描述
在这里插入图片描述
普通的卷积网络,卷积层,最大池化层等等,最后你会有这个,选择卷积层和最大池化层,这样最后就映射到一个 3×3×8 输出尺寸。所以你要做的是,有一个输入𝑥,就是这样的输入
图像,然后你有这些 3×3×8 的目标标签𝑦。

优点在于神经网络可以输出精确的边界框,但是每个格子只能有一个对象

注意:

  • 这和图像分类和定位算法非常像
  • 卷积实现,运行速度快,可以达到实时

读不懂研究论文的时候,必须去读源代码,或者联系作者之类的才能弄清楚这些算法的细节

3.6 交叉比IOU

在这里插入图片描述
一般约定,在计算机检测任务中,如果𝑙𝑜𝑈 ≥ 0.5,就说检测正确,如果预测器和实际边界框完美重叠,loU 就是 1,因为交集就等于并集。但一般来说只要𝑙𝑜𝑈 ≥ 0.5,那么结果是可以接受的,看起来还可以。

3.7 非极大值抑制

非极大值抑制这个方法可以确保你的算法对每个对象只检测一次
在这里插入图片描述
会对同一个对象做出多次检测,所以非极大值抑制做的就是清理这些检测结果。这样一辆车只检测一次,而不是每辆车都触发多次检测。
在这里插入图片描述
pc*c1、c2、c3
在这里插入图片描述
先用阈值丢弃一些结果
然后去掉所有剩下的边界框,任何没有达到输出标准的边界框,之前没有抛弃的边界框,把这些和输出边界框有高重叠面积和上一步输出边界框有很高交并比的边界框全部抛弃

3.8 anchor boxes

预先定义两个不同形状的 anchor box,或者 anchor
box 形状,你要做的是把预测结果和这两个 anchor box 关联起来。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
观察哪一个 anchor box 和实际边界框(编号1,红色框)的交并比更高,不管选的是哪一个,这个对象不只分配到一个格子,而是分配到一对,即(grid cell,anchor box)对,这就是对象在目标标签中的编码方式。所以现在输出 𝑦 就是 3×3×16,上一张幻灯片中你们看到 𝑦 现在是 16 维的,或者你也可以看成是3×3×2×8,因为现在这里有 2 个 anchor box,而 𝑦 是 8 维的。
anchor box 这个概念,是为了处理两个对象出现在同一个格子的情况

在这里插入图片描述
对于每个类别单独运行非极大值抑制,处理预测结果所属类别的边界框,用非极大值抑制来处理行人类别,用非极大值抑制处理车子类别,然后对摩托车类别进行非极大值抑制,运行
三次来得到最终的预测结果。所以算法的输出最好能够检测出图像里所有的车子,还有所有的行人

3.9 候选区域

在这里插入图片描述

4 特殊应用

4.1 人脸识别

人脸验证与人脸识别的区别
在这里插入图片描述
人脸验证问题:如果你有一张输入图片,以及某人的 ID 或者是名字,这个系统要做的是,验证输入图片是否是这个人。有时候也被称作 1 对 1 问题,只需要弄明白这个人是否和他声称的身份相符
人脸识别问题:比人脸验证问题难很多,是1对k的问题

4.2 one-shot 学习

需要通过单单一张图片或者单单一个人脸样例就能去识别这个人, 训练样本只有一个。
不再是分类问题,而是要学习一个能够衡量二者区别的函数
在这里插入图片描述

4.3 siamese 网络(孪生网络)

在这里插入图片描述
输入不再是一个图片,而是图片对。输出二者的维度为128维,然后比较二者的距离。
在这里插入图片描述
损失函数可以:

  • Contrastive Loss
  • cosine更适用于词汇级别的语义相似度度量
  • exp更适用于句子级别、段落级别的文本相似性度量

4.4 Triplet loss

在这里插入图片描述
应用三元组损失函数,你需要比较成对的图像。一个 Anchor图片,想让 Anchor 图片和 Positive 图片(Positive 意味着是同一个人)的距离很接近。然而,当 Anchor 图片与 Negative图片(Negative 意味着是非同一个人)对比时,会想让其距离离得更远一点。
在这里插入图片描述
anchor与正样本之间的距离小于anchor与负样本之间的距离
为了确保网络对于所有的编码不会总是输出 0,也为了确保它不会把所有的编码都设成互相相等的
在这里插入图片描述
𝑎是另一个超参数,这个就可以阻止网络输出无用的结果。
损失函数:
在这里插入图片描述

如何构建训练样本:

  • 随机选择的话太容易满足约束条件
    在这里插入图片描述
  • 尽可能选择难训练的三元组APN
    𝐴、𝑃和𝑁的选择使得𝑑(𝐴, 𝑃)很接近𝑑(𝐴, 𝑁),即𝑑(𝐴, 𝑃) ≈ 𝑑(𝐴, 𝑁),这样学习算法会竭尽全力使右边这个式子变大(𝑑(𝐴, 𝑁)),或者使左边这个式子(𝑑(𝐴, 𝑃))变小,这样左右两边至少有一个𝑎的间隔。

4.5 人脸验证与而分类

在这里插入图片描述
最后两个特征进行相减后,再送入logist回归,输出0/1

4.6 神经风格迁移

在这里插入图片描述
将使用𝐶来表示内容图像,𝑆表示风格图像,𝐺表示生成的图像

代价函数:

  • 内容代价:衡量c与g内容的相似性
  • 风格代价:衡量s与g风格的相似性
    在这里插入图片描述

模型:

  • 1.随机生成生成图片G像素矩阵
  • 2.利用损失函数更新G像素矩阵值 𝐺: = 𝐺 − 𝜕𝐽(𝐺)/𝜕G

内容代价函数:

  • 使用预训练的cnn网络模型抽特征,计算二者的特征距离,将其作为内容代价。
    在这里插入图片描述

风格代价函数
利用风格矩阵表示各自的风格,然后计算二者矩阵差,求和求均值
在这里插入图片描述

训练
在这里插入图片描述

目录
相关文章
|
1月前
|
机器学习/深度学习 算法 测试技术
深度学习环境搭建笔记(二):mmdetection-CPU安装和训练
本文是关于如何搭建深度学习环境,特别是使用mmdetection进行CPU安装和训练的详细指南。包括安装Anaconda、创建虚拟环境、安装PyTorch、mmcv-full和mmdetection,以及测试环境和训练目标检测模型的步骤。还提供了数据集准备、检查和网络训练的详细说明。
84 5
深度学习环境搭建笔记(二):mmdetection-CPU安装和训练
|
1月前
|
机器学习/深度学习 数据可视化 计算机视觉
目标检测笔记(五):详细介绍并实现可视化深度学习中每层特征层的网络训练情况
这篇文章详细介绍了如何通过可视化深度学习中每层特征层来理解网络的内部运作,并使用ResNet系列网络作为例子,展示了如何在训练过程中加入代码来绘制和保存特征图。
56 1
目标检测笔记(五):详细介绍并实现可视化深度学习中每层特征层的网络训练情况
|
1月前
|
机器学习/深度学习 并行计算 PyTorch
深度学习环境搭建笔记(一):detectron2安装过程
这篇博客文章详细介绍了在Windows环境下,使用CUDA 10.2配置深度学习环境,并安装detectron2库的步骤,包括安装Python、pycocotools、Torch和Torchvision、fvcore,以及对Detectron2和PyTorch代码的修改。
78 1
深度学习环境搭建笔记(一):detectron2安装过程
|
1月前
|
机器学习/深度学习 算法 PyTorch
深度学习笔记(十三):IOU、GIOU、DIOU、CIOU、EIOU、Focal EIOU、alpha IOU、SIOU、WIOU损失函数分析及Pytorch实现
这篇文章详细介绍了多种用于目标检测任务中的边界框回归损失函数,包括IOU、GIOU、DIOU、CIOU、EIOU、Focal EIOU、alpha IOU、SIOU和WIOU,并提供了它们的Pytorch实现代码。
157 1
深度学习笔记(十三):IOU、GIOU、DIOU、CIOU、EIOU、Focal EIOU、alpha IOU、SIOU、WIOU损失函数分析及Pytorch实现
|
1月前
|
机器学习/深度学习 自然语言处理 并行计算
深度学习笔记(十四):Transormer知识总结
关于深度学习中Transformer模型的知识总结,涵盖了Self-attention机制、QKV、Multi-head attention、位置编码和并行运算等关键概念,以及如何在PyTorch中实现Self-attention。
59 1
|
7天前
|
机器学习/深度学习 人工智能 测试技术
深度学习在图像识别中的应用与挑战
本文探讨了深度学习技术,尤其是卷积神经网络(CNN)在图像识别任务中的最新进展和面临的主要挑战。通过分析不同的网络架构、训练技巧以及优化策略,文章旨在提供一个全面的概览,帮助研究人员和实践者更好地理解和应用这些技术。
36 9
|
3天前
|
机器学习/深度学习 人工智能 算法
深度学习在图像识别中的应用与挑战
本文探讨了深度学习技术在图像识别领域的应用,重点分析了卷积神经网络(CNN)的工作原理及其在处理图像数据方面的优势。通过案例研究,展示了深度学习如何提高图像识别的准确性和效率。同时,文章也讨论了当前面临的主要挑战,包括数据不足、过拟合问题以及计算资源的需求,并提出了相应的解决策略。
|
4天前
|
机器学习/深度学习 分布式计算 并行计算
深度学习在图像识别中的应用与挑战
本文深入探讨了深度学习技术在图像识别领域的应用,分析了当前主流的卷积神经网络(CNN)架构,并讨论了在实际应用中遇到的挑战和可能的解决方案。通过对比研究,揭示了不同网络结构对识别准确率的影响,并提出了优化策略。此外,文章还探讨了深度学习模型在处理大规模数据集时的性能瓶颈,以及如何通过硬件加速和算法改进来提升效率。
|
4天前
|
机器学习/深度学习 人工智能 计算机视觉
深度学习在图像识别中的应用与挑战
【10月更文挑战第38天】本文将深入探讨深度学习如何在图像识别领域大放异彩,并揭示其背后的技术细节和面临的挑战。我们将通过实际案例,了解深度学习如何改变图像处理的方式,以及它在实际应用中遇到的困难和限制。
|
4天前
|
机器学习/深度学习 传感器 自动驾驶
深度学习在自动驾驶中的应用与挑战####
本文探讨了深度学习技术在自动驾驶领域的应用现状、面临的主要挑战及未来发展趋势。通过分析卷积神经网络(CNN)和循环神经网络(RNN)等关键算法在环境感知、决策规划中的作用,结合特斯拉Autopilot和Waymo的实际案例,揭示了深度学习如何推动自动驾驶技术向更高层次发展。文章还讨论了数据质量、模型泛化能力、安全性及伦理道德等问题,为行业研究者和开发者提供了宝贵的参考。 ####

热门文章

最新文章