您的位置  > 互联网

CNN(卷积神经网络)是如何在图像处理任务中实现图像分类的

介绍

卷积神经网络听起来像是一个奇怪的组合。 这个名字涉及生物学、数学和一点计算机科学,但却是计算机视觉领域最有影响力的创新。 2012年,神经网络首次崭露头角,Alex利用神经网络赢得了挑战赛(这场比赛堪称计算机视觉领域的奥运会)。 神经网络将分类误差从 26% 降低到了 15%,这在当时是一个令人震惊的进步。

此后,大量公司在其核心业务中使用了深度学习。 使用神经网络进行自动标记算法,使用它们进行照片搜索,亚马逊使用它们进行产品推荐,使用它们进行家庭列表个性化,使用它们进行搜索框架。

然而,神经网络的经典和最常见的用例仍然是图像处理。 我们来看看CNN(卷积神经网络)在图像处理任务中是如何实现图像分类的。

问题描述

图像分类是一项旨在将输入图像分类为特定类别(例如猫或狗等)或最可能的类别的任务。 对于我们人类来说,识别图像的能力是我们从出生起就学会的任务,而对于成年人来说,这项任务变得更加轻松。 我们不假思索地快速准确地识别我们的环境和周围的物体。 大多数时候,当我们看到图片或周围的世界时,我们甚至不需要看就能立即表征场景并标记每个对象。 这些快速识别模式、总结知识、适应不同图像和环境的能力一直是机器难以具备的。

输入和输出

当计算机看到图像(将图像作为输入)时,它实际上看到的是像素值数组。 根据图像的分辨率和大小,它将看到一个 32 x 32 x 3 的数组(3 指的是 RGB 值)。 假设我们有一张JPG格式的彩色图片,尺寸为480 x 480,那么它对应的是一个480 x 480 x 3的数组。数组中的每个数字都在0到255之间,这些数字代表像素的强度在此刻。 尽管这些数字对于人类对图像进行分类毫无意义,但却是计算机可以获得的唯一输入信息。 计算机识别图像的基本思想是,如果你将这个数组输入计算机,它会输出一个数字,代表该图像属于特定类别的概率(例如,80%的概率是一只猫, 15% 的概率是狗,5% 的概率是鸟)。

计算机任务

现在我们知道了问题以及输入和输出,是时候考虑如何完成这个过程了。 我们希望计算机能够区分我们输入的所有图像并识别其独特的特征,例如哪些特征是狗特有的,哪些是猫特有的。 这个过程也在我们的大脑中潜意识地发生。 当我们查看狗的图片时,我们会在图片中寻找可识别的特征,例如爪子或 4 条腿,以便我们可以对其进行正确分类。 同样,计算机可以通过寻找边缘和曲线等低级特征并通过一系列卷积层构建更抽象的概念来执行图像分类。 这是 CNN 工作原理的概述。 让我们详细了解它的工作原理。

与生物学的联系

首先,介绍一下背景。 当您第一次听到卷积神经网络这个术语时,您可能会想到神经学或生物学。 对,就是那样! 在某种程度上,CNN确实从视觉皮层的生物学中汲取了灵感。 视神经中有一小部分细胞对特定的视觉区域敏感。 这个想法是从 Hubel 及其同事在 1962 年进行的一项有趣实验中延伸出来的。实验表明,大脑中的一些特殊神经细胞只对特定方向的边缘做出反应。 例如,一些神经元在看到垂直边缘时会放电,而另一些神经元在看到水平或对角线边缘时会放电。 Hubel 发现所有这些神经元都排列在一个圆柱形框架中,它们共同作用以产生视觉感知。 系统的特定部分执行特定任务(视觉皮层中的神经细胞寻找特定特征)的想法也适用于机器,并且是 CNN 的基本原理。

结构

回到细节,CNN 需要做的就是获取图像,将其输入到一系列卷积层、非线性层、池化层(下采样)和全连接层中,最后得到输出。 正如我们之前所说,输出可以是单个结果,也可以是最能描述图类的一组类概率。 现在,最困难的部分是理解每一层是如何工作的。 让我们首先看看最重要的部分。

1级(数学部分)

