版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lkj345/article/details/80739114
在复现别人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。