当前位置 : 主页 > 大数据 > 区块链 >

Check failed: registry.count(type) == 0 (1 vs. 0) Layer type Convolution already registered

来源:互联网 收集:自由互联 发布时间:2021-06-22
在复现别人caffe程序的时候遇到了这么一个奇怪的问题,跟网上一个问题有点像: Check failed: registry.count(type) == 1 (0 vs. 1) Unknow layer type ,但是却是完全不同的两个问题。 我这个问题的

在复现别人caffe程序的时候遇到了这么一个奇怪的问题,跟网上一个问题有点像:Check failed: registry.count(type) == 1 (0 vs. 1) Unknow layer type,但是却是完全不同的两个问题。

我这个问题的原因是由于系统protobuf和python的protobuf版本不一致导致的,因为按照caffe官方给出的Ubuntu依赖库安装方式,系统protobuf是通过安装的:

sudo apt-get install libprotobuf-dev libleveldb-dev

如果protoc --version查看版本的话,应该是2.6.1。

但是python的protobuf是通过pip install -r requirements.txt安装的,里面protobuf>=2.5.0,这样会默认安装3.x.x版本的protobuf。这样就导致了protobuf版本的不一致,在某些caffe程序中就会出现题中的问题。

解决方案很简单:(1)升级系统protobuf。(2)通过如下代码降级python中的protobuf。

pip uninstall protobuf pip install protobuf==2.6.1

(3)采用python的虚拟环境。(4)docker。

我采用了第(2)中方式,因为对我来说最简单快捷,这个解决方法因人而异。比如(2)可能会导致tensorflow1.8.0不能用的问题,因为tensorflow1.8.0要求protobuf>=3.4.0。

网友评论