提交 23eb9e83 编写于 作者: W wizardforcel

2020-09-04 19:14:01

上级 76fcc8aa
......@@ -4,7 +4,7 @@
# 这本书是给谁的
读者想知道如何将深度学习应用于计算机视觉问题,例如分类,检测,检索,分割,生成,字幕和视频分类。 读者还希望了解如何在各种约束下(例如更少的数据,不平衡的类别和噪声)获得良好的准确性。 然后,读者还想知道如何在各种平台(AWS,Google Cloud,Raspberry Pi 和移动电话)上部署经过训练的模型。 读完本书后,读者应该能够开发出有关人员检测,人脸识别,产品搜索,医学图像分割,图像生成,图像字幕,视频分类等问题的代码。
读者想知道如何将深度学习应用于计算机视觉问题,例如分类,检测,检索,分割,生成,字幕和视频分类。 读者还希望了解如何在各种约束下(例如更少的数据,不平衡的类别和噪声)获得良好的准确性。 然后,读者还想知道如何在各种平台(AWS,Google Cloud,Raspberry Pi 和移动电话)上部署经过训练的模型。 读完本书后,读者应该能够开发出有关人员检测,人脸识别,产品搜索,医学图像分割,图像生成,图像字幕生成,视频分类等问题的代码。
# 本书涵盖的内容
......@@ -20,7 +20,7 @@
第 6 章,“相似性学习”讨论了关于相似性学习的。 读者将学习相似度匹配以及如何训练人脸识别模型。 示出了训练人脸标志的模型。
第 7 章,“图像字幕”是关于生成或选择图像字幕的 。 读者将学习自然语言处理技术以及如何使用这些技术为图像生成字幕。
第 7 章,“图像字幕生成”是关于生成或选择图像字幕生成的 。 读者将学习自然语言处理技术以及如何使用这些技术为图像生成字幕。
第 8 章,“生成模型”讨论了关于出于各种目的生成合成图像的问题。 读者将了解什么是生成模型,并将其用于图像生成应用,例如样式转换,训练数据等。
......
......@@ -185,7 +185,7 @@ LSTM 有几个门:忘记,输入和输出。 忘记门保持信息先前的
第 2 章, “图像分类”详细介绍了可用于分类任务的方法,在第 3 章“图像检索”,我们使用分类模型对深度学习模型进行可视化并检索相似的图像。
# 检测或定位和细分
# 检测或定位和分割
检测或定位是一项在图像中找到对象并使用边界框定位该对象的任务。 这项任务有许多应用,例如为自动驾驶汽车寻找行人和招牌。 下图是检测的示意图:
......@@ -209,7 +209,7 @@ LSTM 有几个门:忘记,输入和输出。 忘记门保持信息先前的
经 Vinyals 等人许可复制。
第 8 章,“图像字幕”详细介绍了图像字幕。 这是将**自然语言处理****NLP**)和计算机视觉技术相结合的独特情况。
第 8 章,“图像字幕生成”详细介绍了图像字幕生成。 这是将**自然语言处理****NLP**)和计算机视觉技术相结合的独特情况。
# 生成模型
......
......@@ -51,7 +51,7 @@ y_input = tf.placeholder(tf.float32, shape=[None, no_classes])
# 定义全连接层的变量
让我们通过解释`weights``bias`等变量来定义一个简单的线性分类器或感知机。 这些变量的值将在计算过程中获悉。 这些也称为模型参数。 权重变量使用具有输入大小和类数形状的正态随机分布进行初始化。 由于图像被整形为单个量,因此输入大小为`784`。 类的数量是 10,它等于数据集中的位数。 偏差变量还使用大小等于类数的随机正态分布进行初始化。 `weights``bias`定义如下:
让我们通过解释`weights``bias`等变量来定义一个简单的线性分类器或感知机。 这些变量的值将在计算过程中获悉。 这些也称为模型参数。 权重变量使用具有输入大小和类数形状的正态随机分布进行初始化。 由于图像被整形为单个量,因此输入大小为`784`。 类的数量是 10,它等于数据集中的位数。 偏差变量还使用大小等于类数的随机正态分布进行初始化。 `weights``bias`定义如下:
```py
weights = tf.Variable(tf.random_normal([input_size, no_classes]))
......@@ -199,7 +199,7 @@ flattened_pool = tf.reshape(pooling_layer_2, [-1, 5 * 5 * 128],
dense_layer_bottleneck = dense_layer(flattened_pool, 1024)
```
卷积层之间的唯一区别是过滤器的大小。 重要的是,各层之间的尺寸必须适当地变化。 选择内核和步幅的参数是任意的,这些数字是根据经验选择的。 定义了两个卷积层,然后可以是一个全连接层。 密集层 API 可以采用单个维的任何量并将其映射到任意数量的隐藏单元,如本例中的`1024`。 隐藏层之后是 ReLU 激活 ,以使其成为非线性计算。 也为此层添加了变量摘要。 接下来是具有退出率的退出层。 保持较高水平将阻止网络学习。 根据使用的时间,可以将训练模式设置为`True``False`。 在训练中,我们将其设置为`True`(默认为`False`)。 在计算准确性时,我们将不得不更改此设置。 因此,为此保留了一个布尔值,将在训练过程中喂入:
卷积层之间的唯一区别是过滤器的大小。 重要的是,各层之间的尺寸必须适当地变化。 选择内核和步幅的参数是任意的,这些数字是根据经验选择的。 定义了两个卷积层,然后可以是一个全连接层。 密集层 API 可以采用单个维的任何量并将其映射到任意数量的隐藏单元,如本例中的`1024`。 隐藏层之后是 ReLU 激活 ,以使其成为非线性计算。 也为此层添加了变量摘要。 接下来是具有退出率的退出层。 保持较高水平将阻止网络学习。 根据使用的时间,可以将训练模式设置为`True``False`。 在训练中,我们将其设置为`True`(默认为`False`)。 在计算准确性时,我们将不得不更改此设置。 因此,为此保留了一个布尔值,将在训练过程中喂入:
```py
dropout_bool = tf.placeholder(tf.bool)
......
......@@ -5,7 +5,7 @@
本章将涵盖以下主题:
* 学习语义分割和实例分割之间的区别
* 细分数据集和指标
* 分割数据集和指标
* 语义分割算法
* 分割在医学和卫星图像中的应用
* 实例分割算法
......@@ -28,7 +28,7 @@
用像素标记分割每个实例的任务称为**实例分割**。 实例分割可以被认为是具有像素级标签的对象检测的扩展。 语义分段和实例分段的应用非常广泛,下一部分将提供一些应用。
# 诊断医学
# 诊断医学
可以使用分割技术来诊断医学图像。 现代医学成像技术,例如**磁共振成像****MRI**),**计算机断层扫描****CT**)和**视网膜病变**创建高质量的图像。 可以将通过这种技术生成的图像划分为多个区域,以检测来自脑部扫描的肿瘤或来自视网膜扫描的斑点。 一些设备提供体积图像,这些图像也可以通过分段进行分析。 分割视频以进行机器人手术,使医生能够在机器人协助的手术中仔细查看区域。 在本章的后面,我们将看到如何分割医学图像。
......@@ -46,15 +46,15 @@
卫星图像还有更多的应用可能。 对于上述大多数问题,解决方案始于卫星图像的分割。 在本章的后面,我们将看到如何分割卫星图像。
# 使机器人能够看到
# 使机器人拥有视觉
分割场景对于机器人看清周围世界并与之互动至关重要。 工业和家用机器人必须处理这些对象。 一旦根据对象跨越了机器人的视野,就可以进行处理。 还有更多值得一提的应用程序:
* 对缺陷进行细分的工具的工业检查
* 对缺陷进行分割的工具的工业检查
* 时装行业的色彩诊断; 可以将图像与各种时尚对象进行分割并将其用于颜色解析
* 区分背景与前景以应用人像效果
在下一部分中,我们将学习一些用于评估细分算法的公共数据集。
在下一部分中,我们将学习一些用于评估分割算法的公共数据集。
# 数据集
......@@ -78,7 +78,7 @@
提出了几种基于深度学习的算法来解决图像分割任务。 可以在像素级别应用滑动窗口方法进行分割。 滑动窗口方法会拍摄图像并将图像分成较小的作物。 图像的每种裁剪都被分类为标签。 这种方法昂贵且效率低下,因为它不会重用重叠补丁之间的共享功能。 在以下各节中,我们将讨论一些可以克服此问题的算法。
# 全卷积网络
# 全卷积网络
**全卷积网络****FCN**)引入了端到端卷积网络的思想。 通过删除全连接层,可以将任何标准的 CNN 架构用于 FCN,其实现在第 4 章,“对象检测”中进行了显示。 全连接层被卷积层代替。 最终层的深度较高,尺寸较小。 因此,可以执行一维卷积以达到所需的标签数量。 但是对于分割,必须保留空间尺寸。 因此,构建完整的卷积网络时没有最大池,如下所示:
......@@ -94,7 +94,7 @@
现在,让我们学习几个新概念,这些概念称为上采样,无规则卷积和转置卷积,它们将帮助我们更好地理解该网络。
# 通过合并对图层进行上采样
# 通过池化对图层进行上采样
在第 1 章“入门”中,我们讨论了最大池化。 最大池化是一种从窗口中选取最大值的采样策略。 对于上采样,可以相反。 每个值都可以用零包围,以对该层进行上采样,如下所示:
......@@ -195,7 +195,7 @@ model.compile(loss="categorical_crossentropy", optimizer=tf.keras.optimizers.Ada
这种对图像进行编码和解码的方式克服了基于 FCN 的模型的缺点。 接下来,我们将看到具有膨胀卷积的不同概念。
# 跳过连接以进行更好的培训
# 用于更好训练的跳跃连接
分割输出的粗糙程度可以通过跳过体系结构来限制,并且可以获得更高的分辨率。 另一种替代方法是按比例放大最后三层并将其平均,如下所示:
......@@ -211,7 +211,7 @@ model.compile(loss="categorical_crossentropy", optimizer=tf.keras.optimizers.Ada
膨胀距离随层而变化。 这样的分割结果的输出被放大以得到更精细的分辨率。 训练了一个单独的网络以进行多尺度聚合。
# 深度实验室
# DeepLab
Chen 等人提出的 [DeepLab](https://arxiv.org/pdf/1606.00915.pdf) 在多个尺度上执行卷积,并使用来自各种尺度的特征获得分数图。 然后对得分图进行插值,并通过**条件随机场****CRF**)进行最终分割。 图像的这种比例处理可以通过使用其自己的 CNN 处理各种大小的图像,或者通过具有不同水平的卷积卷积的并行卷积来执行。
......@@ -219,7 +219,7 @@ Chen 等人提出的 [DeepLab](https://arxiv.org/pdf/1606.00915.pdf) 在多个
经 Chen 等人许可复制。
# 互联网
# RefiNet
膨胀卷积需要更大的输入,因此占用大量内存。 使用高分辨率图片时,这会带来计算问题。 [里德等人](https://arxiv.org/pdf/1611.06612.pdf)提出了一种称为 RefiNet 的方法来克服此问题,如下所示:
......@@ -235,7 +235,7 @@ RefiNet 使用编码器,然后使用解码器。 CNN 的编码器输出。 解
串联完成后会放大低维特征。
# PSP 网络
# PSPnet
[Zhoa 等人介绍的 PSPnet 中使用了全局内容](https://arxiv.org/pdf/1612.01105.pdf)。 方法是增加池化层的内核大小。 汇集以金字塔的方式进行。 金字塔同时覆盖图像的各个部分和大小。 架构之间存在损失,因此无法进行适当的监管。
......@@ -446,7 +446,7 @@ for image, image_id in zip(y_test_pred, y_test_mask):
发布表格后,将向您发送电子邮件,从中可以下载数据。
# 为细分建模 FCN
# 为分割建模 FCN
导入库并获得输入的形状。 标签数定义为`6`
......@@ -532,6 +532,6 @@ fcn_model = tf.keras.models.Model(input=input_tensor, output=x)
# 总结
在本章中,我们学习了各种分割算法。 我们还看到了用于基准测试的数据集和指标。 我们将学到的技术应用于卫星和医学图像的细分。 最后,我们谈到了 Mask R-CNN 算法的实例分割。
在本章中,我们学习了各种分割算法。 我们还看到了用于基准测试的数据集和指标。 我们将学到的技术应用于卫星和医学图像的分割。 最后,我们谈到了 Mask R-CNN 算法的实例分割。
在下一章中,我们将学习相似性学习。 相似性学习模型学习两个图像之间的比较机制。 对于人脸识别等多种应用很有用。 我们将学习几种可用于相似性学习的模型架构。
\ No newline at end of file
......@@ -9,7 +9,7 @@
# 相似性学习算法
**相似性学习**是训练度量以计算两个实体之间的相似性的过程。 由于学习了相似性,这也可以称为度量学习。 度量可以是欧几里得或余弦或其他自定义距离函数。 实体可以是任何数据,例如图像,视频,文本或表格。 为了计算度量,需要图像的量表示。 此表示可以是 CNN 计算的特征,如第 3 章,“图像检索”中所述。 为对象分类而学习的 CNN 可以用作计算度量的向量。 为图像分类而获得的特征向量将不是手头任务的最佳表示。 在相似性学习中,我们发现有关 CNN 的信息,这些 CNN 会为相似性学习任务生成经过训练的特征。 这里给出了相似性学习的一些应用:
**相似性学习**是训练度量以计算两个实体之间的相似性的过程。 由于学习了相似性,这也可以称为度量学习。 度量可以是欧几里得或余弦或其他自定义距离函数。 实体可以是任何数据,例如图像,视频,文本或表格。 为了计算度量,需要图像的量表示。 此表示可以是 CNN 计算的特征,如第 3 章,“图像检索”中所述。 为对象分类而学习的 CNN 可以用作计算度量的向量。 为图像分类而获得的特征向量将不是手头任务的最佳表示。 在相似性学习中,我们发现有关 CNN 的信息,这些 CNN 会为相似性学习任务生成经过训练的特征。 这里给出了相似性学习的一些应用:
* 用于生物识别的人脸验证以比较两个人脸
* 视觉搜索现实世界中的对象以在线查找类似产品
......@@ -136,7 +136,7 @@ for batch_no in range(total_batches):
我们已经看到了如何定义一个连体网络。 定义了两个编码器,并连接了潜在空间以形成训练损失。 左右模型分别提供数据。 接下来,我们将看到如何在单个网络中执行相似性学习。
# 面对网
# FaceNet
Schroff 等人提出的 [FaceNet 模型](https://arxiv.org/pdf/1503.03832.pdf)解决了人脸验证问题。 它学习一个深层的 CNN,然后将人脸图像转换为嵌入图像。 嵌入可用于比较人脸以查看其相似程度,并可通过以下三种方式使用:
......@@ -154,7 +154,7 @@ FaceNet 会获取一批人脸图像并进行训练。 在那一批中,将有
# 三元组损失
三元组损失学习图像的得分向量。 人脸描述符的得分向量可用于验证欧几里得空间中的人脸。 在学习投影的意义上,三元组损失类似于度量学习,因此可以区分输入。 这些投影或描述符或分数量是紧凑的表示形式,因此可以视为降维技术。 一个三元组由一个锚点,正负面组成。 锚可以是任何人的人脸,正面是同一个人的图像。 负片图像可能来自另一个人。 显然,对于给定的锚点,将会有很多负面的人脸。 通过选择当前更靠近锚点的底片,编码器将很难区分人脸,从而使其学习效果更好。 此过程称为**难负例挖掘**。 可以在欧氏空间中使用阈值获得更接近的负值。 下图描述了三元组损失模型:
三元组损失学习图像的得分向量。 人脸描述符的得分向量可用于验证欧几里得空间中的人脸。 在学习投影的意义上,三元组损失类似于度量学习,因此可以区分输入。 这些投影或描述符或分数量是紧凑的表示形式,因此可以视为降维技术。 一个三元组由一个锚点,正负面组成。 锚可以是任何人的人脸,正面是同一个人的图像。 负片图像可能来自另一个人。 显然,对于给定的锚点,将会有很多负面的人脸。 通过选择当前更靠近锚点的底片,编码器将很难区分人脸,从而使其学习效果更好。 此过程称为**难负例挖掘**。 可以在欧氏空间中使用阈值获得更接近的负值。 下图描述了三元组损失模型:
![](img/861242f9-1c52-49ef-a891-0377251b7745.png)
......@@ -197,7 +197,7 @@ def mine_triplets(anchor, targets, negative_samples):
DeepNet 模型用于学习用于人脸验证任务(例如 FaceNet)的人脸嵌入。 这是对上一部分中讨论的 FaceNet 方法的改进。 它需要对同一张脸进行多次裁剪,并通过多个编码器才能获得更好的嵌入效果。 与 FaceNet 相比,此方法具有更高的准确性,但需要更多时间进行处理。 人脸裁切在相同区域进行,并通过其各自的编码器。 然后将所有层连接起来以进行三元组损失的训练。
# 深排
# DeepRank
Wang 等人提出的 [DeepRank](https://users.eecs.northwestern.edu/~jwa368/pdfs/deep_ranking.pdf) 用于根据相似度对图像进行排名。 图像通过不同的模型传递,如下所示:
......@@ -248,7 +248,7 @@ Wang 等人提出的 [DeepRank](https://users.eecs.northwestern.edu/~jwa368/pdfs
数据集的比例,姿势,遮挡,表情,妆容和照明度都有很好的变化。 另一个名**多属性标签的人脸****MALF**)的数据集包含 5,250 张图像,其中包含 11,931 张人脸。 可以从[这个](http://www.cbsr.ia.ac.cn/faceevaluation/)链接访问 MALF。 在对象检测中使用的相同技术也可以应用于人脸检测。
# 面对地标和属性
# 人脸标志和属性
人脸标志是人脸的空间点。 空间点对应于各种人脸特征的位置,例如眼睛,眉毛,鼻子,嘴巴和下巴。 点数可能会从 5 到 78 不等,具体取决于注释。 人脸界标也称为**基准点****人脸关键点****人脸姿势**。 人脸标志具有许多应用,如下所示:
......
# 七、图像字幕
# 七、图像字幕生成
在本章中,我们将处理字幕图像的问题。 这涉及到检测对象,并且还提出了图像的文本标题。 图像字幕也可以称为**图像文本转换**。 曾经被认为是一个非常棘手的问题,我们现在在此方面取得了相当不错的成绩。 对于本章,需要具有相应标题的图像数据集。 在本章中,我们将详细讨论图像字幕的技术和应用。
在本章中,我们将处理字幕图像的问题。 这涉及到检测对象,并且还提出了图像的文本标题。 图像字幕生成也可以称为**图像文本转换**。 曾经被认为是一个非常棘手的问题,我们现在在此方面取得了相当不错的成绩。 对于本章,需要具有相应标题的图像数据集。 在本章中,我们将详细讨论图像字幕生成的技术和应用。
我们将在本章介绍以下主题:
* 了解用于评估它们的不同数据集和指标
* 了解用于自然语言处理问题的一些技巧
* 向量模型的不同词
* 几种用于图像字幕的算法
* 几种用于图像字幕生成的算法
* 不良结果和改进范围
# 了解问题和数据集
自动生成图像标题的过程是一项重要的深度学习任务,因为它结合了语言和视觉这两个世界。 该问题的独特性使其成为计算机视觉中的主要问题之一。 用于图像字幕的深度学习模型应该能够识别图像中存在的对象,并能够以自然语言生成表示对象与动作之间关系的文本。 此问题的数据集很少。 其中最著名的数据集是第 4 章,“对象检测”中对象检测中涵盖的 COCO 数据集的扩展。
自动生成图像标题的过程是一项重要的深度学习任务,因为它结合了语言和视觉这两个世界。 该问题的独特性使其成为计算机视觉中的主要问题之一。 用于图像字幕生成的深度学习模型应该能够识别图像中存在的对象,并能够以自然语言生成表示对象与动作之间关系的文本。 此问题的数据集很少。 其中最著名的数据集是第 4 章,“对象检测”中对象检测中涵盖的 COCO 数据集的扩展。
# 了解用于图像字幕的自然语言处理
# 了解用于图像字幕生成的自然语言处理
由于必须从图像中生成自然语言,因此熟悉**自然语言处理****NLP**)变得很重要。 NLP 的概念是一个广泛的主题,因此我们将范围限制为与图像字幕相关的主题。 自然语言的一种形式是**文本**。 文本是单词或字符的序列。 文本的原子元素称为**令牌**,它是**字符**的序列。 字符是文本的原子元素。
由于必须从图像中生成自然语言,因此熟悉**自然语言处理****NLP**)变得很重要。 NLP 的概念是一个广泛的主题,因此我们将范围限制为与图像字幕生成相关的主题。 自然语言的一种形式是**文本**。 文本是单词或字符的序列。 文本的原子元素称为**令牌**,它是**字符**的序列。 字符是文本的原子元素。
为了处理文本形式的任何自然语言,必须通过删除标点符号,方括号等对文本进行预处理。 然后,必须通过将文本分隔为空格来将文本标记为单词。 然后,必须将单词转换为向量。 接下来,我们将看到量转换如何提供帮助。
为了处理文本形式的任何自然语言,必须通过删除标点符号,方括号等对文本进行预处理。 然后,必须通过将文本分隔为空格来将文本标记为单词。 然后,必须将单词转换为向量。 接下来,我们将看到量转换如何提供帮助。
# 以量形式表达单词
# 以量形式表达单词
量形式的单词可以帮助自己执行算术运算。 向量必须紧凑,尺寸较小。 同义词应具有相似的向量,而反义词应具有不同的向量。 可以将单词转换为向量,以便可以如下所示比较关系:
量形式的单词可以帮助自己执行算术运算。 向量必须紧凑,尺寸较小。 同义词应具有相似的向量,而反义词应具有不同的向量。 可以将单词转换为向量,以便可以如下所示比较关系:
![](img/d4061008-c857-4130-bb3e-6c1f418ea379.png)
该向量算法使得能够在不同实体之间的语义空间中进行比较。 接下来,我们将看到如何创建可将单词转换为量表示的深度学习模型。
该向量算法使得能够在不同实体之间的语义空间中进行比较。 接下来,我们将看到如何创建可将单词转换为量表示的深度学习模型。
# 将单词转换为
# 将单词转换为
通过在大型文本语料库上训练模型,可以将单词转换为向量。 训练模型,使得给定一个单词,该模型可以预测附近的单词。 在预测附近单词的单次热编码之前,首先对单词进行单次热编码,然后进行隐藏层。 以这种方式进行训练将创建单词的紧凑表示。 可以通过两种方式获得单词的上下文,如下所示:
......@@ -55,9 +55,9 @@
该可视化使用 TensorBoard 生成。 具有相似语义或不同词性的单词会一起出现。
我们已经学习了如何训练用于生成文本的紧凑表示。 接下来,我们将看到图像字幕的方法。
我们已经学习了如何训练用于生成文本的紧凑表示。 接下来,我们将看到图像字幕生成的方法。
# 图像字幕处理方法及相关问题
# 图像字幕生成方法及相关问题
已经提出了几种对图像进行字幕的方法。 直观地,将图像转换为视觉特征,并从这些特征生成文本。 生成的文本将采用词嵌入的形式。 生成文本的一些主要方法涉及 LSTM 和关注。 让我们从使用旧的生成文本的方法开始。
......@@ -77,9 +77,9 @@ CRF 的使用在以适当的前置词以连贯的方式生成文本方面存在
结果对对象和属性具有正确的预测,但无法生成良好的描述。
# 在 CNN 功能上使用 RNN 生成字幕
# 在 CNN 特征上使用 RNN 生成字幕
Vinyals 等人在[论文](https://arxiv.org/pdf/1411.4555.pdf)中提出了一种端到端可训练的深度学习用于图像字幕的方法,该方法将 CNN 和 RNN 背靠背地堆叠在一起。 这是一个端到端的可训练模型。 结构如下所示:
Vinyals 等人在[论文](https://arxiv.org/pdf/1411.4555.pdf)中提出了一种端到端可训练的深度学习用于图像字幕生成的方法,该方法将 CNN 和 RNN 背靠背地堆叠在一起。 这是一个端到端的可训练模型。 结构如下所示:
![](img/5bf3b8f9-fa55-4a3f-a84c-b0818fcc856a.png)
......@@ -145,9 +145,9 @@ Johnson 等人在[论文](https://www.cv-foundation.org/openaccess/content_cvpr_
该体系结构实质上是 Faster-RCNN 和 **LSTM** 的组合。 产生该区域以产生对象检测结果,并且使用该区域的视觉特征来产生字幕。
# 使用 RNN 字幕
# 使用 RNN 的字幕生成
Donahue 等人在[论文](https://arxiv.org/pdf/1411.4389.pdf)中,提出了**长期循环卷积网络****LRCN**) 用于图像字幕的任务。 此模型的体系结构如下所示:
Donahue 等人在[论文](https://arxiv.org/pdf/1411.4389.pdf)中,提出了**长期循环卷积网络****LRCN**) 用于图像字幕生成的任务。 此模型的体系结构如下所示:
![](img/b0a60d74-0013-443b-b167-4cc77a74bfcb.png)
......@@ -155,7 +155,7 @@ Donahue 等人在[论文](https://arxiv.org/pdf/1411.4389.pdf)中,提出了**
图中显示了 CNN 和 LSTM 在整个时间上的权重,这使得该方法可扩展到任意长序列。
# 使用多度量空间
# 使用多模态度量空间
Mao 等人在[论文](http://papers.nips.cc/paper/4470-im2text-describing-images-using-1-million-captioned-photographs.pdf)中提出了一种使用**多模态嵌入空间**生成字幕的方法。 下图说明了这种方法:
......@@ -171,9 +171,9 @@ Kiros 等人在[论文](https://arxiv.org/pdf/1411.2539.pdf)中提出了另一
两种多模式方法都给出了良好的结果。
# 使用注意力网络进行字幕
# 使用注意力网络的字幕生成
Xu 等人在[论文](https://arxiv.org/pdf/1502.03044.pdf)中,提出了一种使用**注意力机制**进行图像字幕的方法。 注意力机制对图像的某些区域比其他区域赋予更多权重。 注意还可以实现可视化,向我们展示模型生成下一个单词时所关注的位置。 建议的模型如下所示:
Xu 等人在[论文](https://arxiv.org/pdf/1502.03044.pdf)中,提出了一种使用**注意力机制**进行图像字幕生成的方法。 注意力机制对图像的某些区域比其他区域赋予更多权重。 注意还可以实现可视化,向我们展示模型生成下一个单词时所关注的位置。 建议的模型如下所示:
![](img/16daa7fa-b24c-4855-b677-fdb975865573.png)
......@@ -209,7 +209,7 @@ Xu 等人在[论文](https://arxiv.org/pdf/1502.03044.pdf)中,提出了一种
我们已经看到,用于生成字幕几种方法。 接下来,我们将看到一个实现。
# 实施基于注意力的图像字幕
# 实现基于注意力的图像字幕生成
让我们使用以下代码从 VGG 和 LSTM 模型定义 CNN:
......
......@@ -14,9 +14,9 @@
让我们从生成模型的可能应用开始本章。 应用程序是巨大的。 我们将看到其中一些应用程序,以了解动机和可能性。
# 艺术风格
# 艺术风格
艺术风格转移是将艺术风格转移到任何图像的过程。 例如,可以使用一幅图像的艺术风格和另一幅图​​像的内容来创建图像。 [Gatys 等人在此显示了一个结合了几种不同样式的图像示例](https://www.cv-foundation.org/openaccess/content_cvpr_2016/papers/Gatys_Image_Style_Transfer_CVPR_2016_paper.pdf)。 图像 **A** 是应用了样式的照片,其结果显示在其他图像中:
艺术风格迁移是将艺术风格迁移到任何图像的过程。 例如,可以使用一幅图像的艺术风格和另一幅图​​像的内容来创建图像。 [Gatys 等人在此显示了一个结合了几种不同样式的图像示例](https://www.cv-foundation.org/openaccess/content_cvpr_2016/papers/Gatys_Image_Style_Transfer_CVPR_2016_paper.pdf)。 图像 **A** 是应用了样式的照片,其结果显示在其他图像中:
![](img/0e36da01-457e-4388-8cec-85994bf97af2.png)
......@@ -54,7 +54,7 @@
如图所示,图像是根据编辑的形状和颜色生成的。 底部的绿色笔触创建了草原,矩形创建了摩天大楼,依此类推。 图像将被生成并通过用户的进一步输入进行微调。 生成的图像还可以用于检索可以利用的最相似的真实图像。 提供交互式图像生成是一种直观搜索图像的全新方法。
# 图像到图像的翻译
# 图像到图像的转换
图像可用于生成具有特定目标的其他图像,因此此过程称为**图像到图像的转换**。 此处显示了此类翻译的一些示例,[以及由 Isola 等人提出的相应标准](https://arxiv.org/pdf/1611.07004.pdf)
......@@ -74,7 +74,7 @@
当前,此模型仅适用于少数几个对象。 从文本生成图像还不够实际,无法在应用程序中使用。
# 修
# 修
修复是填充图像中的间隙的过程,如下所示:
......@@ -136,11 +136,11 @@
从图像创建 3D 模型对于机器人技术,增强现实和动画行业很有用。 在以下各节中,我们将学习它们背后的算法。 在下一节中,我们将实现神经艺术风格的转换。
# 神经艺术风格的转
# 神经艺术风格
我们将要实现的第一个应用程序是**神经艺术风格转换**。 在这里,我们将**梵高**艺术的样式转移到图像上。 图像可以视为样式和内容的组合。 艺术风格转换技术将图像转换为看起来像具有特定绘画风格的绘画。 我们将看到如何编写这个想法。 `loss`功能将比较生成的图像与照片内容和绘画风格。 因此,针对图像像素而不是针对网络权重执行优化。 通过将照片的内容与生成的图像相比较,然后是绘画风格和生成的图像,可以计算出两个值。
# 内容
# 内容
由于像素不是一个好的选择,我们将使用各个图层的 CNN 功能,因为它们可以更好地表示内容。 如第 3 章,“图像检索”, 所示,初始层具有高频,例如边缘,拐角和纹理。 后面的层代表对象,因此更适合内容。 后者可以比像素更好地将对象与对象进行比较。 但是为此,我们需要先使用以下代码导入所需的库:
......@@ -397,7 +397,7 @@ Current loss value: 5.84042310715
在这里,我们从随机噪声中创建了具有特定绘画风格的图像,而没有任何位置信息。 在下一节中,我们将看到如何结合使用-内容损失和样式损失。
# 风格
# 风格
现在,我们知道了如何重建图像,以及如何构建捕获原始图像样式的图像。 显而易见的想法可能是通过加权并添加两个`loss`函数来将这两种方法结合起来,如以下代码所示:
......@@ -585,7 +585,7 @@ def get_discriminator(image, is_training=True):
return discriminator
```
创建判别器后,我们将使用以下代码创建一个噪声矢量,该噪声矢量将作为生成器的输入:
创建判别器后,我们将使用以下代码创建一个噪声向量,该噪声向量将作为生成器的输入:
```py
input_noise = tf.random_normal([batch_size, input_dimension])
......@@ -612,9 +612,9 @@ tf.contrib.gan.gan_train(
tf.train.AdamOptimizer(0.0001)))
```
通过运行此命令,将创建可从随机量输出图像的 GAN 模型。 生成的图像不受限制,可以来自任何标签。 在下一节中,我们将使用条件 GAN 生成所需的输出。
通过运行此命令,将创建可从随机量输出图像的 GAN 模型。 生成的图像不受限制,可以来自任何标签。 在下一节中,我们将使用条件 GAN 生成所需的输出。
# Conditional GAN
# 条件 GAN
有条件的 GAN 生成带有所需标签的图像。 例如,我们可以要求模型生成数字 8,而模型将生成数字 8。为此,需要标签以及使用模型训练的噪声,如下所示:
......@@ -630,7 +630,7 @@ gan = tf.contrib.gan.gan_model(
# 对抗损失
对抗性损失是来自发电机的损失。 该损失可以与伪图像和真实图像之间的逐像素损失相结合,以形成组合的对抗性损失。 GAN 模型必须随`real_images`一起提供给生成器和判别器,如下所示:
对抗性损失是来自生成器的损失。 该损失可以与伪图像和真实图像之间的逐像素损失相结合,以形成组合的对抗性损失。 GAN 模型必须随`real_images`一起提供给生成器和判别器,如下所示:
```py
gan = tf.contrib.gan.gan_model(
......@@ -654,7 +654,7 @@ loss = tf.contrib.gan.losses.combine_adversarial_loss(
GAN 损失的梯度是不利的。 然后,计算逐像素损失并将其添加到损失的损失中。 训练此模型将创建一个功能强大的自编码器,可用于图像压缩。
# 图片翻译
# 图片转换
正如我们在应用程序部分中所了解的,可以将一个图像转换为另一个图像。 输入图像被提供给判别器,而目标图像被提供给生成器,同时创建 GAN 模型,如下所示:
......@@ -721,7 +721,7 @@ GAN 生成的图像具有一些缺点,例如计数,透视图和全局结构
聊天历史,当前问题和图像将作为输入提供给生成器。 接下来,我们将看到生成器如何工作。
# 发电机
# 生成器
生成器具有编码器和解码器。 编码器将图像,问题和历史记录作为输入。 编码器首先关注 **LSTM** 的历史记录,并关注图像的输出。 流程如下所示:
......
......@@ -8,11 +8,11 @@
* 将视频分成帧并分类视频
* 在单个框架级别上训练视觉特征模型 0
* 了解 3D 卷积及其在视频中的使用
* 在视频上合并运动
* 在视频上合并运动
* 利用时间信息进行目标跟踪
* 人体姿势估计和视频字幕等应用
# 了解视频并对其分类
# 了解视频分类
视频不过是一系列图像。 视频沿时间方向为图像带来了新的维度。 图像的空间特征和视频的时间特征可以放在一起,比仅图像提供更好的结果。 额外的维度还导致大量空间,因此增加了训练和推理的复杂性。 用于处理视频的计算需求非常高。 视频还改变了深度学习模型的架构,因为我们必须考虑时间特征。
......@@ -92,7 +92,7 @@ frame_no = 0 while True:
我们将看到几种算法,它们在各种计算复杂性上都具有良好的准确性。 可以通过将数据集转换为帧并将其子采样为相同的长度来准备它。 一些预处理会有所帮助,例如减去 Imagenet 的均值。
# 融合并行 CNN 进行视频分类
# 为视频分类融合并行 CNN
就帧而言,由于图像的下采样,视频的预测可能不会产生良好的结果,从而丢失了精细的细节。 使用高分辨率的 CNN 将增加推理时间。 因此,[Karpathy 等人](https://static.googleusercontent.com/media/research.google.com/en//pubs/archive/42455.pdf)建议融合两个流,它们并行运行视频分类。 进行逐帧预测有两个问题,即:
......@@ -126,7 +126,7 @@ logits = dense_layer(dense_layer_bottleneck, no_classes)
可以在不同的时间观看视频,而不是通过固定大小的剪辑。 在前面的图像中介绍了连接时间信息的三种方式。 后期融合需要更长的时间框架,而早期融合则需要几个帧。 慢速融合将后期融合和早期融合结合在一起,可获得良好效果。 该模型在`Sports1M`数据集上进行了训练,该数据集具有 487 个类别,并达到了 50% 的准确性。 将同一模型应用于`UCF101`时,可达到 60% 的精度。
# 长时间对视频进行分类
# 长时间视频的分类
融合方法适用于短视频片段。 分类较长的视频很困难,因为必须计算和记住很多帧。 [Ng 等人](https://www.cv-foundation.org/openaccess/content_cvpr_2015/papers/Ng_Beyond_Short_Snippets_2015_CVPR_paper.pdf)提出了两种对较长视频进行分类的方法:
......@@ -166,7 +166,7 @@ net.add(tf.keras.layers.Dense(no_classes, activation='softmax'))
该模型的计算量很高,因为使用了多个 LSTM。
# 流式传输两个 CNN 以进行动作识别
# 为动作识别流式连接两个 CNN
视频中对象的运动具有有关视频中执行的动作的非常好的信息。 对象的运动可以通过光流来量化。 [Simonyan 和 Zisserman](http://papers.nips.cc/paper/5353-two-stream-convolutional-networks-for-action-recognition-in-videos.pdf) 提出了一种用于动作识别的方法,该方法使用来自图像和光流的两个流。
......@@ -184,7 +184,7 @@ p1, st, err = cv2.calcOpticalFlowPyrLK(old_gray, frame_gray, p0, None, **lk_para
两种预测都可以与最终预测结合。
# 使用 3D 卷积进行时间学习
# 使用 3D 卷积时间学习
可以使用 3D 卷积对视频进行分类。 3D 卷积运算将体积作为输入并输出,而 2D 卷积可以将 2D 或体积输出并输出 2D 图像。 区别如下所示:
......@@ -228,7 +228,7 @@ net.compile(loss=tf.keras.losses.categorical_crossentropy,
3D 卷积需要大量的计算能力。 3D 卷积在`Sports1M`数据集上达到 90.2% 的精度。
# 使用轨迹进行分类
# 使用轨迹分类
[Wang 等人](https://www.cv-foundation.org/openaccess/content_cvpr_2015/papers/Wang_Action_Recognition_With_2015_CVPR_paper.pdf)使用身体各部分的轨迹对所执行的动作进行分类。 这项工作结合了手工制作和深度学习的功能,可以进行最终预测。 以下是分类的表示形式:
......@@ -244,7 +244,7 @@ net.compile(loss=tf.keras.losses.categorical_crossentropy,
轨迹和特征图都在时间上组合在一起,以形成关于时间片段的最终预测。
# 多融合
# 多模态融合
[杨等人](http://research.nvidia.com/sites/default/files/pubs/2016-10_Multilayer-and-Multimodal/MM16.pdf)提出了一种具有 4 个模型的多模态融合视频分类方法。 这四个模型分别是 3D 卷积特征,2D 光流,3D 光流和 2D 卷积特征。
......@@ -268,7 +268,7 @@ net.compile(loss=tf.keras.losses.categorical_crossentropy,
增强机制用于组合预测。 **提升**是一种可以将多个模型预测组合为最终预测的机制。
# 参加区域分类
# 用于分类的注意力区域
注意力机制可以用于分类。 注意力机制复制了人类专注于识别活动区域的行为。 注意力机制赋予某些区域比其他区域更多的权重。 训练时从数据中学习权重方法。 注意力机制主要有两种,即:
......@@ -295,7 +295,7 @@ net.compile(loss=tf.keras.losses.categorical_crossentropy,
图像可用于姿势估计,样式转换,图像生成,分割,字幕等等。 同样,这些应用程序也在视频中找到位置。 使用时间信息可以改善来自图像的预测,反之亦然。 在本节中,我们将看到如何将这些应用程序扩展到视频。
# 退缩人体姿势
# 人体姿势回归
人体姿势估计是视频数据的重要应用,可以改善其他任务,例如动作识别。 首先,让我们看一下可用于姿势估计的数据集的描述:
......@@ -314,7 +314,7 @@ net.compile(loss=tf.keras.losses.categorical_crossentropy,
视频中的人脸分析需要人脸检测,界标检测,姿势估计,验证等。 计算地标对于捕获人脸动画,人机交互和人类活动识别尤其重要。 除了在帧上进行计算外,还可以在视频上进行计算。 [Gu 等人](http://research.nvidia.com/sites/default/files/pubs/2017-07_Dynamic-Facial-Analysis/rnnface.pdf)提出了一种使用视频中的人脸标志的检测和跟踪的联合估计的 RNN 方法。 结果优于逐帧预测和其他先前模型。 地标由 CNN 计算,时间方面在 RNN 中编码。 综合数据用于训练。
# 分割影片
# 分割视频
使用时间信息时,可以更好地分割视频。 [加德(Gadde)等人](https://ps.is.tuebingen.mpg.de/uploads_file/attachment/attachment/386/gadde2017videocnns.pdf)提出了一种通过扭曲来组合时间信息的方法。 下图演示了该解决方案,该方法将两个帧分段并且结合了变形:
......@@ -330,9 +330,9 @@ net.compile(loss=tf.keras.losses.categorical_crossentropy,
在两个帧之间计算光流,将它们与变形结合在一起。 变形模块获取光流,对其进行转换,然后将其与变形的表示相结合。
# 字幕视频
# 生成视频字幕
第 7 章,“图像字幕”说明了几种组合文本和图像的方法。 同样,可以为视频生成字幕,以描述上下文。 让我们看一下可用于字幕视频的数据集列表:
第 7 章,“图像字幕生成”说明了几种组合文本和图像的方法。 同样,可以为视频生成字幕,以描述上下文。 让我们看一下可用于字幕视频的数据集列表:
* **微软研究 - 视频转文本****MSR-VTT**)具有 200,000 个视频剪辑和句子对。 [可以从以下网站获取更多详细信息](https://www.microsoft.com/en-us/research/publication/msr-vtt-a-large-video-description-dataset-for-bridging-video-and-language/)
* **MPII 电影描述语料库****MPII-MD**[可以从以下网站获取](https://www.mpi-inf.mpg.de/departments/computer-vision-and-multimodal-computing/research/vision-and-language/mpii-movie-description-dataset)。 它有 68,000 个句子和 94 部电影。
......@@ -367,7 +367,7 @@ net.compile(loss=tf.keras.losses.categorical_crossentropy,
对于此方法,可以在图像的帧或光流上计算 **CNN**
# 产生影片
# 生成视频
可以使用生成模型以无监督的方式生成视频。 可以使用当前帧预测未来的帧。 [Ranzato 等人](https://arxiv.org/pdf/1412.6604.pdf)提出了一种受语言模型启发的视频生成方法。 RNN 模型用于拍摄图像补丁并预测下一个补丁。
......
......@@ -22,7 +22,7 @@
最新的 CPU 和 RAM 硬件已针对浮点计算进行了调整,因此在此类硬件中量化效果可能不太明显。 随着为此目的引入越来越多的硬件,这种情况正在改变。 在 GPU 中,由于内存和速度现已适应较低的精确浮点运算,因此它们在内存和速度上存在明显差异。 还有其他特殊硬件可用于运行不太精确的浮动操作。
# 移动网
# MobileNet
[霍华德(Howard)和其他人](https://arxiv.org/pdf/1704.04861.pdf)引入了一种称为 **MobileNets** 的新型模型,可用于移动和嵌入式应用程序。 MobileNets 可以用于不同的应用程序,例如对象检测,地标识别,人脸属性,细粒度分类,如下所示:
......@@ -208,7 +208,7 @@ Jetson TX2 是由 NVIDIA 提供的嵌入式设备,专门用于高效 AI 计算
借助这些步骤,我们可以在 Jetson TX2 中安装 TensorFlow。
# 安卓系统
# 安卓
任何 Android 应用程序都可以使用 TensorFlow,其构建细节可以在[这个页面](https://www.tensorflow.org/mobile/android_build)中找到。 关于此的官方示例可以在[这个页面](https://github.com/tensorflow/tensorflow/tree/master/tensorflow/examples/android)中找到。 假设读者具有 Android 编程经验,则在 Android 设备中实现 Tensorflow 的步骤如下:
......@@ -217,7 +217,7 @@ Jetson TX2 是由 NVIDIA 提供的嵌入式设备,专门用于高效 AI 计算
3. 编辑`gradle`文件以启用库加载。
4. 加载并运行 Android 应用文件
# 苹果手机
# iPhone
苹果使用 CoreML 框架将机器学习集成到 iPhone 应用程序中。 Apple 提供了可以直接集成到应用程序中的标准模型列表。 您可以使用 TensorFlow 训练自定义深度学习模型并将其在 iPhone 中使用。 为了部署自定义模型,您必须在 CoreML 框架模型中隐藏 TensorFlow。 谷歌发布了 [tf-coreml](https://github.com/tf-coreml/tf-coreml),用于将 TensorFlow 模型转换为 CoreML 模型。 可以使用以下代码安装 TFcoreML:
......
......@@ -6,7 +6,7 @@
+ [四、对象检测](04.md)
+ [五、语义分割](05.md)
+ [六、相似性学习](06.md)
+ [七、图像字幕](07.md)
+ [七、图像字幕生成](07.md)
+ [八、生成模型](08.md)
+ [九、视频分类](09.md)
+ [十、部署](10.md)
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册