CNN卷积核输出特征图大小的计算(长,宽,维度)和权值共享

时间:2024-03-31 15:41:11

概要

CNN在进行卷积操作的时候,可以认为是输入图像(Input)与卷积核(Kernel)的对应加权求和。其中,卷积的时候,又可分为输出图像(Output)比输入图像缩小的卷积(VALID)即常规情况,与卷积后长宽不变的情况(SAME),还有一种情况是FULL模式,这种不经常用。
维度就是图像的通道数,想象一个通道为3的RGB图像,维度=3。也可以把input想象成一个立方体,有长宽高属性,如下图:w和h是input的size,而C2即维度,或通道数。
CNN卷积核输出特征图大小的计算(长,宽,维度)和权值共享

1.VALID

常规的卷积输出图像的size是较输入图像的size有所变小:
CNN卷积核输出特征图大小的计算(长,宽,维度)和权值共享
如上图所示,一个4X4的input,经过3X3的kernel(或filter)卷积,最终输出2X2的output。这种模式的卷积将input的size缩小。

公式:

CNN卷积核输出特征图大小的计算(长,宽,维度)和权值共享

2.SAME

SAME模式输出size等于输入size,这时需要填充:
CNN卷积核输出特征图大小的计算(长,宽,维度)和权值共享
如上图所示,一个6X6的input,padding为1,strides = 1,即将input外围上一圈。经过一个3X3的kernel卷积,输出仍为一个6X6的size。
填充: 一般是往填充位加0。填充的目的是,保持原图大小输出,保证图像边缘信息不丢失。想想,若不填充,那么卷积核在边缘位置进行运算的次数就会少很多,因此,就有可能丢失一些有用的边缘信息。

公式:

CNN卷积核输出特征图大小的计算(长,宽,维度)和权值共享
其中,strides = 1。

3.FULL

这种方式不常用,与valid相反,这种方式是将输入放大的一种操作。
CNN卷积核输出特征图大小的计算(长,宽,维度)和权值共享
如上图所示,输入为2X2的input经过3X3的卷积核卷积,paddings = 2,strides = 1。输出为4X4的output。

公式:

CNN卷积核输出特征图大小的计算(长,宽,维度)和权值共享
其中,strides = 1。

4.维度

输出维度或通道数,output_channels = 卷积核个数

CNN卷积核输出特征图大小的计算(长,宽,维度)和权值共享
其实,就相当于每个卷积核分别对input做卷积,当然就会输出两个output。

5.参数共享

参数共享目的在于减少参数量,提高性能。
例如,输入为55x55x96(长,宽,通道数)的input,自身神经元的个数为55x55x96=290,400。而在卷积过程中,每个神经元又会与filter做运算,假如filter的大小为11X11X3,那么filter的参数将会是11X11X3 = 363,而每个channel还会有一个偏置项(bias),如果忽略掉bias,那么总参数将会达到290,400X363=105,705,600,那将是非常可怕的,这对于参数的调整和传递非常不利,因此卷积神经网络引入权值共享原则,一个特征图上每个神经元对应的363个权值参数被每个神经元共享,这里的共享其实就是指的每个神经元中363个权值参数采用对应相同的权值,权值共享时,只是在每一个filter上的每一个channel中是共享的,这样便只需363*96=34848个权值参数,而加上96个偏置项,也只不过才34944个参数,大大减少了计算量。

参考链接:https://blog.csdn.net/HelloZEX/article/details/81109136#commentBox