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
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
USE_CUDNN := 1
OPENCV_VERSION := 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
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
for req in $( cat python/requirements.txt) ; do pip install $req ; done
4 安装CUDA
5 安装cuDNN
以上两步网上教程很多,这里就偷懒省略了,本机电脑装的CUDA为9.0,cuDNN为7.2.1,可以通过以下命令查看
cat /usr/local/cuda/version.txt
cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2
pkg-config --modversion opencv
6 编译caffe-jacinto
for req in $( cat ~/caffe-jacinto/python/requirements.txt) ; do pip install $req ; done
make all -j 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了。
我们想使用Anaconda,但是Anaconda的protoc的版本太高,我们可以使用以下命令安装protobuf-2.6.1
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 -j8
和make 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