DSP

AM5728开发深度学习之安装 caffe-jacinto

2019-07-13 16:45发布

AM5728开发深度学习之安装 caffe-jacinto——WizNote笔记 要先使用自己训练的模型,可以使用caffe和Tensorflow,但是使用TI的caffe-jacinto能让训练的模型在TI的嵌入式平台上达到加速的效果,它fork了NVIDIA/caffe,而NVIDIA/caffe则是fork了BLVC/caffe。经过测试,安装了caffe-jacinto,也能跑通caffe给的官方教程代码Notebook Examples
官方Repo
官方问题总结及解决方法
本机环境如下:
  • CUDA 9.0
  • cuDNN 7.2.1
  • OpenCV 3.1
由于电脑装了Anaconda3,因此我们分配一个虚拟环境caffe-jacinto来安装caffe-jacinto需要的包,这里指定python版本为2.7,因为caffe-jacinto对python2.7支持较好。 conda create -n caffe-jacinto python=2.7 source activate caffe-jacinto

1 下载caffe-jacinto库

git clone https://github.com/tidsp/caffe-jacinto cd caffe-jacinto/ git checkout caffe-0.17 配置环境变量 vim ~/.bashrc # 将下面两行添加到~/.bashrc中 export PATH=/home/xavier/anaconda3/envs/caffe-jacinto/bin:$PATH export PYTHONPATH=/media/xavier/SSD256/caffe-jacinto/python:$PYTHONPATH source ~/.bashrc

2 编辑Makefile.config

取消注释行WITH_PYTHON_LAYER
取消注释行USE_CUDNN cp Makefile.config.example Makefile.config # 取消注释行WITH_PYTHON_LAYER # 取消注释行USE_CUDNN USE_CUDNN := 1 #使用OpenCV OPENCV_VERSION := 3 #OpenCV版本为3

3 安装依赖

cd caffe-jacinto/ source activate caffe-jacinto sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libhdf5-serial-dev protobuf-compiler sudo apt-get install libatlas-base-dev sudo apt-get install libopenblas-dev sudo apt-get install --no-install-recommends libboost-all-dev #没安装的话会出现boost库的相关错误 sudo apt-get install libgflags-dev libgoogle-glog-dev liblmdb-dev sudo apt-get install libturbojpeg sudo ln -s /usr/lib/x86_64-linux-gnu/libturbojpeg.so.0.0.0 /usr/lib/x86_64-linux-gnu/libturbojpeg.so # 否则会出现libturbojpeg相关的错误 # 安装pycaffe需要的依赖包 for req in $(cat python/requirements.txt); do pip install $req; done

4 安装CUDA

5 安装cuDNN

以上两步网上教程很多,这里就偷懒省略了,本机电脑装的CUDA为9.0,cuDNN为7.2.1,可以通过以下命令查看 # cuda 版本 cat /usr/local/cuda/version.txt # cudnn 版本 cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2 # OpenCV版本 pkg-config --modversion opencv 在这里插入图片描述

6 编译caffe-jacinto

# 注意这里的~/caffe-jacinto/python/requirements.txt根据具体的caffe-jacinto安装目录而定 for req in $(cat ~/caffe-jacinto/python/requirements.txt); do pip install $req; done make all -j 8 #使用8个线程进行编译

7 测试caffe-jacinto

make test make runtest make pycaffe

常见错误及解决办法

1 .build_release/src/caffe/proto/caffe.pb.h:22:35: fatal error: google/protobuf/arena.h: 没有那个文件或目录或者.build_release/src/caffe/proto/caffe.pb.h:12:2: error: #error This file was generated by a newer version of protoc which is #error This file was generated by a newer version of protoc which is错误

