【Qualcomm】高通SNPE框架的使用 | 原始模型转换为量化的DLC文件 | 在Android的DSP端运行模型

目录

[① 激活snpe环境](#① 激活snpe环境)

[② 设置环境变量](#② 设置环境变量)

[③ 模型转换](#③ 模型转换)

[④ run](#④ run)


首先,默认SNPE工具已经下载并且Setup相关工作均已完成。同时,拥有原始模型文件,本文使用的模型文件为SNPE 框架示例的inception_v3_2016_08_28_frozen.pb``文件。image_file_list.txt文件的内容为raw图片数据的路径。 target_raw_list.txt``文件的内容是``raw``图片数据``在``Android``设备的实际``路径``。

① ``激活snpe环境

bash 复制代码
conda activate snpe

② 设置环境变量

bash 复制代码
source ${SNPE_ROOT}/bin/envsetup.sh

这将设置/更新以下环境变量:

  1. SNPE_ROOT
  2. PYTHONPATH
  3. PATH
  4. LD_LIBRARY_PATH

③ 模型转换

bash 复制代码
# snpe-tensorflow-to-dlc工具将TensorFlow模型转换为等效的Qualcomm® Neural Processing SDK DLC文件。
# 下面的命令将一个Inception v3 TensorFlow模型转换为Qualcomm®Neural Processing SDK DLC文件。
snpe-tensorflow-to-dlc --input_network $SNPE_ROOT/examples/Models/InceptionV3/tensorflow/inception_v3_2016_08_28_frozen.pb \
                       --input_dim input "1,299,299,3" --out_node "InceptionV3/Predictions/Reshape_1" \
                       --output_path inception_v3.dlc

量化需要另一个步骤。snpe-dlc-quantize工具用于将模型量化为支持的定点格式之一。

bash 复制代码
# 例如,下面的命令将把一个Inception v3 DLC文件转换成一个量化的Inception v3 DLC文件。

snpe-dlc-quantize --input_dlc inception_v3.dlc --input_list image_file_list.txt

--output_dlc inception_v3_quantized.dlc

④ run

Run on Android Platform

设置****SNPE_TARGET_ARCH

bash 复制代码
export SNPE_TARGET_ARCH=aarch64-android

PUSH 库和二进制文件

将Qualcomm®Neural Processing SDK库和snpe-net-run可执行文件推送到Android目标上的**/data/local/tmp/snpeexample**。"SNPE_TARGET_DSPARCH"设置为目标 Android 设备的 DSP 架构

bash 复制代码
export SNPE_TARGET_ARCH=aarch64-android

export SNPE_TARGET_DSPARCH=hexagon-v73
bash 复制代码
adb shell "mkdir -p /data/local/tmp/snpeexample/$SNPE_TARGET_ARCH/bin"

adb shell "mkdir -p /data/local/tmp/snpeexample/$SNPE_TARGET_ARCH/lib"

adb shell "mkdir -p /data/local/tmp/snpeexample/dsp/lib"
bash 复制代码
adb push $SNPE_ROOT/lib/$SNPE_TARGET_ARCH/*.so \

/data/local/tmp/snpeexample/$SNPE_TARGET_ARCH/lib

adb push $SNPE_ROOT/lib/$SNPE_TARGET_DSPARCH/unsigned/*.so \

/data/local/tmp/snpeexample/dsp/lib

adb push $SNPE_ROOT/bin/$SNPE_TARGET_ARCH/snpe-net-run \

/data/local/tmp/snpeexample/$SNPE_TARGET_ARCH/bin

PUSH 模型相关数据 Android

bash 复制代码
cd $SNPE_ROOT/examples/Models/InceptionV3
mkdir data/rawfiles && cp data/cropped/*.raw data/rawfiles/
adb shell "mkdir -p /data/local/tmp/inception_v3"
adb push data/rawfiles /data/local/tmp/inception_v3/cropped
adb push data/target_raw_list.txt /data/local/tmp/inception_v3
adb push dlc/inception_v3_quantized.dlc /data/local/tmp/inception_v3
rm -rf data/rawfiles

RUN 模型 使用DSP Runtime

需要**--use_dsp**选项。

注意,额外的环境变量ADSP_LIBRARY_PATH必须设置为使用DSP。

bash 复制代码
adb shell

export SNPE_TARGET_ARCH=aarch64-android

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/data/local/tmp/snpeexample/$SNPE_TARGET_ARCH/lib

export PATH=$PATH:/data/local/tmp/snpeexample/$SNPE_TARGET_ARCH/bin

export ADSP_LIBRARY_PATH="/data/local/tmp/snpeexample/dsp/lib;/system/lib/rfsa/adsp;/system/vendor/lib/rfsa/adsp;/dsp"

cd /data/local/tmp/inception_v3

snpe-net-run --container inception_v3_quantized.dlc --input_list target_raw_list.txt --use_dsp

exit

在run完模型后将结果pull到本地host。

bash 复制代码
adb pull /data/local/tmp/inception_v3/output output_android_dsp

运行以下python脚本检查分类结果:

bash 复制代码
python3 scripts/show_inceptionv3_classifications_snpe.py -i data/target_raw_list.txt \

-o output_android_dsp/ \

-l data/imagenet_slim_labels.txt

输出应该如下所示,显示所有图像的分类结果。

bash 复制代码
Classification results
cropped/notice_sign.raw 0.175781 459 brass
cropped/plastic_cup.raw 0.976562 648 measuring cup
cropped/chairs.raw      0.285156 832 studio couch
cropped/trash_bin.raw   0.773438 413 ashcan

至此,本文分享的内容就结束啦。

相关推荐
alexhilton10 分钟前
深入理解Jetpack Compose中的函数的执行顺序
android·kotlin·android jetpack
李新_1 小时前
Android 画中画避坑指北
android
一一Null2 小时前
Android studio—socketIO库return与emit的使用
android·java·网络·ide·websocket·网络协议·android studio
ansondroider3 小时前
Android RK356X TVSettings USB调试开关
android·adb·usb·otg·rk356x
全栈极简3 小时前
Android串口通信
android
jiaxingcode3 小时前
MAC系统下完全卸载Android Studio
android·macos·android studio
张力尹3 小时前
「架构篇 1」认识 MVC / MVP / MVVM / MVI
android·面试·架构
张力尹3 小时前
「架构篇 2」认识 MVC / MVP / MVVM / MVI
android·面试·架构
不穿铠甲的穿山甲3 小时前
Android-KeyStore安全的存储系统
android·安全