1 写好要添加的层的hpp cpp cu文件,cu文件非必需,看是否需要cuda加速
2 hpp文件放在include/caffe/layers文件夹下
3 cpp和cu放在src/caffe/layers文件夹下
4根据添加的层是否包含参数,更改caffe/src/proto下的caffe.proto
需要添加参数,则找到
// LayerParameter next available layer-specific ID: 152 (last added: box_annotator_ohem_param)
message LayerParameter {
optional string name = 1; // the layer name
optional string type = 2; // the layer type
repeated string bottom = 3; // the name of each bottom blob
repeated string top = 4; // the name of each top blob
// LayerParameter next available layer-specific ID: 152 (last added: box_annotator_ohem_param)
这一句表示下一个新添加的参数的ID应该从152开始,避免与之前的ID重复。
自己在下面添加新的层需要的参数就可以了
optional NEWLAYERParameter NWELAYER_param = 152
然后再在message AllPassParameter { }
中指定具体的该层的参数名称及default值
如果新加的层不含参数,如relu层,则不需要改proto文件
5 编译(important)
这里用的microsoft版本的caffe,使用vs2013编译,和cmake编译的不一样,也是出错的根本原因
按要求在文件夹中添加了三个文件以后,再编译vs顺利通过,但是再调用新层的时候还是报错
Check failed: registry.count(type) == 1 (0 vs. 1) Unknown layer type:
还是找不到该层
原因是在vs编译时,没有将新加的三个文件添加到工程中
打开libcaffe的小三角,看到cu/layers下面有一排的cu文件,里面没有你新加的那个层的对应文件的话,需要手动添加进来,两种方法,直接copy或者右键添加
同理还有include/layers和src/layers 分别添加hpp和cpp文件
再次编译,成功,训练中调用新层,成功