CNN 由三种不同的层组成,即「卷积层」、「池化层」、「连接层」。今天,我们讲一讲如何理解「卷积层」。
下图是一个图像卷积的例子,输入图像是32*32*3,3是它的深度(即R、G、B三色通道),卷积层是一个5*5*3的filter,这里注意:filter的深度必须和输入图像的深度相同。通过一个filter与输入图像的卷积可以得到一个28*28*1的特征图,下图是用了两个filter得到了两个特征图。
通常地,我们会使用更多的卷积filter,来获得更加深层次的特征信息。
我们再来看一个更具体的例子,输入是一个4*4 的image,经过两个2*2的卷积核进行卷积运算后,变成两个3*3的feature_map。
这里我们介绍一下中间转换的过程,以上图卷积核filter1为例,filter1在图片滑过,步长为1(stride = 1):
计算第一个卷积层神经元o11的输入:
neto11=conv(input,filter)=i11×h11+i12×h12+i21×h21+i22×h22=1×1+0×(−1)+1×1+1×(−1)=1
神经元o11的输出:(此处使用Relu激活函数)
outo11=activators(neto11)=max(0, neto11)=1
其他神经元计算方式相同,计算完所有的输出后,得到了feature_map1。经过多次卷积后,就可以提取出图像中的特征,那么,卷积运算中的filter怎么来的呢?不同的filter对运算有什么影响?
对数字图像处理进行处理的时候,有很多的矩阵算子,其实这些算子就是filter,我们使用的Photoshop,美图秀秀等等软件给图片添加的“滤镜”其实就是使用了这些filter才得到的效果。
这里推荐一个网站:http://setosa.io/ev/image-kernels/,可以打开看一下不同的filter对图像的影响,帮助你更好的理解filter。
这个站点提供了9种filter,接下来就让我们看一下不同的filter对图像特征的提取效果吧。
可以看出来,不同的filter对人脸的提取效果是不一样的。多个filter进行结合,再加上梯度上升算法,不停迭代优化权值。就可以优化深度网络的效果。
发表回复