卷积神经网络卷积神经网络
在日常生活中的某一刻,您可能见过目标识别算法的某种实际应用,例如您手机摄像头上的人脸检测。不过,它的工作原理是
什么?这些计算机视觉解决方案的核心是卷积神经网络 (CNN)。简单来讲,这些网络是特别善于根据不太复杂的特征构建复
杂特征的神经网络。一个经典的例子就是人脸检测器,早期各层负责辨别出垂直和水平线,后面的阶段负责找到鼻子和嘴巴。
本文将解释这些卷积网络的工作原理。还将展示如何使用 Python 实现一个对手写数字进行分类的简单网络。让我们进入正
题!
初识神经网络
本文不会详细介绍神经网络的一般工作原理,但您需要有一定的背景知识才能处理卷积网络。神经网络有一种分层架构。每层
由一些节点组成,每个节点对一个输入有效执行某种数学运算,通过计算获得一个输出。提供给任何给定节点的输入都是前一
层的输出(以及通常等于 1 或 0 的偏置项)的加权总和。算法会在训练期间会学习这些权重。为了学习这些参数,可以将运
行一次训练的输出与真实值进行比较,并通过在网络中反向传播错误来更新权重。
卷积
卷积是一种数学运算,它采用某种方式将一个函数“应用”到另一个函数。结果可以理解为两个函数的“混合体”。卷积由一个星
号 (*) 表示,这可能与许多编程语言中通常用于乘法的 * 运算符混淆。
不过,这对检测图像中的目标有何帮助?事实证明,卷积非常擅长检测图像中的简单结构,然后结合这些简单特征来构造更复
杂的特征。在卷积网络中,会在一系列的层上发生此过程,每层对前一层的输出执行一次卷积。
那么,您会在计算机视觉中使用哪种卷积呢?要理解这一点,首先必须了解图像到底是什么。图像是一种二阶或三阶字节数
组,二阶数组包含宽度和高度两个维度,三阶数组有 3 个维度,包括宽度、高度和多个通道。所以灰阶图是二阶的,而 RGB
图是三阶的(包含 3 个通道)。字节的值被简单解释为整数值,描述了必须在相应像素上使用的特定通道数量。所以基本上
讲,在处理计算机视觉时,可以将一个图像想象为一个 2D 数字数组(对于 RGB 或 RGBA 图像,可以将它们想象为 3 个或 4
个 2D 数字数组的相互重叠)。
因此,我的卷积获取此数组(我暂时假设该图是灰阶的),并将它与第二个数组(一个过滤器)进行卷积运算。卷积过程如
下。首先,将过滤器叠加在图像数组的左上部。接下来,对过滤器及其目前所在的图像子部分执行对应元素乘积。也就是说,
将过滤器的左上部元素与图像的左上部元素相乘,依此类推。然后,将这些结果相加来生成一个值。接着,将过滤器在图像上
移动一段距离(称为步幅),并重复该过程。此过程的输出是一个具有与图像数组不同维数的新数组(结果通常具有更小的宽
度和高度,但包含更多的通道)。为了演示卷积运算的工作原理,让我们来看一个示例。这是一个 3 x 3 过滤器:
我将把这个过滤器应用到下图。