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

版权声明:欢迎关注公众号:AI蜗牛车 || 本文为博主原创文章,未经博主允许不得转载, 若转载请与我联系。 https://blog.csdn.net/qq_33431368/article/details/84717053

安装开发所需依赖包:

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

在这里插入图片描述

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

在这里插入图片描述
在这里插入图片描述
直接点回车,成功安装
可能出现如下图,照做就好运行,运行apt-get update等,重新执行上述的安装依赖包的过程
在这里插入图片描述
安装成功差不多如下所示
在这里插入图片描述

安装CUDA 10.0前提

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

lspci | grep -i nvidia

在这里插入图片描述
2.确定linux版本支持CUDA

uname -m && cat /etc/*release

在这里插入图片描述
3.确定系统安装了gcc:

gcc --version

在这里插入图片描述
4.确定系统已经安装了正确的Kernel Headers和开发包:

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

uname -r

在这里插入图片描述

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

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

在这里插入图片描述
我电脑自己已经装好了

安装CUDA10.0

1.下载CUDA10.0
https://developer.nvidia.com/cuda-downloads
如下选择(我的linux版本是16.04, 64位)
在这里插入图片描述
Download 之后按照Installation Instructions安装
在这里插入图片描述

2.首先进行md5校验:

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

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

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,按照做就好
在这里插入图片描述
之后再输入

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

等一会就能装好了
在这里插入图片描述
安装完成
在这里插入图片描述
会发现自己的usr/local里有两个文件夹如下图
在这里插入图片描述
4.安装好之后添加环境变量
我个人习惯都喜欢用.bashrc来改环境变量
.bashrc为隐藏用户环境变量文件,首先直接点击桌面打开terminal终端

vim .bashrc

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

sudo apt-get install vim

在这里插入图片描述
进入 .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}}

在这里插入图片描述
保存退出
让修改的环境变量生效

source ~/.bashrc

在这里插入图片描述

验证CUDA是否安装成功

重启才能奏效

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

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

./deviceQuery

在这里插入图片描述
也正好显示为1060ti说明安装成功

安装Cudnn

1.下载Cudnn
https://developer.nvidia.com/rdp/cudnn-download
在这里插入图片描述
没有账号的话这里需要申请一个账号,并且邮箱验证,等等,都是傻瓜式操作,稍微按照要求操作一下就行了,下载界面如下图所示。
在这里插入图片描述
下载后进入压缩包的文件夹内,并解压压缩包
在这里插入图片描述
进入解压后的cuda文件夹里

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

在这里插入图片描述

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

在这里插入图片描述
全部ok检查是否成功

nvcc -V

在这里插入图片描述

关于opencv

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

 pkg-config --modversion opencv

在这里插入图片描述

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

python 
import cv2

出现错误

ImportError: No module named cv2

在这里插入图片描述
解决方案:

sudo apt-get install python-opencv

解决ok
在这里插入图片描述

安装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

在这里插入图片描述
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

如下图
在这里插入图片描述

在这里插入图片描述

修改 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

在这里插入图片描述

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

在这里插入图片描述
进行正式编译

make all -j8

报错
在这里插入图片描述
问题在于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

在这里插入图片描述
解决办法,进入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/

在这里插入图片描述
再重新运行如下

make clean
make all 

在这里插入图片描述
成功,继续:

make test
make runtest -j8

能看到RUN OK不报错一直跑下去就没问题
在这里插入图片描述
编译成功!!!

尝试import caffe

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

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

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

cd caffe

sudo make pycaffe -j8

出现错误:
在这里插入图片描述
解决问题如下:

sudo apt-get install python-numpy

尝试

python
import caffe

出现新问题
在这里插入图片描述
解决方案:

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 终于成功
在这里插入图片描述

测试caffe,train以下minst数据集

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

在这里插入图片描述
在这里插入图片描述开始训练:

sh examples/mnist/train_lenet.sh

在这里插入图片描述训练完毕,可见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 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

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

猜你喜欢

转载自blog.csdn.net/qq_33431368/article/details/84717053