首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

卷积神经网络(一)——卷积、边缘化与池化层

卷积神经网络(一)

——卷积、边缘化与池化层

(原创内容,转载请注明来源,谢谢)

一、概述

卷积神经网络网络(Convolutional Neural Network,CNN),是一种神经网络的模型,在计算机视觉(computer vision,CV)领域运用广泛。

计算机视觉,旨在完成图像分类、物体识别、图像合成创作等工作,主要难度在于输入的特征值非常多。

例如对于一个64*64像素的图片,就一共要处理12288个特征,而更大的图片则需要处理的特征值更多,这就导致使用原来机器学习的模型解决问题时,速度会很慢。而CNN正好可以解决这个问题。

二、边缘检测

边缘检测(edge detection),即检测物体在图片中的边界,这是cv的基础。边缘检测的方法,是通过构建过滤器,令图片的rgb值和过滤器进行卷积,得到的结果即检测出的结果。

1、卷积计算

这里先考虑黑白图片,则没有rgb三个值,只有1个值,表示这个点的亮度。假定滤波器是一个3*3的矩阵,值如下图所示,原图的灰度值矩阵为下图左边那副图所示,则进行卷积计算:

卷积计算的方式如下:

设原图为矩阵A,是一个6*6的矩阵;滤波器为矩阵B,是一个3*3的矩阵。

1)先把B放到矩阵A上,并且A的[1,1]元素与B的[1,1]元素对其,则重叠出3*3的矩阵。

2)再把重叠的位置,对应的元素相乘,得到1个3*3的矩阵,设为C。

3)把C的所有元素相加,得到卷积结果矩阵[1,1]位置的值。

4)这里采用的步长是1。则接下来把B的[1,1]与A的[1,2]对齐,在进行上面步骤的计算,得到结果矩阵[1,2]位置的值。当一行计算完成,则把B的[1,1]与A的[2,1]对齐,进行计算,以此类推。

2、垂直边缘检测

上述的计算,即实现了垂直物体的边缘检测,下图的例子更为直观:

可以看到,经过这种滤波器的卷积,可以突出图片的垂直形状的灰度值,这利于后续的计算。

3、水平边缘检测

类似的,还有水平边缘检测的滤波器,如下图所示:

4、其他边缘检测滤波器

除了用上面的滤波器,还可以使用其他的值来实现边缘检测,常用的有sobel滤波器和scharr滤波器,下图展示的都是垂直滤波器。如果需要水平滤波器,只需要把下面的矩阵,对应元素放置到旋转90°的位置即可。

三、Padding

1、现有问题

上面的边缘检测,可以看到进行卷积的时候,6*6的矩阵和3*3的矩阵,卷积的结果变成4*4,这样一来图片变小了,多进行几次卷积,会导致图片消失;另外还有一个问题,在于图片边缘的点,参与卷积的次数较少,这样会损失图片边缘的信息量。

2、padding介绍

为了解决这个问题,可以使用padding的方式。Padding=1,表示在原图的最外层,加上全部都是的一层的值,把6*6的矩阵变成8*8的矩阵,此时在进行卷积,可以发现最终得到的还是6*6的矩阵。

3、padding公式

考虑Padding后,矩阵卷积的结果矩阵的维度的通用公式:n+2p-f+1,其中n表示原图是n*n的图片,f表示滤波器是f*f的矩阵,p即padding,如下图所示:

4、p的选择

P通常有两种选择方式:

1)valid卷积,即令p=0。

2)same卷积,即保证输出矩阵大小和输入矩阵一致,此时p=(f-1)/2

从这里也可以看出,滤波器的维度f通常需要是奇数,这样保证可以用same卷积,且有中心像素点,便于指出滤波器的位置。

四、步长

步长,即计算卷积过程中,每次移动过滤器的幅度。这里幅度既代表了水平移动的幅度,也代表了垂直移动的幅度。如下图所示:

综合考虑步长、padding后,计算两个矩阵卷积后的输出矩阵的维度大小的公式如下:

五、立体矩阵卷积

上面是假是定图片是黑白的,当考虑到rgb时,则变成3维的,这里要对应的修改滤波器的维度。

假设图片是6*6*3的矩阵,这里的6*6*3称为高*宽*通道(channels),需要注意的是,滤波器的channels值和图片的channels值必须一样,才能进行卷积。

则6*6*3的矩阵与3*3*3的矩阵,卷积的结果是4*4*1。

为了得到rgb的特征,可以分别用不同的滤波器与图片进行卷积,得到不同的结果。

因此引入了多重滤波的概念,即原图同时与两个滤波器进行卷积,会得到两个结果矩阵,这里把两个结果矩阵进行重叠,形成的立体矩阵,即为多重滤波的结果。

六、卷积神经网络

1、单层

考虑到神经网络的第l层,则对应的常用的参数符号如下图所示:

这里滤波器即为待计算的参数。

2、多层

一幅图片,要进行处理,通常需要经过若干次卷积,例如下图所示:

这里有个常用的卷积方法:通常随着卷积层数的增加,涉及到的滤波器个数增加,但是滤波器本身的尺寸不变。所以通常卷积多层后,图片会变得细长型,如上图所示。

七、池化层

除了卷积,cnn还需要池化层,便于提取卷积的结果。

池化层,也是一种矩阵的计算,如下图所示:

一个2步长、宽度2的最大值池化层,即取出矩阵每个2*2子矩阵的元素最大值。下图右边那个是结果,值为9 2 6 3

对于立体矩阵,则每一层的进行池化的操作。

除了最大值池化,还有平均值池化。但是通常最大值池化更长用。

需要说明的是,池化层只有滤波器尺寸f和步长s两个超参数,这两个参数是不需要经过fp、bp进行学习的,是初始就设定好的参数。矩阵经过池化层后的维度计算,和之前卷积的维度计算公式一致。

常用的超参数设定,f=2、s=2、p=0。

八、总结

1、计算过程

图片经过cnn后的计算,如下图所示:

通常,会经过若干的卷积层+池化层(经常把卷积层和池化层共称为1层)的操作,再把矩阵按顺序纵向排列成n*1的矩阵,接下来进行若干次全连接层的计算(全连接层即原来的神经网络的计算,每个元素都参与计算),最终再经过一层softmax计算,得到结果矩阵。

2、优点

卷积的计算,减少参数的参与,例如对于32*32*3的图片,要得到28*28*6的矩阵,普通的神经网络会经过约3072*4704≈1400万次的计算,而卷积只需要经过(5*5+1)*6=156次计算。

另外,卷积有三大特点:

1)参数共享:特定滤波器在图片任一小块都适用,可以共享特征。

2)稀疏连接:每一小部分的输出值,与图片其他部分无关。

3)平移不变:图片平移,由于和原图相似,卷积计算的结果也是相似的。

3、过程总结

如下图所示:

——written by linhxx 2018.03.06

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180306G0N4JV00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券