提交 00a0e95b 编写于 作者: W wizardforcel

2021-01-06 14:52:38

上级 da41f96b
......@@ -9,7 +9,7 @@
本章分为以下几节:
* 边缘设备上的深度学习概述
* 用于 GPU / CPU 优化的技术
* 用于 GPU/CPU 优化的技术
* MobileNet 概述
* 使用 Raspberry Pi 进行图像处理
* 使用 OpenVINO 进行模型转换和推理
......@@ -54,11 +54,11 @@
| Android Pixel XL 155 毫米 x 76 毫米 | Ardeno 530 | 2 个 2.15 GHz Kryo 和 2 个 1.6 GHz Kryo | 4 GB 内存 | |
| iPhone XR 155 毫米 x 76 毫米 | A12 仿生芯片 | A12 仿生芯片 | 3 GB 内存 | |
# 用于 GPU / CPU 优化的技术
# 用于 GPU/CPU 优化的技术
**中央处理器****CPU**)主要执行串行处理,而**图形处理器****GPU**)并行运行进程并且可以执行 一次执行大量操作,从而加快了处理速度。 GPU 中的数据称为线程。 使用**计算统一设备架构****CUDA**)和**开放计算语言****OpenCL**)对 GPU 进行编程。 CPU 执行许多不同类型的计算,而 GPU 专门处理给定的计算,例如图像处理。 为了使边缘设备提供无延迟的结果,它们必须伴随加速器,GPU 和软件优化。
以下是一些通常用于 GPU / CPU 优化的方法:
以下是一些通常用于 GPU/CPU 优化的方法:
* 模型优化方法,例如图像大小,批量归一化,梯度下降等。
* 基于幅度的权重修剪通过将模型权重清零来使模型稀疏,从而使其更易于压缩。 [请参阅以下链接以了解修剪技术](https://www.tensorflow.org/model_optimization/guide/pruning/)
......@@ -68,7 +68,7 @@
***张量处理单元****TPU**)与 CPU 或 GPU 结合使用。 CPU 依次执行算术运算,而 GPU 一次执行多个算术运算。 TPU 由 Google 开发,用于加速神经网络处理。 在 TPU 中,算术运算直接相互连接,而无需使用任何内存。
* 量化,即将权重从 32 位转换为 8 位。
* iOS 手机使用不同的金属来访问 GPU,以加快图像处理速度。 有关更多详细信息,请参阅[这里](https://developer.apple.com/metal/)
* 对于 Android 手机,[请参考 VR 性能基准以了解可用的 GPU / CPU 优化方法](https://developers.google.com/vr/develop/best-practices/perf-best-practices)
* 对于 Android 手机,[请参考 VR 性能基准以了解可用的 GPU/CPU 优化方法](https://developers.google.com/vr/develop/best-practices/perf-best-practices)
# MobileNet 概述
......@@ -868,7 +868,7 @@ $pod install
# 核心 ML
Core ML 是 Apple 的机器学习框架,该框架集成了来自 TensorFlow 等各种来源的神经网络模型,并在必要时进行了转换,然后优化了 GPU / CPU 性能以进行设备上的训练和推理,同时最大程度地减小了应用程序尺寸和功耗。 在 WWDC 2019 中引入的 Core ML 3 更新了设备上特定用户数据的神经网络模型,从而消除了设备到云的交互并最大程度地提高了用户隐私。 有关更多信息,请访问[这里](https://developer.apple.com/machine-learning/core-ml)。 Core ML 本身建立在诸如 Accelerate 和 BNNS 以及 Metal Performance Shaders 之类的低级基元之上。 所有 Core ML 模型均具有`.mlmodel`扩展名。
Core ML 是 Apple 的机器学习框架,该框架集成了来自 TensorFlow 等各种来源的神经网络模型,并在必要时进行了转换,然后优化了 GPU/CPU 性能以进行设备上的训练和推理,同时最大程度地减小了应用程序尺寸和功耗。 在 WWDC 2019 中引入的 Core ML 3 更新了设备上特定用户数据的神经网络模型,从而消除了设备到云的交互并最大程度地提高了用户隐私。 有关更多信息,请访问[这里](https://developer.apple.com/machine-learning/core-ml)。 Core ML 本身建立在诸如 Accelerate 和 BNNS 以及 Metal Performance Shaders 之类的低级基元之上。 所有 Core ML 模型均具有`.mlmodel`扩展名。
Core ML 的核心部分是 Create ML,它是用于图像分类和对象检测的 Apple 机器学习框架。 该系统类似于 TensorFlow,但使用零编码生成模型更容易。 在 macOS 上,打开 Xcode 并输入`.mlmodel`,如以下屏幕截图所示:
......
......@@ -13,12 +13,12 @@
# 用于语义分割的 TensorFlow DeepLab 概述
语义分割是在像素级别理解和分类图像内容的任务。 与对象检测不同,在对象检测中,在多个对象类上绘制了一个矩形边界框(类似于我们从 YOLOV3 中学到的知识),语义分割可学习整个图像,并将封闭对象的类分配给图像中的相应像素。 因此,语义分段可以比对象检测更强大。 语义分段的基本架构基于编码器-解码器网络,其中编码器创建一个高维特征向量并在不同级别上对其进行聚合,而解码器在神经网络的不同级别上创建一个语义分段掩码。 编码器使用传统的 CNN,而解码器使用解池,解卷积和上采样。 DeepLab 是 Google 引入的一种特殊类型的语义分段,它使用 Atrous 卷积,空间金字塔池而不是常规的最大池以及编码器-解码器网络。 DeepLabV3+ 是由 Liang-Chieh Chen,Yukun Zhu,George Papandreou,Florian Schro 和 Hartwig Adam 在他们的论文[《用于语义图像分割的实用 Atrous 可分离卷积的编码器-解码器》](https://arxiv.org/abs/1802.02611)中提出的。
语义分割是在像素级别理解和分类图像内容的任务。 与对象检测不同,在对象检测中,在多个对象类上绘制了一个矩形边界框(类似于我们从 YOLOV3 中学到的知识),语义分割可学习整个图像,并将封闭对象的类分配给图像中的相应像素。 因此,语义分段可以比对象检测更强大。 语义分段的基本架构基于编码器-解码器网络,其中编码器创建一个高维特征向量并在不同级别上对其进行聚合,而解码器在神经网络的不同级别上创建一个语义分段掩码。 编码器使用传统的 CNN,而解码器使用解池,解卷积和上采样。 DeepLab 是 Google 引入的一种特殊类型的语义分段,它使用空洞卷积,空间金字塔池而不是常规的最大池以及编码器-解码器网络。 DeepLabV3+ 是由 Liang-Chieh Chen,Yukun Zhu,George Papandreou,Florian Schro 和 Hartwig Adam 在他们的论文[《用于语义图像分割的实用 Atrous 可分离卷积的编码器-解码器》](https://arxiv.org/abs/1802.02611)中提出的。
DeepLab 于 2015 年开始使用 V1,并于 2019 年迅速移至 V3 +。下表列出了不同 DeepLab 版本的比较:
DeepLab 于 2015 年开始使用 V1,并于 2019 年迅速移至 V3+。下表列出了不同 DeepLab 版本的比较:
| | **DeepLab V1** | **DeepLab V2** | **DeepLab V3** | **DeepLab V3+** |
| **论文** | 《具有深度卷积网络和全连接 CRF 的语义图像分割》,2015 | 《DeepLab:使用深度卷积网络,Atrous 卷积和全连接 CRF 进行语义图像分割》,2017 | 《重新思考原子卷积以进行语义图像分割》,2017 | 《具有可分割卷积的语义语义分割的编解码器》,2018 |
| **论文** | 《具有深度卷积网络和全连接 CRF 的语义图像分割》,2015 | 《DeepLab:使用深度卷积网络,空洞卷积和全连接 CRF 进行语义图像分割》,2017 | 《重新思考原子卷积以进行语义图像分割》,2017 | 《具有可分割卷积的语义语义分割的编解码器》,2018 |
| **作者** | 陈良杰,乔治·帕潘德里欧,Iasonas Kokkinos,凯文·墨菲和艾伦·尤里 | 陈良杰,乔治·帕潘德里欧,Iasonas Kokkinos,凯文·墨菲和艾伦·尤里 | 陈良杰,乔治·帕潘德里欧,弗洛里安·施罗夫和哈特维格·亚当 | 陈良杰,朱玉坤,乔治·帕潘德里欧,弗洛里安·施罗和哈特维格·亚当 |
| **关键概念** | 原子卷积,全连接**条件随机场****CRF**) | **多孔空间金字塔池****ASPP**) | ASPP,图像级功能和批量规范化 | ASPP 和编码器/解码器模块 |
......@@ -28,17 +28,17 @@ DeepLabV3+ 使用**空间金字塔池**(**SPP**)的概念来定义其架构
我们在“第 5 章”,“神经网络架构和模型”中介绍的大多数 CNN 模型都需要固定的输入图像大小,这限制了输入图像的纵横比和比例。 固定大小约束不是来自卷积运算; 相反,它来自全连接层,该层需要固定的输入大小。 卷积操作从 CNN 的不同层中的图像的边缘,拐角和不同形状生成特征图。 特征图在不同的层中是不同的,并且是图像中形状的函数。 它们不会随着输入大小的变化而显着变化。 SPP 代替了最后一个合并层,紧接在全连接层之前,由并行排列的空间容器组成,其空间大小与输入图像的大小成正比,但其总数固定为全连接层数。 空间池化层通过保持过滤器大小固定但更改特征向量的大小来消除输入图像的固定大小约束。
DeepLabV3 的架构基于两种神经网络-Atrous 卷积和编码器/解码器网络。
DeepLabV3 的架构基于两种神经网络-空洞卷积和编码器/解码器网络。
# 原子卷积
我们在“第 4 章”,“图像深度学习”中介绍了卷积的概念,但是我们没有涉及各种 Atrous 卷积。 Atrous 卷积,也称为膨胀卷积,增加了卷积的视野。 传统的 CNN 使用最大池化和跨步来快速减小层的大小,但这样做也会降低要素图的空间分辨率。 Atrous 卷积是一种用于解决此问题的方法。 它通过使用 Atrous 值修改步幅来实现此目的,从而有效地更改了过滤器的值字段,如下图所示:
我们在“第 4 章”,“图像深度学习”中介绍了卷积的概念,但是我们没有涉及各种空洞卷积。空洞卷积,也称为膨胀卷积,增加了卷积的视野。 传统的 CNN 使用最大池化和跨步来快速减小层的大小,但这样做也会降低要素图的空间分辨率。空洞卷积是一种用于解决此问题的方法。 它通过使用 Atrous 值修改步幅来实现此目的,从而有效地更改了过滤器的值字段,如下图所示:
![](img/add28c06-3e36-4992-90a1-874e884951f1.png)
上图显示了速率= 2 的 Atrous 卷积。与深度卷积相比,它跳过了其他每个像元。 实际上,如果应用 stride = 2,则`3 x 3`内核就是`3 x 3`内核。与简单的深度方向较小的特征图相比,Atrous 卷积增加了视野并捕获了边界信息(与最大池化相比, 缺少对象边界),从而导致图像上下文丰富。 由于其在每个后续层中保持视野相同的特性,Atrous 卷积用于图像分割。
上图显示了速率为 2 的空洞卷积。与深度卷积相比,它跳过了其他每个像元。 实际上,如果应用`stride = 2`,则`3 x 3`内核就是`3 x 3`内核。与简单的深度方向较小的特征图相比,空洞卷积增加了视野并捕获了边界信息(与最大池化相比, 缺少对象边界),从而导致图像上下文丰富。 由于其在每个后续层中保持视野相同的特性,空洞卷积用于图像分割。
DeepLabV3 执行几个并行的 Atrous 卷积,所有这些卷积以不同的速率运行,就像我们前面描述的空间池化层概念一样。 上图说明了 Atrous 卷积模块和并行模块彼此相邻堆叠以形成 SPP。 与传统卷积不同,传统卷积与原始图像相比减少了最终特征向量的深度和宽度,而 Atrous 卷积保留了图像大小。 因此,图像的精细细节不会丢失。 在构建具有丰富图像上下文的分割图时,这很有用。
DeepLabV3 执行几个并行的空洞卷积,所有这些卷积以不同的速率运行,就像我们前面描述的空间池化层概念一样。 上图说明了空洞卷积模块和并行模块彼此相邻堆叠以形成 SPP。 与传统卷积不同,传统卷积与原始图像相比减少了最终特征向量的深度和宽度,而空洞卷积保留了图像大小。 因此,图像的精细细节不会丢失。 在构建具有丰富图像上下文的分割图时,这很有用。
# 编解码器网络
......@@ -46,7 +46,7 @@ DeepLabV3 执行几个并行的 Atrous 卷积,所有这些卷积以不同的
编码器-解码器网络可在编码器路径中实现更快的计算,因为不必在编码器路径中扩张特征,并且在解码器路径中恢复了清晰的物体。 编码器-解码器网络包含一个编码器模块,该模块捕获更高的语义信息,例如图像中的形状。 它通过逐渐缩小特征图来实现。 另一方面,解码器模块保留空间信息和更清晰的图像分割。
编码器和解码器主要在多个比例上使用`1 x 1` 3 x 3 Atrous 卷积。 让我们更详细地了解它们。
编码器和解码器主要在多个比例上使用`1 x 1``3 x 3`空洞卷积。 让我们更详细地了解它们。
# 编码器模块
......@@ -54,7 +54,7 @@ DeepLabV3 执行几个并行的 Atrous 卷积,所有这些卷积以不同的
* 无穷的卷积以提取特征。
* 输出步幅是输入图像分辨率与最终输出分辨率之比。 其典型值为 16 或 8,这会导致特征提取更加密集。
* 在最后两个块中使用速率为 2 和 4 的 Atrous 卷积。
* 在最后两个块中使用速率为 2 和 4 的空洞卷积。
* ASPP 模块用于在多个尺度上应用卷积运算。
# 解码器模块
......@@ -63,7 +63,7 @@ DeepLabV3 执行几个并行的 Atrous 卷积,所有这些卷积以不同的
* `1 x 1`卷积用于减少来自编码器模块的低级特征图的通道。
* `3 x 3`卷积用于获得更清晰的分割结果。
* 向上采样 4
* 4x 上采样
# DeepLab 中的语义分割-示例
......@@ -75,7 +75,7 @@ Google Colab 包含基于几个预先训练的模型的内置 DeepLab Python 代
在深入研究示例代码之前,让我们了解 Google 机器学习的一些基本功能,所有这些功能都是免费提供的,以便我们可以开发强大的计算机视觉和机器学习代码:
* **Google Colab**:您可以从 Google 云端硬盘打开 Goog​​le Colab,如以下屏幕截图所示。 如果您是第一次使用它,则必须先单击“新建”,然后单击“更多”,才能将 Google Colab 安装到您的云端硬盘。 Google Colab 可让您无需安装即可打开 Jupyter Notebook。 它还内置了 TensorFlow,这意味着处理包含给您的所有 TensorFlow 依赖项要容易得多:
* **Google Colab**:您可以从 Google 云端硬盘打开 Goog​​le Colab,如以下屏幕截图所示。 如果您是第一次使用它,则必须先单击“新建”,然后单击“更多”,才能将 Google Colab 安装到您的云端硬盘。 Google Colab 可让您无需安装即可打开 Jupyter 笔记本。 它还内置了 TensorFlow,这意味着处理包含给您的所有 TensorFlow 依赖项要容易得多:
![](img/b8aedd97-824a-432d-bdab-c84027be44f7.png)
......@@ -97,11 +97,11 @@ Google Colab DeepLab 笔记本包含三个示例图像,还为您提供获取 U
与 MobileNet 模型相比,对象对异常模型的预测显示出更多的改进。 与 MobileNet 模型相比,对于例外模型,可以清楚地检测出自行车,人和桌子的细分。
MobileNet 是一种有效的神经网络模型,可用于手机和边缘设备。 与常规卷积相反,它使用深度卷积。 要详细了解 MobileNet 和深度卷积,请参阅“第 11 章”,“具有 GPU / CPU 优化功能的边缘深度学习”。
MobileNet 是一种有效的神经网络模型,可用于手机和边缘设备。 与常规卷积相反,它使用深度卷积。 要详细了解 MobileNet 和深度卷积,请参阅“第 11 章”,“具有 GPU/CPU 优化功能的边缘深度学习”。
# 使用 DCGAN 生成人工图像
在“第 5 章”,“神经网络架构和模型”中,我们了解了 DCGAN。 它们由生成器模型和判别器模型组成。 生成器模型采用表示图像特征的随机矢量,并通过 CNN 生成人工图像`G(z)`。 因此,生成器模型返回生成新图像及其类别的绝对概率具有可分割卷积的语义语义分割的编解码器。 **判别器**`D`)网络是二进制分类器。 它从样本概率,图像分布(p 数据)和来自生成器的人造图像中获取真实图像,以生成最终图像`P(z)`的概率。 从真实图像分布中采样。 因此,判别器模型返回条件概率,即最终图像的类别来自给定分布。
在“第 5 章”,“神经网络架构和模型”中,我们了解了 DCGAN。 它们由生成器模型和判别器模型组成。 生成器模型采用表示图像特征的随机矢量,并通过 CNN 生成人工图像`G(z)`。 因此,生成器模型返回生成新图像及其类别的绝对概率具有可分割卷积的语义语义分割的编解码器。 **判别器**`D`)网络是二进制分类器。 它从样本概率,图像分布(`p_data`)和来自生成器的人造图像中获取真实图像,以生成最终图像`P(z)`的概率。 从真实图像分布中采样。 因此,判别器模型返回条件概率,即最终图像的类别来自给定分布。
判别器将生成真实图像的概率信息馈送到生成器,生成器使用该信息来改进其预测,以创建人造图像`G(z)`。 随着训练的进行,生成器会更好地创建可以欺骗判别器的人工图像,并且判别器将发现很难将真实图像与人工图像区分开。 这两个模型相互对立,因此命名为对抗网络。 当判别器不再能够将真实图像与人工图像分离时,模型收敛。
......@@ -118,7 +118,7 @@ GAN 训练遵循针对几个时期的判别器和生成器训练的替代模式
从上图中,我们可以看到以下内容:
* 所有具有跨步但没有最大池化的卷积网络都允许该网络在生成器中学习自己的上采样。 注意,最大池化被跨步卷积代替。
* 第一层从判别器获得概率 P(z),通过矩阵乘法连接到下一个卷积层。 这意味着不使用正式的全连接层。 但是,网络可以达到其目的。
* 第一层从判别器获得概率`P(z)`,通过矩阵乘法连接到下一个卷积层。 这意味着不使用正式的全连接层。 但是,网络可以达到其目的。
* 我们将批量归一化到所有层以重新调整输入,发电机生成器层除外,以提高学习的稳定性。
# 判别器
......@@ -139,7 +139,7 @@ GAN 训练遵循针对几个时期的判别器和生成器训练的替代模式
* 激活:Tanh
* **随机梯度下降****SGD**),最小批量为 128
* 泄漏 ReLU:斜率= 0.2
* 泄漏 ReLU:斜率 0.2
* 学习率为 0.0002 的 Adam 优化器
* 动量项 0.5:值 0.9 引起振荡
......@@ -207,7 +207,7 @@ cv.destroyAllWindows()
* 在 TensorFlow Hub 中使用预训练的模型。 这是您上传图像和样式的地方,该工具包将生成样式输出。 您可以在[这个页面](https://colab.research.google.com/github/tensorflow/hub/blob/master/examples/colab/tf2_arbitrary_image_stylization.ipynb)上上传图像。 请注意,TensorFlow Hub 是许多预训练网络的来源。
* 通过训练神经网络来开发自己的模型。 为此,请按照下列步骤操作:
1. 选择 VGG19 网络-它具有五个卷积(Conv2D)网络,每个 Conv2D 具有四层,然后是全连接层。
1. 选择 VGG19 网络-它具有五个卷积(`Conv2D`)网络,每个`Conv2D`具有四层,然后是全连接层。
2. 通过 VGG19 网络加载内容图像。
3. 预测前五个卷积。
4. 加载没有顶层的 VGG19 模型(类似于我们在“第 6 章”,“使用迁移学习的视觉搜索”中所做的工作),并列出该层的名称。
......@@ -296,6 +296,6 @@ loss = style_loss + content_loss
# 概要
在本章中,我们学习了如何使用 TensorFlow 2.0 和 Google Colab 训练神经网络来执行许多复杂的图像处理任务,例如语义分割,图像修复,生成人工图像和神经样式转移。 我们了解了生成器网络和判别器网络的功能,以及如何可以平衡地同时训练神经网络以创建伪造的输出图像。 我们还学习了如何使用 Atrous 卷积,空间池和编码器/解码器网络来开发语义分割。 最后,我们使用 Google Colab 训练了一个神经网络来执行神经样式转换。
在本章中,我们学习了如何使用 TensorFlow 2.0 和 Google Colab 训练神经网络来执行许多复杂的图像处理任务,例如语义分割,图像修复,生成人工图像和神经样式转移。 我们了解了生成器网络和判别器网络的功能,以及如何可以平衡地同时训练神经网络以创建伪造的输出图像。 我们还学习了如何使用空洞卷积,空间池和编码器/解码器网络来开发语义分割。 最后,我们使用 Google Colab 训练了一个神经网络来执行神经样式转换。
在下一章中,我们将使用神经网络进行活动识别。
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册