在caffe中添加自定义的layer
2016-12-01 21:44
537 查看
在处理某些问题时,可能会需要自己去定义特定的layer来实现某些特殊功能,现将添加新的caffe layer的具体步骤进行整理,便于以后复习。
[b](一)具体步骤如下:[/b]
1. 修改{caffe_dir}/src/caffe/proto/caffe.proto 文件,在 V1LayerParameter的LayerType enum中添加新的layer的名称及ID(如:MYLAYER 38),并在V1LayerParameter中添加MyLayer的参数说明;在message
LayerParameter中添加MyLayer的参数说明,同时更新 LayerParameter的available ID(如:optional MyLayerParameter my_layer_param = 146);最后添加新Layer的参数说明。
message MyLayerParameter {
optional uint32 para1 = 1; (1 is the ID of para1 in this layerparameter)
optional bool para2 = 2 [default = true];
optional FillerParameter para3 = 3;
optional float para4 = 4;
}
2. 修改{caffe_dir}/src/caffe/util下的upgrade_proto.cpp文件
2.1 在const char* UpgradeV1LayerType(const V1LayerParameter_LayerType type)函数中添加如下代码,使解析prototxt时可以找到新添加的
layer。
case V1LayerParameter_MYLAYER :
return "MyLayer";
2.2 在bool UpgradeV1LayerParameter(const V1LayerParameter& v1_layer_param, LayerParameter* layer_param) 函数的相应位置添加对Mylayer
层参数的处理函数,否则无法解析该层相应的参数。
if (v1_layer_param.has_my_layer_param())
{
layer_param->mutable_my_layer_param()->CopyFrom(
v1_layer_param.my_layer_param());
}
3. 在{caffe_dir}/include/caffe/layers/ 文件夹中增加该layer的类的声明my_layer_layer.h文件。
4. 在{caffe_dir}/src/caffe/layers/目录下新建.cpp和.cu文件,进行类实现。
5. 在{caffe_dir}/src/caffe/test/中增加layer的测试代码,对所写的layer前传和反传进行测试,测试还包括速度。
(二)编译
make all -j8
Note:若报错,则根据相应的错误位置检查语法错误。
make test -j8
make runtest -j8
Note:若报错,则根据相应的错误位置检查逻辑错误。
(补充)
如果不写test文件,为了检验该 Layer 是否能正常创建和执行 forward, backward,也可以利用新建的layer编写deploy.prototxt,然后运行 caffe time 命令并指定刚刚实现的deploy.prototxt:
{caffe_dir}/build/tools/caffe.bin time -model deploy.prototxt
[b](一)具体步骤如下:[/b]
1. 修改{caffe_dir}/src/caffe/proto/caffe.proto 文件,在 V1LayerParameter的LayerType enum中添加新的layer的名称及ID(如:MYLAYER 38),并在V1LayerParameter中添加MyLayer的参数说明;在message
LayerParameter中添加MyLayer的参数说明,同时更新 LayerParameter的available ID(如:optional MyLayerParameter my_layer_param = 146);最后添加新Layer的参数说明。
message MyLayerParameter {
optional uint32 para1 = 1; (1 is the ID of para1 in this layerparameter)
optional bool para2 = 2 [default = true];
optional FillerParameter para3 = 3;
optional float para4 = 4;
}
2. 修改{caffe_dir}/src/caffe/util下的upgrade_proto.cpp文件
2.1 在const char* UpgradeV1LayerType(const V1LayerParameter_LayerType type)函数中添加如下代码,使解析prototxt时可以找到新添加的
layer。
case V1LayerParameter_MYLAYER :
return "MyLayer";
2.2 在bool UpgradeV1LayerParameter(const V1LayerParameter& v1_layer_param, LayerParameter* layer_param) 函数的相应位置添加对Mylayer
层参数的处理函数,否则无法解析该层相应的参数。
if (v1_layer_param.has_my_layer_param())
{
layer_param->mutable_my_layer_param()->CopyFrom(
v1_layer_param.my_layer_param());
}
3. 在{caffe_dir}/include/caffe/layers/ 文件夹中增加该layer的类的声明my_layer_layer.h文件。
4. 在{caffe_dir}/src/caffe/layers/目录下新建.cpp和.cu文件,进行类实现。
5. 在{caffe_dir}/src/caffe/test/中增加layer的测试代码,对所写的layer前传和反传进行测试,测试还包括速度。
(二)编译
make all -j8
Note:若报错,则根据相应的错误位置检查语法错误。
make test -j8
make runtest -j8
Note:若报错,则根据相应的错误位置检查逻辑错误。
(补充)
如果不写test文件,为了检验该 Layer 是否能正常创建和执行 forward, backward,也可以利用新建的layer编写deploy.prototxt,然后运行 caffe time 命令并指定刚刚实现的deploy.prototxt:
{caffe_dir}/build/tools/caffe.bin time -model deploy.prototxt
相关文章推荐
- 【React Native】实现Navigator Back回退
- 轻量级数据格式——JSON
- 搭建Caffe环境
- CSS3 background 属性
- 简单html首页模版(滚动条,滚动图)
- 如何编写EmacsScript
- js中关于scrolltop.offsettop等距离用法的介绍
- 【Caffe】003 caffe.proto源码解析
- 在服务器GPU73上编译安装Caffe
- C#调用地图js接口的问题
- 【Caffe】002 caffe.cpp源码解析
- 递归算法,JavaScript实现
- bootstrap使用经验点滴
- JavaScript贷款计算器
- 常用前端函数
- 移除wordpress前端自带的js和css
- 我的caffe学习之路<第十二天>
- H5中video标签
- js之策略模式
- jquery幻灯片