ubuntu16.04+anaconda3下安装Caffe(history回顾全记录)

最近看论文,很多模型都是使用caffe框架,没办法,为了跑模型训练,那就安装下caffe吧。

caffe的配置确实麻烦。忙活了好几天,终于从坑里出来了,还是挺开心的。

Caffe官方安装指南:http://caffe.berkeleyvision.org/installation.html

Caffe依赖总览

Caffe has several dependencies:

  • CUDA is required for GPU mode.
    • library version 7+ and the latest driver version are recommended, but 6.* is fine too
    • 5.5, and 5.0 are compatible but considered legacy
  • BLAS via ATLAS, MKL, or OpenBLAS.
  • Boost >= 1.55
  • protobuf, glog, gflags, hdf5

Optional dependencies:

  • OpenCV >= 2.4 including 3.0
  • IO libraries: lmdb, leveldb (note: leveldb requires snappy)
  • cuDNN for GPU acceleration (v6)

Pycaffe and Matcaffe interfaces have their own natural needs.

  • For Python Caffe: Python 2.7 or Python 3.3+, numpy (>= 1.7), boost-provided boost.python
  • For MATLAB Caffe: MATLAB with the mex compiler.

系统环境

  • 系统: Ubuntu16.04
  • CUDA10.1+cudnn7.6.5 (因为我已经配置好了GPU版的tensorflow,都能正常使用,所以这篇文章略过)
  • 显卡: RTX2070 (使用caffe框架,主要就是想利用caffe的GPU开发功能)
  • Anaconda3,选择的Anaconda3-2019.07-Linux-x86_64.sh,默认安装的python3.7.3

安装计划:

  • 先配置好OpenCV
  • 为了利用anaconda的虚拟环境功能,计划把caffe+python3.7.3配置到一个虚拟环境中,这样后续还可以加其他的深度学习框架,还能配置caffe+python2.7;(版本共存也是挑战,计划后续进行配置)
  • 安装Caffe

接下来先安装OpenCV

1. 安装OpenCV

1.1 安装ffmpeg

在安装OpenCV前需要先安装ffmpeg。

  • 安装FFmpeg依赖包
sudo apt-get install libfaac-dev libmp3lame-dev libtheora-dev 
sudo apt-get install libvorbis-dev libxvidcore-dev libxext-dev libxfixes-dev
  • 在FFmpeg的官网上下载压缩包.bz2
  • 解压FFmpeg安装包
# 进入压缩包所在的目录内
tar -xjvf ffmpeg-4.2.2.tar.bz2  # 解压
cd ffmpeg-4.2.2 # 进入解压后目录
  • 配置FFmpeg并安装
# ./configure配置 
./configure --enable-nonfree --enable-pic --enable-shared --disable-asm
sudo make
sudo make install

这样ffmpeg计算安装完成了。

以上参考文章:https://blog.csdn.net/u011974639/article/details/78804299

1.2 安装OpenCV本身

sudo apt-get update
sudo apt-get install build-essential cmake pkg-config

一般这几个都是ubuntu16.04系统自带的,安全起见可以确认下。

  • 安装opencv需要的图片编码库、视频编码库等库

sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev
sudo apt-get install libxvidcore-dev libx264-dev
  • 安装优化算法库atlas
sudo apt-get install libatlas-base-dev gfortran
  • 安装python开发库

       如果缺少这个步骤无法生成python的调用链接,这里python2.7和3.5一起安装了,防止后面有人要安装2.7的版本。

sudo apt-get install python2.7-dev python3.5-dev 
#可以考虑换成python3.7-dev,因为后续caffe要配置的python版本是3.7.3
  • 因为之前配置的时候,默认配置了一些opencv3.4.3的依赖库,所以选择opencv3.4.3进行安装,下载地址:https://github.com/opencv/opencv/tree/3.4.3
  • 进入到opencv3.4.3文件夹中进行配置
cd opencv-3.4.3/
mkdir build
cd build
  • cmake参数设置
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D INSTALL_PYTHON_EXAMPLES=ON -D PYTHON_EXECUTABLE=/usr/bin/python -D CUDA_GENERATION=Auto -D BUILD_EXAMPLES=ON ..

           cmake后面的参数非常重要,决定了编译是否可以成功,PYTHON_EXECUTABLE是which python产生的地址,CMAKE_INSTALL_PREFIX是cmake以后的安装位置,默认选择/usr/local就可以了。因为我CUDA已经配置完成了,开启。

           选择对应版本的ippicv,和分支,或者在网上搜一下,看看资源。参考文章:https://blog.csdn.net/ordream/article/details/84311697

  • 将安装包放置在/home/robert/DownLoads/;
