cuda10+cudnn7.5条件下 caffe 安装教程以及填坑,hdf5,hdf5_hl问题,opencv问题,依赖包安装(详细教程)以及caffe移植出现的问题

 

首先笔者由于之前用的是tensorflow,keras,pytorch框架所以我装好了cuda10以及cudnn7.5当然所有gpu的环境也配置好了就差单独装caffe了。以下安装调试都需要进行caffe的编译调试,通过在caffe的安装目录下使用make all -j8指令来进行,再次编译的时候建议使用指令make clean来清楚上次编译环境先,然后再次编译(对于新手而言)

首先下载最实用的caffe

hyw@hyw-W560-G30:~$ git clone https://github.com/BVLC/caffe.git

安装依赖包

依次执行以下命令:

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 libopenblas-dev liblapack-dev libatlas-base-dev
sudo apt-get install libgflags-dev libgoogle-glog-dev liblmdb-dev
sudo apt-get install git cmake build-essential

其次创建自己的Makefile.config

hyw@hyw-W560-G30:~/caffe$ sudo cp Makefile.config.example Makefile.config

一定要用cp Makefile.config.example Makefile.config指令来复制别人的(之前试过直接重命名复制粘贴,一直报错找不到makefile)所以这个最好还是用命令来解决。

然后修改Makefile.config中必要地选项

USE_CUDNN := 1  #使用GPU
WITH_PYTHON_LAYER := 1   #创建caffe的python接口

尝试编译caffe

hyw@hyw-W560-G30:~/caffe$ make all -j8

开始编译的时候出了hdf5_hl没有找到的问题,

CXX src/caffe/solver.cpp
In file included from src/caffe/solver.cpp:9:0:
./include/caffe/util/hdf5.hpp:6:18: fatal error: hdf5.h: 没有那个文件或目录
compilation terminated.
Makefile:581: recipe for target '.build_release/src/caffe/solver.o' failed
make: *** [.build_release/src/caffe/solver.o] Error 1

参考 Faster R-cnn 或Caffe hdf5库目录找不到解决办法按照这个做。

解决方法 在Makefile.config文件的第85行,添加 /usr/include/hdf5/serial/ 到 INCLUDE_DIRS,也就是把下面第一行代码改为第二行代码。

INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include 
INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /usr/include/hdf5/serial/ 

在Makefile文件的第173行,把 hdf5_hl 和hdf5修改为hdf5_serial_hl 和 hdf5_serial,也就是把下面第一行代码改为第二行代码。

LIBRARIES += glog gflags protobuf boost_system boost_filesystem m hdf5_hl hdf5
LIBRARIES += glog gflags protobuf boost_system boost_filesystem m hdf5_serial_hl hdf5_serial

如果这步之后你继续编译caffe报了相同的错误那说明你没有安装H5PY要是没有出相同的错误说明你之前已经安装了。(ps:这两步是一定要的,虽然报错但也必不可少)

参考问题报错发现没有这个目录/usr/include/hdf5/serial/

安装HDF5

        首先然后按照教程,我安装的是HDF5 1.10.5 的版本,并没有出现这位博主显示的错误,我的具体安装步骤和这个一样

        具体步骤如下:

       1,官网下载  HDF5 1.10.5   https://support.hdfgroup.org/ftp/HDF5/releases/      或者可以从我的资源中下载

       2,解压缩包,tar -xvf hdf5-1.8.3.tar.gz 我我都是在/home下操作的,这个不用担心因为安装路径,安装时可以自定义选择的

       3,到解压文件hdf5-1.10.5下,依次执行以下4条命令

./configure --prefix=/usr/local/hdf5
make
make check   
make install

    依然出现了找不到hdf5_hl的问题 ,/usr/bin/ld: 找不到 -lhdf5_hl 以及/usr/bin/ld: 找不到 -lhdf5

    查看教程,只需要进行以下操作,具体操作如下:

            第一步,到x86_64-linux-gnu目录下

