计算机视觉(Computer Vision)是一门研究如何教机器“看”的科学,计算机视觉研究相关的理论和技术,试图创建能够从图像或者多维数据中获取“信息”的人工智能系统。
随着深度学习技术的发展,计算机视觉领域的研究也得到了快速的发展。在对各种图像进行处理的过程中,往往在少量的图像中便蕴含着大量的数据,难以用一般的DNN进行处理。而卷积神经网络(Convolutional Neural Network, CNN)作为一种前馈神经网络,它的人工神经元可以响应一部分覆盖范围内的周围单元,在图像处理工作上有着出色的表现。
卷积神经网络
前面在神经网络中提到过,构建一个深度神经网络来进行人脸识别时,深度神经网络的前面一层可以用来进行边缘探测,其次一层用来探测照片中组成面部的各个特征部分,到后面的一层就可以根据前面获得的特征识别不同的脸型等等。其中的这些工作,都是依托CNN实现的。
基本概念
以下通过边缘检测的例子来阐述深度学习中卷积的基本概念。
如上图中,最左边是一张用大小为6×6的矩阵表示的存在明显分界线的灰度图,矩阵中的值大于“1”则代表白色,等于“0”则代表灰色,小于“0”则代表黑色。
通过与中间的大小为3×3的矩阵进行卷积(Convolution)运算,得到的大小为4×4的矩阵,就是图片中的存在的边缘。其中,中间这个矩阵 ⎡⎣⎢1 1 1000−1−1−1⎤⎦⎥ [ 1 0 − 1 1 0 − 1 1 0 − 1 ] 被称为滤波器(Filter)。
在数学领域,“*”号是标准的卷积运算符号,但在计算机里通常用这个符号代表一般的乘法,要注意加以区分。
深度学习里面所称的卷积运算,和泛函分析中的卷积运算有所不同,它的求解过程只是简单将图像矩阵中,从左到右,由上到下,取与滤波器同等大小的一部分,每一部分中的值与滤波器中的值对应相乘后求和,最后的结果组成一个矩阵,其中没有经过翻转、反褶等过程。其运算过程如下面的卷积运算所示:
将这个灰度图左右的颜色进行翻转再与之前的滤波器进行卷积:
得到的结果中,原来的“30”也会变为“-30”,表示这时的图片是左灰右白,与原来相反。
上面的这个滤波器 ⎡⎣⎢1 1 1000−1−1−1⎤⎦⎥ [ 1 0 − 1 1 0 − 1 1 0 − 1 ] 可以用来探测垂直方向的边缘,那么只要把这个滤波器翻转下,变成 ⎡⎣⎢1 0 −110−110−1⎤⎦⎥ [ 1 1 1 0 0 0 − 1 − 1 − 1 ] ,则这个新的滤波器就可以用来探测水平方向的边缘。如下图:
所以,不同的滤波器有着不同的作用。滤波器矩阵的大小和其中的值也都不是固定不变的,可以根据需求来选择。其中, ⎡⎣⎢1 2 1000−1−2−1⎤⎦⎥ [ 1 0 − 1 2 0 − 2 1 0 − 1 ] 叫Sobel滤波器,它增加了中间行的权重,这样可能更稳健些。计算机视觉的研究中还会用到 ⎡⎣⎢3 10 3000−3−10−3⎤⎦⎥ [ 3 0 − 3 10 0 − 10 3 0 − 3 ] ,它叫Scharr滤波器。滤波器中的值还可以作为参数,通过训练来得到。
填充和步长
前面可以看到,大小为6×6的矩阵与大小为3×3的滤波器进行卷积运算,得到的结果是大小为4×4的矩阵。假设矩阵的大小为 n×n n × n ,而滤波器的大小为 f×f f × f , f f 一般是个奇数,则卷积后结果的大小就为