环境:
硬件使用的是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,然后重新安装

Logo

鲲鹏昇腾开发者社区是面向全社会开放的“联接全球计算开发者,聚合华为+生态”的社区,内容涵盖鲲鹏、昇腾资源,帮助开发者快速获取所需的知识、经验、软件、工具、算力,支撑开发者易学、好用、成功,成为核心开发者。

更多推荐