高通骁龙snpe 编译配置运行

转载请注明出处:https://blog.csdn.net/qq_27262241/article/details/110930325
I’ll make a Snpe Docker Image to fuck the shit compile process.

硬件准备

  • 笔记本电脑: 安装ubuntu16.04
  • 手机:搭载高通骁龙处理器
  • usb线

安装

不踩坑指南: 要先装caffe, 再装python虚拟环境 最后装 TensorFlow,否则protocol会冲突

1 编译caffe

参考链接

准备

#下载
git clone https://github.com/BVLC/caffe.git
# 安装依赖
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
sudo apt-get install libatlas-base-dev

还要安装:


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

修改编译选项

cd <caffe目录>
cp Makefile.config.example Makefile.config

在caffe目录下,修改 Makefile.config

#给INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include添加   /usr/include/hdf5/serial
INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /usr/include/hdf5/serial

#给 LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib 添加  /usr/lib/x86_64-linux-gnu/hdf5/serial
LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib /usr/lib/x86_64-linux-gnu/hdf5/serial


#中把 CPU_ONLY=1行取消注释。
CPU_ONLY=1

修改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

编译运行

make all # 这一步骤会出现很多错误,参考文末,caffe错误总结
make test 
make runtest
make distribute
make pycaffe

2 安装python3.5+tensorflow

安装miniconda

先下载 ubuntu64位 https://repo.anaconda.com/miniconda/Miniconda2-latest-Linux-x86_64.sh

然后运行 bash *.sh

更换conda源

更换清华源

show_channel_urls: true
channel_alias: https://mirrors.tuna.tsinghua.edu.cn/anaconda
default_channels:
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/pro
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/msys2
custom_channels:
  conda-forge: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
  msys2: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
  bioconda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
  menpo: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
  pytorch: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
  simpleitk: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
channels:
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch/
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/

安装python3.5虚拟环境

conda create -n py35 python=3.5

激活虚拟环境

conda activate <envName>
conda deactivate 

安装tensorflow

# 先激活虚拟环境
conda install tensorflow

3 配置snpe的环境

SDK 下载链接

https://developer.qualcomm.com/software/qualcomm-neural-processing-sdk

#解压
unzip -X snpe-X.Y.Z.zip
# 配置环境变量
source snpe-X.Y.Z/bin/dependencies.sh

# 检查python依赖项是否齐全,如有错误,请使用conda install *进行安装
source snpe-X.Y.Z/bin/check_python_depends.sh

设置环境变量

# NDK
export ANDROID_NDK_ROOT=<path_to_ndk>
# 指向Caffe 编译目录
source bin/envsetup.sh -c <CAFFE_DIR>
# <TENSORFLOW_DIR>指向tensorflow conda虚拟环境所在的目录即可。
source bin/envsetup.sh -t <TENSORFLOW_DIR>

运行

1. 导出cld模型

首先下载 inception v3模型

inception_v3_2016_08_28_frozen.pb.tar.gz 
- https://storage.googleapis.com/download.tensorflow.org/models/inception_v3_2016_08_28_frozen.pb.tar.gz

转换模型

python $SNPE_ROOT/models/inception_v3/scripts/setup_inceptionv3.py -a ~/tmpdir
#参数解释
#	-a Assets:模型目录
#	-d 加上 -d表示当前还没下载模型,需要运行时下载
#	-r runtime,运行平台: cpu、gpu、dsp、aip、all

转换后在./dlc目录下获得 dlc模型

2 基准测试

首先配置运行文件 config.json

