caffe框架可以完成基本的深度学习操作,但为了拓展功能需要自己定义层,或者将别人定义好的层移植进来。
下面以添加双线性插值层(pspnet中自己定义的层)为例说明过程:
1、写头文件 interp_layer.hpp , 放在include/caffe/layers文件夹下;
定义的格式是标准格式,可参考 https://github.com/BVLC/caffe/wiki/Simple-Example:-Sin-Layer,改一下自定义层的名称,定义层中的参数;
2、头文件interp.hpp, 放在include/caffe/util文件夹下;
3、定义层执行的操作 interp_layer.cpp,放在src/caffe/layers/ 路径下;
4、interp.cpp, interp.cu (用于GPU) 放在src/caffe/util/ 路径下;
5、test_interp_layer.cpp放在src/caffe/test/ 路径下
最后重新编译。
make all
make test
之后可以针对性地对新添加的层进行测试,保证无误。
make runtest GTEST_FILTER='InterpLayerTest/*'
其中InterplayerTest的名字是在test_interp_layer.cpp中定义的class的名称。