卷积过程是对一个通道的图像进行卷积,比如10个卷积核,得到10个feature map, 那么输入图像为RGB三个通道呢,输出就为 30个feature
map吗, 答案肯定不是的, 输出的个数依然是卷积核的个数10,只是输出时对RGB三个通道加和。



1、 一通道多个卷积核卷积过程:

一个卷积核得到的特征提取是不充分的,我们可以添加多个卷积核,比如32个卷积核,可以学习32种特征。在有多个卷积核时,如下图所示:输出就为32个feature
map。






2.多通道的多个卷积核

下图展示了在四个通道上的卷积操作,有两个卷积核,生成两个通道。其中需要注意的是,四个通道上每个通道对应一个卷积核。

先将w2忽略,只看w1,那么在w1的某位置(i,j)处的值,是由四个通道上(i,j)处的卷积结果相加然后再取激活函数值得到的。
 所以最后得到两个feature map, 即输出层的卷积核核个数为 feature map 的个数。





所以,在上图由4个通道卷积得到2个通道的过程中,参数的数目为4×2×2×2个,其中4表示4个通道,第一个2表示生成2个通道,最后的2×2表示卷积核大小。

3.实例

下图是一个3d的RGB效果,每个kernel(filter)可以扫描出一张feature map,多个filter可以叠加出很厚的feature
maps,前一层filter做卷积可以形成后一层的一个像素点







如下图,可以代表i行j列k深度的一个输出像素值,k’代表第k个filter,w代表filter中的值,x代表输入,b是偏值。





4.计算实例



假设有两个卷积核为:与,因此M=2,kernel_h=2,kernel_w=2,K= kernel_h * kernel_w=4。

输入图像矩阵为:
,因此image_h=3,image_w=3,令边界扩展为0即pad_h=0,pad_w=0,滑动步长为1,即stride_h=1,stride_w=1,故N=[(3+2*0-2)/1+1]*[
(3+2*0-2)/1+1]=2*2=4。

A矩阵(M*K)为(一行为一个卷积核),B矩阵(K*N)为(B矩阵的每一列为一个卷积核要卷积的大小)



计算C矩阵:

C=A*B=*=

C中的与分别为两个输出特征图像即feature map。验证了 有几个卷积核就有几个feature map。




说明:




在Caffe源码中,src/caffe/util/math_functions.cu(如果使用CPU则是src/util/math_functions.cpp)中的caffe_gpu_gemm()函数,其中有两个矩阵A(M*K)与矩阵
B(K*N),大家可以通过输出M、K、N的值即相应的矩阵内容来验证上述的原理,代码中的C矩阵与上述的C矩阵不一样,代码中的C矩阵存储的是偏置bias,×是A与B相乘后得到M*N大小的矩阵,然后再跟这个存储偏置的矩阵C相加完成卷积过程。如果是跑Mnist训练网络的话,可以看到第一个卷积层卷积过程中,M=20,K=25,N=24*24=576。

 
(caffe中涉及卷积具体过程的文件主要有:src/caffe/layers/conv_layer.cu、src/caffe/layers/base_conv_layer.cpp、src/caffe/util/math_functions.cu、src/caffe/util/im2col.cu)


参考:

1.多通道(比如RGB三通道)卷积过程


https://blog.csdn.net/u014114990/article/details/51125776

2.【机器学习】彻底搞懂CNN

https://www.cnblogs.com/rucwxb/p/7975504.html
<https://www.cnblogs.com/rucwxb/p/7975504.html>







友情链接
KaDraw流程图
API参考文档
OK工具箱
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:ixiaoyang8@qq.com
QQ群:637538335
关注微信