{
    "Name":"<Model Name>",
    "HostRootPath": "<运行结果保存在哪个Path to copy result on host>",
    "HostResultsDir":"<Result Directory name>",
    "DevicePath":"<Path to store results on device e.g: /data/local/tmp/snpebenchmark>",
    "Devices":["<device id by 'adb devices'>"],
    "Runs":<No. of runs运行次数>,

    "Model": {
        "Name": "<Output folder name on device>",
        "Dlc": "<Path to dlc file, to push on device>",
        "UDO": "<Optional Key, Path to compiled UDO Package, only to be used with a UDO enabled DLC>"
        "Data": [
            "<Host path to input images folder to push images on device ; example: data/imagenet/227x227_raw>"
        ],
        "InputList": "<Path to imagelist text file to push image list on device; example: 227x227_raw/0a4699b9cbd14cb76e707374ed7be802.raw>"
        "RandomInput": <Pass number no. of random images eg: 10
                        NOTE: If using this option, then "DATA" and "InputList" should not be passed in config file>
    },

    "Runtimes":[<list of runtimes supported runtimes: "CPU","GPU","GPU_s","GPU_FP16","DSP","AIP","AIP_ACT16">],
    "Measurements": [<Measurement type: "timing","mem">],
    "CpuFallback": <Set to true to enable CPU fallback>,
    "UBFloatOutput": <Set to true to override the userbuffer output used for inference, and the output type is float>,
    "PerfProfile": <Choose performance profile from the following options: balanced, default, sustained_high_performance, high_performance, power_saver, system_settings>,
    "ProfilingLevel": <Choose profiling level from the following options: basic, moderate, detailed, off>,
    "BufferTypes": <Choose Buffer Types from the following options: float, ub_float, ub_tf8, ub_tf16. All buffer types except ub_tf16 are considered by default, if BufferTypes is not specified.
                    NOTE: ub_tf8 is only supported on DSP,AIP,AIP_ACT16 runtime and for other runtimes it gets ignored,
                          ub_tf16 is only supported on AIP,AIP_ACT16 runtime and for other runtimes it gets ignored.
                          For AIP_ACT16 runtime, [float, ub_float, ub_tf16] are considered by default if BufferTypes is not specified.>
}

然后运行

# 先要设置 环境变量 SNPE NDK tensorflow
export ANDROID_NDK_ROOT=/opt/android-ndk-r17c
cd /mnt/c/Users/sc1812/Documents/ov_workspace/snpe_ws/snpe-1.43.0.2307/
source bin/envsetup.sh -c ~/snpe_ws/caffe
source bin/envsetup.sh -t /home/sc/miniconda2/envs/py35


cd $SNPE_ROOT/benchmarks
python3 snpe_bench.py -c alexnet_sample.json

WSL系统配置adb,在~/.bashrc中添加

alias adb='adb.exe'
alias fastboot='fastboot.exe'

caffe错误总结(愿所有的坑因填坑人而平坦)

错误信息gflags/gflags.h: No such file or directory

安装:

apt-get install libgflags-dev
来自 <https://blog.csdn.net/muyeluo123/article/details/100919082> 

错误信息glog.h: No such file or directory

glog:

sudo apt-get install libgoogle-glog-dev

错误信息cublas_v2.h: No such file or directory

在MakeFile.config中把 CPU_ONLY=1行取消注释。

错误信息:fatal error: cblas.h: No such file or directory

sudo apt-get install libopenblas-dev

错误信息: lmdb.h no such file or directory

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

错误信息 hdf5.h: No such file or directory

修改 Makefile.config

INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include
改为
INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /usr/include/hdf5/serial
LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib /usr/lib/x86_64-linux-gnu/hdf5/serial

修改 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

错误 :undefined reference tocv::imread(cv::String const&, int)’`

错误信息:

CXX/LD -o .build_release/tools/caffe.bin
.build_release/lib/libcaffe.so: undefined reference to `cv::imread(cv::String const&, int)'
.build_release/lib/libcaffe.so: undefined reference to `cv::imencode(cv::String const&, cv::_InputArray const&, std::vector<unsigned char, std::allocator<unsigned char> >&, std::vector<int, std::allocator<int> > const&)'
.build_release/lib/libcaffe.so: undefined reference to `cv::imdecode(cv::_InputArray const&, int)'

解决方法
在 Makefile.config中取消OPENCV_VERSION=3这一行的注释, 确保你的系统是opencv3

#取消注释,设opencv3
OPENCV_VERSION=3

I think you may be using OpenCV 3. You need to set the OPENCV_VERSION variable in Makefile.config.
来自 https://github.com/BVLC/caffe/issues/3700

错误 cannot find -lopencv_imgcodecs

注释掉 Makefile.config中的

#OPENCV_VERSION =3 

这一行。和前面的错误不一样,因为前面我的系统装的是opencv3又换了个电脑装的是opencv2

错误信息 :找不到 #include <numpy/arrayobject.h>

sudo apt-get install python-numpy

参考

资源汇总

官方文档:https://developer.qualcomm.com/docs/snpe/android_tutorial.html

CSDN文档:

https://bss.csdn.net/m/zone/qualcomm2016/resource_detail?id=1592

基准测试:

https://developer.qualcomm.com/docs/snpe/benchmarking.html

视频教程

https://edu.csdn.net/course/play/28096?spm=1002.2001.3001.4157

SNPE量化加速

https://zhuanlan.zhihu.com/p/74326567

SDK 下载链接

https://developer.qualcomm.com/software/qualcomm-neural-processing-sdk

相关推荐

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:数字20 设计师:CSDN官方博客 返回首页

打赏作者

三川小哥 知乎

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值