windows7下解决caffe check failed registry.count(type) == 1(0 vs. 1) unknown layer type问题

本文介绍了解决在Windows7环境下使用vs2013编译的Caffe静态库时出现的“Check failed: registry.count(type)==1”错误的方法。提供了多种解决方案,包括直接集成Caffe源代码、编译为动态库、手动注册层等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在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 files

namespace 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_##type

FORCE_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源码比较老,后面会更新到最新版本。

GitHubhttps://github.com/fengbingchun/Caffe_Test

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值