提交 f20b544e 编写于 作者: W wizardforcel

2021-01-06 14:37:51

上级 106685b5
......@@ -66,7 +66,7 @@ CNN 的图像过滤和处理方法包括执行多种操作,所有这些操作
![](img/fc5f1a96-b2c9-4318-8352-a2daea8a7234.png)
上图显示了如何使用`3 x 3`过滤器(边缘检测器)在宽度减小和深度增加(从 3 到 32)方面转换`3 x 3`图像的图形的一部分。 内核(`f[i]`)中 27 个(3 x 3 x 3)单元中的每一个都乘以输入(`A[i]`)。 然后,将这些值与**整流线性单元****ReLU**)激活函数(`b[i]`)相加在一起 单个元素(`Z`),如以下等式所示:
上图显示了如何使用`3 x 3`过滤器(边缘检测器)在宽度减小和深度增加(从 3 到 32)方面转换`3 x 3`图像的图形的一部分。 内核(`f[i]`)中 27 个(`3 x 3 x 3`)单元中的每一个都乘以输入(`A[i]`)。 然后,将这些值与**整流线性单元****ReLU**)激活函数(`b[i]`)相加在一起 单个元素(`Z`),如以下等式所示:
![](img/f7b861f9-ab93-4a27-aecc-567fe346bf5e.png)
......@@ -92,7 +92,7 @@ CNN 的图像过滤和处理方法包括执行多种操作,所有这些操作
`1 x 1`卷积在所有 128 个通道中与`5 x 5`输入层执行逐元素乘法–将其在深度维度上求和,并应用 ReLU 激活函数在`5 x 5`中创建单个点 输出表示 128 的输入深度。本质上,通过使用这种机制(卷积+整个深度的和),它会将三维体积折叠为具有相同宽度和高度的二维数组。 然后,它应用 32 个过滤器以创建`5 x 5 x 32`输出,如前所示。 这是有关 CNN 的基本概念,因此请花一些时间来确保您理解这一点。
本书将使用`1 x 1`卷积。 稍后,您将了解到池化会减小宽度,而`1 x 1`卷积会保留宽度,但可以根据需要收缩或扩展深度。 例如,您将看到在网络和 Inception 层中使用了`1 x 1`卷积(在“第 5 章”,“神经网络架构和模型”中。具有 1 的 32 过滤器) x 1 的卷积可以在 TensorFlow 中表示为`.tf.keras.layers.Conv2D(32, (1,1))`
本书将使用`1 x 1`卷积。 稍后,您将了解到池化会减小宽度,而`1 x 1`卷积会保留宽度,但可以根据需要收缩或扩展深度。 例如,您将看到在网络和 Inception 层中使用了`1 x 1`卷积(在“第 5 章”,“神经网络架构和模型”中。具有`1 x 1`的 32 过滤器) 的卷积可以在 TensorFlow 中表示为`.tf.keras.layers.Conv2D(32, (1,1))`
# 汇集
......@@ -111,7 +111,7 @@ CNN 的图像过滤和处理方法包括执行多种操作,所有这些操作
填充用于保留要素图的大小。 通过卷积,可能会发生两个问题,并且填充会同时解决两个问题:
* 每次卷积操作时,要素图的大小都会缩小。 例如,在上图中,由于卷积,一个`7 x 7`的特征图缩小为 5 x 5
* 每次卷积操作时,要素图的大小都会缩小。 例如,在上图中,由于卷积,一个`7 x 7`的特征图缩小为`5 x 5`
* 由于边缘上的像素仅更改一次,因此边缘上的信息会丢失,而中间的像素会通过多次卷积操作进行多次更改。
下图显示了在`7 x 7`输入图像上使用大小为 1 的填充操作:
......@@ -124,8 +124,8 @@ CNN 的图像过滤和处理方法包括执行多种操作,所有这些操作
通常,在卷积中,我们将内核移动一步,对那一步应用卷积,依此类推。 大步走使我们可以跳过一步。 让我们来看看:
* 当步幅= 1 时,我们应用普通卷积而不跳过。
* 当步幅= 2 时,我们跳过一步。 这会将图像大小从`7 x 7`减小到 3 x 3(请参见下图):
* 当步幅 1 时,我们应用普通卷积而不跳过。
* 当步幅为 2 时,我们跳过一步。 这会将图像大小从`7 x 7`减小到`3 x 3`(请参见下图):
![](img/ed163e12-13c1-4242-896a-74314f8aec91.png)
......@@ -175,7 +175,7 @@ CNN 的图像过滤和处理方法包括执行多种操作,所有这些操作
# 退出
丢弃是一种特殊的正则化类型,指的是忽略神经网络中的神经元。 具有 dropout = 0.2 的全连接层意味着仅 80% 的全连接神经元连接到下一层。 在当前步骤中神经元被丢弃,但在下一步中处于活动状态。 丢失可防止网络依赖少量神经元,从而防止过拟合。 丢弃应用于输入神经元,但不应用于输出神经元。 下图显示了带有和不带有丢弃的神经网络:
丢弃是一种特殊的正则化类型,指的是忽略神经网络中的神经元。 具有`dropout = 0.2`的全连接层意味着仅 80% 的全连接神经元连接到下一层。 在当前步骤中神经元被丢弃,但在下一步中处于活动状态。 丢失可防止网络依赖少量神经元,从而防止过拟合。 丢弃应用于输入神经元,但不应用于输出神经元。 下图显示了带有和不带有丢弃的神经网络:
![](img/8e09cd34-3cbf-4f87-a064-15c5710e0303.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)
......@@ -273,7 +273,7 @@ Epoch 1/5
# 迭代 1 – CNN 参数调整
删除一个 Conv2D 64 和一个 Conv2D 128,以使 CNN 仅具有一个 Conv2D 64 和一个 Conv2D 128:
删除一个`Conv2D` 64 和一个`Conv2D` 128,以使 CNN 仅具有一个`Conv2D` 64 和一个`Conv2D` 128:
```py
Epoch 1/5
......@@ -288,13 +288,13 @@ Epoch 1/5
256/256 [========================] - 65s 256ms/step - loss: 1.1919 - acc: 0.5483
```
结果:放下 Conv2D 层不会对性能产生不利影响,但也不能使其更好。
结果:放下`Conv2D`层不会对性能产生不利影响,但也不能使其更好。
接下来,我们将保留我们在此处所做的更改,但是我们会将平均池转换为最大池。
# 迭代 2 – CNN 参数调整
删除一台 Conv2D 64 和一台 Conv2D 128,以使 CNN 仅具有一台 Conv2D 64 和一台 Conv2D 128。 另外,将平均池转换为最大池,如下所示:
删除一台`Conv2D` 64 和一台`Conv2D` 128,以使 CNN 仅具有一台`Conv2D` 64 和一台`Conv2D` 128。 另外,将平均池转换为最大池,如下所示:
```py
Epoch 1/5
......@@ -311,11 +311,11 @@ Epoch 1/5
结果:同样,此更改对准确率没有明显影响。
接下来,我们将大大减少隐藏层的数量。 我们将更改输入层,并完全删除第二个 Conv2D 和关联的池。 在第一个 Conv2D 之后,我们将直接移至第三个 Conv2D
接下来,我们将大大减少隐藏层的数量。 我们将更改输入层,并完全删除第二个`Conv2D`和关联的池。 在第一个`Conv2D`之后,我们将直接移至第三个`Conv2D`
# 迭代 3 – CNN 参数调整
第二个卷积层完全掉落; 输入层从`5 x 5`更改为 3 x 3
第二个卷积层完全掉落; 输入层从`5 x 5`更改为`3 x 3`
```py
model.add(Conv2D(64, (3, 3), activation='relu', input_shape=(48,48,1)))
......@@ -347,9 +347,9 @@ Epoch 1/5
# 迭代 4 – CNN 参数调整
在此迭代中,所有参数均与上一个迭代中的参数相同,除了`strides = 2`,它在第一个 Conv2D 之后添加。
在此迭代中,所有参数均与上一个迭代中的参数相同,除了`strides = 2`,它在第一个`Conv2D`之后添加。
接下来,我们将所有内容保持不变,但是在第一个 Conv2D 之后添加一个池化层:
接下来,我们将所有内容保持不变,但是在第一个`Conv2D`之后添加一个池化层:
```py
model.add(Conv2D(64, (3, 3), activation='relu', input_shape=(48,48,1)))
......@@ -377,7 +377,7 @@ Epoch 1/5
从这个实验中,我们可以得出以下有关 CNN 参数优化的结论:
* 减少 Conv2D 的数量并以`stride = 2`消除一个合并层具有最显着的效果,因为它提高了准确率(大约 30%)。 但是,这是以速度为代价的,因为 CNN 的大小没有减小。
* 减少`Conv2D`的数量并以`stride = 2`消除一个合并层具有最显着的效果,因为它提高了准确率(大约 30%)。 但是,这是以速度为代价的,因为 CNN 的大小没有减小。
* 合并类型(平均合并与最大合并)对测试准确率的影响不明显。
产生最高准确率的 CNN 架构如下:
......
......@@ -31,7 +31,7 @@ CNN 模型根据前五位错误率对错误率进行分类,前五位错误率
AlexNet 的基本思想总结如下:
* 它包含 8 个学习层-5 个卷积层和 3 个全连接层。
* 它使用大型内核过滤器-第一层有 96 个大小为`11 x 11`的过滤器,第二层有 256 个大小为`11 x 11`的过滤器,第三层和第四层有 384 个大小为`11 x 11`的过滤器,以及 256 个大小为 3 的过滤器 x 5 在第五层
* 它使用大型内核过滤器-第一层有 96 个大小为`11 x 11`的过滤器,第二层有 256 个大小为`11 x 11`的过滤器,第三层和第四层有 384 个大小为`11 x 11`的过滤器,以及第五层有 256 个大小为`3 x 5`的过滤器
* ReLU 激活层在每个卷积和全连接层之后应用。 它的训练比 Tanh 快得多。
* 丢弃正则化应用于第一和第二全连接层。
* 两种数据增强技术可减少过拟合:
......@@ -196,7 +196,7 @@ model.compile(loss = 'categorical_crossentropy',
VGG16 的基本思想总结如下:
* 过滤器的最大尺寸为 3 x 3,最小尺寸为 1 x1。这意味着与 AlexNet 的较大过滤器尺寸和较小的数量相比,使用较小的过滤器尺寸和较大的数量。 与 AlexNet 相比,这减少了参数。
* 过滤器的最大尺寸为`3 x 3`,最小尺寸为`1 x 1`。这意味着与 AlexNet 的较大过滤器尺寸和较小的数量相比,使用较小的过滤器尺寸和较大的数量。 与 AlexNet 相比,这减少了参数。
* 对于`3 x 3`卷积层,卷积步幅为 1,填充为 1。 最大合并在跨度为 2 的`3 x 3`窗口上执行。
* 使用了三个非线性 ReLU 函数,而不是每一层中的一个,这通过减少消失梯度问题并使网络能够深入学习,使决策函数更具判别力。 在这里深入学习意味着学习复杂的形状,例如边缘,特征,边界等。
* 参数总数为 1.38 亿。
......@@ -307,7 +307,7 @@ VOC 代表[视觉对象类](http://host.robots.ox.ac.uk/pascal/VOC),而 PASCAL
# 基于聚类的细分
`K`-means 是一种无监督的机器学习技术,它基于质心将相似的数据分为几组。`K`-均值聚类算法的关键步骤概述如下:
K-means 是一种无监督的机器学习技术,它基于质心将相似的数据分为几组。K 均值聚类算法的关键步骤概述如下:
1. 选择`K`数据点作为任意位置的簇的初始数目。
2. 找到每个聚类质心和每个像素之间的距离,并将其分配给最近的聚类。
......@@ -338,7 +338,7 @@ VOC 代表[视觉对象类](http://host.robots.ox.ac.uk/pascal/VOC),而 PASCAL
# 特征提取
特征提取是将相似特征(例如边,角和线)分组为特征向量。 特征向量将图像的维数从 227 x 227(〜51,529)降低到 4,096。 每个区域提议,无论其大小如何,都首先通过膨胀和翘曲将其转换为`227 x 227`的大小。 这是必需的,因为 AlexNet 的输入图像大小为 227 x227。使用 AlexNet 从每个区域提取 4,096 个特征向量。 特征矩阵为 4,096 x 2,000,因为每个图像都有 2,000 个区域提议。
特征提取是将相似特征(例如边,角和线)分组为特征向量。 特征向量将图像的维数从`227 x 227`(约 51,529)降低到 4,096。 每个区域提议,无论其大小如何,都首先通过膨胀和翘曲将其转换为`227 x 227`的大小。 这是必需的,因为 AlexNet 的输入图像大小为`227 x 227`。使用 AlexNet 从每个区域提取 4,096 个特征向量。 特征矩阵为`4,096 x 2,000`,因为每个图像都有 2,000 个区域提议。
原则上,只要修改输入图像的大小以适合网络的图像大小,R-CNN 可以采用任何 CNN 模型(例如 AlexNet,ResNet,Inception 或 VGG)作为输入。 R-CNN 的作者比较了 AlexNet 和 VGG16 作为 R-CNN 的输入,发现 VGG16 的准确率高 8%,但比 AlexNet 的准确率高 7 倍。
......@@ -399,15 +399,15 @@ R-CNN 和 Fast R-CNN 都依赖于选择性搜索方法来开发 2,000 个区域
通过遵循以下列表中概述的技术,可以获得上图中所示的高精度:
* 在两个网络之间共享卷积层:RPN 用于区域提议,快速 R-CNN 用于检测。
* 对于更快的 R-CNN,输入图像大小为 1,000 x 600
* 对于更快的 R-CNN,输入图像大小为`1,000 x 600`
* 通过在卷积特征图输出上滑动大小为`60 x 40`的小窗口来生成 RPN。
* 每个滑动窗口都映射到 9 个锚点框(3 个比例,框区域分别为 128、256 和 512 像素,而 3 个比例为 1:1、1:2 和 2:1)。
* 每个滑动窗口都映射到 9 个锚点框(3 个比例,框区域分别为 128、256 和 512 像素,而 3 个比例为`1:1``1:2``2:1`)。
* 每个锚框都映射到一个区域提议。
* 每个滑动窗口都映射到 ZF 的 256-D 特征向量和 VGG 网络的 512-D 特征向量。
* 然后将此向量输入到两个全连接层中-框回归层和框分类层。
* 区域提议总数为 21,500(60 x 40 x 9)。
* 区域提议总数为 21,500(`60 x 40 x 9`)。
为了训练 RPN,基于与训练数据重叠的**交并比****IoU**)为每个锚定框分配一个二进制类别标签。 IoU 用于测量对象检测的准确率。 在“第 7 章”,“使用 YOLO 的对象检测”中详细描述。 现在,您已经足够知道 IoU 是以两个边界框之间的重叠面积与其联合面积之比来衡量的。 这意味着 IOU = 1,这意味着两个完整的边界框重叠,因此您只能看到一个,而当 IoU = 0 时,这意味着两个边界框彼此完全分开。
为了训练 RPN,基于与训练数据重叠的**交并比****IoU**)为每个锚定框分配一个二进制类别标签。 IoU 用于测量对象检测的准确率。 在“第 7 章”,“使用 YOLO 的对象检测”中详细描述。 现在,您已经足够知道 IoU 是以两个边界框之间的重叠面积与其联合面积之比来衡量的。 这意味着`IOU = 1`,这意味着两个完整的边界框重叠,因此您只能看到一个,而当`IoU = 0`时,这意味着两个边界框彼此完全分开。
二进制类级别具有正样本和负样本,它们具有以下属性:
......@@ -432,8 +432,8 @@ R-CNN 和 Fast R-CNN 都依赖于选择性搜索方法来开发 2,000 个区域
| 变形为固定大小 | 从区域提议中,每个区域都将变形为固定大小,以输入到 CNN。 | 使用 RoI 池化层中的最大池化,将区域提议扭曲为固定大小的正方形。 | 使用 RoI 池化层将区域提议扭曲为固定大小的正方形。 |
| 特征提取 | 每次将每个图像固定大小的 2K 变形区域提议送入 CNN。 | 2K 扭曲区域被馈送到两个分支,每个分支都包含一个全连接层。 | 2K 扭曲区域被馈送到全连接层。 |
| 侦测 | CNN 的输出传递到 SVM,以分类到边界框回归器以生成边界框。 | 全连接层的一个输出传递到 softmax 层进行分类,另一个输出传递到包围盒回归器以生成包围盒。 | 全连接层的一个输出传递到 softmax 层进行分类,另一个输出传递到包围盒回归器以生成包围盒。 |
| CNN 类型 | 亚历克斯网 | VGG 16 | ZFNet 或 VGGNet。 ZFNet 是 AlexNet 的修改版本。 |
| 区域提议 | 选择性搜索用于生成约 2,000 个区域提议。 | 选择性搜索用于生成约 2,000 个区域提议。 | CNN 用于生成〜21,500 个区域提议(〜60 x 40 x 9)。 |
| CNN 类型 | AlexNet | VGG 16 | ZFNet 或 VGGNet。 ZFNet 是 AlexNet 的修改版本。 |
| 区域提议 | 选择性搜索用于生成约 2,000 个区域提议。 | 选择性搜索用于生成约 2,000 个区域提议。 | CNN 用于生成约 21,500 个区域提议(`60 x 40 x 9`)。 |
| 卷积运算 | 每个图像进行 2K 次卷积操作。 | 每个图像进行一次卷积操作。 | 每个图像进行一次卷积操作。 |
| 区域提议和检测 | 区域提议和检测是分离的。 | 区域提议和检测是分离的。 | 区域提议和检测是耦合的。 |
| 训练时间 | 84 小时 | 9 小时 | 150 小时 |
......@@ -458,7 +458,7 @@ GAN 算法的分步说明如下:
2. 判别器网络是一个二进制分类器。 它获取真实图像和人造图像,并生成创建人造图像的概率`P(Z)`
3. 判别器将概率信息提供给生成器,生成器使用该信息来改进其对图像`G``z`)的预测。
二进制分类器损失函数称为交叉熵损失函数,并表示为-(y log(p)+(1-y)log(1-p)),其中`p`是概率,`y`是期望值。
二进制分类器损失函数称为交叉熵损失函数,并表示为`-ylog(p) - (1 - y)log(1 - p)`,其中`p`是概率,`y`是期望值。
* **判别器目标函数**
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册