提交 ad09897a 编写于 作者: W wizardforcel

2021-01-02 23:21:39

上级 74c92df2
......@@ -72,7 +72,7 @@ CNN 当然是像深度前馈网络一样的神经网络。 CNN 以可学习的
下一层称为 maxpooling 层。 maxpooling 层用于减小激活图的大小。
# 最大池层
# 最大池
CNN 的总体思想是保持通过过滤器提取特征并增加激活图的深度,同时减小宽度和高度尺寸,以便最终剩下高度压缩的特征向量。 为了减小激活图的尺寸,CNN 使用连续卷积层之间的最大池化层。
......
......@@ -542,7 +542,7 @@ $python3 mo_tf.py --input_model frozen_inference_graph_fasterRCNN.pb --transform
在继续下一节之前,让我们总结到目前为止所学的模型优化技术:
1)批量归一化操作与卷积操作融合-OpenVINO 使用此
2)将步长大于 1 的卷积移动到滤波器大小 1 到 上层卷积层。 添加池层以对齐输入形状-OpenVINO 使用此
2)将步长大于 1 的卷积移动到滤波器大小 1 到 上层卷积层。 添加池层以对齐输入形状-OpenVINO 使用此
3)用两个小滤镜替换大滤镜,例如将 3 x 3 x 3 用#32 替换为#3,将 3 x 3 x 1 替换为#3,将 1 x 1 x 3 替换为 #32-MobileNet 使用此功能。
# TensorFlow Lite 的应用
......
......@@ -123,21 +123,21 @@ intersection = np.true_divide(np.sum(minima),np.sum(train_hist))
接下来,我们将评估半径变化对图像清晰度的影响。 为此,需要通过将半径值从 1 更改为 10 来执行 Python 代码。下图显示了对 LBP 图像清晰度的最终影响。
根据相关性 *P =(8R + 16)/ 3 获得到多个点的半径。* 请注意,随着半径的增加,图像中的图案变得更加清晰。 围绕半径 5 和点 20-25,该图案在主拱的主要图案和次要图案之间变得更加清晰。 在很大的半径上,辅助图案变得不太明显:
根据相关性`P = (8R + 16) / 3`获得到多个点的半径。请注意,随着半径的增加,图像中的图案变得更加清晰。 围绕半径 5 和点 20-25,该图案在主拱的主要图案和次要图案之间变得更加清晰。 在很大的半径上,辅助图案变得不太明显:
![](img/7ef3999b-cd31-43c0-8ce6-276fca49760b.png)
从前面的图像中还可以清楚地看到以下内容:
* 选择`R``P`对于模式识别很重要。
* 可以通过 *P =(8R +16)/ 3* 来选择初始值,但是对于给定的`R``P`的值不能超过此值 平均不良表现,如先前示例中的 **R = 5,** **P = 25** 所示。
* 选择的模式明显优于 **R = 4** *,* **P = 16** 示例,并且与 **R = 5.5** 非常相似[ *,* **P = 20**
* 可以通过`P = (8R + 16) / 3`来选择初始值,但是对于给定的`R``P`的值不能超过此值 平均不良表现,如先前示例中的`R = 5``P = 25`所示。
* 选择的模式明显优于`R = 4``P = 16`示例,并且与`R = 5.5``P = 20`非常相似
另外,请注意,此处的示例仅提供适用于此图像的准则。 对于不同尺寸的图像,请从此示例中学习,首先选择`P`的初始值,然后调整`R``P`以获得所需的值 模式。
# LBP 的计算成本
与传统的神经网络方法相比,LBP 在计算上更便宜。 LBP 的计算成本由 Li Li,Paul Fieguth,Wang Xiaogang Wang,Matti Pietikäinen 和 Dewen Hu 在他们的论文*中使用新的稳健性基准*评估 LBP 和深纹理描述符。 [论文的详细信息可以在这里找到](https://www.ee.cuhk.edu.hk/~xgwang/papers/liuFWPHeccv16.pdf)
与传统的神经网络方法相比,LBP 在计算上更便宜。 LBP 的计算成本由 Li Li,Paul Fieguth,Wang Xiaogang Wang,Matti Pietikäinen 和 Dewen Hu 在他们的论文《使用新的稳健性基准评估 LBP 和深纹理描述符》中提出[论文的详细信息可以在这里找到](https://www.ee.cuhk.edu.hk/~xgwang/papers/liuFWPHeccv16.pdf)
作者确定了在 2.9 GHz Intel Quad-Core CPU 和 16 GB RAM 上对 480 张图像进行特征提取所花费的平均时间,这些图像的大小为 128 x 128。 该时间不包括训练时间。 研究发现,与被认为中等的 AlexNet 和 VGG 相比,LBP 特征提取非常快。
......
......@@ -163,7 +163,7 @@ CNN 的图像过滤和处理方法包括执行多种操作,所有这些操作
![](img/24a4fc86-ac1d-44ac-ac74-dffaa3e4b7a9.png)
*卷积*部分中所述,滤波器可以采用边缘滤波器的形式来检测边缘。 在神经网络中,许多神经元共享同一过滤器。 权重和过滤器允许全连接层充当分类器。
“卷积”部分中所述,滤波器可以采用边缘滤波器的形式来检测边缘。 在神经网络中,许多神经元共享同一过滤器。 权重和过滤器允许全连接层充当分类器。
# 正则化
......@@ -193,7 +193,7 @@ CNN 的图像过滤和处理方法包括执行多种操作,所有这些操作
![](img/9f7bea49-6361-4095-b359-0cea59b897c5.png)
当应用批量归一化时,我们在大小为`m`的整个迷你批量中计算均值(*μ*)和方差(*σ*)。 然后,利用这些信息,我们计算归一化的输入。 微型批量的输出计算为比例(*γ*)乘以归一化输入,再加上偏移量(*β*)。 在 TensorFlow 中,这可以表示如下。 除方差ε外,所有术语均在上图中进行了解释,方差ε是归一化输入计算中的*ε*项,以避免被零除:
当应用批量归一化时,我们在大小为`m`的整个迷你批量中计算均值(`μ`)和方差(`σ`)。 然后,利用这些信息,我们计算归一化的输入。 微型批量的输出计算为比例(`γ`)乘以归一化输入,再加上偏移量(`β`)。 在 TensorFlow 中,这可以表示如下。 除方差ε外,所有术语均在上图中进行了解释,方差ε是归一化输入计算中的`ε`项,以避免被零除:
```py
tf.nn.batch_normalization(x,mean,variance,offset,scale,variance_epsilon,name=None)
......@@ -219,27 +219,27 @@ Softmax 是在 CNN 的最后一层中使用的激活功能。 它由以下等式
CNN 具有许多不同的参数。 训练 CNN 模型需要许多输入图像并执行处理,这可能非常耗时。 如果选择的参数不是最佳参数,则必须再次重复整个过程。 这就是为什么理解每个参数的功能及其相互关系很重要的原因:这样可以在运行 CNN 之前优化其值,以最大程度地减少重复运行。 CNN 的参数如下:
* 图像尺寸=( *n x n*
* 滤镜= *`f[h]``f[w]`),`f[h]`=应用于图像高度的滤镜,`f[w]`=应用于图像宽度的滤镜
* 过滤器数量=`n[f]`*
* 填充=`p`
* 步幅=`s`
* 输出大小 *=* *{(n + 2p-f)/ s +1} x {(n + 2p-f)/ s +1}*
* 参数数量 *=* *(`f[h]`x`f[w]`+ 1)x`n[f]`*
* 图像尺寸`(n x n)`
* 滤镜`(f[h], f[w])``f[h]`为应用于图像高度的滤镜,`f[w]`应用于图像宽度的滤镜
* 过滤器数量`n[f]`
* 填充`p`
* 步幅`s`
* 输出大小`{(n + 2p - f)/s +1} x {(n + 2p - f)/s + 1}`
* 参数数量`(f[h] x f[w] + 1) x n[f]`
关键任务是选择上述参数(滤波器大小(`f`),滤波器数量(**nf**),步幅(`s`),填充 CNN 每一层的值(`p`),激活(`a`)和偏差。 下表显示了各种 CNN 参数的功能图:
关键任务是选择上述参数(滤波器大小(`f`),滤波器数量(`nf`),步幅(`s`),填充 CNN 每一层的值(`p`),激活(`a`)和偏差。 下表显示了各种 CNN 参数的功能图:
![](img/15dd0fc7-8e49-434d-9395-c68e7e7b8280.png)
上表的每个参数说明如下:
* **输入图像**:第一输入层是大小为*(48 x 48)*的灰度图像,因此深度为`1`。 特征图大小= *48 x 48 x 1 = 2,304* 。 它没有参数。
* **第一卷积层***CONV1**滤镜形状= 5 * 5,步幅=* )层的高度,宽度= *(48-5 + 1 )= 44* ,特征图大小= *44 x 44 x 64 = 123904* ,参数数= *(5 x 5 +1)x 64 = 1,664。*
* **第一池层(POOL1)**:池层没有参数。
* **剩余的卷积和池化层**:剩余的计算*CONV2,CONV3,CONV4,CONV5,POOL2*遵循与第一卷积层相同的逻辑。
* **全连接(FC)层**:对于全连接层( *FC1,FC2* ),*参数* *的数量= [(当前层 n *上一个 层 n)+1]参数= 128 * 1,024 + 1 = 131,073*
* **退出(DROP)**:对于退出,将丢弃 20% 的神经元。 剩余的神经元为 *1,024 * 0.8 = 820* 。 第二次删除的参数数= *820 x 820 +1 = 672401。*
* **CNN 的最后一层始终是 Softmax**:对于 Softmax,参数数= *7 x 820 +1 = 5,741*
* **输入图像**:第一输入层是大小为`(48 x 48)`的灰度图像,因此深度为`1`。 特征图大小`48 x 48 x 1 = 2,304`。 它没有参数。
* **第一卷积层**`CONV1 (filter shape =5*5, stride=1)`层的高度,宽度为`(48-5+1) =44`,特征图大小为`44 x 44 x 64 = 123904`,参数数为`(5 x 5 + 1) x 64 = 1,664`
* **第一池化层(`POOL1`)**:池化层没有参数。
* **剩余的卷积和池化层**:剩余的计算`CONV2, CONV3, CONV4, CONV5, POOL2`遵循与第一卷积层相同的逻辑。
* **全连接(`FC`)层**:对于全连接层`(FC1, FC2)`,参数的数量为`[(current layer n * previous layer n) + 1] = 128 * 1,024 + 1 = 131,073`
* **丢弃(`DROP`)**:对于丢弃,将丢弃 20% 的神经元。 剩余的神经元为`1,024 * 0.8 = 820`。 第二次删除的参数数为`820 x 820 + 1 = 672401`
* **CNN 的最后一层始终是 Softmax**:对于 Softmax,参数数`7 x 820 + 1 = 5,741`
在“第 3 章”,“使用 OpenCV 和 CNN 进行面部检测”的第一张图中,用于面部表情识别的神经网络类别有 7 个类别,其准确率约为 54%。
......@@ -377,7 +377,7 @@ Epoch 1/5
从这个实验中,我们可以得出以下有关 CNN 参数优化的结论:
* 减少 Conv2D 的数量并以*步幅= 2 消除一个合并层*具有最显着的效果,因为它提高了准确率(大约 30%)。 但是,这是以速度为代价的,因为 CNN 的大小没有减小。
* 减少 Conv2D 的数量并以`stride = 2`消除一个合并层具有最显着的效果,因为它提高了准确率(大约 30%)。 但是,这是以速度为代价的,因为 CNN 的大小没有减小。
* 合并类型(平均合并与最大合并)对测试准确率的影响不明显。
产生最高准确率的 CNN 架构如下:
......@@ -405,7 +405,7 @@ Epoch 1/5
# 神经网络输入和参数
在本部分中,模型输入各种 Keras 库和 TensorFlow。 在下面的代码中可以看到。 现在,先加少许盐。 这将在“第 6 章”,*使用迁移学习*的视觉搜索中全面说明:
在本部分中,模型输入各种 Keras 库和 TensorFlow。 在下面的代码中可以看到。 现在,先加少许盐。 这将在“第 6 章”,“使用迁移学习的视觉搜索”中全面说明:
```py
from __future__ import absolute_import, division, print_function, unicode_literals,
......@@ -573,7 +573,7 @@ for i in range(0,12):
自然而然产生的一个大问题是,神经网络如何处理来自最后一层的看似抽象的图像并从中提取出一个类? 这是人类无法做的事情。
答案在于全连接层。 如上表所示,共有 16 层,但是`i`的可视化代码在*0,12*范围内,因此我们仅可视化前 12 层。 如果您尝试可视化更多,则会收到错误消息。 在第 12 层之后,我们展平该层并映射该层的每个元素-这称为全连接层。 这本质上是一个映射练习。 该神经网络将全连接层的每个元素映射到特定类别。 对所有类都重复此过程。 将抽象层映射到类是机器学习练习。 通过这样做,神经网络能够预测类别。
答案在于全连接层。 如上表所示,共有 16 层,但是`i`的可视化代码在`(0, 12)`范围内,因此我们仅可视化前 12 层。 如果您尝试可视化更多,则会收到错误消息。 在第 12 层之后,我们展平该层并映射该层的每个元素-这称为全连接层。 这本质上是一个映射练习。 该神经网络将全连接层的每个元素映射到特定类别。 对所有类都重复此过程。 将抽象层映射到类是机器学习练习。 通过这样做,神经网络能够预测类别。
下图显示了床图像的输出值:
......
......@@ -210,12 +210,12 @@ VGG16 的基本思想总结如下:
初始模型通过从密集网络转移到稀疏矩阵并将它们聚类以形成密集子矩阵来解决了这两个问题。
初始模型也称为 GoogLeNet。 它是由 Christian Szegedy,Wei Liu,贾阳清,Pierre Sermanet,Scott Reed,Dragmir Anguelov,Dumitru Erhan,Vincent Vanhoucke 和 Andrew Rabinovich 在名为*深入卷积*的论文中介绍的。 Inception 的名称来自 Min Lin,陈强和 Shuicheng Yan 的论文 *Network in Network* 和著名的网络模因*。我们需要更深入地研究*。 以下是指向*接收*论文和*网络中的*论文的链接:
初始模型也称为 GoogLeNet。 它是由 Christian Szegedy,Wei Liu,贾阳清,Pierre Sermanet,Scott Reed,Dragmir Anguelov,Dumitru Erhan,Vincent Vanhoucke 和 Andrew Rabinovich 在名为《Going Deeper with Convolutions》的论文中介绍的。 Inception 的名称来自 Min Lin,陈强和 Shuicheng Yan 的论文《网络中的网络》和著名的网络模因《We need to go deeper》。 以下是指向 Inception 论文和《网络中的网络》论文的链接:
* [**Inception**](https://arxiv.org/abs/1409.4842)
* [**网络中的网络**](https://arxiv.org/abs/1312.4400)
在论文*中,在网络*中,作者没有在输入图像上使用常规的线性滤波器,而是构造了一个微神经网络,并以类似于 CNN 的方式在输入图像上滑动了该神经网络。 通过将这些层中的一些层堆叠在一起,可以构建一个深度神经网络。 微型神经网络(也称为**多层感知器**)由具有激活功能的多个全连接层组成,如下图所示:
在论文《网络中的网络》中,作者没有在输入图像上使用常规的线性滤波器,而是构造了一个微神经网络,并以类似于 CNN 的方式在输入图像上滑动了该神经网络。 通过将这些层中的一些层堆叠在一起,可以构建一个深度神经网络。 微型神经网络(也称为**多层感知器**)由具有激活功能的多个全连接层组成,如下图所示:
![](img/e4f60296-ca4d-4de2-a890-61adf0f83173.png)
......@@ -243,7 +243,7 @@ VGG16 的基本思想总结如下:
![](img/577d87bb-f704-493f-b64d-ca24f7e384e9.png)
在上图中,深度连接层可以与最大池层连接,也可以直接与 1 x 1 卷积层连接。 无论哪种方式,随后的计算都遵循与上图所示相同的模式。
在上图中,深度连接层可以与最大池层连接,也可以直接与 1 x 1 卷积层连接。 无论哪种方式,随后的计算都遵循与上图所示相同的模式。
# GoogLeNet 检测
......@@ -253,7 +253,7 @@ VGG16 的基本思想总结如下:
# ResNet 概述
ResNet 由何凯敏,张向宇,任少卿和孙健在题为*图像识别的深度残差学习的论文中介绍,*的目的是解决深度神经网络的精度下降问题。 。 这种降级不是由过度拟合引起的,而是由以下事实造成的:在某个临界深度之后,输出会松散输入的信息,因此输入和输出之间的相关性开始发散,从而导致精度增加。 可以在[这个页面](https://arxiv.org/abs/1512.03385)中找到该论文。
ResNet 由何凯敏,张向宇,任少卿和孙健在题为《图像识别的深度残差学习》的论文中介绍,目的是解决深度神经网络的精度下降问题。这种降级不是由过度拟合引起的,而是由以下事实造成的:在某个临界深度之后,输出会松散输入的信息,因此输入和输出之间的相关性开始发散,从而导致精度增加。 可以在[这个页面](https://arxiv.org/abs/1512.03385)中找到该论文。
ResNet-34 的前五位验证错误为 5.71%,优于 BN-inception 和 VGG。 ResNet-152 的前五位验证错误为 4.49%。 由六个不同深度的模型组成的集合实现了 3.57% 的前五个验证误差,并在 ILSVRC-2015 中获得了第一名。 ILSVRC 代表 ImageNet 大规模视觉识别竞赛; 它评估了 2010 年至 2017 年的目标检测和图像分类算法。
......@@ -261,8 +261,8 @@ ResNet 的主要功能描述如下:
* 通过引入深层的残差学习框架来解决降级问题。
* 该框架引入了快捷方式或跳过连接(跳过一个或多个层)的概念。
* 输入和下一层之间的基础映射为 *H(x)*
* 非线性层为 *F(x)= H(x)– x* ,可以将其重组为 *H(x)= F(x)+ x* ,其中`x`是身份映射。
* 输入和下一层之间的基础映射为`H(x)`
* 非线性层为`F(x) = H(x) – x`,可以将其重组为`H(x) = F(x) + x`,其中`x`是身份映射。
* 快捷方式连接仅执行身份映射,其输出将添加到堆叠层的输出中(请参见下图):
![](img/b6e11b56-752f-4e2d-99f2-cfd282b131c9.png)
......@@ -316,9 +316,9 @@ VOC 代表[视觉对象类](http://host.robots.ox.ac.uk/pascal/VOC),而 PASCAL
# 基于图的分割
有许多基于图的分割方法可用,但此处为 R-CNN 描述的一种方法是 Pedro Felzenszwalb 和 Daniel Huttenlocher 在题为*高效基于图的图像分割*的论文中介绍的方法。 可以在[这个页面](http://people.cs.uchicago.edu/~pff/papers/seg-ijcv.pdf)上阅读该论文。
有许多基于图的分割方法可用,但此处为 R-CNN 描述的一种方法是 Pedro Felzenszwalb 和 Daniel Huttenlocher 在题为《基于图的高效图像分割》的论文中介绍的方法。 可以在[这个页面](http://people.cs.uchicago.edu/~pff/papers/seg-ijcv.pdf)上阅读该论文。
此方法涉及将图像表示为图形(在本章的 *GNN 概述*部分中提供了详细说明),然后从图形中选择边缘,其中每个像素都链接到图形中的节点,并且 通过边缘连接到相邻像素。 边缘上的权重代表像素之间的差异。 分割标准基于被边界分开的图像的相邻区域的变化程度。 通过评估阈值函数来定义边界,该阈值函数表示与相邻像素之间的强度差相比,沿着边界的像素之间的强度差。 基于区域之间边界的存在,将分割定义为粗略或精细。
此方法涉及将图像表示为图形(在本章的“GNN 概述”部分中提供了详细说明),然后从图形中选择边缘,其中每个像素都链接到图形中的节点,并且 通过边缘连接到相邻像素。 边缘上的权重代表像素之间的差异。 分割标准基于被边界分开的图像的相邻区域的变化程度。 通过评估阈值函数来定义边界,该阈值函数表示与相邻像素之间的强度差相比,沿着边界的像素之间的强度差。 基于区域之间边界的存在,将分割定义为粗略或精细。
# 选择性搜寻
......@@ -429,7 +429,7 @@ R-CNN 和 Fast R-CNN 都依赖于选择性搜索方法来开发 2,000 个区域
| 输入值 | 图片 | 图片 | 图片 |
| 输入图像处理 | 基于像素相似度的图像分割 | 输入图像被馈送到 CNN 以生成卷积特征图。 | 输入图像被馈送到 CNN 以生成卷积特征图。 |
| 区域提案 | 使用选择性搜索在分割的图像上生成 2K 区域建议。 | 使用卷积特征图的选择性搜索生成 2K 区域建议。 | 区域建议是使用**区域建议网络****RPN**)生成的。 这个 CNN 使用 60 x 40 的滑动窗口,用于带有 9 个锚点框(3 个比例和 3 个宽高比)的要素地图的每个位置。 |
| 变形为固定大小 | 从区域提议中,每个区域都将变形为固定大小,以输入到 CNN。 | 使用 RoI 池层中的最大池化,将区域建议扭曲为固定大小的正方形。 | 使用 RoI 池化层将区域提议扭曲为固定大小的正方形。 |
| 变形为固定大小 | 从区域提议中,每个区域都将变形为固定大小,以输入到 CNN。 | 使用 RoI 池层中的最大池化,将区域建议扭曲为固定大小的正方形。 | 使用 RoI 池化层将区域提议扭曲为固定大小的正方形。 |
| 特征提取 | 每次将每个图像固定大小的 2K 变形区域建议送入 CNN。 | 2K 扭曲区域被馈送到两个分支,每个分支都包含一个全连接层。 | 2K 扭曲区域被馈送到全连接层。 |
| 侦测 | CNN 的输出传递到 SVM,以分类到边界框回归器以生成边界框。 | 全连接层的一个输出传递到 softmax 层进行分类,另一个输出传递到包围盒回归器以生成包围盒。 | 全连接层的一个输出传递到 softmax 层进行分类,另一个输出传递到包围盒回归器以生成包围盒。 |
| CNN 类型 | 亚历克斯网 | VGG 16 | ZFNet 或 VGGNet。 ZFNet 是 AlexNet 的修改版本。 |
......
......@@ -2,7 +2,7 @@
视觉搜索是一种显示与用户上传到零售网站的图像相似的图像的方法。 通过使用 CNN 将图像转换为特征向量,可以找到相似的图像。 视觉搜索在网上购物中具有许多应用,因为它补充了文本搜索,从而更好地表达了用户对产品的选择,并且更加精致。 购物者喜欢视觉发现,并发现它是传统购物体验所没有的独特东西。
在本章中,我们将使用在“第 4 章”,“图像深度学习”和“第 5 章”,*神经网络中学习的深度神经网络的概念。 体系结构和模型*我们将使用迁移学习为图像类别开发神经网络模型,并将其应用于视觉搜索。 本章中的练习将帮助您开发足够的实践知识,以编写自己的神经网络代码和迁移学习。
在本章中,我们将使用在“第 4 章”,“图像深度学习”和“第 5 章”,“神经网络体系结构和模型”中学习的深度神经网络的概念。我们将使用迁移学习为图像类别开发神经网络模型,并将其应用于视觉搜索。 本章中的练习将帮助您开发足够的实践知识,以编写自己的神经网络代码和迁移学习。
本章涵盖的主题如下:
......@@ -88,7 +88,7 @@ Modelx = VGG16 or ResNet50 or InceptionV3
模型构建具有三个重要参数:
* `weights` 是我们在以前下载的 ImageNet 图像上使用的预训练模型。
* `include_top`功能指示是否应包含最终的致密层。 对于预训练模型的类别预测,始终为`True`; 但是,在本章的后面部分(*使用 TensorFlow* 开发迁移学习模型)中,我们将学习到,在迁移学习期间,此功能设置为`False`仅包含卷积层。
* `include_top`功能指示是否应包含最终的致密层。 对于预训练模型的类别预测,始终为`True`; 但是,在本章的后面部分(“使用 TensorFlow 开发迁移学习模型”)中,我们将学习到,在迁移学习期间,此功能设置为`False`仅包含卷积层。
* `input_shape`是通道的高度,宽度和数量。 由于我们正在处理彩色图像,因此通道数设置为`3`
# 从目录输入图像
......@@ -129,7 +129,7 @@ plt.show()
1.`image1`作为循环的中间值,循环遍历`images`属性。
2. `image.load`功能将每个新图像添加到文件夹路径。 请注意,对于 VGG16 和 ResNet,目标大小是`224`,对于启动,目标大小是`299`
3. 使用 NumPy 数组将图像转换为数组函数并扩展其尺寸,然后按照*下载权重*部分中的说明应用`preprocessing`函数。
3. 使用 NumPy 数组将图像转换为数组函数并扩展其尺寸,然后按照“下载权重”部分中的说明应用`preprocessing`函数。
4. 接下来,它使用`model.predict()`函数计算特征向量。
5. 然后,预测解码类别标签名称。
6. `label`函数存储为数组,并且具有两个元素:类名和置信度`%`
......@@ -188,9 +188,9 @@ plt.show()
# 使用 TensorFlow 开发迁移学习模型
我们在“第 5 章”,“神经网络架构和模型”中引入了迁移学习的概念,并在*编码深层中演示了如何基于预训练模型预测图像类别 TensorFlow* 部分的学习模型。 我们已经观察到,预训练模型在大型数据集上可以获得合理的准确率,但是我们可以通过在自己的数据集上训练模型来对此进行改进。 一种方法是构建整个模型(例如,ResNet)并在我们的数据集上对其进行训练-但是此过程可能需要大量时间才能运行模型,然后为我们自己的数据集优化模型参数。
我们在“第 5 章”,“神经网络架构和模型”中引入了迁移学习的概念,并在“使用 TensorFlow 编写深度学习模型”部分中,演示了如何基于预训练模型预测图像类别。 我们已经观察到,预训练模型在大型数据集上可以获得合理的准确率,但是我们可以通过在自己的数据集上训练模型来对此进行改进。 一种方法是构建整个模型(例如,ResNet)并在我们的数据集上对其进行训练-但是此过程可能需要大量时间才能运行模型,然后为我们自己的数据集优化模型参数。
另一种更有效的方法(称为**迁移学习**)是从基本模型中提取特征向量,而无需在 ImageNet 数据集上训练顶层,然后添加我们的自定义全连接层,包括激活,退出和 softmax,构成我们的最终模型。 我们冻结了基础模型,但是新添加的组件的顶层仍未冻结。 我们在自己的数据集上训练新创建的模型以生成预测。 从大型模型迁移学习的特征图,然后通过微调高阶模型参数在我们自己的数据集上对其进行自定义的整个过程称为迁移学习。 在接下来的几节中,将从*分析和存储数据*开始,说明迁移学习工作流程以及相关的 TensorFlow / Keras 代码。
另一种更有效的方法(称为**迁移学习**)是从基本模型中提取特征向量,而无需在 ImageNet 数据集上训练顶层,然后添加我们的自定义全连接层,包括激活,退出和 softmax,构成我们的最终模型。 我们冻结了基础模型,但是新添加的组件的顶层仍未冻结。 我们在自己的数据集上训练新创建的模型以生成预测。 从大型模型迁移学习的特征图,然后通过微调高阶模型参数在我们自己的数据集上对其进行自定义的整个过程称为迁移学习。 在接下来的几节中,将从“分析和存储数据”开始,说明迁移学习工作流程以及相关的 TensorFlow / Keras 代码。
# 分析和存储数据
......@@ -420,14 +420,14 @@ plt.show()
![](img/34641430-6c28-4ced-8e2e-eda0bcefb882.png)
上图显示了整个图像分类神经网络模型可以分为两个部分:卷积层和顶层。 在全连接层之前的最后一个卷积层是形状的特征向量(*#个图像,X,Y,#个通道*),并且被展平(*#个图像,X * Y * 通道数*)以生成 n 维矢量。
上图显示了整个图像分类神经网络模型可以分为两个部分:卷积层和顶层。 在全连接层之前的最后一个卷积层是形状的特征向量(`图像数, X, Y, 通道数`),并且被展平(`图像数 * X * Y * 通道数`)以生成 n 维矢量。
特征向量形状具有四个分量:
*图像数量*表示训练图像的数量。 因此,如果您有 1,000 个训练图像,则该值为 1,000。
`X`表示层的宽度。 典型值为 14。
`Y`表示层的高度,可以是 14。
*通道数*表示过滤器的数量或深度 Conv2D。 典型值为 512。
+ `图像数`表示训练图像的数量。 因此,如果您有 1,000 个训练图像,则该值为 1,000。
+ `X`表示层的宽度。 典型值为 14。
+ `Y`表示层的高度,可以是 14。
+ `通道数`表示过滤器的数量或深度 Conv2D。 典型值为 512。
在视觉搜索中,我们通过使用欧几里得距离或余弦相似度等工具比较两个特征向量的相似度来计算两个图像的相似度。 视觉搜索的架构如下所示:
......@@ -452,7 +452,7 @@ plt.show()
1. 使用新的图像集重新运行模型,增加训练图像的大小,或改善模型参数。
2. 但是,无论使用多少数据,CNN 模型都永远不会具有 100% 的准确率。 因此,为解决此问题,通常在视觉搜索结果中添加文本关键字搜索。 例如,客户可能会写*,您能找到一张与上图中显示的床相似的床吗?* 在这种情况下,我们知道上载的课程是床。 这是使用**自然语言处理****NLP**)完成的。
2. 但是,无论使用多少数据,CNN 模型都永远不会具有 100% 的准确率。 因此,为解决此问题,通常在视觉搜索结果中添加文本关键字搜索。 例如,客户可能会写,“您能找到一张与上图中显示的床相似的床吗?” 在这种情况下,我们知道上载的课程是床。 这是使用**自然语言处理****NLP**)完成的。
3. 解决该问题的另一种方法是针对多个预先训练的模型运行相同的上载图像,如果类别预测彼此不同,则采用模式值。
接下来,我们将详细说明用于视觉搜索的代码。
......
......@@ -380,7 +380,7 @@ data/dog.jpg: Predicted in 0.130953 seconds.
| | **YOLO** | **YOLO v2** | **YOLO v3** |
| 输入尺寸 | 224 x 224 | 448 x 448 | |
| 构架 | Darknet 在 ImageNet 上接受了培训-1,000。 | Darknet-1919 个卷积层和 5 个最大池层。 | Darknet-5353 个卷积层。 为了进行检测,增加了 53 层,总共有 106 层。 |
| 构架 | Darknet 在 ImageNet 上接受了培训-1,000。 | Darknet-1919 个卷积层和 5 个最大池层。 | Darknet-5353 个卷积层。 为了进行检测,增加了 53 层,总共有 106 层。 |
| 小尺寸检测 | 它找不到小图像。 | 在检测小图像方面比 YOLO 更好。 | 在小图像检测方面优于 YOLO v2。 |
| | | 使用锚框。 | 使用剩余块。 |
......
......@@ -38,7 +38,7 @@ DeepLabV3 的架构基于两种神经网络-Atrous 卷积和编码器/解码器
上图显示了速率= 2 的 Atrous 卷积。与深度卷积相比,它跳过了其他每个像元。 实际上,如果应用 stride = 2,则 3 x 3 内核就是 5 x 5 内核。与简单的深度方向较小的特征图相比,Atrous 卷积增加了视野并捕获了边界信息(与最大池化相比, 缺少对象边界),从而导致图像上下文丰富。 由于其在每个后续层中保持视野相同的特性,Atrous 卷积用于图像分割。
DeepLabV3 执行几个并行的 Atrous 卷积,所有这些卷积以不同的速率运行,就像我们前面描述的空间池层概念一样。 上图说明了 Atrous 卷积模块和并行模块彼此相邻堆叠以形成 SPP。 与传统卷积不同,传统卷积与原始图像相比减少了最终特征向量的深度和宽度,而 Atrous 卷积保留了图像大小。 因此,图像的精细细节不会丢失。 在构建具有丰富图像上下文的分割图时,这很有用。
DeepLabV3 执行几个并行的 Atrous 卷积,所有这些卷积以不同的速率运行,就像我们前面描述的空间池层概念一样。 上图说明了 Atrous 卷积模块和并行模块彼此相邻堆叠以形成 SPP。 与传统卷积不同,传统卷积与原始图像相比减少了最终特征向量的深度和宽度,而 Atrous 卷积保留了图像大小。 因此,图像的精细细节不会丢失。 在构建具有丰富图像上下文的分割图时,这很有用。
# 编解码器网络
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册