提交 0fe6accf 编写于 作者: W wizardforcel

2021-01-06 23:01:12

上级 2e46d83c
......@@ -67,7 +67,7 @@
![](img/73d8417a-6a5d-48b3-9d3c-2df95ad05b55.png)
该规则表示,在计算加权输入和偏差的总和之后,如果结果大于 0,则神经元将产生 1;如果结果小于或等于 0,则神经元将简单地向 换句话说,要产生 0,神经元就不会触发。 在具有多个输入功能的情况下,规则保持完全相同,并且规则的多元版本如下所示:
该规则表示,在计算加权输入和偏差的总和之后,如果结果大于 0,则神经元将产生 1;如果结果小于或等于 0,则神经元将简单地产生 0,换句话说,神经元就不会触发。 在具有多个输入功能的情况下,规则保持完全相同,并且规则的多元版本如下所示:
![](img/fd99fc73-d225-45bc-9dcb-8ae25e9d5647.png)
......@@ -197,7 +197,7 @@
经过这个矩阵乘法处理后,应用了 Sigmoid 函数并将输出发送到下一层的神经元,整个过程对 NN 中的每个隐藏层和输出层重复。 在继续过程中,我们应该从输出层获取![](img/7ca8c778-786e-4432-b25f-0409a6d2ef8c.png)
Sigmoid 激活函数输出的值范围为 0-1,但是我们正在处理二进制分类问题,我们只希望 0 或 1 作为 NN 的最终输出。 我们可以稍作调整。 我们可以在 NN 的输出层定义一个阈值-对于小于 0.5 的值,应将其标识为 0 类,而对于大于或等于 0.5 的值应将其标识为 1 类。请注意,这称为前向通过或前向传播。
Sigmoid 激活函数输出的值范围为 0-1,但是我们正在处理二进制分类问题,我们只希望 0 或 1 作为 NN 的最终输出。 我们可以稍作调整。 我们可以在 NN 的输出层定义一个阈值-对于小于 0.5 的值,应将其标识为 0 类,而对于大于或等于 0.5 的值应将其标识为 1 类。请注意,这称为前向通过或前向传播。
我们刚刚看到的 NN 被称为前馈网络,在学习过程中没有进一步优化。 可是等等! 网络甚至学到什么? 嗯,NN 通常会学习权重和偏差项,以便最终输出尽可能准确。 梯度下降和反向传播会发生这种情况。
......@@ -216,7 +216,7 @@ Sigmoid 激活函数输出的值范围为 0-1,但是我们正在处理二进
我们将根据功能定义成本。 在为 NN 模型定义成本函数之前,我们必须确定成本函数的参数。 在我们的案例中,权重和偏差是 NN 试图学习以提供给我们准确结果的函数的参数(请参阅本节之前的信息框)。 此外,我们将必须计算网络在训练过程的每个步骤中所造成的损失量。
对于二元分类问题,称为**交叉熵**损失函数的损失函数(对于二元分类问题,称为二元交叉交叉熵损失函数)被广泛使用,我们将使用 它。 那么,此功能是什么样的呢?
对于二元分类问题,称为**交叉熵**损失函数的损失函数(对于二元分类问题,称为二元交叉交叉熵损失函数)被广泛使用,我们将使用它。 那么,此功能是什么样的呢?
![](img/6d3375fb-d8cf-49aa-ba7e-26efe4d6b342.png)
......@@ -430,7 +430,7 @@ RNN ![](img/4b9aaa2a-87d5-487b-9d8c-6a54cb705d09.png)的第一遍是字母`w`。
如果有人对学习 softmax 函数的外观感到好奇,可以在[这个页面](http://bit.ly/softmaxfunc)上找到一篇非常有用的文章。
因此,RNN 告诉我们`w`之后的下一个字母更有可能是![](img/fdcd5b37-b1e7-4248-8ec0-1569c96a25a8.png)。 至此,我们完成了 RNN 的初始遍历。 作为练习,您可以使用从此传递中获得的`ht`值,然后将其(以及下一个字母`h`)应用于 RNN 的下一传递,以了解什么 发生
因此,RNN 告诉我们`w`之后的下一个字母更有可能是![](img/fdcd5b37-b1e7-4248-8ec0-1569c96a25a8.png)。 至此,我们完成了 RNN 的初始遍历。 作为练习,您可以使用从此传递中获得的`ht`值,然后将其(以及下一个字母`h`)应用于 RNN 的下一传递,以了解发生了什么
现在,让我们解决最重要的问题-什么是网络学习? 同样,权重和偏见! 您可能已经猜到了下一个句子。 使用反向传播进一步优化了这些权重。 现在,这种反向传播与我们之前看到的有些不同。 此版本的反向传播称为**时间上**的反向传播。 我们不会对此进行学习。 在结束本节之前,让我们总结一下在 RNN 前向传递过程中执行的步骤(在词汇表进行一次热编码之后):
......@@ -678,7 +678,7 @@ $ jupyter notebook
# 在 Crestle 上进行深度学习
当您需要对系统进行更好的控制时(例如,当您希望第三方应用程序与您的深度学习模型一起使用时),可以使用自定义的深度学习环境,而在其他时候,您可能没有这种需求,并且 您只会对以快速且协作的方式在云上执行深度学习感兴趣。 在这种情况下,支付 AWS `g2.2xlarge`实例的成本将比仅为计算时间或所用 GPU 时间支付的费用高得多。
当您需要对系统进行更好的控制时(例如,当您希望第三方应用程序与您的深度学习模型一起使用时),可以使用自定义的深度学习环境,而在其他时候,您可能没有这种需求,并且您只会对以快速且协作的方式在云上执行深度学习感兴趣。 在这种情况下,支付 AWS `g2.2xlarge`实例的成本将比仅为计算时间或所用 GPU 时间支付的费用高得多。
Crestle 是一项服务,以非常实惠的价格在线提供支持 GPU 的 Jupyter 笔记本电脑。 要开始使用 Crestle,请执行以下步骤:
......
......@@ -164,7 +164,7 @@ model.add(tf.layers.dense({units: 1, activation: sigmoid}));
# 我们的 TF.js 小型项目的问题陈述
我们将在这里讨论的问题可能是您开始机器学习之旅时遇到的最著名的挑战之一-通过从虹膜花数据集中学习其特征来分类和预测虹膜花的类型。 训练以及预测将在浏览器本身中执行。
我们将在这里讨论的问题可能是您开始机器学习之旅时遇到的最著名的挑战之一-通过从鸢尾花数据集中学习其特征来分类和预测鸢尾花的类型。 训练以及预测将在浏览器本身中执行。
我们已经为项目定义了问题陈述。 接下来是数据准备步骤。 数据已经可供我们使用,因此我们不需要自己收集数据。 但是,在准备数据之前,最好对数据本身有更多了解。
......@@ -205,7 +205,7 @@ model.add(tf.layers.dense({units: 1, activation: sigmoid}));
# 项目架构
我们将在该项目中使用 Node.js 创建服务器。 这样做是为了在通过 Node.js 后端使用时获得 TF.js 更快的计算性能的好处。 我们将创建一个非常基本的前端,该前端将能够发出命令以执行使用 TF.js 构建的神经网络的训练,而另一个按钮可以发出命令以基于以下内容预测虹膜花的假设特征向量的类 用户提供的输入。
我们将在该项目中使用 Node.js 创建服务器。 这样做是为了在通过 Node.js 后端使用时获得 TF.js 更快的计算性能的好处。 我们将创建一个非常基本的前端,该前端将能够发出命令以执行使用 TF.js 构建的神经网络的训练,而另一个按钮可以发出命令以基于以下内容预测鸢尾花的假设特征向量的类别,基于用户提供的输入。
下图显示了项目的组件及其交互:
......
# 通过 API 进行深度学习
到目前为止,我们已经熟悉了深度学习项目中遵循的基本流程。 在上一章中,我们已经使用 Keras 和 TensorFlow.js 库完成了两个基本的端到端项目。 我们已经熟悉 NumPy,pandas 和 Keras 等 Python 库,并且还了解了如何使用 JavaScript 开发深度学习模型。 我们还使用了 Flask 框架从深度学习模型中创建 API。 在“第 4 章”,“TensorFlow.js 入门”中,我们使用了第三方**应用程序编程接口****API**)创建了一个网站 应用。
到目前为止,我们已经熟悉了深度学习项目中遵循的基本流程。 在上一章中,我们已经使用 Keras 和 TensorFlow.js 库完成了两个基本的端到端项目。 我们已经熟悉 NumPy,pandas 和 Keras 等 Python 库,并且还了解了如何使用 JavaScript 开发深度学习模型。 我们还使用了 Flask 框架从深度学习模型中创建 API。 在“第 4 章”,“TensorFlow.js 入门”中,我们使用了第三方**应用程序编程接口****API**)创建了一个网站应用。
在本章中,我们将详细研究 API 的整个概念。 从更为非正式的 API 定义开始,我们将研究与深度学习相关的所有 API。 我们将首先看一些最广为人知的深度学习 API,然后再看一些鲜为人知的深度学习 API。 我们还将学习如何选择深度学习 API 提供程序。
......@@ -64,7 +64,7 @@ API 除了在需要快速生产或最小工作量的产品演示时为您节省
# 一些广为人知的深度学习 API
在本节中,我们将介绍一些使用最广泛的 API,这些 API 已部署用于各种深度学习任务,例如图像识别,图像中的情感检测,情感分类,语音到文本 转换等。 为了限制本节中的讨论,我们将深度学习任务分为两大类:
在本节中,我们将介绍一些使用最广泛的 API,这些 API 已部署用于各种深度学习任务,例如图像识别,图像中的情感检测,情感分类,语音到文本转换等。 为了限制本节中的讨论,我们将深度学习任务分为两大类:
* 计算机视觉和图像处理
* 自然语言处理
......
# 使用 Python 的 AWS 上的 DL:对象检测和家庭自动化
我们熟悉了 Google Cloud Platform 的一些基于深度学习的产品,并在“第 6 章”,“在 Google Cloud Platform 上使用 Python 进行深度学习”中学习了如何使用它们。 现在,我们对云计算有了一个很好的概述,在本章中,我们将介绍另一个云计算平台 **Amazon Web Services****AWS**),该平台还提供了一些高性能的 以及高度可靠的基于深度学习的解决方案,使生活更加轻松。 在本章中,我们将以 API 的形式介绍它们中的两个,并学习如何从 Python 程序中使用它们。
我们熟悉了 Google Cloud Platform 的一些基于深度学习的产品,并在“第 6 章”,“在 Google Cloud Platform 上使用 Python 进行深度学习”中学习了如何使用它们。 现在,我们对云计算有了一个很好的概述,在本章中,我们将介绍另一个云计算平台 **Amazon Web Services****AWS**),该平台还提供了一些高性能的以及高度可靠的基于深度学习的解决方案,使生活更加轻松。 在本章中,我们将以 API 的形式介绍它们中的两个,并学习如何从 Python 程序中使用它们。
我们将首先设置我们的 AWS 账户并在 Python 中配置 boto3。 然后,我们将学习如何在 Python 中使用 Rekognition API 和 Alexa API。
......
# 使用 Python 在 Microsoft Azure 上进行深度学习
我们将在本章结束我们的云 API 探索之旅。 到目前为止,我们已经将自己轻轻地介绍给了 API 的美好世界,特别是让我们轻松进行深度学习的 API。 我们已经看到了如何使用 REST API 并以编程方式使用它们。 与 **Google Cloud Platform****GCP**)和 **Amazon Web Services****AWS**)一样,Microsoft 也提供了自己的云服务平台,该平台称为 Azure。 与前几章一样,我们将只专注于 Azure 必须提供的基于深度学习的解决方案。 我们将稍作调整,还将介绍 Microsoft 的**认知工具包****CNTK**),它是像 Keras 这样的深度学习框架。
我们将在本章结束我们的云 API 探索之旅。 到目前为止,我们已经将自己轻轻地介绍给了 API 的美好世界,特别是让我们轻松进行深度学习的 API。 我们已经看到了如何使用 REST API 并以编程方式使用它们。 与 **Google Cloud Platform****GCP**)和 **Amazon Web Services****AWS**)一样,Microsoft 也提供了自己的云服务平台,该平台称为 Azure。 与前几章一样,我们将只专注于 Azure 必须提供的基于深度学习的解决方案。 我们将稍作调整,还将介绍 Microsoft 的**认知工具包****CNTK**),它是像 Keras 这样的深度学习框架。
在本章中,我们将介绍以下主题:
......@@ -46,7 +46,7 @@
您可能需要为此支付象征性的费用。 请确保查看 Azure 免费套餐的条款和条件,您可以在[这个页面](https://azure.microsoft.com/en-in/offers/ms-azr-0003p/)中找到这些条款和条件。
完成此过程后,您将全部准备就绪并可以移至 [Azure 门户](https://portal.azure.com/#home),该门户的作用方式与 GCP 和 AWS 控制台相同 您已经在前面的章节中看到过。
完成此过程后,您将全部准备就绪并可以移至 [Azure 门户](https://portal.azure.com/#home),该门户的作用方式与 GCP 和 AWS 控制台相同您已经在前面的章节中看到过。
Azure 门户如下所示:
......@@ -58,7 +58,7 @@ Azure 门户如下所示:
Azure 的基于深度学习(和通用机器学习)的产品大致分为三个部分:
* [**Azure 机器学习服务**](https://azure.microsoft.com/en-in/services/machine-learning-service/),它提供端到端的服务 机器学习生命周期,包括模型构建,训练和部署:
* [**Azure 机器学习服务**](https://azure.microsoft.com/en-in/services/machine-learning-service/),它提供端到端的机器学习生命周期,包括模型构建,训练和部署:
![](img/5e49fe53-bc9e-41e1-b544-97bdfb6d9e0a.png)
......@@ -249,7 +249,7 @@ plt.show()
# 使用 Text Analytics API 和 Python 提取文本信息
无论是有意还是无意,我们都必须遇到自然语言处理的一些惊人用例。 无论是自动更正,下一个单词建议还是语言翻译,这些用例都非常重要而不能忽略。 在本节中,我们将使用[文本分析 API](https://azure.microsoft.com/en-us/services/cognitive-services/text-analytics/)中提取有意义的信息 给定的一段文字
无论是有意还是无意,我们都必须遇到自然语言处理的一些惊人用例。 无论是自动更正,下一个单词建议还是语言翻译,这些用例都非常重要而不能忽略。 在本节中,我们将使用[文本分析 API](https://azure.microsoft.com/en-us/services/cognitive-services/text-analytics/)给定的一段文字中提取有意义的信息
您可以使用前面提到的链接免费试用 API,并查看其功能。 在以下示例中,我输入了短语`I want to attend NeurIPS someday and present a paper there`,Text Analytics API 从中提取了四个有意义的信息:
......@@ -518,7 +518,7 @@ input = C.input_variable(dimensions)
label = C.input_variable(classes)
```
CNTK 中的`input`变量本质上是一个占位符,我们在模型训练,评估或测试期间使用它来填充样本。 在此步骤中,数据集输入的形状必须与`input`变量声明中声明的尺寸完全匹配。 在这里重要的是要提到,很多人将输入的维数与数据集具有的特征数量混为一谈。 具有`N`个特征数量和`M`个样本数量的数据集具有(`M``N`)形状,因此维度为 这个数据集就是`2`
CNTK 中的`input`变量本质上是一个占位符,我们在模型训练,评估或测试期间使用它来填充样本。 在此步骤中,数据集输入的形状必须与`input`变量声明中声明的尺寸完全匹配。 在这里重要的是要提到,很多人将输入的维数与数据集具有的特征数量混为一谈。 具有`N`个特征数量和`M`个样本数量的数据集具有(`M``N`)形状,因此这个数据集的维度为`2`
```py
def create_model(features):
......@@ -1039,6 +1039,6 @@ python manage.py runserver
# 概要
在本章中,我们介绍了 Microsoft AI 和 Azure 云提供的用于在网站上执行深度学习的产品。 我们了解了如何使用 Face API 来预测图像中人物的性别和年龄,以及如何使用 Text Analytics API 来预测给定文本的语言以及所提供文本或情感中的关键短语 任何句子。 最后,我们在 MNIST 数据集上使用 CNTK 创建了深度学习模型。 我们了解了如何保存模型,然后通过基于 Django 的 Web 应用程序以 API 的形式部署模型。 通过 Django 保存的模型的这种部署可以轻松地适应其他深度学习框架,例如 TensorFlow 或 PyTorch。
在本章中,我们介绍了 Microsoft AI 和 Azure 云提供的用于在网站上执行深度学习的产品。 我们了解了如何使用 Face API 来预测图像中人物的性别和年龄,以及如何使用 Text Analytics API 来预测给定文本的语言的任何句子以及所提供文本或情感中的关键短语。 最后,我们在 MNIST 数据集上使用 CNTK 创建了深度学习模型。 我们了解了如何保存模型,然后通过基于 Django 的 Web 应用程序以 API 的形式部署模型。 通过 Django 保存的模型的这种部署可以轻松地适应其他深度学习框架,例如 TensorFlow 或 PyTorch。
在下一章中,我们将讨论使用 Python 构建生产级深度学习应用程序的通用框架。
\ No newline at end of file
......@@ -33,7 +33,7 @@
在现实生活中的项目中,您将一直在处理大量数据。 一次将这些数据集放入内存中并不理想。 在这种情况下,批量学习对我们有帮助。 使用批量学习有一些缺点,我们将在下一节中介绍它们。 您可能想知道(也可能不是),但是是的,只要在本书中训练神经网络,我们就会执行批量学习。
就像训练一样,批次的概念也可以应用于服务 ML 模型。 在这里服务 ML 模型意味着使用机器模型对看不见的数据点进行预测。 这也称为推理。 现在,模型服务可以分为两种类型:在线服务和在线服务,其中在线服务需要在模型与数据点相遇时做出预测(在这里我们无法承受延迟),离线服务则需要一批 首先收集数据点,然后通过模型运行批次以获得预测。 请注意,在第二种情况下,我们可以选择一些延迟。
就像训练一样,批次的概念也可以应用于服务 ML 模型。 在这里服务 ML 模型意味着使用机器模型对看不见的数据点进行预测。 这也称为推理。 现在,模型服务可以分为两种类型:在线服务和在线服务,其中在线服务需要在模型与数据点相遇时做出预测(在这里我们无法承受延迟),离线服务则首先需要收集一批数据点,然后通过模型运行批次以获得预测。 请注意,在第二种情况下,我们可以选择一些延迟。
请注意,还有一些工程方面直接与生产 ML 系统相关。 讨论这些内容不在本书的讨论范围之内,但是 GCP 小组鼓励您在线查看课程。
......
......@@ -105,7 +105,7 @@ NLP 是机器学习和深度学习应用程序中最受欢迎的也是最令人
聊天机器人是 NLP 应用程序的一部分,专门处理会话接口。 这些界面还可以扩展其工作以处理基本的命令和动作,在这些情况下,它们被称为基于语音的虚拟助手。 最近,随着专用设备(如 Google 的 Google Home 和 Alexa)的推出,基于语音的虚拟助手正在兴起。
聊天机器人可以以多种形式存在。 他们并不需要仅以虚拟助手的身份出现。 您可以在游戏中与聊天机器人对话,尝试在特定方向绘制故事情节,也可以与一些公司用来在社交媒体平台(例如 Twitter 或 Facebook)上回复其客户的社交聊天机器人进行交互。 聊天机器人可以看作是在**交互式语音响应****IVR**)系统上移动的系统,它们具有增强的智能和对未知输入的响应能力,有时仅使用回退响应,有时甚至使用 利用提供的输入进行响应。
聊天机器人可以以多种形式存在。 他们并不需要仅以虚拟助手的身份出现。 您可以在游戏中与聊天机器人对话,尝试在特定方向绘制故事情节,也可以与一些公司用来在社交媒体平台(例如 Twitter 或 Facebook)上回复其客户的社交聊天机器人进行交互。 聊天机器人可以看作是在**交互式语音响应****IVR**)系统上移动的系统,它们具有增强的智能和对未知输入的响应能力,有时仅使用回退响应,有时甚至利用提供的输入进行响应。
虚拟助手也可以存在于网站上,为访问者提供指导和帮助。 诸如此类的助手经常在网站上找到,主要是为消费者查询提供即时支持。 您一定已经注意到几个销售产品或服务的网站上的“问问题”或“可以帮助您”聊天框,通常在屏幕的右下角。 他们经常使用自动聊天机器人代替真实的人来回答查询。 仅在查询过于复杂而无法由自动客户支持聊天机器人回答的情况下,查询才会转移到真实的人。
......
......@@ -16,17 +16,17 @@
“第 2 章”,“使用局部二进制模式的内容识别”讨论了局部二进制特征描述符和直方图,用于对带纹理的图像和非带纹理的图像进行分类。 您将学习调整**本地二进制模式****LBP**)参数,并计算 LBP 之间的直方图差异以匹配图像之间的相同模式。 本章提供了两个编码练习–一个用于匹配地板图案,另一个用于将面部颜色与基础色匹配。
“第 3 章”,“使用 OpenCV 和 CNN 进行面部检测”从 Viola-Jones 面部和关键特征检测开始,并继续介绍基于神经网络的面部关键码的高级概念 点检测和面部表情识别。 本章将以 3D 人脸检测的高级概念作为结尾。 本章提供了两种编码练习,一种用于网络摄像头中基于 OpenCV 的面部检测,另一种是基于 CNN 的端到端管线用于面部关键点检测。 端到端神经网络管道包括以下方面的面部图像收集:从网络摄像头裁剪面部图像,注释面部图像中的关键点,将数据摄取到 CNN 中,建立 CNN 模型,训练并最终针对面部图像评估经过训练的关键点模型 。
“第 3 章”,“使用 OpenCV 和 CNN 进行面部检测”从 Viola-Jones 面部和关键特征检测开始,并继续介绍基于神经网络的面部关键点检测和面部表情识别的高级概念。 本章将以 3D 人脸检测的高级概念作为结尾。 本章提供了两种编码练习,一种用于网络摄像头中基于 OpenCV 的面部检测,另一种是基于 CNN 的端到端管线用于面部关键点检测。 端到端神经网络管道包括以下方面的面部图像收集:从网络摄像头裁剪面部图像,注释面部图像中的关键点,将数据摄取到 CNN 中,建立 CNN 模型,训练并最终针对面部图像评估经过训练的关键点模型 。
“第 4 章”,“图像深度学习”深入研究了如何使用边缘检测在整个体积上创建卷积运算,以及不同的卷积参数(例如过滤器大小,尺寸和运算类型)如何影响 卷积量。 本章将为您提供有关神经网络如何查看图像以及图像如何使用可视化对图像进行分类的非常详细的概述。 本章提供基于 TensorFlow Keras 的编码练习,以构建神经网络并在图像通过其不同层时对其进行可视化显示。 然后,您将网络模型的准确率和可视化与诸如 VGG 16 或 Inception 之类的高级网络进行比较。
“第 4 章”,“图像深度学习”深入研究了如何使用边缘检测在整个体积上创建卷积运算,以及不同的卷积参数(例如过滤器大小,尺寸和运算类型)如何影响卷积。 本章将为您提供有关神经网络如何查看图像以及图像如何使用可视化对图像进行分类的非常详细的概述。 本章提供基于 TensorFlow Keras 的编码练习,以构建神经网络并在图像通过其不同层时对其进行可视化显示。 然后,您将网络模型的准确率和可视化与诸如 VGG 16 或 Inception 之类的高级网络进行比较。
“第 5 章”,“神经网络架构和模型”探索了不同的神经网络架构和模型。 通过更改卷积,池化,激活,全连接和 softmax 层的参数,您将了解如何将第一章和第四章中学到的概念应用于各种场景。 希望通过这些练习,您将了解一系列神经网络模型,从而为您成为计算机视觉工程师奠定坚实的基础。
“第 6 章”,“使用迁移学习的视觉搜索”是您要使用 TensorFlow 将数据输入模型并为现实情况开发视觉搜索方法的地方。 您将学习如何使用 Keras 数据生成器和 TensorFlow `tf.data` API 将图像及其类别输入到 TensorFlow 模型中,然后剪切一部分预训练的模型并在最后添加自己的模型内容以进行开发 您自己的分类器。 这些练习背后的想法是学习如何在 TensorFlow 中为您在第四章和第五章中学到的神经网络模型进行编码。
“第 6 章”,“使用迁移学习的视觉搜索”是您要使用 TensorFlow 将数据输入模型并为现实情况开发视觉搜索方法的地方。 您将学习如何使用 Keras 数据生成器和 TensorFlow `tf.data` API 将图像及其类别输入到 TensorFlow 模型中,然后剪切一部分预训练的模型并在最后添加自己的模型内容来开发您自己的分类器。 这些练习背后的想法是学习如何在 TensorFlow 中为您在第四章和第五章中学到的神经网络模型进行编码。
“第 7 章”,“使用 YOLO 进行对象检测”,介绍了两种单阶段快速对象检测方法-**只看一次****YOLO**) 和 RetinaNet。 在本章中,您将学习不同的 YOLO 模型,了解如何更改其配置参数并进行推论。 您还将学习如何使用 **Darknet** 处理自己的图像,以训练自定义 **YOLO v3** 模型。
“第 8 章”,“语义分割和神经样式转移”讨论了如何使用深度神经网络将图像分割为空间区域,从而生成人工图像并将样式从一个图像转移到另一个 另一个。 我们将使用 TensorFlow **DeepLab** 进行动手进行语义分割,并在 Google Colab 中编写 TensorFlow 代码以进行神经样式转换。 我们还将使用 **DCGAN** 生成人工图像,并使用 OpenCV 进行图像修复。
“第 8 章”,“语义分割和神经样式转移”讨论了如何使用深度神经网络将图像分割为空间区域,从而生成人工图像并将样式从一个图像转移到另一个。 我们将使用 TensorFlow **DeepLab** 进行动手进行语义分割,并在 Google Colab 中编写 TensorFlow 代码以进行神经样式转换。 我们还将使用 **DCGAN** 生成人工图像,并使用 OpenCV 进行图像修复。
“第 9 章”,“使用多任务深度学习的动作识别”解释了如何开发多任务神经网络模型来识别动作,例如手,嘴,头或腿的动作 ,以使用基于视觉的系统检测动作的类型。 然后,将使用手机加速度计数据通过深度神经网络模型对它进行补充,以验证操作。
......
......@@ -59,7 +59,7 @@ print hamming_distance(hash1,hash2)
# 创建图像矢量
彩色图像是 R,G 和 B 的组合。颜色可以表示为强度值,范围从`0``255`。 因此,每个图像都可以表示为三维立方体,其中`x``y`轴表示宽度和高度,而`z`轴表示三种颜色 通道(R,G,B)代表每种颜色的强度。 OpenCV 是一个具有为 Python 和 C++ 编写的用于图像处理和对象检测的内置编程功能的库。
彩色图像是 R,G 和 B 的组合。颜色可以表示为强度值,范围从`0``255`。 因此,每个图像都可以表示为三维立方体,其中`x``y`轴表示宽度和高度,而`z`轴表示三种颜色通道(R,G,B),代表每种颜色的强度。 OpenCV 是一个具有为 Python 和 C++ 编写的用于图像处理和对象检测的内置编程功能的库。
我们将从编写以下 Python 代码开始以导入图像,然后我们将看到如何将图像分解为具有 RGB 的 NumPy 向量数组。 然后,我们将图像转换为灰度,并查看当我们仅从图像中提取一种颜色分量时图像的外观:
......@@ -136,7 +136,7 @@ plt.imshow(image_arr[:,:,2]) # blue channel
![](img/7697542f-4863-4125-8e46-9196a33c27d6.png)
图像转换在计算机视觉中特别有用,可以从同一图像中获取不同的图像。 这有助于计算机开发对平移,旋转和剪切具有鲁棒性的神经网络模型。 例如,如果在训练阶段仅在**卷积神经网络****CNN**)中输入汽车前部的图像,则该模型将无法检测到该图像 在测试阶段将汽车旋转 90 度的角度
图像转换在计算机视觉中特别有用,可以从同一图像中获取不同的图像。 这有助于计算机开发对平移,旋转和剪切具有鲁棒性的神经网络模型。 例如,如果在训练阶段仅在**卷积神经网络****CNN**)中输入汽车前部的图像,在测试阶段将汽车旋转 90 度的角度,则该模型将无法检测到该图像
接下来,我们将讨论卷积运算的机制以及如何应用过滤器来变换图像。
......@@ -442,7 +442,7 @@ contours, hierarchy = cv2.findContours(canny_output, cv2.RETR_EXTERNAL, cv2.CHAI
请注意,`20`不是通用编号,它仅适用于此图像。 对于更大的图像,该值可以更大。
* **兴趣区域的颜色**:在每个边界框中,我们需要定义宽度从`25%``75%`的兴趣区域,以确保我们不考虑矩形的空白区域 在圈子外。 这对于最小化变化很重要。 接下来,我们使用`CV2.mean`定义平均颜色。
* **兴趣区域的颜色**:在每个边界框中,我们需要定义宽度从`25%``75%`的兴趣区域,以确保我们不考虑圈子外的矩形的空白区域。 这对于最小化变化很重要。 接下来,我们使用`CV2.mean`定义平均颜色。
我们将通过观察包围它的三个橙色图像来确定颜色的平均阈值和最大阈值。 以下代码使用 OpenCV 的内置方法通过`cv2.boundingRect`绘制边界框。 然后根据宽度和高度选择绘制**兴趣区域****ROI**),并找到该区域内的平均颜色:
......
......@@ -108,7 +108,7 @@ intersection = np.true_divide(np.sum(minima),np.sum(train_hist))
![](img/030dc965-f4e1-4340-9941-aa55417eef52.png)
* 给定![](img/79d6a348-1318-4d33-acaa-1a7b185719ee.png)和![](img/43db7d87-5862-4a14-bc63-6da464c3589d.png),此处![](img/7ee049d5-a1cd-43b9-ad01-9b0cac524a36.png)是分布的平均值(第一矩),![](img/d7367661-5eb7-435e-a253-f3dd4aacae81.png)(第二矩)是分布的标准偏差,而`ρ[QQ]` 两个分布![](img/c13f9176-f24f-45fb-bd03-540b2b037683.png)和![](img/05a61ab6-3829-4d26-944a-13e5303f8d58.png)的分位数彼此之间的相关性。
* 给定![](img/79d6a348-1318-4d33-acaa-1a7b185719ee.png)和![](img/43db7d87-5862-4a14-bc63-6da464c3589d.png),此处![](img/7ee049d5-a1cd-43b9-ad01-9b0cac524a36.png)是分布的平均值(第一矩),![](img/d7367661-5eb7-435e-a253-f3dd4aacae81.png)(第二矩)是分布的标准偏差,而`ρ[QQ]`为两个分布![](img/c13f9176-f24f-45fb-bd03-540b2b037683.png)和![](img/05a61ab6-3829-4d26-944a-13e5303f8d58.png)的分位数彼此之间的相关性。
![](img/a8f2cc2a-5808-42d4-a6fb-34a34ecb4f21.png)
......@@ -130,10 +130,10 @@ intersection = np.true_divide(np.sum(minima),np.sum(train_hist))
从前面的图像中还可以清楚地看到以下内容:
* 选择`R``P`对于模式识别很重要。
* 可以通过`P = (8R + 16) / 3`来选择初始值,但是对于给定的`R``P`的值不能超过此值 平均不良表现,如先前示例中的`R = 5``P = 25`所示。
* 可以通过`P = (8R + 16) / 3`来选择初始值,但是对于给定的`R`超过此值的`P`的值并不意味着不良表现,如先前示例中的`R = 5``P = 25`所示。
* 选择的模式明显优于`R = 4``P = 16`示例,并且与`R = 5.5``P = 20`非常相似。
另外,请注意,此处的示例仅提供适用于此图像的准则。 对于不同尺寸的图像,请从此示例中学习,首先选择`P`的初始值,然后调整`R``P`以获得所需的值 模式。
另外,请注意,此处的示例仅提供适用于此图像的准则。 对于不同尺寸的图像,请从此示例中学习,首先选择`P`的初始值,然后调整`R``P`以获得所需模式。
# LBP 的计算成本
......@@ -152,7 +152,7 @@ intersection = np.true_divide(np.sum(minima),np.sum(train_hist))
* 图案图像(4)
* 普通图像(3)
执行“生成 LBP 模式”部分的“步骤 1”至 5 ,然后将每个测试图像的 LBP 直方图与所有训练图像进行比较,以找到 最佳匹配。 尽管已使用了不同的直方图比较方法,但是对于此分析,将使用卡方检验作为确定匹配的主要方法。 具有正确匹配项的最终摘要输出用绿线显示,而错误匹配项将用红线显示。 实线是最短距离的第一个匹配项,而虚线是下一个最佳匹配项。 如果用于下一个最佳匹配的直方图之间的距离比最小距离远得多,则仅显示一个值(最小距离),这表明系统对此输出具有相当高的置信度。
执行“生成 LBP 模式”部分的“步骤 1”至 5 ,然后将每个测试图像的 LBP 直方图与所有训练图像进行比较,以找到最佳匹配。 尽管已使用了不同的直方图比较方法,但是对于此分析,将使用卡方检验作为确定匹配的主要方法。 具有正确匹配项的最终摘要输出用绿线显示,而错误匹配项将用红线显示。 实线是最短距离的第一个匹配项,而虚线是下一个最佳匹配项。 如果用于下一个最佳匹配的直方图之间的距离比最小距离远得多,则仅显示一个值(最小距离),这表明系统对此输出具有相当高的置信度。
下图显示了使用 LBP 在测试和训练灰度图像之间的匹配过程。 实线表示最接近的匹配,而虚线表示第二最接近的匹配。 第三张测试图像(从左起)只有一个匹配项,这意味着当图像转换为灰度时,模型对其预测非常有信心。 第二个,第三个和第六个训练图像(从右侧开始)没有相应的测试图像匹配:
......@@ -206,7 +206,7 @@ LBP 直方图显示了类似的趋势–这是合理的,因为 LBP 是一种
由于我们在纹理识别方面使用 LBP 取得了相对良好的成功,因此让我们尝试另一个示例来了解 LBP 的局限性。 在此示例中,从浅色到深色(测试)的七种面部颜色将与 10 种基础色(训练)相匹配,这些基础色是`50 x 50`的图像。
与纹理识别示例类似,将应用“生成 LBP 模式”部分中的“步骤 1”至 5,然后将每个面部彩色图像 LBP 直方图进行比较 与所有基础彩色图像 LBP 直方图一起找到最佳匹配。 尽管已使用不同的直方图比较方法,但对于此分析,将使用卡方检验作为确定匹配的主要方法。 下图显示了最终的摘要输出:
与纹理识别示例类似,将应用“生成 LBP 模式”部分中的“步骤 1”至 5,然后将每个面部彩色图像 LBP 直方图与与所有基础彩色图像 LBP 直方图一起比较来找到最佳匹配。 尽管已使用不同的直方图比较方法,但对于此分析,将使用卡方检验作为确定匹配的主要方法。 下图显示了最终的摘要输出:
![](img/49a7ecd9-20d7-4442-8981-1ffc99ec56af.png)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册