hyw@hyw-W560-G30:/usr/lib/x86_64-linux-gnu

            第二步,找到从文件中下列文件,这个具体要看你装的版本号数字(不一定和我的一样,但是前缀是一样的)
           找文件可以通过这个指令 ls libhdf5*.so.*

libhdf5_serial.so.100 #有些可能是libhdf5_serial.so.7 或者10,这个具体看你的文件是什么

libhdf5_serial_hl.so.100

            第三步:在当前目录下根据你的文件具体名字建两个软链接,只需要这两步骤

sudo ln -s libhdf5_serial.so.100 libhdf5.so   # libhdf5_serial.so.100是我的文件名,后名是需要间的连接文件名,后面这个名字一定要是这个,下同
sudo ln -s libhdf5_serial_hl.so.100 libhdf5_hl.so

         继续编译caffe 发现hdf5的问题解决了,但是出现了opencv的问题 。

安装opencv

由于我用的是伯克利的caffe所以还是用opencv 3的版本来解决版本匹配的问题,至于opencv4我在anaconda3+cuda10+cudnn7.5中用的是这个。详细的安装不需要官网下载,直接命令安装,不需要官网下载安装包,不需要官网下载安装包,不需要官网下载安装包!!!

通过以下命令安装

hyw@hyw-W560-G30:~$ sudo apt-get install libopencv-dev python-opencv

然后用这个命令检查是否安装好了

pkg-config --modversion opencv

hyw@hyw-W560-G30:~$ pkg-config --modversion opencv
3.2.0

安装好了之后可以尝试直接编译caffe

cd ~/caffe
make all -j8

到此为之不会出现任何问题,但并不是可以直接使用caffe,请继续看下列教程

加入caffe到环境中

把caffe 的路径path加入到环境变量里面,具体操作如下

第一步:打开环境:

hyw@hyw-W560-G30:~$ gedit ~/.bashrc

 第二步:在最后一行加入以下命令

export PYTHONPATH=/home/hyw/caffe/python:$PYTHONPATH  #前面的是你安装caffe的路径

 第三步:立即生效更改的环境

hyw@hyw-W560-G30:~$ source ~/.bashrc

 然后尝试一下import caffe,还是报错

hyw@hyw-W560-G30:~$ source ~/.bashrc
hyw@hyw-W560-G30:~$ cd caffe
hyw@hyw-W560-G30:~/caffe$ python
Python 2.7.15rc1 (default, Nov 12 2018, 14:31:15) 
[GCC 7.3.0] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import caffe
Traceback (most recent call last):
  File "", line 1, in 
  File "/home/hyw/caffe/python/caffe/__init__.py", line 1, in 
    from .pycaffe import Net, SGDSolver, NesterovSolver, AdaGradSolver, RMSPropSolver, AdaDeltaSolver, AdamSolver, NCCL, Timer
  File "/home/hyw/caffe/python/caffe/pycaffe.py", line 13, in 
    from ._caffe import Net, SGDSolver, NesterovSolver, AdaGradSolver, \
ImportError: No module named _caffe
>>> exit()

这个时候就需要编译pycaffe了。

cd 到caffe的安装目录里面

执行命令

make pycaffe

花的时间可能会比较多,但是没有报错。

然后继续使用python 加载caffe

还是出现了一些问题,都很好解决

问题1

hyw@hyw-W560-G30:~/caffe$ python
Python 2.7.15rc1 (default, Nov 12 2018, 14:31:15) 
[GCC 7.3.0] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import caffe
Traceback (most recent call last):
  File "", line 1, in 
  File "/home/hyw/caffe/python/caffe/__init__.py", line 1, in 
    from .pycaffe import Net, SGDSolver, NesterovSolver, AdaGradSolver, RMSPropSolver, AdaDeltaSolver, AdamSolver, NCCL, Timer
  File "/home/hyw/caffe/python/caffe/pycaffe.py", line 15, in 
    import caffe.io
  File "/home/hyw/caffe/python/caffe/io.py", line 2, in 
    import skimage.io
