目录
3.2 cross-correlation VS. correlation (深度学习中的卷 vs. 数学中的卷积)
5.1 如何构建卷积神经网络的卷积层?(卷积神经网络在某一次的工作原理)
一.边缘检测
1.1 卷积是如何运算的?
对应位相乘,具体方法见另一博文https://blog.youkuaiyun.com/qq_40243295/article/details/104391755
卷积运算:
python中是conv_forward
TensorFlow中是td.nn.conv2d
kears中是Conv2D
1.2 为什么卷积可以做垂直边缘检测呢?卷积是如何工作的?
如下图所示:
左侧图:代表输入的6x6的灰度图,10表示白色,0表示灰色
中间图:代表卷积核1、0、-1分别表示白、灰、黑(或者可用浅色,中间不考虑,深色像素来表达)
右侧图:右侧图是通过卷积得到的结果,0、10分别代表灰、白;中间的白色就是检测出来的边缘。但是此时由于输入的图片大小是6x6的所以就会显得检测出来的边缘很宽,如果输入的图片是1000x1000的边缘就会很窄。
1.3 如何区分垂直边缘是由深入浅,还是由浅入深的边缘?
水平边缘检测
如果将卷积核的9个元素为以下取值,就分别是sobel核与scharr核:
如果将9个元素当做参数,然后进行反向传播算法,将输入图与卷积核进行得到理想的边缘检测,其目标就是理解这9个参数。相比较于这些单纯水平垂直的卷积核,这样的卷积核可以算出45°,75°,81°甚至是任意角度的边缘。所以通过将9个元素当做参数,通过数据反馈,让神经网络自动的去学习它所需的任何卷积核,并且在整幅图上运用此卷积核,依次检测任何的边缘。
要讨论反向传播我们还需要学习一下内容padding和各种卷积的发展,其是卷积神经网络中卷积模块重要的组成部分
二.padding
2.1 卷积中存在的缺点
已知输入像素(nxn),卷积核大小(f x f),可以得到卷积后的图像像素大小(n-f+1 x n-f+1),如图:
由于卷积过程中的两个缺点的存在:
1.原图每经过依次卷积之后,像素就会缩小,因此卷积很多次之后图像就会变得非常小。
2.角落或边缘的像素点信息容易丢失。例如下图:左上角的像素点只被包括了一次,但是中间的像素点被包括了很多次,那么左上角的像素点的数据卷积后就很容易丢失。
2.2 问题解决
因此,我们需要在给原图卷积之前填充一层像素(用0填充),使卷积之后的图片与原图像素相同。
例如原图为6x6,卷积核是3x3,则可以将原图扩充为8x8的(扩充后大小=n-f+1,其中n为原图大小,f为卷积核大小),因此输出还是6x6的图(8-3+1=6)
另外一种表示:将边缘用p表示(扩充了一层此时p=1)。但是计算时,扩充一层就是上下共两行(就是2p),所以表达式是n+2p-f-1 x n+2p-f-1,这就是卷积之后输出的大小,解决了卷积之后图像缩小的问题。
由n=n+2p-1解出p,
p=(f-1)/2
f是卷积层的大小(通常为奇数),n是原图的大小。
6x6的原图中左上角的像素点,扩充后进行卷积,也可以影响好几个框,所以保留了像素点的值,解决了边缘信息易丢失的问题。
2.3 两个参数的含义
三.步长strided
卷积中的步长是构建卷积神经网络的基本操作。
3.1 输入和输出的维度
其是由以下公式决定:
参数:
原图式:n x n
卷积核: f x f
padding: p
stride :s 此处s=2
输出图像像素表达式:[(n