cd ./opencv3.4.3/3rdparty/ippicv
sudo gedit ippicv.cmake

            修改为

URL
  "${OPENCV_IPPICV_URL}"
  "$ENV{OPENCV_IPPICV_URL}"
  "file:///home/robert/DownLoads/"  # 改为从本地下载
  # "https://raw.githubusercontent.com/opencv/opencv_3rdparty/${IPPICV_COMMIT}/ippicv/"
DESTINATION_DIR "${THE_ROOT}"

  • 删除系统路径的anaconda3
echo $PATH

export PATH=/usr/local/cuda-10.1/bin:/home/robert/bin:/home/robert/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin

echo $PATH
  • 删除build下面的所有文件,重新编译。
ls
sudo rm -rf *

cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D INSTALL_PYTHON_EXAMPLES=ON -D PYTHON_EXECUTABLE=/usr/bin/python -D CUDA_GENERATION=Auto -D BUILD_EXAMPLES=ON ..
  • 接着编译和安装
make -j$(nproc)
sudo make install

1.3 配置环境变量

echo 'export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARYPATH' >> ~/.bashrc
echo 'export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig' >> ~/.bashrc
source ~/.bashrc

bingo~到这里,opencv安装大功告成!

安装完成后通过查看 opencv 版本验证是否安装成功:

pkg-config --modversion opencv

2. 安装Caffe

2.1 安装各种依赖

sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev 
sudo apt-get libopencv-dev libhdf5-serial-dev protobuf-compiler
sudo apt-get install --no-install-recommends libboost-all-dev # 自动安装的是boost1.58,python3.5,导致后面需要解决

接着安装:

sudo apt-get install libgflags-dev libgoogle-glog-dev liblmdb-dev# ubuntu系统独有安装包
sudo apt-get install libatlas-dev
sudo apt-get install liblapack-dev
sudo apt-get install libatlas-base-dev # AUTOMATIC TUNED LINEAR ALGEBRA SOFTWARE,BLAS线性算法库的优化版本

提前注意点:

  • 编译路径下,hdf5库的头文件和lib文件版本是否统一;
  • boost、libboost_python版本和python版本是否统一;
  • 解决方案见下文;

使用Git直接下载Caffe非常简单,或者去https://github.com/BVLC/caffe下载。由于我习惯去github上找代码,所以就直接去下载的源码。将caffe-master放在根目录下,解压

unzip caffe-master.zip

因为make指令只能make Makefile.config文件,而Makefile.config.example是caffe给出的makefile例子,因此,首先将Makefile.config.example的内容复制到Makefile.config。

sudo cp Makefile.config.example Makefile.config

2.2 修改 Makefile.config 文件

在 caffe 目录下打开该文件:

sudo gedit Makefile.config

 a.若使用cudnn,则修改成:

#USE_CUDNN := 1
USE_CUDNN := 1

b.若使用的opencv版本是3的,则修改为:

#OPENCV_VERSION := 3
OPENCV_VERSION := 3

c.若要使用python来编写layer,则修改为

#WITH_PYTHON_LAYER := 1
WITH_PYTHON_LAYER := 1

d.确认CUDA的安装路径,修改为

#CUDA_DIR := /usr/local/cuda
CUDA_DIR := /usr/local/cuda-10.1

e.使用的CUDA10.1,删除*_20和*_21两行,如下

CUDA_ARCH := -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

f.采用anaconda3和自带的python3.7.3进行编译,把python2.7那段全部注释,单独创建python3.7那段,修改如下:

# NOTE: this is required only if you will compile the python interface.
# We need to be able to find Python.h and numpy/arrayobject.h.
# PYTHON_INCLUDE := /usr/include/python2.7 \
# 		  /usr/lib/python2.7/dist-packages/numpy/core/include
# Anaconda Python distribution is quite popular. Include path:
# Verify anaconda location, sometimes it's in root.
# ANACONDA_HOME := $(HOME)/anaconda
# PYTHON_INCLUDE := $(ANACONDA_HOME)/include \
		# $(ANACONDA_HOME)/include/python2.7 \
		# $(ANACONDA_HOME)/lib/python2.7/site-packages/numpy/core/include

# Uncomment to use Python 3 (default is Python 2)
# PYTHON_LIBRARIES := boost_python3 python3.5m
PYTHON_LIBRARIES := boost_python37 python3.7m # 要求boost已经配置OK 

# PYTHON_INCLUDE := /usr/include/python3.5m \
#                 /usr/lib/python3.5/dist-packages/numpy/core/include
# Anaconda Python distribution is quite popular. Include path:
# Verify anaconda location, sometimes it's in root.
ANACONDA_HOME := $(HOME)/anaconda3
PYTHON_INCLUDE := $(ANACONDA_HOME)/include \
		  $(ANACONDA_HOME)/include/python3.7m \
 		  $(ANACONDA_HOME)/lib/python3.7/site-packages/numpy/core/include

