卷积神经网络输入层由input(输入层) --->conv(卷积层)-->RELU(**函数)-->POOL(池化层)-->FC(全连接层)
卷积层:特征提取
对于单通道图像,如果利用10个卷积核进行卷积计算,可以得到10个特征图;如果输入为多通道(如RGB)图像,则输出特征图的个数仍然是10个。如下图1所示为单通道卷积计算过程。
只用一个卷积核得到的特征提取是不充分的,可以添加多个卷积核,如10个,32个,这样可以学习到更多的特征(10种,32种)。
图1 单通道多个卷积层计算
图片一般目前都用RGB三通道D=3,为了通用性,通道数用D表示;
卷积核:卷积核大小为K*K,由于处理的图片是D通道的,因此卷积核其实也就是K*K*D大小的,因此,对于RGB三通道图像,在指定kernel_size的前提下,真正的卷积核大小是kernel_size*kernel_size*3。
对于三通道图像的各通道而言,是在每个通道上分别执行二维卷积,然后将三个通道加起来,得到该位置的二维卷积输出。
对于RGB三通道图像而言,就是在R,G,B三个通道上分别使用对应的每个通道上的kernel_size*kernel_size大小的核去卷积每个通道上的W*H的图像,最后将三个通道卷积得到的输出相加,得到二维卷积输出结果。
因此,若有M个卷积核,可得到M个二维卷积输出结果,在有padding的情况下,能保持输出图片大小和原来的一样,因此是output(W,H,M)。W是输入图像的宽,H是输入图像的高。如下图2所示的为RGB三通道对赢的多核卷积计算。
图2 多通道多核卷积计算
通常会使用多层卷积层来得到更深层次的特征图。如下:
关于卷积的过程图解如下:
如上图,完成卷积,得到一个3*3*1的特征图;在这里还要注意一点,即zero pad项,即为图像加上一个边界,边界元素均为0.(对原输入无影响)一般有
F=3 => zero pad with 1
F=5 => zero pad with 2
F=7=> zero pad with 3,边界宽度是一个经验值,加上zero pad这一项是为了使输入图像和卷积后的特征图具有相同的维度,如:
输入为5*5*3,filter为3*3*3,在zero pad 为1,则加上zero pad后的输入图像为7*7*3,则卷积后的特征图大小为5*5*1((7-3)/1+1),与输入图像一样;
而关于特征图的大小计算方法具体如下:
卷积层还有一个特性就是“权值共享”原则。如下图:
如没有这个原则,则特征图由10个32*32*1的特征图组成,即每个特征图上有1024个神经元,每个神经元对应输入图像上一块5*5*3的区域,即一个神经元和输入图像的这块区域有75个连接,即75个权值参数,则共有75*1024*10=768000个权值参数,这是非常复杂的,因此卷积神经网络引入“权值”共享原则,即一个特征图上每个神经元对应的75个权值参数被每个神经元共享,这样则只需75*10=750个权值参数,而每个特征图的阈值也共享,即需要10个阈值,则总共需要750+10=760个参数。
权值共享就是说,给一张输入图片,用一个filter去扫这张图,filter里面的数就叫权重,这张图每个位置就是被同样的filter扫的,所以权重是一样的,也就是共享。
以上部分内容摘抄自博客https://blog.csdn.net/yjl9122/article/details/70198357,讲的很好。