CNN 的第一层通常是卷积层。 首先,您需要记住卷基础层的输入是什么。 如上所述,输入是 32 x 32 x 3 像素值数组。 现在,解释卷积层的最好方法是想象一下手电筒照过图像的左上角。 我们假设此手电筒的光线覆盖 5 x 5 的区域。 然后,我们想象手电筒发出的光照射到输入图像的所有区域。 在机器学习术语中,这个手电筒称为滤波器(有时称为神经元或内核),手电筒照射的区域称为感受野。 现在这个过滤器也是一个数组(其中的数字称为权重或参数)。 一个非常重要的注意事项是,滤波器的深度需要与输入的深度相同(这确保可以完成数学运算),因此该滤波器的大小为 5 x 5 x 3。现在让我们取以滤镜的第一个位置为例,即图像的左上角。 当滤波器在输入图像上滑动,或者执行卷积运算时,滤波器中的值会乘以图像中的原始值(也称为计算点积)。 将这些乘积加在一起(从数学上讲,总共有 75 个乘积),您会得到一个数字。 请记住,这个数字只是当滤镜位于图像左上角时得到的数字。 现在我们对输入中的每个位置重复此过程。 (下一步是将过滤器向右移动一个单位,然后向右移动一个单位,依此类推)。 输入上的每个唯一位置都会产生一个值。 过滤器滑过所有位置后,你会发现得到一个 28 x 28 x 1 的数组,我们称之为激活图或特征图。 获得 28 x 28 数组的原因是 5 x 5 滤波器在 32 x 32 输入图像上有 784 个不同的位置。 这 784 个数字被映射到一个 28 x 28 的数组中。

(小注:本文部分图片,包括上图,均来自《神经网络与深度学习》这本书,强烈推荐。)

假设现在我们使用两个 5 x 5 x 3 滤波器而不是一个,那么我们的输出将变成一个 28 x 28 x 2 数组。 通过使用更多的滤波器,我们可以更好地保留空间维度。 从数学上讲,这就是卷积层发生的情况。

第一级(任务概述)

让我们从高层次上看一下卷积实际上在做什么。 每个过滤器都可以被视为一个特征标识符。 这里的特征是直线、简单的颜色和曲线,这是图像共有的最简单的特征。 我们的第一个滤波器是 7 x 7 x 3 曲线检测器。 (为了简化这个问题,这里我们忽略滤波器深度为 3 个单位的事实,只考虑滤波器和图像最上面的切片。)曲线检测器具有一定的像素结构,其中沿着曲线区域将有更高的价值。

图片说明:左 - 滤镜的像素化表示

右-视觉曲线检测滤镜

现在让我们想象一下这个数学问题。 当我们在左上角输入上使用这个过滤器时,该区域和过滤器中的像素值将会相乘。 例如,在下图中,我们将过滤器放置在左上角。

图片标题:左 - 原图

右 - 可视化滤镜在图像上的位置

请记住,我们要做的是将滤波器的值与图像的原始像素值相乘。

图像内容:视觉感受野像素值*滤镜像素值

乘法和加法 = (50*30) + (50*30) + (50*30) + (20*30) + (50*30) = 6600。(很大的数字!)

一般来说,如果输入图像的形状与滤波器表示的曲线相似,那么我们的乘积之和将会是一个很大的值。 现在让我们尝试移动过滤器,看看会发生什么。

图像内容:滤波器在图像上的位置为接受野的像素值*滤波器的像素值

乘法和加法 = 0

这个数值比之前的数值要低很多! 这是因为图像中没有与曲线检测滤波器对应的部分。 请记住,该卷积层的输出是激活图。 在仅使用一个滤波器(并且该滤波器是曲线检测器)进行卷积的情况下,激活图将显示图像中与滤波器曲线相似的那些区域。 在此示例中,28 x 28 x 1 激活图的左上角的值为 6600。这个高值意味着输入包含某种类型的激活滤波器的曲线。 激活图右上角的值为0,因为输入的值不会激活过滤器。 (或者更简单地说,图片右上角没有这条曲线)。 这只是一个过滤器,一个检测向右延伸的曲线的过滤器。 我们可以有更多的过滤器,例如向左的曲线或直线。 我们拥有的过滤器越多,激活图越深,我们从输入中获得的信息就越多。

