计算机视觉
之前讲神经网络基础的时候就简单介绍过,在图像识别的场景中,计算机都是从先识别表层特征,然后慢慢通过这些表层特征来识别出深层的图像。 过程差不多是下面的这个样子
首先,我们的神经网络先通过浅层神经元去探测图像中的垂直或者水平的线, 通过这些浅层的认知,较深层的神经元就可以识别出更具体一些的特征,比如人脸中的某些轮廓。 然后更深层的神经元就可以通过这些轮廓去识别出整个人脸。 这是一种由浅入深的识别方式。 浅层神经网络负责探测并识别一些浅层特征,较深的网络通过这些浅层特征计算并识别更具体的特征,然后把这些更具体的特征传递给更深的层中去组成整个人脸的轮廓。 据说这是符合生物学中生物的眼睛识别外界物体的方式。 历史上发明神经网络的人是一个生物学家,他使用毛作为实验,在猫的眼睛中植入了探测神经元活动的探测器, 然后拿各种不同的物理放到猫的眼前去刺激它的视觉神经。 他发现猫的眼部的神经元有不同的活动方式,不是所有的神经元的活动都是一致的,继而他通过更多的实验发现神经元中是有不同的分工的。具体的原理我记不清了,但是他最后证明出了不同的神经元有不同的分工,他们分别识别不同的特征。最开始的神经元识别出的特征会传递给之后的神经元去在这基础上继续去识别更深层次的视觉认知。 这就是神经网络的由来。
简述 RGB
RGB 色彩模式是工业界的一种颜色标准,是通过对红 (R)、绿 (G)、蓝 (B) 三个颜色通道的变化以及它们相互之间的叠加来得到各式各样的颜色的,RGB 即是代表红、绿、蓝三个通道的颜色,这个标准几乎包括了人类视力所能感知的所有颜色,是目前运用最广的颜色系统之一。
也就是说,对于任意一张图片,比如一张 128*128 的图片。 我们可以按照 RGB 的颜色通道把它拆分为 128*128*3, 这样的像素矩阵。如下:
那么通过把一张图片转换成一个 RGB 模式的像素矩阵,我们就可以把这些像素作为我们的特征进行训练。 这也是我们使用卷积神经网络的基础
卷积
我们想象一下, 如果我们把这些所有的像素点都原封不动的作为特征输入给神经网络,将会是怎样恐怖的一件事。如果图片较小,比如 64*64。 那么特征还不是很多。 如果是 1000*1000 的图片呢? 那就有 1000*1000*3 个特征。 这对神经网络来说是个噩梦。 所以我们也要想一些办法来减少特征数量。 其实这也是卷积的一个作用。 但它更重要的作用在于做边缘检测, 我们刚才说在计算机视觉中,浅层的神经网络要负责去探测和识别一些浅层特征,比如一些横向或者纵向的轮廓。 那么卷积这个操作就是要去识别这些东西。
接下来我们介绍一下卷积到底是什么。 看下图:
假如我们有一张 6*6 的灰度图片 (如上图), 那么我们再定义一个 3*3 的矩阵 (上图中间部分)。 这个 3*3 的矩阵我们成为 filter,你可以叫它过滤器,也可以叫滤波器。上面这个过滤器就是用来去识别垂直边缘的。 比如我们通过这个过滤器给一张图片查找垂直边缘和水平边缘的效果如下:
那我们是如何通过过滤器来识别垂直边缘的呢? 让我们回到过滤器的那个图,我们看到过滤器是一个 3*3 的矩阵,里面的值是固定的,这个就是垂直边缘的过滤器。我们现在要对原图片在过滤器的基础上做卷积运算。 什么是卷积运算呢,我们使用这个 3*3 的过滤器,覆盖到图片上,就像图中的那样。然后进行元素乘法计算。 于是就是:3*1+1*1+2*1+0*0+5*0+7*0+1*-1+8*-1+2*-1=-5 这样我们就算计出了图右侧的那个 4*4 矩阵的第一个值。紧接着,我们让过滤器向右移动。如下图:
这样我们就能计算后面 4*4 矩阵的第二个值,以此类推,我们根据该过滤器对原图片进行了所有的计算。得出了一个 4*4 的矩阵像素。 那么这个最后的 4*4 的像素矩阵就变成了我们识别出的垂直边缘的图片了。 而我们这个根据过滤器来找到垂直边缘的计算,就叫做卷积
下面是一个水平边缘的过滤器的运算例子:
当然了,在卷积神经网络中,我们可以使用多个过滤器来识别不同的浅层特征。如下图:
上图是同时识别垂直边缘和水平边缘的例子。我们通过一个垂直边缘过滤器和水平边缘过滤器来让神经网络同时识别垂直边缘和水平边缘。 输出两个 4*4 的矩阵,最后把他们重叠在一起后输入给下一层。 在这里我们统一一下术语。 由于这个例子中我们有两个过滤器,分别探测垂直和水平边缘。所以我们说这里我们有两个特征,一个过滤器代表一个特征。同时我们的过滤器中有 27 个数值,因为我们的过滤器 3*3*3 的 (因为 RGB 有 3 个颜色通道,所以最后还要乘以 3),所以我们的过滤器有 27 个值。这 27 个值就是过滤器的参数。 不同的参数能识别出的轮廓就不一样,比如可以识别垂直,识别水平的。 而这一系列的操作在我们的神经网络中就属于卷积层。 这也是卷积神经网络中最基础的层,我们一般可以有多个卷积层来帮我们识别浅层特征。 之后还会有池化层和全连接层,这些内如我们下次再讲。