g.修改python_lib地址,注意版本对应,修改为

# PYTHON_LIB := /usr/lib
PYTHON_LIB := $(ANACONDA_HOME)/lib

h.重要的一项 ,编译路径和库文件地址修改:
将 # Whatever else you find you need goes here. 下面的

# INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include
# LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib

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

2.3 修改makefile文件

NVCCFLAGS +=-ccbin=$(CXX) -Xcompiler-fPIC $(COMMON_FLAGS)
替换为:
NVCCFLAGS += -D_FORCE_INLINES -ccbin=$(CXX) -Xcompiler -fPIC $(COMMON_FLAGS)
#181行
LIBRARIES += glog gflags protobuf boost_system boost_filesystem m
改为:
LIBRARIES += glog gflags protobuf boost_system boost_filesystem m hdf5_serial_hl hdf5_serial

#198行修改
# LIBRARIES += hdf5_hl hdf5
LIBRARIES += hdf5_serial_hl hdf5_serial

2.4 开始编译Caffe

sudo make all -j$(nproc)
sudo make pycaffe -j$(nproc)
sudo make test
sudo make runtest -j$(nproc)

等待一段时间,都没有问题,那么就会显示运行的测试项目。

2.5 附录 hdf5版本统一解决办法

报错内容如下:

Warning! ***HDF5 library version mismatched error***
The HDF5 header files used to compile this application do not match
the version used by the HDF5 library to which this application is linked.
Data corruption or segmentation faults may occur if the application contin
This can happen when an application was compiled by one version of HDF5 bu
linked with a different version of static or shared HDF5 library.
You should recompile the application or check your shared library related
settings such as 'LD_LIBRARY_PATH'.
You can, at your own risk, disable this warning by setting the environment
variable 'HDF5_DISABLE_VERSION_CHECK' to a value of '1'.
Setting it to 2 or higher will suppress the warning messages totally.
Headers are 1.10.4, library is 1.8.16

因为配置的是从anaconda3的路径进行caffe安装,conda list发现其中安装的是hdf5    1.10.4,而系统自带的是hdf5    1.8.16。修改anaconda3的hdf5版本,与系统保持一致,根据报错内容,调整library的版本,输入:

conda install -c anaconda hdf5=1.8.16

因为分析的比较多,所以需要等待一段时间。

因为hdf5和h5py前后相关的依赖库众多,不要按网上其他教程的先删除再安装,直接替换就好,conda install时会提示众多变更,我都选择了不执行,以防系统出问题。

conda list,确认hdf5版本是否统一了,继续编译caffe。

参考文章:

https://www.pianshen.com/article/233679872/

2.6 附录 boost、libboost_python版本和python版本统一问题解决办法

Ubuntu 16.04下安装Caffe解决 undefined symbol: _ZN5boost6python6detail11init_moduleER11PyModuleDefPFvvE

sudo apt-get install --no-install-recommends libboost-all-dev

这个命令自动安装的是boost_1.58版本,python3.5。

解决方法:

先在系统的/usr/lib/x86_64-linux-gnu/路径下查找boost_python文件的版本是否与python版本匹配,我的电脑中文件名为:
libboost_python-py35.so.1.58.0

没找到安装python3.7的boost库命令,选择从boost源码进行安装。

下载地址:https://www.boost.org/

下载后解压,将文件夹复制到/usr/local下面:
在终端中,输入以下命令:

sudo cp -r boost_1_72_0 /usr/local

进入boost_1_72_0目录,执行:

sudo ./bootstrap.sh
sudo ./b2
sudo ./b2  install

完成后 若发现没有libboost_python生成,重新编译

sudo ./bootstrap.sh --with-python=/home/robert/anaconda3/bin/python3.7 --with-python-root=/home/robert/anaconda3/lib/python3.7 --with-python-version=3.7

参数解释:执行 ./bootstrap.sh --help 可以看到需要下面的几个参数,都需要加上,其中--prefix是默认的安装地址,除非要另选安装地址,不然不用配置。

前面两个路径尽量写绝对路径,写你具体python3的安装位置,因为采用的是anaconda3进行配置,所以也采用anaconda3的python,--with-python实际就是python执行文件的地址,--with-python-root是python完整的安装目录,anaconda3在lib文件夹下,后面一个是版本。

命令执行完之后不要马上编译,我们会看到提示如果需要修改配置可以修改project-config.jam这个文件,我们打开这个文件,找到python.configured部分,默认只有版本号和安装路径,没有头文件和库路径所以编译的时候会报找不到头文件的错误,最后编译完之后boost里面也找不到python的库,这里添加配置如下:

