caffe学习:卷积计算
2018-01-11 17:00
1016 查看
在caffe中如何计算卷积的?
caffe中, 卷积网络的前向传播过程需要计算类似W∗x+B这样的连接, forward_cpu_gemm()函数用weight矩阵和输入的bottom相乘, 然后对bias进行处理, bias程序会根据情况决定是否对bias进行scale(放大/缩小).
另外可以参考知乎问题:在 Caffe 中如何计算卷积?
我们知道, caffe中的卷积运算采用的是矩阵计算, 那么caffe是如何构造卷积矩阵的.
我们可以参考下图:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202010/13/69d2cc03f86957633f6ca082628a4be3)
具体的论文参考:High Performance Convolutional Neural Networks for Document Processing
由图可知, 传统的卷积方式与矩阵计算方式的卷积运算的区别, 后者通过预先转换, 得到输入数据与卷积核的矩阵形式, 然后进行一次矩阵运算就能得到多个卷积核的特征图.
我们假设
输入数据input_features:W∗H∗D, 其中D是数据深度, W∗H是数据大小
卷积核conv_filter:Kw∗KH∗D∗M, 其中K∗K是核大小, D是核深度, M是核数量
卷积超参数:stride是卷积步长, SW表示宽度方向的步长, SH表示高度方向的步长.
卷积超参数:pad是卷积填充操作, padW代表宽度方向上的填充,长度 padH代表高度方向上的填充长度.
第一步, 先将input_features按照配置的卷积方式来转换成矩阵, 也就是图中input_features->input_features(Matrix)的过程.那么新的input_features(Matrix):
inputfeatures(Matrix)=ofs×(KW∗KH∗D)
input_features(Matrix)是一个二维矩阵, 其中ofs代表的是output_features_size, ofs由输入数据的大小W∗H和卷积核大小KW∗KH共同确定.
ofs=[W−KW+2∗padWSW+1]×[H−KH+2∗padHSH+1]
第二步, 将卷积核转换成矩阵形式, 由conv_filters KW∗KH∗∗D∗M四维转换成conv_filters(Matrix) (KW∗KH∗D)∗M二维格式.
第三步, 进行矩阵运算
outputfeatures(Matrix)=input_features(Matrix)×conv_features(Matrix)={ofs∗(KW∗KH∗D)}×{(KW∗KH∗D)∗M}=ofs×M=(W−KW+2∗padWSW+1)×(H−kH+2padHSH+1)
最后将output_features(Matrix)转换成output_features
output_features(Matrix)→outputfeatures=(W−KW+2∗padWSW+1)∗(H−kH+2padHSH+1)∗M
caffe中, 卷积网络的前向传播过程需要计算类似W∗x+B这样的连接, forward_cpu_gemm()函数用weight矩阵和输入的bottom相乘, 然后对bias进行处理, bias程序会根据情况决定是否对bias进行scale(放大/缩小).
另外可以参考知乎问题:在 Caffe 中如何计算卷积?
我们知道, caffe中的卷积运算采用的是矩阵计算, 那么caffe是如何构造卷积矩阵的.
我们可以参考下图:
具体的论文参考:High Performance Convolutional Neural Networks for Document Processing
由图可知, 传统的卷积方式与矩阵计算方式的卷积运算的区别, 后者通过预先转换, 得到输入数据与卷积核的矩阵形式, 然后进行一次矩阵运算就能得到多个卷积核的特征图.
我们假设
输入数据input_features:W∗H∗D, 其中D是数据深度, W∗H是数据大小
卷积核conv_filter:Kw∗KH∗D∗M, 其中K∗K是核大小, D是核深度, M是核数量
卷积超参数:stride是卷积步长, SW表示宽度方向的步长, SH表示高度方向的步长.
卷积超参数:pad是卷积填充操作, padW代表宽度方向上的填充,长度 padH代表高度方向上的填充长度.
第一步, 先将input_features按照配置的卷积方式来转换成矩阵, 也就是图中input_features->input_features(Matrix)的过程.那么新的input_features(Matrix):
inputfeatures(Matrix)=ofs×(KW∗KH∗D)
input_features(Matrix)是一个二维矩阵, 其中ofs代表的是output_features_size, ofs由输入数据的大小W∗H和卷积核大小KW∗KH共同确定.
ofs=[W−KW+2∗padWSW+1]×[H−KH+2∗padHSH+1]
第二步, 将卷积核转换成矩阵形式, 由conv_filters KW∗KH∗∗D∗M四维转换成conv_filters(Matrix) (KW∗KH∗D)∗M二维格式.
第三步, 进行矩阵运算
outputfeatures(Matrix)=input_features(Matrix)×conv_features(Matrix)={ofs∗(KW∗KH∗D)}×{(KW∗KH∗D)∗M}=ofs×M=(W−KW+2∗padWSW+1)×(H−kH+2padHSH+1)
最后将output_features(Matrix)转换成output_features
output_features(Matrix)→outputfeatures=(W−KW+2∗padWSW+1)∗(H−kH+2padHSH+1)∗M
相关文章推荐
- caffe中RGB图像三通道卷积过程学习推导
- caffe中卷积计算方法
- MXNet动手学深度学习笔记:卷积计算
- cnn学习之卷积或者池化后输出的map的size计算
- caffe中CNN卷积计算量估算
- cnn学习之卷积或者池化后输出的map的size计算
- caffe学习笔记33-关于1*1卷积核理解
- 在 Caffe 中如何计算卷积后的尺寸
- 关于caffe中的blob结构及卷积计算汇总
- caffe学习笔记2:计算图像数据集的均值
- 深度学习图片卷积输出大小计算公式
- caffe学习:图片数据的均值计算
- Caffe深度学习计算框架
- caffe中的卷积的计算细节和1x1卷积作用
- Caffe学习(9)——计算图片数据的均值
- caffe源码深入学习6:超级详细的im2col绘图解析,分析caffe卷积操作的底层实现
- caffe学习笔记12-建立自己的数据集与均值计算
- caffe 学习系列:计算图片的均值以及转化npy格式
- caffe学习笔记-数据库制作及计算均值文件命令格式(windows版)
- caffe中不同层的含义和卷积的计算方式