ImportError: No module named skimage.io

解决方法,安装python-skimage

hyw@hyw-W560-G30:~/caffe$ sudo apt-get install python-skimage

问题2

hyw@hyw-W560-G30:~/caffe$ python
Python 2.7.15rc1 (default, Nov 12 2018, 14:31:15) 
[GCC 7.3.0] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import caffe
Traceback (most recent call last):
  File "", line 1, in 
  File "/home/hyw/caffe/python/caffe/__init__.py", line 1, in 
    from .pycaffe import Net, SGDSolver, NesterovSolver, AdaGradSolver, RMSPropSolver, AdaDeltaSolver, AdamSolver, NCCL, Timer
  File "/home/hyw/caffe/python/caffe/pycaffe.py", line 15, in 
    import caffe.io
  File "/home/hyw/caffe/python/caffe/io.py", line 8, in 
    from caffe.proto import caffe_pb2
  File "/home/hyw/caffe/python/caffe/proto/caffe_pb2.py", line 6, in 
    from google.protobuf.internal import enum_type_wrapper
ImportError: No module named google.protobuf.internal

解决方法,安装python-protobuf

hyw@hyw-W560-G30:~/caffe$ sudo apt-get install python-protobuf 

然后你就可以愉快的使用caffe了

hyw@hyw-W560-G30:~/caffe$ python
Python 2.7.15rc1 (default, Nov 12 2018, 14:31:15) 
[GCC 7.3.0] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import caffe
>>> 

总结:其实安装整个caffe框架在你已经安装好cuda和cudnn的情况下是很好装的,我大概花了两天,其中大部分时间是用来编译调试caffe的,还有各种库比如opencv,那种网站下载压缩包的做法然后解压安装,各种make编译,其中还出了问题,具体问题看了某些人的博客贴了教程还有补丁,卵用没有依然报错,这里就不一一指明了。所以如何从海量的资料中找到最简单,适用,有效的资料是一件很难的事情,希望这篇博客能帮到你们。喜欢请点个赞哦~

 caffe移植

由于在做些实现的时候往往用到人家的caffe在编译人家的caffe往往会遇到各种各样的问题,总而言之都是环境不匹配导致,接下来纯属个人笔记

问题1,cv 出现错误:对‘cv::imread(cv::String const&, int)’未定义的引用

.build_release/lib/libcaffe.so:对‘cv::imread(cv::String const&, int)’未定义的引用
.build_release/lib/libcaffe.so:对‘cv::imencode(cv::String const&, cv::_InputArray const&, std::vector >&, std::vector > const&)’未定义的引用
.build_release/lib/libcaffe.so:对‘cv::imdecode(cv::_InputArray const&, int)’未定义的引用
collect2: error: ld returned 1 exit status
Makefile:626: recipe for target '.build_release/tools/upgrade_net_proto_binary.bin' failed
make: *** [.build_release/tools/upgrade_net_proto_binary.bin] Error 1
make: *** 正在等待未完成的任务....

解决方法,如果你安装了opencv3 (没安装的上面有方法)还是有这个问题,从Makefile.config中打开

 OPENCV_VERSION := 3选项,然后重新编译。如果还有问题可以留言

问题2,error: no matching function for call to 'make_pair(int&, Quest*)'

 error: no matching function for call to ‘make_pair(const float&, float)’
         cpu_beams_.push_back(make_pair(partial_sum[src], ix + end_of_sequence_));
                              ~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from /usr/include/c++/7/bits/stl_algobase.h:64:0,
                 from /usr/include/c++/7/vector:60,
                 from src/caffe/layers/beam_search_node_layer.cpp:1:

解决方法

参考:stackoverflow 具体步骤:

cpu_beams_.push_back(make_pair(int(partial_sum[src]), int(ix + end_of_sequence_)));

在make_pair后面的数据类型全部改为int类型,ps(可能不止一处)

