CNN网络

一.边缘检测

边缘检测包括垂直边缘检测和水平边缘检测:

针对上图,垂直边缘检测得到的是图片中垂直方向的栏杆;水平边缘检测得到的是水平方向的栏杆。

如何使用数学的方法进行垂直边缘检测:

上图中,滤波器中间一列全零,两边列是全1,也就是得到原图垂直方向的像素信息。原图在这里是6*6,得到4*4图片大小。

再如下图:

原图中左边是全10像素,右边是全零像素,所以得到的是下方一白一灰图像,滤波器是1,0,-1得到白,灰,黑图像。最终得到的4*4图像是0,30,30,0。得到灰,白,灰图像。

上面就是垂直边缘检测的内容,目的就是提取图像中垂直方向的图像信息;水平边缘检测类似。如果将他们结合将会得到神奇的结果。

对于上图,同样的滤波器,针对图形(上)从亮到暗,得到结果是亮。针对图像(下)从an到亮,得到结果暗。说明,垂直边缘检测可以反应图像本来的信息。

水平边缘检测就是将垂直边缘检测滤波器翻转90度就好了,结果类似,如下图:

上面介绍的滤波器是由1,0,-1组成,当然边缘检测滤波器远不止这些,随着滤波器参数的不同,得到的结果也不同。下图给出了比较常用的sobel滤波器和scharr滤波器,他们都是边缘滤波器常使用的。

当然,为了更好的适应用户的需求,最好的方法是自己训练得到滤波器,可以令滤波器所有值都是未知,使用random得到,然后对图像进行回归,得到最佳的滤波器。这也是卷积神经网络使用的方法。

二.padding

1.为什么要进行padding

边缘上的滤波器只能使用一次,不能完整表达信息,对边缘填充0,可以保证原图像中的边缘信息可以得到充分的利用。另一方面,随着卷积的不断进行,图形会越来越小,使用padding方法可以保证得到相同大小的输出图像。

如上图红色框所示,对原始的6*6图像进行一维的填充,变成8*8,还是使用3*3滤波器,得到输出是6*6.和原始图像尺寸一样。padding是使用0来对图像进行填充。

说到填充,就不得不讨论valid和same卷积。valid卷积就是对图像不进行填充,使用滤波器进行卷积,输出图像就是:n-f+1;比如原图6*6,滤波器3*3,最终输出:6-3+1=4,得到输出为4*4的图像。

至于same卷积,通过对图像进行填充使得可以输出和原图大小一致的图像。经过padding后的输出图像大小就是:n+2p-f+1。为了得到相同大小的输入,令n=n+2p-f+1,得到p=(f-1)/2。

通常情况下,滤波器都使用奇数,通常是3*3,5*5,7*7,当然也有1*1,至于原因,一方面是根据上面得到的式子:p=(f-1)/2,当滤波器为奇数时可以得到对称的填充,否则将要使用非对称填充。

原因二:计算机希望滤波器能有一个中心,比如3*3,就可以得到一个中心。如上图所示。

三.步长

上面已经讲了卷积神经网络的几个重要因素:padding,滤波器大小。步长同样是卷积神经网络的重要因素,前面的例子使用的步长都是1,意味着每次向左或者向下移动1个像素,但实际使用中步长不一定为1。

上图中,原图是7*7图像,使用3*3滤波器,且步长为2,最终输出3*3大小的图像。

引入了步长,那么输出图像尺寸就有了新的公式:

输出图像大小就如上图所示,(n+2p-f)/s+1,其中s表示步长,最终结果向下取整,为什么是向下取整,原因就是,可能会碰到下面这种情况:

最后一个卷积时,不够3*3卷积,此时就要舍弃这6个值。这就是为什么要向下取整。

前面提到的卷积都是直接使用滤波器和原图像进行逐次乘积。但数学意义上的卷积,是需要将滤波器进行水平方向和垂直方向的翻转,再与原图像进行卷积,我们前面所提的卷积其实是数学意义上的自相关。但是,在深度学习中,为了方便,将这种自相关称为图像的卷积。

四.RGB图像卷积

前面的例子都是在二维平面上进行卷积,但是需要熟悉在GRB图像上进行卷积,毕竟实际应用中都是RGB图像。

输入是6*6*3图像,6*6是尺寸,3是RGB通道数,那么针对该卷积,滤波器也必须是3*3*3,他们的通道数必须相等,得到输出4*4。只得到一个二维的数据,这是因为,进行卷积时,三个通道同时卷积,一次卷积共27个像素参与,只得到一个像素的输出。

如上图所示,可以将滤波器看成一个立方体,将整个立方体放入原图像中进行卷积,这里步长是1,就可以得到4*4的输出图像。

如果想得到红色通道的信息和垂直或者水平方向的信息,可以采用如下滤波器。

只希望得到红色通道信息,则G,B层都是0;希望得到RGB水平或者垂直方向的信息,则使用1,0,-1的滤波器。

如果还想得到其他角度的信息,又该如何操作,除了得到水平,垂直外还希望得到其他方向的信息,则必须输出多通道,多通道是通过多个3*3*3的滤波器得到的,如下图:

如上图,使用两个3*3*3的滤波器,得到两个输出4*4,将他们叠加就得到4*4*2的输出,通过这种方法可以得到多种信息的输出。

总结:图像通道数和滤波器通道数必须相同,输出通道数与滤波器的个数有关。输出图像的尺寸和二维的计算公式相同。

五.单层卷积网络

六.卷积网络示例

第一层:输入:39*39*3,滤波器:3*3*3共10个;步长:1,padding为0。输出:(39-3+2*0)/1+1=37;得到:37*37*10;

第二层:输入:37*37*10,滤波器:5*5*10共20个,步长:2,padding=0,输出:(37-5+2*0)/2+1=17,得到:17*17*20;

第三层:输入:17*17*20,滤波器:5*5*20共40个,步长:2,padding=0,输出:(17-5+2*0)/2+1=7,得到:7*7*40

卷积神经网络中一般还会有pooling层和全连接层。后面将会介绍。

七.池化层

1.最大池化层

这里使用滤波器是3*3,步长为1,输出:(5-3+2*0)/1+1=3,所以是3*3。每次在滤波器中选择原图中最大的特征,作为输出。

2.平均池化层

下图是平均池化层,使用频率比最大池化层要少,一般用在深层卷积网络中。

与最大池化层类似,但平均池化是计算每个特征值然后取平均值。

3.池化层的意义

池化层的意义就是用低分辨率的图像代替高分辨率图像,但同时保留重要特征。如下图:

4.总结

池化层和卷积层类似,但是池化层滤波器不需要参数学习。输出大小计算公式和卷积层一样,都是(n-f+2*p)/s+1。池化层的超参数是:f,s。

八.卷积神经网络示例(含池化层)

第0层是输入:32*32*3

第一层:使用滤波器:5*5*3共6个,步长为1,得到输出:28*28*6;之后经过一个最大池化层,池化层滤波器:2*2*6共6个,步长:2,得到输出:14*14*6。

第二层:滤波器:5*5*6共16个,步长:1,得到输出:10*10*16;再经过一个最大池化层,池化层滤波器:2*2*16共16个,步长为2,得到输出,5*5*16.

第三层是全连接层:5*5*16=400,得到输出400*1。

第四层还是全连接层:节点120,得到120维的输出

第五层还是全连接层:节点84个,得到84维输出

第六层,softmax网络,得到手写数字分类,分成10类。

总结:

网络流程:conv->pool->conv->pool->fc->fc->fc->softmax.

注意:将一个卷积层,一个池化层当成一个网络层,原因是,池化层不存在参数,网络中把存在参数的网络层当成一层。

整个网络的参数如上图,激活函数的大小是:图像大小比如输入层:32*32*3=3072;

参数个数是滤波器的大小+bias,再乘以使用滤波器个数,其中每一层滤波器就有一个bias:比如CONV1,滤波器大小5*5(不同层使用的滤波器是一样的),所以参数个数就是:(5*5+1)*8=208。

池化层不存在参数,所以是0

池化层的参数是:这一层的节点数*上一层的节点数+一个bias,比如FC3:120*400+1=48001;FC4:84*120+1=10081。

九.为什么使用卷积神经网络

原因1:参数共享,一个滤波器在整张图片的任何区域都可以使用,如果是全连接网络,会出现参数过大,比如下图:

若使用全连接层,需要参数:3072*4704=14450688个(输入:32*32*3,输出:28*28*6),但是如果使用卷积神经网络,参数个数和滤波器大小有关,这里滤波器是5*5共6个,需要参数:(5*5+1)*6=156个参数。这很大程度上减小了参数运算。

原因2:稀疏连接,意思是说每一层中,输出只和一小块区域的输入有关,如下图:

十.CNN网络的训练

使用梯度下降法更新参数。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
CNN网络是卷积神经网络(Convolutional Neural Network)的简称。它是一种深度学习模型,主要用于图像识别、目标检测和图像分类等计算机视觉任务。CNN网络的物种组成包括卷积层、池化层、全连接层和激活函数等。 首先是卷积层,卷积层是CNN网络的核心组成部分,通过对输入图像进行卷积操作,提取图像的局部特征。卷积层中的卷积核可以看作是一种特征提取器,它们会对图像的不同位置进行特征提取,并生成一个特征图。 其次是池化层,池化层用于对卷积层生成的特征图进行降维和特征保持。常见的池化方式有最大池化和平均池化,它们可以对特征图进行抽样,减小数据的维度,同时保留主要特征信息。 然后是全连接层,全连接层通常位于卷积层和输出层之间,用于将前面层的特征进行整合和处理。全连接层的神经元与前一层的所有神经元相连,它们通过权重和偏置对特征进行加权求和,从而生成最终的输出。 最后是激活函数,激活函数主要用于引入非线性特性,增加网络的表达能力。常见的激活函数包括ReLU、Sigmoid和Tanh等,它们能够对神经元的输出进行非线性变换,从而使网络能够更好地处理复杂的数据。 综上所述,CNN网络的物种组成包括卷积层、池化层、全连接层和激活函数。这些组件相互配合,在图像处理和识别任务中发挥着重要的作用,使CNN网络能够有效地提取和表示图像的特征。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值