[具体解决方法及描述](https://blog.csdn.net/qq_28256625/article/details/78893707)
这是由于protobuf的版本不对导致的,caffe能正确使用的是protobuf-2.6.1版本,而安装anaconda后环境变量改变,默认使用anaconda下的protobuf-3.4.0了。 # 命令whereis protoc 可以查看哪些路径安装了protoc # 命令which protoc可以查看默认选用protoc的路径 # 命令protoc --version 可以查看当前protoc版本 在这里插入图片描述
我们想使用Anaconda,但是Anaconda的protoc的版本太高,我们可以使用以下命令安装protobuf-2.6.1 # 查看conda哪些源支持protobuf及相关版本 binstar search -t conda protobuf 假设使用protobuf-2.6.1,用下面命令锁定protobuf版本 binstar show probcomp/libprotobuf 然后使用下面命令安装 conda install --channel https://conda.anaconda.org/probcomp libprotobuf 再次查看哪些路径有protoc,可以看到路径/home/xavier/anaconda3/envs/caffe-jacinto/bin/protoc有protoc,并且可以查看到其版本为protobuf-2.6.1 whereis protoc 在这里插入图片描述
通过修改~/.bashrc来将/home/xavier/anaconda3/envs/caffe-jacinto/bin/添加到环境变量 export PATH=/home/xavier/anaconda3/envs/caffe-jacinto/bin:$PATH 然后make all -j 8即可编译

2 由于没有使用OpenCV造成的错误

.build_release/lib/libcaffe-nv.so:对‘cv::VideoCapture::set(int, double)’未定义的引用 .build_release/lib/libcaffe-nv.so:对‘cv::VideoWriter::write(cv::Mat const&)’未定义的引用 .build_release/lib/libcaffe-nv.so:对‘cv::VideoCapture::open(cv::String const&)’未定义的引用 .build_release/lib/libcaffe-nv.so:对‘cv::VideoCapture::release()’未定义的引用 解决方法
由于我自己电脑之前源码编译过OpenCV3.4,这里只需要清除刚刚编译生成的文件make clean,修改Makefile.config中以下两行,然后重新编译即可。 USE_CUDNN := 1 OPENCV_VERSION := 3

3 /usr/bin/ld: /usr/lib/x86_64-linux-gnu/libturbojpeg.a(libturbojpeg_la-turbojpeg.o): relocation R_X86_64_32 against `.data’ can not be used when making a shared object; recompile with -fPIC /usr/lib/x86_64-linux-gnu/libturbojpeg.a: 无法添加符号: 错误的值

解决方法 cd <caffe-jacinto ROOT> make clean source activate caffe-jacinto sudo ln -s /usr/lib/x86_64-linux-gnu/libturbojpeg.so.0.1.0 /usr/lib/x86_64-linux-gnu/libturbojpeg.so

4 执行make runtest时出现错误

在这里插入图片描述
这个错误的原因不清楚,目前没有找到解决方法,但是这个错误不影响后面的操作,如果有大佬知道怎么解决,烦请在评论中给出方法。

5 OpenCV版本太高,需要转换为OpenCV3.1

5.1 CMake Error: The following variables are used in this project, but they are set to NOTFOUND.
Please set them or make sure they are set and tested correctly in the CMake files:
CUDA_nppi_LIBRARY (ADVANCED)
查看解决方法

6 运行完make pycaffe后,import caffe出现ImportError: /home/user/caffe-master/python/caffe/…/…/build/lib/libcaffe.so.1.0.0-rc3:undefinedsymbol:_ZN2cv8imencodeERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKS_11_InputArra ERSt6vectorIhSaIhEERKSB_IiSaIiEE

这是由于使用Anaconda3造成的,我们现在使用系统自带的python2来重新安装caffe-jacinto
6.1 切换系统root用户的Python
sudo update-alternatives --config python 然后输入对应的python2.7版本即可。
6.2 使用conda remove -n caffe-jacinto --all删除Anaconda创建的caffe-jacinto虚拟环境。
6.3 再安装pycaffe需要的依赖包
for req in $(cat python/requirements.txt); do pip2 install $req; done 注意:这里的pip改为pip2了,表示重新安装系统python2所需的pycaffe依赖包
6.4 执行make all -j8make pycafffe即可
6.5 测试import caffe

7 ImportError: No module named skimage

这个简单,参考博客

8 成功import caffe后,执行代码caffe.set_mode_gpu()出错Check failed: error == cudaSuccess (30 vs. 0) unknown error

解决办法:使用sudo python而不是python