Caffe 不同版本之间layer移植方法
本系列文章由 @yhl_leo 出品,转载请注明出处。
文章链接: http://blog.csdn.net/yhl_leo/article/details/52185521
(前两天这篇博客不小心被自己更改删除了,现在重新补上。)
Caffe版本一直在不停更新,新版本往往会包含一些新的layer,如果只想将该layer移植到自己工程的版本中,该怎么做呢?看到网上有关于添加新layer的教程:
- Add a class declaration for your layer to the appropriate one of
common_layers.hpp
,data_layers.hpp
,loss_layers.hpp
,neuron_layers.hpp
, orvision_layers.hpp
. Include an inline implementation oftype
and the*Blobs()
methods to specify blob number requirements. Omit the*_gpu
declarations if you’ll only be implementing CPU code. - Implement your layer in
layers/your_layer.cpp
.-
SetUp
for initialization: reading parameters, allocating buffers, etc. -
Forward_cpu
for the function your layer computes -
Backward_cpu
for its gradient
-
- (Optional) Implement the GPU versions
Forward_gpu
andBackward_gpu
inlayers/your_layer.cu
. - Add your layer to
proto/caffe.proto
, updating the next available ID. Also declare parameters, if needed, in this file. - Make your layer createable by adding it to
layer_factory.cpp
. - Write tests in
test/test_your_layer.cpp
. Usetest/test_gradient_check_util.hpp
to check that your Forward and Backward implementations are in numerical agreement.
但是,这种方法并不一定对移植有用,以CropLayer
为例,按照上述的方法肯定是行不通的,编译的过程中会反复出现关于函数DiagonalAffineMap
的错误。查看版本更新记录:Crop layer for automatically aligning computations,可以发现,原来不只是添加两个文件那么简单的事情,按照版本更新的差异,逐个文件进行更改就可以使用。
因此,对于移植来说,直接搜索版本更新记录,是更加直接和高效的办法。