深度学习第四课程笔记-第一周卷积神经网络
作者:互联网
第三周参数调试
边缘检测
我们看下下面的图
这个图反应了卷积神经网络的第一步,边缘检测,可以先检测横或者竖的线。
左侧部分为一个图片的灰度图(没有其他色RGB),中间是我们的3*3滤波器,*
号是卷积的标志,右侧也可以看成一个灰度图。注意这里不是矩阵的相乘,在python中使用conv_forward
, 在tensorflow里使用tf.nn.conv2d,
在keras中使用Conv2D
实现
- 来看一个更简单的是如何实现找到垂直边界
这里,左侧灰度图,数字大小代表亮度,卷积过后,在右侧可以看到中间亮,这个亮的区域就把垂直线找了出来,当然这里数据比较小只是6*6,右侧不太能看出来,当数据巨大时候,便很清楚显示了。
更多的边缘检测
- 对于右上,表示上下水平边缘,下图还有不同的滤波器数值,给予不同部位权重,改善鲁棒性,比如
Sobel filter
,Scharr filter
, 甚至在我们图片数量数据巨大时候,我们滤波器的参数也不需要我们自己设定,使用反向传播,交给计算机找到合适的数值,计算机可以帮我们找到垂直,水平,甚至各个角度(45,30,7等等 )的数值。
Padding(填充)
当我们每进行一次卷积后,图片的维数就会变小(n-f+1,n为原图片维数,f为滤波器维数)
,原因是在图片边缘的信息利用率小,会损失图片的许多信息。
- 也就是说目前存在,图片卷积后变小以及图像信息缺失的问题。为了解决这个问题,我们可以在图像卷积之前,填充图片边缘的信息。以上为例
(n:6*6,得到图片4*4)
,我们在6*6
的图片填充一圈(P=1)
变成8*8
,再次卷积后(n-f+1)
变成(6*6)
和原来大小一样。当然如果觉得不够也可以填两圈(P=2)
- 一般来说,填充多少,我们一般分为两种情况Valid convolutions
(不填充,n-f+1)
和 Same convolutions(n+2P-f+1=n,得到p=(f-1)/2) )
一般来说,计算机视觉里面,f为奇数。
Strided convolution (卷积步长)
我们在上图,每次卷积一次后,向后移动一格(Strided=1)
,我们看下图
- 这里选取了步长为2
(Strided =2 )
那么我们得到的维数就变成了((n+2p-f)/s +1 ,(n+2p-f)/s +1 )
,其中若(n+2p-f)/s
整出不是整数,按照惯例我们对其向下取整。
标签:滤波器,填充,第一周,卷积,维数,神经网络,我们,图片 来源: https://blog.csdn.net/Da_haihuang/article/details/110002067