sudo gedit project-config.jam

 注意需要冒号进行连接,配置好之后保存并退出,

sudo ./b2 cflags='-fPIC' cxxflags='-fPIC' --with-python include="/home/robert/anaconda3/include/python3.7m/"
#保险起见再配置下b2的执行配置,也可直接使用
sudo ./b2
sudo ./b2 install

查看/usr/local/lib/下有没有

/usr/local/lib/libboost_python37.a
/usr/local/lib/libboost_python37.so
/usr/local/lib/libboost_python37.so.1
/usr/local/lib/libboost_python37.so.1.72
/usr/local/lib/libboost_python37.so.1.72.0

 如果有,直接创建软链接

sudo ln -s /usr/local/lib/libboost_python37.so /usr/local/lib/libboost_python37.so.1.72.0

 如果没有,就从booststage文件夹下的lib文件夹当中把这5个文件拷贝到/usr/local/lib/目录下,然后创建软链接

sudo cp /usr/local/boost_1_72_0/stage/lib/libboost_python37* /usr/local/lib

 再修改caffe-master/Makefile.config,

# PYTHON_LIBRARIES := boost_python3 python3.5m
PYTHON_LIBRARIES := boost_python37 python3.7m  #python版本改成对应的版本37,与库文件对应

 重新python开发caffe,看问题是否解决,如果问题依旧,可以把上述5个文件再拷到/usr/lib/x86_64-linux-gnu/,重新编译caffe

python
>>>import caffe
sudo cp /usr/local/boost_1_72_0/stage/lib/libboost_python37* /usr/lib/x86_64-linux-gnu/

若重新python开发caffe,还提示找不到libpython3.7m.so,把文件拷到/usr/local/lib,

sudo cp ~/anaconda3/lib/libpython3.7m.* /usr/local/lib

参考文章:

https://blog.csdn.net/sinat_35406909/article/details/84198140

https://www.cnblogs.com/freeweb/p/9209362.html

https://blog.csdn.net/bodybo/article/details/79962814

https://www.jianshu.com/p/7c2e5da5faf1

2.7 附录 使用python开发caffe

在上一步中已经安装了pycaffe,但还需要配置路径。

编译 pycaffe 成功后,验证一下是否可以在 python 中导入 caffe 包,首先进入 python 环境:

python

>>> import caffe

若不报错则表示 caffe 的 python 接口已正确编译,但是应该不会那么顺利。

错误提示:

File "<stdin>", line 1, in <module>   ImportError: No module named caffe

解决办法,参考文章:https://blog.csdn.net/gdengden/article/details/88377411

sudo echo export PYTHONPATH=/home/robert/caffe-master/python:$PYTHONPATH >> ~/.bashrc
 
source ~/.bashrc

如果是多版本问题,可以考虑在每个程序里加上

import sys
sys.path.append('/home/.../caffe-master/python') #caffe文件夹 中python的位置

参考文章:

https://blog.csdn.net/u010801994/article/details/82389890

https://blog.csdn.net/qq_40265629/article/details/81086092

https://blog.csdn.net/u011511601/article/details/80109122

https://blog.csdn.net/u011974639/article/details/78804299

高手配置方案,解决方案进行了参考:

https://segmentfault.com/a/1190000011147642

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在Anaconda安装caffe,需要按照以下步骤进行操作: 1. 确保已经安装Anaconda。可以参考引用中提供的链接,了解Anaconda安装步骤。 2. 创建一个新的conda环境来安装caffe。可以使用以下命令创建一个名为caffePython 2.7环境: ``` conda create -n caffe python=2.7 -c defaults ``` 3. 更新conda以确保使用最新版本: ``` conda update -n base -c defaults conda ``` 4. 激活刚刚创建的caffe环境: ``` conda activate caffe ``` 5. 安装caffe。如果你的系统有GPU,可以使用以下命令安装caffe-gpu: ``` conda install -c defaults caffe-gpu ``` 如果没有GPU,则可以安装cpu版的caffe: ``` conda install -c defaults caffe ``` 请注意,安装caffe可能需要一些时间和依赖项的安装。确保你的系统满足caffe安装要求,并且按照上述步骤进行操作,就可以成功安装caffe了。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Anaconda安装caffe(超简单)](https://blog.csdn.net/abcd740181246/article/details/89878613)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [caffe安装步骤(Anaconda,Windows10环境下)](https://blog.csdn.net/thy0000/article/details/122794162)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [Anaconda: 快速安装caffe](https://download.csdn.net/download/weixin_38521169/14038348)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值