本人安装的各软件版本:
系统:ubuntu18.04
protobuf: 2.6.1
python: 2.7
torch: 0.4.1
在ubuntu上安装caffe有基于命令的一键安装Caffe | Installation: Ubuntu (berkeleyvision.org),也有基于源码编译的安装Caffe | Installation (berkeleyvision.org)。如果只是学习caffe, 可以深度一键安装,如果需要修改源码,那只能选择从源码编译。因为个人需要将darknet的yolov3模型转换成caffe模型,需要在caffe模型框架中添加一些算子层,所以只能选择源码编译caffe了,这一编就编了将近一周的时间。
编译过程主要参考Ubuntu 16.04上安装Caffe(CPU only)_Linux教程_Linux公社-Linux系统门户网站 (linuxidc.com) 作者写得很详细,按着步骤来应该不会有太大问题。我一开始在网上搜索,搜到的很多,但完全走通的很少。每个人在不同的硬件设备上编译,总会遇到各种各样的问题。
这里说一下我遇到的问题,主要是protobuf相关的,比如 error while loading shared libraries: libprotoc.so.19: cannot open shared object file: No such file or directory. 如下图。这个问题应该是没有找到protoc的库。
再比如undefined reference to 'google::protobuf::.......' 类似的一大堆问题,如下图所示。这个问题真正的原因我也不知道。或者是版本不对,或许是链接库路径不对。
protobuf的问题困扰了我三天,网上查到的原因大概有几个:
1)安装的protobuf版本与caffe所需要的不一致(我也不知道caffe需要哪个版本)。
2)安装了多个版本的protobuf, 编译caffe的时候用的不是正确的版本。
3)protobuf的路径没有配置对。
我的解决方法是(参考https://blog.csdn.net/muyeluo123/article/details/100920848):
1)卸载了以前安装的protobuf,包括用pip安装的
2) 下载老版本的protobuf源码, 我下载的是2.6.1版本
3)进行编译安装:
3.1)解压之后进入文件夹
3.3)bash ./autogen.sh
3.4)./configure prefix=/username/path
** prefix可以将protobuf安装到指定的位置,这里如果指定了路径,要记下来,当然也可以不指定路径,默认路径是/usr/local/bin
3.5)make
3.6) make check
3.7) sudo make install
3.8) sudo ldconfig
4)安装完成后查看相应信息
这样protobuf就安装好了。为了更明确的指定编译caffe时protoc的路径,修改caffe目录下的Makefile文件,将protoc的路径写进去。注意:如果你在上面3.4中指定了protoc的安装路径 ,在Makefile中请修改成你自己的protoc路径。
参考:Ubuntu 16.04上安装Caffe(CPU only)_Linux教程_Linux公社-Linux系统门户网站 (linuxidc.com) 流程进行编译安装。注意在安装依赖时,不要再安装protobuf相关的依赖库了,因为在第三步我们已经从源码安装了protobuf。
sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libhdf5-serial-dev protobuf-compiler
sudo apt-get install --no-install-recommends libboost-all-dev
sudo apt-get install libatlas-base-dev
sudo apt-get install libhdf5-serial-dev
PS:如果顺利,你应该已经编译成功了。但很不幸,我并没有那么顺利,其实我用源码安装了protobuf2.6.1之后,undefined reference to 'google::protobuf::.......'问题还是没有解决。后来不知道在哪篇文章里看到了说在caffe目录下用 “cmake ./ ”命令检查一下,然后我执行了这个命令后,发现Makefile文件被改写掉了,神奇的是make all终于执行成功了。但是make pycaffe却一直编译不过,无奈,我又找回原来的Makefile,修改里面protoc的目录,修改LIBRARIES, 然后make clean, make pycaffe, 这一次竟然成功了。说实话,我也不知道开始到底是什么原因一直编译不通过的,后来又是怎么通过的。我对linux系统不熟悉,如果有哪位大神知道原因,还望不吝赐教。