参考链接:https://chrischoy.github.io/research/making-caffe-layer/
这里简单介绍增加Layer的步骤:
1.在caffe.proto增加对应的LayerParameter message。
2.在./include/caffe/layers/路径下增加对应layer的声明。
3.在./src/caffe/layers/路径下增加对应layer的CPU,GPU实现文件。
4.在./src/caffe/test/路径下增加对应layer的test文件。
最后在Caffe文件夹下make整个项目。没有报错就恭喜啦!
一.需要更改或者创建的文件:
base_file:$(CAFFE_HOME)
- /src/caffe/proto/caffe.proto
- /include/caffe/common_layers.hpp or vision_layers.hpp
- /src/caffe/layer_factory.cpp
- /src/caffe/layers/new_layer.cpp
- /src/caffe/layers/new_layer.cu
- /src/caffe/test/test_new_layer.cpp
file1:caffe.proto
在这个文件当中定义新的层的编号(index),不能和之前的序号重复,定义两个部分(1.定义新的id,2.定义新的层)
file2:layer_factory.cpp
在switch case当中,定义刚刚在caffe.proto文件中声明的两个部分(定义新的id,定义新的层),
file3:在层的头文件当中添加声明:
根据我们定义层的类型,在common_layers.hpp
or vision_layers.hpp这两个文件当中定义声明
virtual void Reshape(const vector<Blob<Dtype>*>& bottom,
vector<Blob<Dtype>*>* top) = 0;
virtual void Forward_cpu(const vector<Blob<Dtype>*>& bottom,
vector<Blob<Dtype>*>* top) = 0;
virtual void Backward_cpu(const vector<Blob<Dtype>*>& top,
const vector<bool>& propagate_down,
vector<Blob<Dtype>*>* bottom) = 0;
file6:Test file
Make a file /src/caffe/test/test_new_layer.cpp
and use provided caffe unit test macros.
EXPECT_NEAR
EXPECT_GE
EXPECT_LE
EXPECT_EQ
到$CAFFE_HOME路径下
make
make test#make test之后,生成了XXX.testbin文件
./build/test/test_new_layer.testbin