在上一节第 2 部分 –计算机
视觉的第一步中,您构建了一个可以识别服装的神经网络。
现在你已经看过了计算机视觉的时尚示例,你可能已经注意到这些示例对计算机视觉的一大限制。那就是图片中只能有一个物品,而且它必须居中,并且要有明确的定义。例如,鞋子必须面向左侧。一种称为卷积神经网络的神经网络可以在这里提供帮助。我们需要一点时间来建立它。在这一部分中,我们将讨论什么是卷积,以及如何将它们与池化结合使用,以帮助计算机理解图像的内容。
把所有东西整合起来
要一点时间。但在开始使用卷积之前,我们先来了解一下什么是卷积。卷积背后的思想与使用滤镜进行图像处理非常相似。如果你以前使用过 Photoshop 之类的程序,它有滤镜可以执行诸如锐化图像或添加运动模糊之类的操作。因此,虽然效果很复杂,但背后的过程却很简单。让我们来看看它的实际作用。
左边是来自时尚 MNIST 数据集
马耳他的移动数据 马耳他拥有广泛的 4G 覆盖、可靠的移动互联 墨西哥移动数据 网服务和不断发展的 5G 功能。由于电信运营商提供灵活且价格合理的数据计划,普通民众现在可以使用移动互联网。马耳他面积虽小,但网络覆盖范围广泛,无论是城市还是农村,居民和游客都可以享受无缝连接。
的靴子图像。右边是图像中九个像素的表示。我将把中 为什么将入站营销和需求生成结合起来很重要 间的像素称为当前像素,其他像素都是它的邻居。我定义了一个过滤器,它是一组与我的像素及其邻居形状相同的值。例如,如果我在 3×3 像素网格的每个方向上都有一个邻居,那么我的过滤器中也会有一个 3×3 网格。过滤器中的每个值都可以称为权重。因此,要为我的像素计算一个新值,我所要做的就是将每个邻居乘以它们的权重,将我的当前像素乘以它的权重,然后将它们全部相加。我将对图像中的每个像素执行此过程。结果将是一张变换后的图像。
例如,如果你看左边的图片,如果
我将中间的过滤器应用到它上面,我会得到右边的图片。这个过滤器会极大地强调垂直线。它们现在真的很突出。同样,这个过滤器会强调水平线。所以你可能想知道,这与计算机视觉有什么关系?最终,试图理解一件物品的目标不仅仅是将原始像素与标签匹配,就像我们在时尚示例中所做的那样。但是,如果我们可以从图像中提取特征,那么当图像具有这组特征时,它就是这个类别,或者如果它具有那组特征,它就是那个类别,那会怎样?这就是卷积神经网络的核心。它们将图像处理成原始特征,然后找到与标签匹配的特征集。它们使用过滤器来做到这一点。就像神经元学习权重和偏差以满足我们的需要一样,卷积将通过初始随机化学习适当的过滤器,然后使用损失函数和优化器对其进行调整以获得更好的结果。
例如,看看这些
图像。你可以看到它们是如何被过滤器转换的。这些 bmb目录 过滤器学会了如何隔离和抽象其中的特征。例如,你可以看到,像我们的水平线检测器这样的程序能够检测到这些图像中的共同点。它们都是鞋子。那条线是鞋底。
但如果你用相同的滤镜来观察这些图像,它们会有不同的结果。因此,如果水平线滤镜使很多像素亮起,我们可以将其描述为单一检测器。
你可能经常听到这
个短语——“检测器”。但它最终指的是一个过滤器,可以提取可用于确定类别的特征。我第一次听到这个词是在猫与狗分类器中,我们稍后会讨论这个分类器,当时有人设想了一个松软耳朵检测器,它可以确定某物是狗而不是猫。
您可能在上图中注意到的另一件事是图像的分辨率也在降低。这是通过所谓的池化实现的。这里的想法非常简单。如果有一种方法可以提取特征,同时删除无关信息,我们实际上可以学习得更快。
现在,让我们看看它是
如何工作的。这个概念其实很简单。想象一下这是我们的像素块。为了简单起见,我将它们作为单色。然后我们以 2×2 的块来查看它们,然后我们只保留最大值,在本例中为 192。然后我们对下一个 2×2 重复该过程,并保留最大值,即 144;下一个结果为 255;下一个结果为 168。然后我们将这四个结果放在一起以产生一个新的 2×2 块。这包含前一个 4×4 块的 2×2 成分中的最大值。
现在,我们已将尺寸缩小了 75%,也许——只是也许——我们保留了重要信息。那么,让我们看看它实际上是什么样子。这是我们之前过滤以检测垂直线的图像。左侧是池化之前的样子。右侧是池化之后的样子,池化方式我们刚刚演示过。
请注意,信息并没有被
保留下来。你可以说这一点也被强调了。池化也是减少模型需要处理的信息量的重要方法。如果你仔细想想,假设你想学习 100 个过滤器。这意味着你必须跟踪图像的 101 个版本——原始版本加上应用过滤器后的结果。如果你有数千张图像,你很快就会开始消耗内存。这只是一层。如果你在这下面还有另一层也学习了 100 个过滤器会怎么样?这意味着你的前 100 个中的每一个也将有 100 个产品,为你需要训练的每个图像提供 10,000 张图像。任何可以在保留这些信息的同时减小尺寸的技术显然都非常有价值。
现在我们已经了解了什么是卷积,它是如何工作的,以及它如何与池化相结合,让我们花点时间看看如何为它们编写代码。
让我们来看看卷积的实际应用。例如,如果你要对鞋子进行分类,而不是时尚 MNIST 中的鞋子。其中一种方法是使用卷积。在这一部分,你将进行一个快速实验,看看卷积过滤器是如何工作的。
因此我们首先导入一些所需的 Python 库。
导入cv2
导入numpy作为np
从scipy导入misc
i = 其他。上升()
这些库中内置的功能之一就是这个名为 的图像ascent
。因此我们可以使用该pyplot
库来绘制它,这样我们就可以看到它的样子。
上楼梯。我现在将其复制到numpy
数组中,以便您可以对其进行操作。
# 如果过滤器中的所有数字加起来不都是 0 或 1,你
# 可能需要加权才能使其达到这个数字
# 因此,例如,如果你的权重是 1,1,1 1,2,1 1,1,1
# 它们加起来是 10,所以如果你想对它们进行规范化,你需要将权重设置为 .1
weight = 1
还记得我们展示的 3×3 过滤器吗?我只是将它们实现为三个包含三个项目的数组。
我做的另一件事是给它添加权重,这样所有数字的总和应该为 1。但如果它们的总和大于 1,那么你可以将它们乘以一个因子来使它们标准化。例如,如果它们的总和为 10,你可以将权重设置为 0.1,这样最终结果就会标准化回 1。
对于范围内的 x(1,size_x- 1):
对于范围内的 y(1,size_y- 1):
卷积=
i_transformed [x, y] = 卷积
我们将看到真正强调水平线的那条。
因此,您可以考虑以下过滤值并查看它们对图像的影响,或者您可以尝试自己的过滤值。
p
如果你看一下轴,它现在是 256×256。如果我们看看原始图像,它是 512×512。这是经过过滤后的原始图像。
所以您已经了解了过滤器如何卷积图像,提供卷积层的基础,以及如何池化在保持图像特征的同时减小图像尺寸。
在下一部分中,您将开始在代码中实现卷积和池化,并了解它们如何改进时尚 MNIST 分类器。之后,您将处理一些更真实、更具挑战性的图像。您可以了解卷积如何帮助您对它们进行分类。
下一步:第 4 部分 –使用卷积神经网络进行编码