【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

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

相关推荐
2501_9159214311 小时前
iOS 是开源的吗?苹果系统的封闭与开放边界全解析(含开发与开心上架(Appuploader)实战)
android·ios·小程序·uni-app·开源·iphone·webview
allk5511 小时前
OkHttp源码解析(一)
android·okhttp
allk5511 小时前
OkHttp源码解析(二)
android·okhttp
2501_9159090615 小时前
原生 iOS 开发全流程实战,Swift 技术栈、工程结构、自动化上传与上架发布指南
android·ios·小程序·uni-app·自动化·iphone·swift
2501_9159090615 小时前
苹果软件混淆与 iOS 代码加固趋势,IPA 加密、应用防反编译与无源码保护的工程化演进
android·ios·小程序·https·uni-app·iphone·webview
2501_9160074715 小时前
苹果软件混淆与 iOS 应用加固实录,从被逆向到 IPA 文件防反编译与无源码混淆解决方案
android·ios·小程序·https·uni-app·iphone·webview
介一安全15 小时前
【Frida Android】基础篇6:Java层Hook基础——创建类实例、方法重载、搜索运行时实例
android·java·网络安全·逆向·安全性测试·frida
沐怡旸18 小时前
【底层机制】【Android】深入理解UI体系与绘制机制
android·面试
啊森要自信18 小时前
【GUI自动化测试】YAML 配置文件应用:从语法解析到 Python 读写
android·python·缓存·pytest·pip·dash
下位子20 小时前
『AI 编程』用 Codex 开发识字小帮手应用
android·openai·ai编程