NVIDIA Jetson TX2 配置Caffe with CUDA9.0 OpenCV 3

  1. 前言

网上现已有不少在TX2上配置Caffe的教程,但在实际操作过程中还是遇到了一些意想不到的问题。所以将整个配置过程作一个总结,以备后续参考。

2. 组件检查

首先需要说明的是,配置Caffe需要在正确安装Jetpack和设置环境变量之后方可进行。并且在配置Caffe之前,最好先进行一下各组件的检查。

    1. 查看CUDA版本

    打开终端输入,

nvcc -V

    注意记住版本号。(Jetpack3.2附带的是CUDA9.0)

    2. 查看OpenCV版本

pkg-config --modversion opencv

    同样需要记住版本号。(Jetpack3.2附带的是OpenCV 3)

    3. 查看Cmake是否安装

cmake --version

    不知为何Jetpack并没有装上Cmake,故需要输入

apt-get install cmake

3. 安装与下载

安装一般依赖项

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

安装BLAS依赖项

sudo apt-get install libatlas-base-dev

安装Python及其依赖项

sudo apt-get install python
sudo apt-get install python-dev
sudo apt-get install python-numpy
sudo apt-get install ipython
sudo apt-get install ipython-notebook
sudo apt-get install python-sklearn
sudo apt-get install python-skimage
sudo apt-get install python-protobuf

安装谷歌glog和gflags和lmdb依赖项

sudo apt-get install libgflags-dev libgoogle-glog-dev liblmdb-dev

安装Git并下载源码(或者离线安装,推荐)

sudo apt-get install git
git clone https://github.com/BVLC/caffe.git

此处需要注意的是,git clone的过程可能会十分缓慢,并且可能中途崩掉。主要有以下几种问题,并附上解决办法:

  • git clone下载速度0bytes 出现error: RPC failed; curl 18 transfer closed with outstanding read data,这是因为curl的postBuffer默认值太小的原因。打开终端输入
git config –global http.postBuffer 524288000
  • 下载速度过慢,可以尝试将https更改为git。
  • 亲测在国内上午下载速度非常快(可能是因为对应美帝深夜?)
  • 如果下载速度还是过慢,可以使用离线安装的方式。先从https://github.com/BVLC/caffe.git下载Caffe,然后解压到home下。(推荐)

4.修改Makefile与编译Caffe

这里遇到一个问题是,通过前文步骤安装下来的caffe文件夹的Owner是root(可以看到caffe文件夹上有一个锁),也就是说没有对caffe文件夹内文件进行修改的权限。所以这里通过以下代码对caffe文件夹进行解锁。(重要)

sudo chown nvidia caffe/ -R

-----------------------------------------------------------------------------------------------------

接下来转到caffe文件夹下,

cd caffe

生成Makefile.config

cp Makefile.config.example Makefile.config

打开Makefile.config进行必要的修改(重要)

gedit Makefile.config

需要进行更改的条目有以下几项(后续开发环境如有变动,需要及时再次更改Makefile.config,并重新编译caffe)

  • 需要使用cuDNN,去掉注释
# USE_CUDNN := 1
  • 匹配数据类型,去掉注释后,将对应代码改为以下;
USE_OPENCV := 1
USE_LEVELDB := 1
USE_LMDB := 1
  • 匹配OpenCV版本
OPENCV_VERSION := 1
  • 匹配CUDA版本,删掉该部分的前两句
-gencode arch=compute_20,code=sm_20 \ 
-gencode arch=compute_25,code=sm_25 \

       得到如下形式,

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
  • 需要使用到caffe的Python layer,去掉注释
WITH_PYTHON_LAYER := 1
  • 添加haf5路径,将以下代码
INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include

      改为,

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

值得说明的是,如果后续开发环境变动(比如将Python从2.x升级到3.x),需要对makefile.config进行对应修改,然后重新编译。

-----------------------------------------------------------------------------------------------------

打开Make.file进行修改,

gedit 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

关闭Makeflie,打开终端,输入

sudo make clean
sudo make all -j8

开始编译,直到编译完成。

5. 测试

对编译结果进行检查,打开终端输入,

sudo make test -j8

执行完成后输入,

sudo make runtest -j8

检查过程如下图所示,最后输出PASS即说明检查无误。


运行minst demo进行测试,打开终端输入

cd caffe; 
# 下载mnist数据集
sudo sh data/minst/get_mnist.sh 
# 运行demo
sudo sh example/mnist/create_mnist.sh 
sudo sh example/mnist/train_lenet.sh 

运行结果如下,可以看到准确率为99%。


至此Caffe配置完成,后续还需要进行caffe的python接口的编译。       




发布了5 篇原创文章 · 获赞 5 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/wyr_rise/article/details/79620903