问题3  nvcc fatal   : Unsupported gpu architecture 'compute_20'

这个问题是由于你的cuda版本导致的问题,由于我的版本是cuda10

参考:解决方法

具体步骤

1,找到Makefile.config中以下内容

# CUDA architecture setting: going with all of them.
# For CUDA < 6.0, comment the *_50 through *_61 lines for compatibility.
# For CUDA < 8.0, comment the *_60 and *_61 lines for compatibility.
# For CUDA >= 9.0, comment the *_20 and *_21 lines for compatibility.
CUDA_ARCH := -gencode arch=compute_20,code=sm_20 \
                -gencode arch=compute_20,code=sm_21 \
                -gencode arch=compute_30,code=sm_30 \
                -gencode arch=compute_35,code=sm_35 \
                -gencode arch=compute_50,code=sm_50 \
                -gencode arch=compute_52,code=sm_52 \
                -gencode arch=compute_60,code=sm_60 \
                -gencode arch=compute_61,code=sm_61 \
                -gencode arch=compute_61,code=compute_61

2,删除以下两行(具体得根据你的cuda 版本,上面有对应关系)

-gencode arch=compute_20,code=sm_20 \
-gencode arch=compute_20,code=sm_21 \

问题4:安装numpy时后 cannot import name '_validate_lengths' from 'numpy.lib.arraypad'

解决方法:这是由于你的pandas安装之后numpy升级了导致的问题,只要重新用pip安装以前版本的numpy就好了,一定不能随意降低版本,我之前从1.16.0降低为1.15.0报错找不到h5py(原始版本为numpy==1.13.3),这可能是由于我们安装的h5py是由于之前版本的numpy版本编译导致的。这里贴出自己各种包的版本

>>> import caffe
>>> import h5py
>>> import pandas
>>> import numpy
>>> numpy.__version__
'1.13.3'
>>> pandas.__version__
u'0.24.2'
>>> h5py.__version__
'2.9.0'
>>> 

如果还是出现问题,比如一些依赖改变了,就我而言用的coco API出现了导入不了的问题,就可以对caffe重新编译以及各种API重新编译,这讲道理或许是最有效的方法。

问题5:编译caffe时出现cannot find -lopencv_imgcodecs

解决方法参照:1)caffe cannot find 机制 2)问题出错原因 3)安装多版本opencv共存方法

具体解决方法:1,官网下载opencv 3.2.0(选择source)  2,进入解压包,依次执行以下指令

mkdir build
cd build
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local/opencv3.2.0 ..
make
sudo make install

期间make我这超级慢~,执行完了之后修改你的makefile.config文件,如下:

#INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /usr/include/hdf5/serial/
INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/opencv3.2.0/include /usr/local/include /usr/include/hdf5/serial 
#LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib
LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/opencv3.2.0/lib /usr/local/lib /usr/lib /usr/lib/x86_64-linux-gnu /usr/lib/x86_64-linux-gnu/hdf5/serial 

之后用你的cv3.2.0编译caffe,如下:

export PYTHONPATH=/home/hyw/yyd/bottom-up-attention-master/lib:/home/hyw/yyd/bottom-up-attention-master/caffe/python:/home/hyw/yyd/bottom-up-attention-master/tools:$PYTHONPATH
export PKG_CONFIG_PATH=/usr/local/opencv3.2.0/lib/pkgconfig #需要在路径中修改的
export LD_LIBRARY_PATH=/usr/local/opencv3.2.0/lib #需要再路径中修改的

把以上代码在项目的根目录写成*.rc文件,第一行是我的caffe路径,这样可以保证每个项目的caffe都相互独立。后面两行是此次项目用到的cv3.2.0。如果不执行改*.rc则默认使用自带的cv2。

不定期更新中.....

安装opencv的另外一种方法(直接装到pip对应的环境下)

pip3 install opencv-python

你可能感兴趣的:(caffe,ubuntu)