免责声明:本节中描述的滤波器的简化版本旨在说明卷积中涉及的数学。 在下图中,您可以看到经过训练的神经网络的第一个卷积层中滤波器可视化的一些示例。 但他们的主要思想还是一样的。 第一个卷积层中的滤波器对输入图像进行卷积。 当在输入中找到过滤器表示的特定特征时,过滤器将被“激活”(或获得一个高值)。

(温馨提示:上图来自斯坦福大学教授的CS 231N课程,如果你想进一步了解CNN,本课程是你的最佳选择。)

了解有关神经网络的更多信息

在传统的卷积神经网络架构中,每个卷积层都散布着其他层。 我强烈鼓励大家了解这些层的具体功能和作用,但简单来说,这些层提供了非线性和维数保留,从而提高了神经网络的鲁棒性并防止过拟合。 一个经典的CNN架构如下:

输入->卷积->激活->卷积->激活->池化->激活->卷积->激活->池化->全连接

神经网络的最后一层是非常重要的一层,我们稍后会详细介绍。 让我们首先回顾一下到目前为止我们所学到的知识。 第一个卷积层上的滤波器用于发现特征,通过它可以发现边缘、曲线等低级特征。 然而,为了预测图像类型,我们需要让神经网络识别高级特征,例如手、爪子或耳朵。 我们想一下,神经网络中第一个卷积层的输出是什么? 它的体积应该是 28 x 28 x 3。 (假设我们使用三个 5 x 5 x 3 过滤器)。

当我们进入另一个卷积层时,第一个卷积层的输出成为第二个卷积层的输入。 接下来的步骤很难想象。 在第一层中,输入是原始图像。 然而,当我们进入第二个卷积层时,第一层的计算结果和激活图就成为第二层的输入。 每个输入描述了某些低级特征在原始图像中出现的位置。 。 现在,当您使用一组过滤器(将其通过第二个卷积层)时,激活的输入部分代表高级特征。

这些特征可以是半圆形(由一条曲线和一条直线组成)或方形(由几条直线组成)。 当您使用更深的神经网络和更多的卷积层时,您将获得更复杂特征的激活图。 训练完神经网络后,你会得到一些过滤器,当图片中有手写字母时,或者当识别到粉红色时,这些过滤器就会被激活,等等。 如果你想了解更多关于可视化卷积网络中的滤波器的信息,可以参考 Matt 和 Rob 的优秀研究报告()。 您还可以在()上看到Jason制作的精彩可视化视频。 另一个有趣的事情是,当你使用更深的神经网络时,过滤器覆盖的感受野逐渐变大,这意味着过滤器考虑到原始输入中更大范围的信息(换句话说,这些过滤器更响应更广泛的像素空间)。

全连接网络层

现在我们可以检测这些高级特征,我们需要一个全连接的网络层作为神经网络的末端层。 该层将前一层(卷积层、激活层或池化层)的处理结果作为输入,输出一个N维向量,其中N是程序选择的类别数。 例如,如果你要做一个数字识别程序,总共有10个数字,那么N就是10。这个N维向量中的每个数字代表目标对象属于这一类的概率值。 比如一个数字识别程序的结果向量是[0 .1 .1 .75 0 0 0 0 0 .05],表示这张图片有10%的概率是1,10%的概率是2. 75%的概率为3,5%的概率为9(注:也可以用其他方式表达输出,这里我用的是回归模型方法)。 全连接网络层的功能是通过分析前一层的输出(代表高级特征的激活映射)来确定哪些特征值与特定类别最相关。

例如,如果程序预测图像是狗,则它将在表示高级特征(例如爪子或四条腿)的激活图中具有较高值。 类似地,如果程序预测图像是鸟,那么它在激活图中将具有代表高级特征(例如翅膀和喙)的高值。 本质上,全连接层关注与特定类最相关且具有特定权重的高层特征,这样在计算权重与前一层的乘积后就可以得到不同类的正确概率。

模型训练

