深度学习:图像的卷积原理和本质(详解)
深度学习:图像的卷积原理和本质(详解)
卷积神经网络(CNN)在图像处理领域取得了巨大的成功,其核心操作之一就是卷积。本文将从图像卷积的计算过程出发,深入探讨卷积运算的原理及其在深度学习中的应用。
图像卷积的计算过程
在计算机视觉领域,卷积核、滤波器通常为较小尺寸的矩阵,比如3×3、5×5等,数字图像是相对较大尺寸的2维(多维)矩阵(张量),图像卷积运算与相关运算的关系如下图所示,其中F为滤波器,X为图像,O为结果。
以上便是图像卷积的某一次简单操作。但是为什么用这样的方式呢?这种方式的起源来自哪里?
说到起源,大家是否能想起与上图运算方式相似的图像算法?sobel算子,这是一个图像的边缘检测算法。来看一看sobel边缘检测算子的原理过程:
对比图1和图2,他们是多么的相似,再看看图像sobel的计算过程。基本完全一致。可以这样说,sobel边缘检测就是对图像的一次卷积操作。sobel边缘检测的效果图:
这就是用sobel算子的卷积操作,用卷积的方式实现图像的边缘检测。(这就回答了,为什么深度学习可以用于边缘检测和图像分割)。深度学习对图像的分割和边缘检测的原理,与sobel一样。
总结:针对图像的一次卷积操作,sobel算子与深度学习卷积类似。
在二维图像上,使用Sobel Gx滤波器进行卷积如下图所示
当输入为多维图像(或者多通道特征图)时,多通道卷积如下图所示(图片来自链接),图中输入图像尺寸为6×6,通道数为3,卷积核有2个,每个尺寸为3×3,通道数为3(与输入图像通道数一致),卷积时,仍是以滑动窗口的形式,从左至右,从上至下,3个通道的对应位置相乘求和,输出结果为2张4×4的特征图。一般地,当输入为m×n×c时,每个卷积核为k×k×c,即每个卷积核的通道数应与输入的通道数相同(因为多通道需同时卷积),输出的特征图数量与卷积核数量一致 。
如何提取图像的高层特征
这就是深度学习的优点了?多次卷积,多次池化,全连接。
理解一下卷积
从函数(或者说映射、变换)的角度理解。 卷积过程是在图像每个位置进行线性变换映射成新值的过程,将卷积核看成权重,若拉成向量记为w,图像对应位置的像素拉成向量记为x,则该位置卷积结果为y=w'x+b,即向量内积+偏置,将x变换为y。从这个角度看,多层卷积是在进行逐层映射,整体构成一个复杂函数,训练过程是在学习每个局部映射所需的权重,训练过程可以看成是函数拟合的过程。
从模版匹配的角度理解。 前面我们已经知道,卷积与相关在计算上可以等价,相关运算常用模板匹配,即认为卷积核定义了某种模式,卷积(相关)运算是在计算每个位置与该模式的相似程度,或者说每个位置具有该模式的分量有多少,当前位置与该模式越像,响应越强。下图为图像层面的模板匹配(图片来自链接),右图为响应图,可见狗头位置的响应最大。当然,也可以在特征层面进行模版匹配,卷积神经网络中的隐藏层即可以看成是在特征层面进行模板匹配。这时,响应图中每个元素代表的是当前位置与该模式的相似程度,单看响应图其实看不出什么,可以想像每个位置都有个“狗头”,越亮的地方越像“狗头”,若给定模板甚至可以通过反卷积的方式将图像复原出来。这里多说一句,我们真的是想把图像复原出来吗,我们希望的是在图像中找到需要的模式,若是通过一个非线性函数,将响应图中完全不像“狗头”的地方清零,而将像“狗头”的地方保留,然后再将图像复原,发现复原图中只有一个“狗头”,这是不是更美好——因为我们明确了图像中的模式,而减少了其他信息的干扰!
多层卷积能抽取复杂特征
为了直观,我们先上图,图片出自论文《Visualizing and Understanding Convolutional Networks》,作者可视化了卷积神经网络每层学到的特征,当输入给定图片时,每层学到的特征如下图所示,注意,我们上面提到过每层得到的特征图直接观察是看不出什么的,因为其中每个位置都代表了某种模式,需要在这个位置将模式复现出来才能形成人能够理解的图像,作者在文中将这个复现过程称之为deconvolution,详细查看论文(前文已经有所暗示,读者可以先独自思考下复现会怎么做)
从图中可知,浅层layer学到的特征为简单的边缘、角点、纹理、几何形状、表面等,到深层layer学到的特征则更为复杂抽象,为狗、人脸、键盘等等,有几点需要注意:
卷积神经网络每层的卷积核权重是由数据驱动学习得来,不是人工设计的,人工只能胜任简单卷积核的设计,像边缘,但在边缘响应图之上设计出能描述复杂模式的卷积核则十分困难。
数据驱动卷积神经网络逐层学到由简单到复杂的特征(模式),复杂模式是由简单模式组合而成,比如Layer4的狗脸是由Layer3的几何图形组合而成,Layer3的几何图形是由Layer2的纹理组合而成,Layer2的纹理是由Layer1的边缘组合而成,从特征图上看的话,Layer4特征图上一个点代表Layer3某种几何图形或表面的组合,Layer3特征图上一个点代表Layer2某种纹理的组合,Layer2特征图上一个点代表Layer1某种边缘的组合。
这种组合是一种相对灵活的方式在进行,不同的边缘→不同纹理→不同几何图形和表面→不同的狗脸、不同的物体……,前面层模式的组合可以多种多样,使后面层可以描述的模式也可以多种多样,所以具有很强的表达能力,不是“死板”的模板,而是“灵活”的模板,泛化能力更强。
卷积神经网络真正使用时,还需要配合池化、激活函数等,以获得更强的表达能力,但模式蕴含在卷积核中,如果没有非线性激活函数,网络仍能学到模式,但表达能力会下降,由论文《Systematic evaluation of CNN advances on the ImageNet》,在ImageNet上,使用调整后的caffenet,不使用非线性激活函数相比使用ReLU的性能会下降约8个百分点,如下图所示。通过池化和激活函数的配合,可以看到复现出的每层学到的特征是非常单纯的,狗、人、物体是清晰的,少有其他其他元素的干扰,可见网络学到了待检测对象区别于其他对象的模式。