deeplearning.27卷积神经网络

边缘检测

如下图,左侧是一张图片,右侧分别是垂直边缘检测器和水平边缘检测器。计算机先进行边缘检测。
在这里插入图片描述
如何进行垂直边缘检测,下图所示是一个66 的灰度图像
在这里插入图片描述
然后在使用一个3
3的过滤器,得到一个44的图像。即为了计算第一个元素,44图像左上角的那个元素,使用过滤器将其覆盖着66图像左上角,如下图所示,然后进行元素乘法运算,把9个计算结果累加起来得到44图像的第一个元素。
在这里插入图片描述
为了得到44图像的第二个元素,我们把覆盖的地方右移一格。如下所示,进行同样的操作。
在这里插入图片描述
最后像这样不断操作,把4
4的图像填满。
在这里插入图片描述
所以66矩阵和33矩阵进行卷积运算得到44矩阵。这就是垂直边缘检测器。在tensorflow下,实现该运算使用的函数是tf.nn.conv2d
为什么要做垂直边缘检测,左侧的矩阵代表的实际图片在它的正下方,其中10表示亮度值较高,所以很明亮,显为白色,0表示亮度值很低,显示为灰色。那么在图像中间有一个很明显的垂直边缘,在黑灰之间。
在这里插入图片描述
所以使用过滤器计算时,得到最后的4
4矩阵图像如下所示,我们看到在4*4的图像中有很亮的一块区域,这就是说检测的垂直边缘在中间。
在这里插入图片描述
第一排是上述的例子,假如我们把0和10的位置对调一下,进行同样的操作,就会得到第二排的内容。表明原图像这是由暗向亮过度。
在这里插入图片描述
同样的水平边缘检测中的过滤器就如下图所示。除此之外,还有很多其他的边缘过滤器,里边的数可能不是0、1、-1。
在这里插入图片描述

padding

构建卷积神经网络一个基本的卷积操作就是padding。
前边说过,使用66图像,33过滤器会得到44图像,这里有个规律,使用nn图像,ff过滤器,会得到n-f+1n-f+1的图像。但是当进行操作的时候,会出现原始图像边缘的像素点可能只被卷积计算过一次,原始图像中间的点被卷积计算过很多次,这就有可能造成边缘的一些信息被忽略。为了解决问题,我们可以填充原始图像,比如围绕着66的图像外围在加一层像素变成了88的像素图像。填充的时候,这里的p(padding)值等于1,当继续填充后变为10*10的像素图像时,padding值p为2。
在这里插入图片描述

Valid卷积和Same卷积

valid卷积意味着不进行图像的填充。即类似于66图像经过33过滤器得到4*4图像。
Same卷积是另一种填充的方式,填充后输出图像的大小和输入图像的大小是一样的。使用公式p=(f-1)/2。即当f为奇数的时候,使p值为该值进行填充,能得到输出和输入图像大小一样。

卷积步长

卷积中的步幅也是一个构建卷积神经网络的基本操作。如下所示,我们把步长设为了2,蓝色框每次移动的格子数为2,就会最终得到一个33的图像。注意我们设置步长时,要保证蓝色框的所有移动计算时都能在原始图像的像素点内,而不会出现蓝色框有一部分越出了原始图像边界。
在这里插入图片描述
小结一下,就是输入n
n尺寸图像,f*f的过滤器,填充像素值p,卷积步长s,最后输出的图像尺寸就是(【n+2p-f】/s)+1乘以(【n+2p-f】/s)+1。
在这里插入图片描述

三维(彩色图像)卷积

不单单仅检测灰度图像,现在也想检测RGB彩色图像,如果灰度图像的大小为66,那么这个彩色图像的大小可以是663,这里的3指的是三个颜色通道,可以想象为三个66图像的堆叠。进行卷积时,使用的过滤器也是3个33过滤器的堆叠,最后得到的图像是44的一个图像,不是堆叠了。
在这里插入图片描述
具体操作如下,我们可以把三层过滤器看做一个立方体,那么该立方体的三个面,27个像素点,用第一个面依次乘以红面的像素点,用第二个面乘以绿面的像素点,用第三个面乘以蓝面的像素点,乘每个面之后的结果进行累加,这个数作为输出图像的第一个点。这三个过滤器内的参数可以不同,比如只想检测红色通道的边缘,就可以使一层过滤器为边缘检测的类型,第三层和第二层过滤器里边的值都取0.。

在这里插入图片描述

构建卷积神经网络的卷积层

假设我们有一个图像输入定义为x,然后辨别图片中有没有猫,用0和1来表示,图片的大小是39393.
在这里插入图片描述
nH=nW=39,即高度和宽度都等于39,通道数nC=3。使用过滤器是333的,步长s=1,p值为0,使用十个过滤器。那么神经网络下一层的激活值为373710,10是因为我们用了10个过滤器的后果,那么这一层就是nH=nW=37,nC=10,这是这一层激活值的维度。继续往下还有一层,我们使用了过滤器是5510的,步长s为2,p值为0,20个过滤器,那么这次输出的结果是171720的一个维度,在使用5520的过滤器,步长为2,p值为0,使用40个,最后得到一个维度是7740,这就是达成了为原始图片提取了7740个特征。然后对其进行平滑的展开输出为一个向量,则该向量有1960行,或者1960列。
在这里插入图片描述
一个典型的卷积网络有三层,一个是卷积层,通常用Conv来标注,还有一个是池化层,用POOL标注,最后一个是全连接层,用FC表示。

池化层

假设输入44的图像,使用的池化类型是最大池化,最后输出一个22的图像,实现池化的过程是把原始图像分成4个区域,对于输出的图像,也分为4个区域,输出图像中每个区域的元素是对应原始图像区域的最大元素值。这就像是应用了一个规模f为2的过滤器,步长也设置为了2,这就是最大池化的超级参数。
在这里插入图片描述
以上是二维的池化,如果输入是三维的,那么输出应该也是三维的。同样的在卷积层的公式(【n+2p-f】/s)+1乘以(【n+2p-f】/s)+1计算输出图像的尺寸在这里也适用。比如输入是554,即信道为4,那么输出应该是334,信道也为4。

平均池化

平均池化与最大值池化不同的是,选取的不是每个区域中的最大值,而是平均值。如下所示。
在这里插入图片描述

卷积神经网络示例

假设有一张32323的输入图片,是RGB模式,想做手写数字识别,识别这个图中写的是数字几。第一层使用的过滤器为f=5,s=1,p值=0,过滤器个数为6,那么输出就是28286。这一层标记为Conv1,然后构建一个池化层,参数f=2,s=2,输出变为了14146,该层标记为POOL1。这里因为POOL1池化层没有权重参数,所以把他和卷积层Conv1合起来称为神经网络的第一层为Layer1。然后在继续构建一个卷积层,过滤器f=5,s=1,使用10个过滤器,最后输出101010的图像,这里记做Conv2,然后使用池化层f=2,s=2,输出为5510记做POOL2,这里的Conv2和POOL2记做神经网络的第二层Layer2。将5510的池化层输出平整化变为一个250行的列向量。然后用这个列向量构建下一层全连接层,全连接层FC3是120行的列向量,这250个单元和120个单元紧密相连。全连接层类似于一个单层神经网络,有一个权重参数w和偏差b,然后在添加一个全连接层,有84个单元,标记为FC4,最后用这84个单元填充一个softmax单元,那么这个softmax就会有相对应的输出,输出这张图片上写的是数字几。
在这里插入图片描述
这网络上有很多超参数,尽量不要自己随意设置,可以去查看已经成熟的网络中的数值进行设置。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值