卷积神经网络(Convolutional Neural Network),是当前计算机视觉领域的核心技术。
卷积神经网络相较于深度神经网络,其主要区别就在于卷积层和池化层。它们使得神经网络具备更强的学习能力。
Convolutional neural network卷积的计算类似于加权运算。在图像处理中,针对图像的像素矩阵,卷积操作就是用一个卷积核(过滤器)来逐行逐列的扫描像素矩阵,并与像素矩阵做元素相乘,以此得到新的像素矩阵。这个输出的像素矩阵能够较大程度的提取原始像素矩阵的图像特征。假设原始输入像素矩阵的 shape 为 nxn,滤波器的 shape 为 fxf,那么输出像素矩阵的 shape 为 (n-f+1)x(n-f+1) 。
我们也需要注意两个问题:第一个就是滤波器移动的步幅问题,这里就涉及到卷积过程中的 stride 问题。第二个问题涉及到卷积操作的两个缺点,第一个缺点在于每次做卷积,你的图像就会变小,可能做了几次卷积之后,你的图像就变成 1x1,这就不好办了。第二个缺点在于原始输入像素矩阵的边缘和角落的像素点只能被滤波器扫到一次,而靠近像素中心点的像素点则会被多次扫到进行卷积。这就使得边缘和角落里的像素特征提取不足,这就涉及到卷积过程中的 padding 问题。
我们用一个3*3 的滤波器去对原始像素为5*5的图像进行卷积操作,设定卷积步长为1,计算过程为:
1*1+1*0+1*1+0*0+1*1+1*0+0*1+0*0+1*1=4
Convolutional neural network针对第二个问题,卷积神经网络采用一种叫做 padding 的操作,即对原始像素边缘和角落进行零填充,以期能够在卷积过程中充分利用边缘和角落的像素特征。至于填充多少 0 像素值,一般有两个选择,一是 valid 填充,也就是不填充。第二种,same 填充方法。即填充后,输入和输出大小是一致的,对于nxn大小的输入像素,如果你用填充了 p 个像素点之后,n 就变成了 n+2p,最后输出像素的 shape 计算公式就变成了 ((n+2p-f)/s+1)x((n+2p-f)/s+1),要想让 n+2p-f+1=n 的话,输入输出大小相等,则 p=(f-1)/2。所以,一般而言,滤波器的大小 f 都会选择为奇数个。
网友评论