在openeuler系统RISC-V架构上移植caffe,进行简单模型demo测试
硬件使用的是sipeed的荔枝派4A,操作系统是openeuler23.03v1默认账户密码:rootopenEuler12#¥。
环境:
硬件使用的是sipeed的荔枝派4A,操作系统是openeuler23.03v1
荔枝派4A带网卡驱动的镜像下载链接:
openeuler23.03默认账户密码:root openEuler12#¥
1. 下载caffe源码、安装升级依赖和工具
git clone https://github.com/BVLC/caffe.git
yum install -y opencv protobuf protobuf-devel boost boost-devel gflags glog glog-devel leveldb leveldb-devel \
lmdb lmdb-edvel snappy snappy-devel hdf5 hdf5-devel openblas openblas-devel lapack lapack-devel python3-devel \
python3-numpy python3-numpy-f2py camke
yum install libjpeg libjpeg-devel freetype-devel lcms2-devel libtiff-devel openjpeg2 openjpeg2-devel tk-devel
pip install --upgrade pip
2.移植适配caffe
进入caffe源码,先需要改一下配置文件
cp Makefile.config.example Makefile.config
vi Makefile.config
Makefile.config更改如下:
1.将下面的代码:
#USE_OPENCV := 0
#OPENCV_VERSION := 3
#WITH_PYTHON_LAYER := 1
改成:(注意要删掉#) 因为英伟达的CUDA和CUDNN不支持RISC-V所以不能用GPU,只能用CPU
USE_OPENCV := 1
CPU_ONLY := 1
USE_OPENCV := 1
USE_LEVELDB := 1
USE_LMDB := 1
OPENCV_VERSION := 4
WITH_PYTHON_LAYER := 1
2.将下面的代码:
BLAS := atlas
改成:
BLAS := open
"如果用的是ATLAS计算库则赋值atlas,MKL计算库则用mkl赋值,OpenBlas则赋值open。"
3.#根据自己python版本和路径改
PYTHON_INCLUDE := /usr/include/python2.7 \
/usr/lib/python2.7/dist-packages/numpy/core/include
改成
PYTHON_INCLUDE := /usr/include/python3.10 \
/usr/lib64/python3.10/site-packages/numpy/core/include #可以使用python3 -c "import numpy; print(numpy.__file__)"查看numpy位置
4.将下面代码:
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/opencv4 /usr/include/openblas
LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib /usr/lib64/python3.10/config-3.10-riscv64-linux-gnu /usr/lib64
5.注释掉
# CUDA_DIR := /usr/local/cuda
再修改下Makefile,命令和修改内容如下:
vi Makefile
1. #修改下python版本
PYTHON_LIBRARIES ?= boost_python310 python3.10
2. #修改链接库
LIBRARIES += glog gflags protobuf boost_system boost_filesystem m opencv_core opencv_highgui opencv_imgproc opencv_imgcodecs hdf5_hl hdf5
3.编译caffe
进入源码根目录,依次执行以下命令:
make all -j8 //成功链接出若干个bin文件
make test -j8 //单元模块测试
make runtest -j8 //整体运行测试,显示PASSED
make pycaffe -j8
然后会在build下编译出caffe.bin、so、a等riscv架构的二进制文件和库,用file命令查看即可
4.python安装scikit-image依赖
caffe编译完了之后如果想要在python环境中使用caffe,还得安装这个依赖
先把环境变量加上
vi ~/.bashrc
#末尾添加
export PYTHONPATH=/home/caffe/python:$PYTHONPATH
export PKG_CONFIG_PATH="/usr/lib64/pkgconfig:$PKG_CONFIG_PATH"
export LDFLAGS="-L/usr/lib64"
export CPPFLAGS="-I/usr/include/openblas/"
保存并source一下
source ~/.bashrc
然后改个pc文件,安装lapack-devel的时候会生成blas.pc,但是一会安装scikit-image的时候会报错找不到OpenBLAS,是因为默认的blas.pc中的包名是blas,名字对不上找不到。并且最重要的一点是,你要先确定你的/usr/lib64目录下有libopenblas的库
vi /usr/lib64/pkgconfig/openblas.pc
libdir=/usr/lib64
includedir=/usr/include/openblas
Name: OpenBLAS
Description: FORTRAN reference implementation of BLAS Basic Linear Algebra Subprograms
Version: 0.3.18
URL: http://www.netlib.org/blas/
Libs: -L${libdir} -lopenblas
Cflags: -I${includedir}
然后安装依赖,这个非常耗时,我的开发板编译了4小时左右,建议加-v查看编译详情,其中安装过程中可能报错的情况我放在后边了,可进行参考
pip3 install scikit-image -v
安装完成后可进入python环境并查看是否已经安装上caffe
python3 #进入python环境
>>import caffe
>>import sys
>>caffe.__version__ #返回1.0.0
5.数据集测试
caffe源码根目录先下载数据集,并进行模型训练,最后一个命令执行完后,应显示准确率
./data/mnist/get_mnist.sh
#用链接下载数据集,这个脚本中的资源失效了,可以直接在csdn下载,下载地址附上了
#然后gunzip 4个gz文件
./examples/mnist/create_mnist.sh
vi examples/mnist/lenet_solver.prototxt #改成CPU训练
./examples/mnist/train_lenet.sh //模型训练
./build/tools/caffe.bin test -model examples/mnist/lenet_train_test.prototxt -weights examples/mnist/lenet_iter_10000.caffemodel -iterations 100 //测试
mmnist数据集下载:https://wenku.csdn.net/doc/6i7zotqxd5
编译caffe及安装scikit-image依赖报错问题汇总
- 1
src/caffe/layers/window_data_layer.cpp: In member function ‘virtual void caffe::WindowDataLayer::load_batch(caffe::Batch*)’:
src/caffe/layers/window_data_layer.cpp:293:42: error: ‘CV_LOAD_IMAGE_COLOR’ was not declared in this scope
293 | cv_img = cv::imread(image.first, CV_LOAD_IMAGE_COLOR);
| ^~~~~~~~~~~~~~~~~~~
make: *** [Makefile:592: .build_release/src/caffe/layers/window_data_layer.o] Error 1
解决:
在OpenCV 3.x及之前的版本中,CV_LOAD_IMAGE_COLOR是用于imread函数的图像加载标志。但在OpenCV 4.x中已经被移除了。使用rpm -q opencv确定是4版本的
在Makefile中修改:做一个替换
COMMON_FLAGS += -DCV_LOAD_IMAGE_COLOR=cv::IMREAD_COLOR -DCV_LOAD_IMAGE_GRAYSCALE=cv::IMREAD_GRAYSCALE
- 2
安装skimage的时候找不到OpenBLAS
是因为/usr/lib64/pkgconfig/下找不到openblas.pc,只有blas.pc,复制一个改名
- 3
安装skimage的时候提示缺少jpeg
安装libjpeg库,按照第一步的第二个yum,然后先构建pillow
pip3 install --no-cache-dir --force-reinstall pillow 重新构建pillow,完事之后再pip3 install scikit-image -v就没问题了
- 4
Python环境中import caffe说numpy版本太高2.2X的,需要1.2X版本的
pip install “numpy<1.25” --force-reinstall,这样就安装低版本,卸载高版本了
- 5
Python环境中import caffe说没有google模块
需要pip3 重新卸载protobuf,然后重新安装
鲲鹏昇腾开发者社区是面向全社会开放的“联接全球计算开发者,聚合华为+生态”的社区,内容涵盖鲲鹏、昇腾资源,帮助开发者快速获取所需的知识、经验、软件、工具、算力,支撑开发者易学、好用、成功,成为核心开发者。
更多推荐


所有评论(0)