
正文
windows7下解决caffe check failed registry.count(type) == 1(0 vs. 1) unknown layer type问题
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
在Windows7下调用vs2013生成的Caffe静态库时经常会提示Check failed: registry.count(type) == 1 (0 vs. 1) Unknown layer type的错误,如下图:

这里参考网上资料汇总了几种解决方法:
1. 不使用Caffe的静态库,直接将Caffe的source加入到main工程中;
2. 将Caffe编译成动态库;
3. 使用Caffe静态库,新建一个caffe_layers_registry.hpp头文件,文件中的内容如下(部分代码段,需要将所有的层全部列出来),并且需要将此头文件include到其它文件的上面:
#include "caffe/common.hpp"// may be need to include other head filesnamespace caffe{ extern INSTANTIATE_CLASS(ConvolutionLayer); extern INSTANTIATE_CLASS(PoolingLayer); extern INSTANTIATE_CLASS(ReLULayer); extern INSTANTIATE_CLASS(TanHLayer);// other layer// may be need to REGISTER_LAYER_CREATOR()}
4. 使用Caffe静态库,选中Caffe_Test工程 --> 右键,属性--> 通用属性 --> 引用 --> 添加引用 --> caffe(此caffe工程为caffe静态库工程) --> 项目引用属性 --> 链接库依赖项设置为True,使用库依赖项输入设置为True,如下图:

5. 使用Caffe静态库,在原有src/caffe/net.cpp文件中,添加如下代码段:
#define FORCE_REG(type) \extern LayerRegisterer<float> g_creator_f_##type; \extern LayerRegisterer<double> g_creator_d_##type; \LayerRegisterer<float> *__g_creator_f_##type = &g_creator_f_##type; \LayerRegisterer<double> *__g_creator_d_##type = &g_creator_d_##typeFORCE_REG(TanH);FORCE_REG(Pooling);FORCE_REG(ReLU);FORCE_REG(Sigmoid);FORCE_REG(Softmax);FORCE_REG(Dropout);FORCE_REG(Convolution);FORCE_REG(Deconvolution);FORCE_REG(Concat);FORCE_REG(BNLL);FORCE_REG(Flatten);FORCE_REG(InnerProduct);FORCE_REG(Eltwise);FORCE_REG(Power);FORCE_REG(LRN);FORCE_REG(MemoryData);FORCE_REG(Data);FORCE_REG(Split);FORCE_REG(Reshape);FORCE_REG(Im2col);FORCE_REG(Slice);FORCE_REG(PReLU);FORCE_REG(SoftmaxWithLoss);FORCE_REG(Accuracy);
以上第4种、第5种方法亲自测试过可以正常调用Caffe静态库,但是依赖的Caffe源码比较老,后面会更新到最新版本。
GitHub:https://github.com/fengbingchun/Caffe_Test





