a318c19b60dd415399e97f09d9e5ade9.png

文章首发于我的个人博客

【手把手AI项目】二、ubuntu16.04+caffe+CUDA10.0+cudnn7.4+opencv2.4.9.1+python2.7 (超超细致)

喜欢手机观看的朋友也可以在我的个人公号:AI蜗牛车 中获取。

废话不多说直接上干货

安装开发所需依赖包:

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

8ccf3427e038628491a9315e296b84d7.png
sudo apt-get update; sudo aptitude install build-essential #执行这句解决问题

85e91680df98957b7c74b8a26a7d4715.png

5d57b61708f3d1351ddf821c3f2a0d80.png

直接点回车,成功安装 可能出现如下图,照做就好运行,运行apt-get update等,重新执行上述的安装依赖包的过程

bfbd92475e904833b0a6ce4a47f0cdc5.png

安装成功差不多如下所示

5ff316e3e4ab968a39c2682595b68968.png

安装CUDA 10.0前提

1.首先确认自己电脑的GPU兼容CUDA,只要电脑是N卡应该就支持,A卡应该是不支持了 我的电脑是1060ti,显示 compatible兼容

lspci | grep -i nvidia

3295beb54b1699788f56efd3024fb7b3.png

2.确定linux版本支持CUDA

uname -m && cat /etc/*release

9a59c343d18fa3defca9c81b1677cbeb.png

3.确定系统安装了gcc:

gcc --version

fa814f0cf7fae958bf012c00e19efaeb.png

4.确定系统已经安装了正确的Kernel Headers和开发包:

首先查看系统正在运行的kernel版本:

uname -r

e2c32cc46b87ae22b458600126b52990.png

安装对应的kernels header和开发包:

sudo apt-get install linux-headers-$(uname -r)

72619e3c99aa19844fb04b3dcc0d709d.png

我电脑自己已经装好了

安装CUDA10.0

1.下载CUDA10.0 https://developer.nvidia.com/cuda-downloads 如下选择(我的linux版本是16.04, 64位)

3cc20e7d0ac92bd5eff0706359eff68b.png

Download 之后按照Installation Instructions安装

31270f5bd750ff2cd14fe9baa564100c.png

2.首先进行md5校验:

md5sum cuda-repo-ubuntu1604-10-0-local-10.0.130-410.48_1.0-1_amd64.deb

首先进入下载的deb文件所在的文件夹,之后执行terminal,这里的deb的名称根据你当时下载的deb文件来输入

2c1ec9ca0c7705189203e628043e4d1c.png

3.安装

sudo dpkg -i cuda-repo-ubuntu1604-10-0-local-10.0.130-410.48_1.0-1_amd64.deb
    sudo apt-get update
    sudo apt-get install cuda

出现输入key,按照做就好

3d0ec7fec378f714de06659d3b542318.png

之后再输入

sudo dpkg -i cuda-repo-ubuntu1604-10-0-local-10.0.130-410.48_1.0-1_amd64.deb

再输入

sudo apt-get update
   sudo apt-get install cuda

等一会就能装好了

39b17f59176f1013b2810fcab6fc4c11.png

安装完成

00b86e72c707751a442c5eeb243887df.png

会发现自己的usr/local里有两个文件夹如下图

41d524a14760cd853a043527bae1a6a3.png

4.安装好之后添加环境变量 我个人习惯都喜欢用.bashrc来改环境变量 .bashrc为隐藏用户环境变量文件,首先直接点击桌面打开terminal终端

vim .bashrc

如果vim没有装的话,那就先执行

sudo apt-get install vim

88280fd0edc60c793bd80f19f9765a77.png

进入 .bashrc文件拉到最下面,添加如下两句环境变量(vim的使用随便百度都是这里不详细介绍了,linux基础,简单说一下,按i可输入,按ESC之后按:wq!保存退出即可)

export PATH=/usr/local/cuda-10.0/bin${PATH:+:${PATH}}

export LD_LIBRARY_PATH=/usr/local/cuda-10.0/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}

06ed93211c9edc509284060b62845d99.png

保存退出 让修改的环境变量生效

source ~/.bashrc

6507e05e8f75084c739af17f96a0a60e.png

验证CUDA是否安装成功

重启才能奏效

cd /usr/local/cuda-10.0/samples/1_Utilities/deviceQuery

sudo make  #编译deviceQuery.cpp文件,生成deviceQuery可执行文件

./deviceQuery

bd03604500e88651433422ba761a90b9.png

也正好显示为1060ti说明安装成功

安装Cudnn

1.下载Cudnn https://developer.nvidia.com/rdp/cudnn-download

b10efcb32a78e79cf4f170e7d1ff14d3.png

没有账号的话这里需要申请一个账号,并且邮箱验证,等等,都是傻瓜式操作,稍微按照要求操作一下就行了,下载界面如下图所示。

f42eef774d75fb4985bc680d3670e33d.png

下载后进入压缩包的文件夹内,并解压压缩包

b1cf3580ef471483edda5e689b6aed17.png

进入解压后的cuda文件夹里

sudo cp lib64/* /usr/local/cuda/lib64/     #复制头文件
sudo cp include/cudnn.h /usr/local/cuda/include/       #复制动态链接库

0530f5c4c75262af5ac8034fd2420191.png
cd /usr/local/cuda/lib64
sudo rm -rf libcudnn.so libcudnn.so.10.0
sudo ln -s libcudnn.so.10.0.64 libcudnn.so.10.0
sudo ln -s libcudnn.so.10.0 libcudnn.so

94560cff9e22d0e79fefae07ae67aefa.png

全部ok检查是否成功

nvcc -V

66af712070c0cae77415b5911d9eed45.png

关于opencv

因为我只需要用opencv读取照片和显示所以这边使用opencv自带的即可 执行下面这句,可知道linux自带opencv版本

pkg-config --modversion opencv

3ad9437632a33504d6e347a415c5acdc.png

如果想用opencv3.4 (这里用3.4,后面的编译caffe修改makeconfig部分需要参考补充部分) 安装请参考我另外一波博客 Linux下安装opencv3.4.3 尝试一下

python 
import cv2

出现错误

ImportError: No module named cv2

206e46d59efb3969b3f5d8e75063ef80.png

解决方案:

sudo apt-get install python-opencv

解决ok

a7a453895aa5faedcbfc29066756b7c6.png

安装caffe

因为安装caffe是目标检测用,用的是ssd所以这边直接编译caffe_ssd,编译原生caffe是一样的步骤,没区别 1.先clone掉github上的caffe

git clone https://github.com/BVLC/caffe.git

2.进入clone的caffe文件夹,执行以下命令,把Makefile.config.example复制更名为Makefile.config

sudo cp Makefile.config.example Makefile.config

1bc8e7b6388895d9c99f1f8c0dda586f.png

3.修改此文件(很关键)相当于caffe编译配置文件

sudo gedit Makefile.config

修改 Makefile.config 文件内容:

①使用cudnn

#USE_CUDNN := 1
修改成: 
USE_CUDNN := 1

②.修改 python 路径

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

补充. opencv 版本(如果使用opencv3的话)

#OPENCV_VERSION := 3 
修改为: 
OPENCV_VERSION := 3

如下图

bb9467e9c36c93613678a6761a98b738.png

f8253f0655938bf7bfd9c68193c39de8.png

修改 caffe 目录下的 Makefile 文件(这两个不改都会报错,编译类型错误等等。)

将:
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

ba2d44fc1ca1ef34bac65cfdf09eb5db.png
将:
 NVCCFLAGS +=-ccbin=$(CXX) -Xcompiler-fPIC $(COMMON_FLAGS) 
替换为:
 NVCCFLAGS += -D_FORCE_INLINES -ccbin=$(CXX) -Xcompiler -fPIC $(COMMON_FLAGS)

625ed593491eeb142fb40948aafc394a.png

进行正式编译

make all -j8

报错

38b69501997b906b5617cdc7bf4d23f8.png

问题在于CUDA在CUDA architecture setting有版本兼容问题 解决办法如下:

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

运行如下

make clean
make all

出现错误:

/usr/bin/ld: 找不到 -lcudnn

6413375c19890778ff1b5e697bb5154a.png

解决办法,进入cudnn解压得到的cudn文件夹lib64文件夹内 执行以下几句即可

sudo cp libcudnn.so /usr/local/cuda/lib64/
sudo cp libcudnn.so.7 /usr/local/cuda/lib64/
sudo cp libcudnn.so.7.4.1 /usr/local/cuda/lib64/
sudo cp libcudnn_static.a /usr/local/cuda/lib64/

9bd2ce868697fac085f19800a855956f.png

再重新运行如下

make clean
make all

3f9e79857105fb7046b866124d39a81a.png

成功,继续:

make test
make runtest -j8

能看到RUN OK不报错一直跑下去就没问题

2d62d76e4570c44136e20fd167497fdd.png

编译成功!!!

尝试import caffe

首先像上面一样的方式,就是用.bashrc的方式添加环境变量

export PATHONPATH=/home/xxx/caffe/python/caffe:$PATHONPATH #xxx为用户名

执行以下两句,来make caffe的python接口

cd caffe

sudo make pycaffe -j8

出现错误:

900a584d0a23297af4430493f6d4e7c8.png

解决问题如下:

sudo apt-get install python-numpy

尝试

python
import caffe

出现新问题

d5e610105cd595f7da0b3fc02994a3c9.png

解决方案:

sudo apt install python-pip

pip install --upgrade pip

pip install -U scikit-image

也可能出现以下问题

输入pip命令报错:from pip import main ImportError: cannot import name 'main'

解决方式为(这里使用的python2.7,所以只有pip没有pip3) 参考 https://blog.csdn.net/qq_38522539/article/details/80678412 修改文件

vim /usr/bin/pip

修改内容为:

//修改前 
from pip import main
if __name__ == '__main__': 
    sys.exit(main()) 
 修改后 
from pip import __main__ //这行也要修改
if __name__ == '__main__':
    sys.exit(__main__._main())   //增加__main__._

之后继续运行

sudo pip install -U scikit-image

之后再次import caffe 出现又一个error

ImportError: No module named google.protobuf.internal

解决方法

sudo apt-get install python-protobuf

最后python import caffe 终于成功

95f2377f18004b64399ac4a71de6716d.png

测试caffe,train以下minst数据集

cd caffe
sh data/mnist/get_mnist.sh    #获取dataset
sh examples/mnist/create_mnist.sh   #生成caffe输入的lmdb格式

99f6eafbad693287405b4047fef249c2.png

01c21052c4bfee23c5daca138ed0cd5a.png

开始训练:

sh examples/mnist/train_lenet.sh

0c5bdde521e7d5a375015bbdcf32cdea.png

训练完毕,可见loss为0.0269702

OVER

出现其他error解决方案

1.关于CUDA

Pro1:CUDA 和CUDnn的配置

https://blog.csdn.net/u010417185/article/details/59105765?locationNum=6&fps=1

Pro2:查看版本CUDA 和 CUDnn

https://blog.csdn.net/Teeyohuang/article/details/79082003

Pro3:卸载CUDA和Cudnn

http://www.cnblogs.com/feifanrensheng/p/9541733.html

2.其他

Pro1:“fatal error: hdf5.h: 没有那个文件或目录”解决方法/ 修改Makefile.config文件,根据运行平台修改配置

https://blog.csdn.net/u012033124/article/details/61200524

Pro2: caffe-ssd-install

https://blog.csdn.net/zhang_shuai12/article/details/52346878

Pro3: nvcc fatal : Unsupported gpu architecture 'compute_20'

https://blog.csdn.net/kemgine/article/details/78781377

Pro4: .bashrc文件如何打开

https://zhidao.baidu.com/question/502451392.html

Pro5: ubuntu环境变量的三种设置方法

https://blog.csdn.net/vertor11/article/details/70799971

Pro6: 验证后出现错误:/usr/bin/ld: 找不到 -lcudnn

https://blog.csdn.net/u010417185/article/details/59105765?locationNum=6&fps=1

Pro7: 编译 pycaffe时报错:fatal error: numpy/arrayobject.h没有那个文件或目录

https://blog.csdn.net/wuzuyu365/article/details/52430657

Pro8: 错误提示:ImportError: No module named http://skimage.io

https://blog.csdn.net/hdmjdp/article/details/65628685

Pro9: Python pip 下载速度慢? Windows 设置 国内源,用 阿里云 国内镜像 加速

https://www.jianshu.com/p/0b3ce7298bde

3.opencv Pro1: ImportError: No module named cv2的完美解决方法!!!

https://blog.csdn.net/mieleizhi0522/article/details/79123638?utm_source=blogxgwz0

Reference

http://www.cnblogs.com/wm123/p/5385940.html

https://blog.csdn.net/yhaolpz/article/details/71375762

https://blog.csdn.net/xiaoxue5246/article/details/78992000

https://blog.csdn.net/u013524303/article/details/81609643

https://blog.csdn.net/u012033124/article/details/61200524

https://blog.csdn.net/kemgine/article/details/78781377

https://blog.csdn.net/u012033124/article/details/61200524

https://blog.csdn.net/qq_38522539/article/details/80678412

https://blog.csdn.net/dongjuexk/article/details/78567717

特此感谢前路人,为作为小白的我铺路,谢谢!

更多推荐