现在我要说的是,有一个话题我之前故意没有提到,它也可能是CNN最重要的部分。 您在阅读时可能提出了许多问题:过滤器如何知道它在第一个变换层中寻找哪些边缘和曲线? 全连接层如何知道要查看哪个激活图? 每层滤波器的值是如何确定的? 这些是通过称为“反向传播”的训练过程来实现的。 通过这种训练,计算机可以正确调整其过滤器值(或权重)。

在讨论反向传播之前,我们先来看看神经网络的工作原理。 我们出生的那一刻,我们的意识是一张白纸。 我们不知道什么是猫、狗、鸟。 类似地,在训练卷积神经网络之前,权重或滤波器值是随机化的。 过滤器不知道如何寻找边缘和曲线,更高级别的过滤器不知道如何寻找爪子和喙。 随着年龄的增长,父母和老师给我们展示不同的图片和图像,并告诉我们相应的标签。 这种图像和标签一一对应的思想就是CNN训练的过程。

让我们回到反向传播。 假设我们有一个包含数千张狗、猫和鸟图像的训练集,并且每个图像都有正确的标签。

反向传播可以分为4个不同的部分:前向传递、损失函数、后向传递和权重更新。 在前向传递中,您获取训练图像(它是一个 数组)并将其传递到整个网络。 在我们的第一个训练示例中,由于所有权重或过滤器值都是随机初始化的,因此输出可能看起来像 [.1 .1 .1 .1 .1 .1 .1 .1 .1 .1],基本上是一个输出不优先考虑任何数字。 凭借当前的权重,该神经网络无法找到那些低级特征,因此无法合理地对图像进行分类。 这是反向传播损失函数的一部分。 请记住,我们正在使用包含图像和标签的训练数据。 例如,第一个训练图像输入为3,图像的真实标签为[0 0 0 1 0 0 0 0 0 0]。 损失函数可以用多种不同的方式定义,常见的定义是MSE(均方误差),即(实际值-预测值)平方的1/2。

假设变量 L 等于该值。 正如你可以想象的那样,第一张训练图像的损失将会非常高。 现在,让我们直观地思考一下这个问题。 我们希望使预测标签(输出)与训练集的实际标签尽可能匹配(这意味着我们的网络的预测是正确的)。 为了实现这个目标,我们必须尽量减少我们的损失。 让我们将这个问题视为微积分中的优化问题 - 我们想要找出哪些权重最直接地导致网络的损失(或错误)。

现在,我们要做的是通过网络进行向后传递,确定哪些权重造成最大损失,并找出调整它们以减少损失的方法。 一旦我们计算出这个导数(dL/dW,W是权重),我们就可以进入最后一步,即权重更新。 在这一步中,我们更新滤波器的权重,更新的方向与我们刚刚计算的导数/梯度的方向相反。

学习率(Rate)是程序员选择的参数。 高学习率意味着在权重更新中采取更大的步骤,因此模型可能需要更少的时间来收敛于最佳权重集。 然而,学习率太高可能会导致跳跃太大并且不够精确而无法收敛到最优点。

前向传递、损失函数、后向传递和参数更新的过程是一个训练迭代过程。 该程序将为每组训练图像(通常称为批次)重复此过程固定次数的迭代。 当我们完成最后一个训练示例中的参数更新后,如果一切顺利,则网络已经训练得足够好,即网络的权重调整正确。

测试

最后,为了测试我们的卷积神经网络是否有效,我们需要一组不同的图像和标签(不能在训练和测试之间重复使用!)。 我们使用经过训练的卷积神经网络来预测图像标签,然后将输出与这些图像的真实标签进行比较,以检查我们的网络是否正常工作。

企业如何利用卷积神经网络

数据,数据,数据! 拥有海量数据的公司比竞争对手拥有先天优势。 向网络提供的训练数据越多,可以进行的训练迭代次数就越多,可以进行的权重更新就越多,并且在投入生产时网络的调整效果就越好。 并且可以使用数十亿用户当前的所有照片,可以使用其网站上500亿个pin的信息,谷歌可以使用搜索数据,亚马逊可以使用每天产品销售产生的数百万数据。 现在,您知道使用这些数据背后的秘密了。