图像识别中遇到的问题可能有图片特征的纬度过高,1000*1000像素的图片,特征维度是1000*1000*3,如果你要输入3百万的数据量就意味着特征向量的维度高达三百万,也许有1000个隐藏单元,而所有的权值组成的矩阵W[1],如果使用标准的全连接网络,这个矩阵的大小将是1000*3百万,也就是30亿个参数。带来的问题:巨大的内存需求+很容易会过拟合,除非你可以提供非常多的样本数据。为了能处理大图,我们引出卷积运算。

使用边缘检测作为入门,看到卷积是如何运算的

Padding(填充)

卷积过程,图像是n*n,过滤器是f*f,那最后的输出结果是(n-f+1)*(n-f+1),可以发现,图像在越来越小可能会缩小到1*1,为了让你的图像不会在每次边缘检测

图像角落或者边缘的像素点在输出中采用较,相当于丢掉了图像边缘的位置的许多信息

为了解决上述问题,一是输出减小,图像每过一层就会缩小;二是图像边缘信息丢失

解决:在图像边缘填充一层,默认值是0,如果p是填充的数量,当周围填充一层,那么,p=1,因为我们只填充了一个像素点,输出就变成了(n+2p-f+1)*(n+2p-f+1)

至于填充多少像素,通常有两个选择,分别叫做valid卷积,和 same卷积

valid卷积:no padding 不填充

same卷积:意味着填充后,你的输出大小与输入大小是一样的。n+2p-f+1=n 用这个公式求解p,p是填充p个像素点
p=(f-1)/2, 在计算机视觉中,通常,甚至一般都是f是奇数,(奇数维的过滤器)

为什么要奇数维的过滤器:一是可以对称填充图像,二是可以找到中心像素点,便于指出过滤器的位置

卷积步长(strided convolutions)

卷积中的步长是另一个构建卷积神经网络的基本操作

f*f的卷积核,卷积n*n的图像,padding填充是p个像素点,步长是s。

最后的输出是(n+2p-f)/s+1 * (n+2p-f)/s+1 ,如果商不是整数,就向下取整

池化层

除了卷积层,卷积网络也经常使用池化层来缩减模型的大小,提高计算速度,同时提高所提取特征的鲁棒性,我们来看一下。

基于cnn1D输出维度_池化

先举一个池化层的例子,然后我们再讨论池化层的必要性。假如输入是一个4×4矩阵,用到的池化类型是最大池化(max pooling)。执行最大池化的树池是一个2×2矩阵。执行过程非常简单,把4×4的输入拆分成不同的区域,我把这个区域用不同颜色来标记。对于2×2的输出,输出的每个元素都是其对应颜色区域中的最大元素值。

CNN卷积后输出size的计算