caffe im2col 详解

caffe im2col详解
本文讲解的是caffe中卷积过程,众所周知caffe中卷积采用的是im2col和sgemm的方式。网上已经有很多的im2col的讲解。原本不打算写这篇文章(在此不得不吐槽下,网上有不少的讲解caffe im2col的过程的文章多是错的。一些文章和caffe的具体实现对不上,真不知道他们到底有没有看caffe代码的具体实现,正是因为那些文章,浪费了不少时间。)
本文举例讲解caffe中im2col 和 sgemm的具体过程。在此之前先说明下:caffe中的数据是行优先(row-major)存储的。
一:im2col
一个图像 input_num=1;
图像通道 input_channel=1;
图像高 input_h=4;
图像宽 input_w=4;
kernel高 kernel_h=3;
kernel宽 kernel_w=3;
stride=1;pad=0;
卷积后,输出图像的计算公式:
output_h=(input_h-kernel_h)/stride+1;
output_w=(input_w-kernel_w)/stride+1;

如下图,(注:图像中数据不代表图像的颜色数值)
原图(图a)按照从左到右、从上到下的过程,将(a)中大小为3*3(因为kernel大小为3*3)的矩阵拉成右图(图b)中的一列。具体过程如下图所示:

二:多通道的im2col
假设有三个通道(R、G、B)图像通道 input_channel=3;
图像在内存中的存储是:首先是连续存储第一通道的数据,然后再存储第二通道的数据,最后存储第三通道的数据。如下图:
多通道的im2col的过程,是首先im2col第一通道,然后在im2col第二通道,最后im2col第三通道。各通道im2col的数据在内存中也是连续存储的。如下图:
三:kernel
图像的每个通道对应一个kernel通道,如下图(注:为计算简单,将kernel的值设置为1,同样此值不代表颜色数值。)
kernel的通道数据在内存中也是连续存储的。所以上面的kernel图像也可以表示为下图:
三:矩阵乘 sgemm
在caffe中图像与kernel的矩阵乘,是kernel*img。即:在矩阵乘法中
M=1 ,
N=output_h * output_w
K=input_channels * kernel_h * kernel_w

如下图所示:
图像数据是连续存储,因此输出图像也可以如下图所示【output_h * output_w】=【2*2】:

四:多通道图像输出
在caffe中图像与kernel的矩阵乘中:
M=output_channels ,
N=output_h * output_w
K=input_channels * kernel_h * kernel_w

如下图:
同样,多个输出通道图像的数据是连续存储,因此输出图像也可以如下图所示【output_channels*output_h * output_w】=【3*2*2】,

(完)
  • 104
    点赞
  • 175
    收藏
    觉得还不错? 一键收藏
  • 23
    评论
Caffe是一个用于深度学习的开源框架,其配置文件包含了网络模型、数据输入输出等相关信息,下面是关于Caffe配置文件的详解Caffe配置文件主要包括两类:网络模型配置文件和Solver配置文件。 1. 网络模型配置文件 网络模型配置文件通常包括以下几个部分: (1)name:指定模型的名称。 (2)input:指定输入数据的属性,包括数据维度、数据类型等。 (3)layer:描述网络层的信息,包括层的名称、类型、输入输出数据的维度等。 (4)loss:指定损失函数的类型。 (5)accuracy:指定模型评估指标的类型。 下面是一个典型的网络模型配置文件的例子: ``` name: "MyNet" input: "data" input_dim: 1 input_dim: 3 input_dim: 224 input_dim: 224 input_dim: 3 layer { name: "conv1" type: "Convolution" bottom: "data" top: "conv1" convolution_param { num_output: 96 kernel_size: 11 stride: 4 weight_filler { type: "xavier" } bias_filler { type: "constant" value: 0 } } } loss { name: "loss" type: "SoftmaxWithLoss" bottom: "fc8" bottom: "label" } accuracy { name: "accuracy" type: "Accuracy" bottom: "fc8" bottom: "label" top: "accuracy" } ``` 2. Solver配置文件 Solver配置文件用于定义训练网络的参数和超参数,包括以下几个部分: (1)net:指定训练使用的网络模型配置文件。 (2)test_iter:指定测试时使用的迭代次数。 (3)test_interval:指定每隔多少次迭代进行一次测试。 (4)base_lr:指定初始学习率。 (5)lr_policy:指定学习率的调整策略。 (6)momentum:指定动量参数。 (7)weight_decay:指定权重衰减参数。 下面是一个典型的Solver配置文件的例子: ``` net: "MyNet.prototxt" test_iter: 100 test_interval: 500 base_lr: 0.01 lr_policy: "step" gamma: 0.1 stepsize: 100000 momentum: 0.9 weight_decay: 0.0005 ``` 以上是关于Caffe配置文件的详解,希望能对你有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 23
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值