当前位置: 首页 > news >正文

【Qualcomm】高通SNPE框架简介、下载与使用

目录

一 高通SNPE框架

1 SNPE简介

2 QNN与SNPE

3 Capabilities

4 工作流程

二 SNPE的安装与使用

1 下载

2 Setup

3 SNPE的使用概述


一 高通SNPE框架

1 SNPE简介

SNPE(Snapdragon Neural Processing Engine),是高通公司推出的面向移动端和物联网设备的深度学习推理框架。 SNPE提供了一套完整的深度学习推理框架,能够支持多种深度学习模型,包括PytorchTFliteTensorFlowONNX,同时还支持多种模型转换工具,如SNPE模型优化器(SNPE Model Optimizer)和ONNX模型优化器等,能够将模型转换成SNPE可执行格式,提升模型在移动端和物联网设备上的性能和效率

SNPE(Snapdragon Neural Processing Engine)还支持多种硬件平台,包括高通骁龙平台、ARM平台、Intel平台等,能够充分利用底层硬件的优势,提升深度学习推理的效率和速度,同时还支持多线程和多异构处理,能够充分发挥多核心和异构计算的优势。

总之,SNPE是一套面向移动端和物联网设备的高效深度学习推理框架,能够支持多种深度学习模型和多种硬件平台,为移动端和物联网设备上的深度学习应用提供了有效的支持。

2 QNN与SNPE

高通的QNN(Qualcomm Neural Network)和SNPE(Snapdragon Neural Processing Engine)都是面向移动设备的深度学习推理框架,但它们有一些不同之处。

功能和定位

Qualcomm Neural Network是高通公司开发的深度学习推理库,用于在移动设备上对神经网络进行推理。SNPE也是高通公司推出的神经网络推理框架,旨在使移动设备能够高效地进行深度学习推理操作。

支持的硬件

QNN主要针对高通骁龙处理器进行了优化,以提高在移动设备上的性能和效率。SNPE也专门为高通骁龙处理器进行了优化,以支持在移动设备上进行神经网络推理。

架构和性能

QNN设计上可能更专注于高通特定型号的处理器,以提供更高的性能和功耗效率。SNPE为了兼容多种移动设备,可能更加通用,可能在不同的设备上具有更好的可移植性。

开发者支持

QNN针对高通平台的开发者可能会获得更多定制化的支持和优化建议。SNPE可能提供更广泛的文档和支持,以便在多种移动设备上实现更好的支持。

综上,二者都是高通为移动设备深度学习推理而设计的框架,但QNN可能更侧重于高通特定处理器的优化和支持,而SNPE可能更通用一些,以在不同移动设备上提供更好的性能和可移植性。

3 Capabilities

Snapdragon神经处理引擎(SNPE)是用于执行深度神经网络的Qualcomm Snapdragon软件加速运行时。 使用SNPE,用户可以:

执行任意深度的神经网络。

在SnapdragonTM CPU,AdrenoTM GPU或HexagonTM DSP上执行网络。

在x86 Ubuntu Linux上调试网络执行。

将ONNX和TensorFlow等模型转换为SNPE深度学习容器(DLC)文件。

将DLC文件量化为8位定点,以便在Hexagon DSP上运行。

使用SNPE工具调试和分析网络性能。

通过C ++/Java将网络集成到应用程序和其他代码中。

4 工作流程

模型在流行的深度学习框架上训练完成后,训练的模型将转换为可加载到SNPE运行时的DLC文件。 然后,可以使用此DLC文件使用其中一个Snapdragon加速计算核心执行前向推断传递。SNPE框架的工作流程包括模型准备、模型加载、数据输入、模型推理结果输出等步骤,能够支持多种深度学习模型和多种硬件平台,为移动端和物联网设备上的深度学习应用提供高效的支持。基本的SNPE工作流程包含的步骤如下:

模型准备:使用深度学习框架(如Caffe、TensorFlow等)训练出深度学习模型,然后通过SNPE模型优化器将模型转换成SNPE可执行格式,即DLC文件。在模型转换的过程中,SNPE会对模型进行剪枝、量化、编译等优化操作,以提升模型在移动端和物联网设备上的性能和效率。

模型加载:将转换后的SNPE模型加载到移动端或物联网设备上。在加载模型的过程中,SNPE会根据设备配置和硬件平台等条件选择合适的加速库,如高通DSP库等。可选择量化DLC 文件以在Hexagon DSP 上运行。

数据输入:将待处理的数据输入到SNPE模型中。可以通过摄像头等设备获取实时数据流,也可以通过文件读取的方式输入离线数据。

模型推理:通过SNPE模型推理引擎对数据进行处理。在模型推理的过程中,SNPE会根据模型结构和数据输入等参数计算出模型的输出结果,输出结果可以是分类、回归、分割等形式。

结果输出:将模型推理得到的结果输出到移动端或物联网设备上。可以通过屏幕等设备显示或播放结果,也可以通过网络传输的方式将结果发送到远程服务器上。

二 SNPE的安装与使用

SNPE可以运行模型进行推理,但需要先将模型转换为Deep Learning Container (DLC) file才可以加载进SNPE中。

CPU支持支持双精度浮点和8位量化的模型,GPU支持混合精度或者单精度浮点,数字信号处理器DSP就只支持支持8位整形。DLC进一步进行8bit量化才可以运行在Qualcomm Hexagon DSP上。

1 下载

地址:Qualcomm Neural Processing SDK | Qualcomm Developer

点击Get Software 直接下载, 然后解压

2 Setup

① 创建conda环境 snpe

conda create -n snpe python=3.10 
# 激活snpe环境
conda activate snpe

② 安装SNPE相关依赖

安装Linux依赖:

sudo bash ${SNPE_ROOT}/bin/check-linux-dependency.sh

安装Python依赖:

${SNPE_ROOT}/bin/check-python-dependency

注意:如果Python依赖可正常安装,则可跳过这一步骤。否则,修改check-python-dependency文件,以便使用清华源。

vim check-python-dependency

添加一行内容,修改如下:

"-i https://pypi.tuna.tsinghua.edu.cn/simple"

③ 安装ML Frameworks

ML Frameworks的版本按照实际需求来安装,以下仅作为示例。

# tensorflowpip3 install TensorFlow==2.10.1 -f https://pypi.org/project/tensorflow/2.10.1/# CPU版 tensorflowpip3 install tensorflow-cpu==2.10.1 -i https://pypi.tuna.tsinghua.edu.cn/simple# tflitepip3 install tflite==2.3.0 -i https://pypi.tuna.tsinghua.edu.cn/simple# PyTorchpip3 install torch==1.13.1 -f https://download.pytorch.org/whl/cpu/stable -i https://pypi.tuna.tsinghua.edu.cn/simple# ONNXpip3 install onnx==1.16.1 -i https://pypi.tuna.tsinghua.edu.cn/simple# ONNX Runtimepip3 install onnxruntime==1.18.0 -i https://pypi.tuna.tsinghua.edu.cn/simple

使用下述命令确认上述依赖是否成功安装,无报错即可。

python -c "import tensorflow"python -c "import onnx"python -c "import onnxruntime"python -c "import tflite"python -c "import torch"

3 SNPE的使用概述

# Inception v3模型数据地址:
https://storage.googleapis.com/download.tensorflow.org/models/inception_v3_2016_08_28_frozen.pb.tar.gz
# 运行脚本下载模型并设置为在CPU上运行:
python3 $SNPE_ROOT/examples/Models/InceptionV3/scripts/setup_inceptionv3_snpe.py -a ~/tmpdir -d
# 运行脚本下载模型并设置为在DSP上运行:
python3 $SNPE_ROOT/examples/Models/InceptionV3/scripts/setup_inceptionv3_snpe.py -a ~/tmpdir -d -r dsp
# 在HTA上运行:
python3 $SNPE_ROOT/examples/Models/InceptionV3/scripts/setup_inceptionv3_snpe.py -a ~/tmpdir -r aip

① 设置环境变量

source ${SNPE_ROOT}/bin/envsetup.sh

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

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

② 模型转换

◆ 非量化

# 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-tflite-to-dlc工具将TFLite模型转换为等效的Qualcomm®Neural Processing SDK DLC文件。下面的命令将Inception v3 TFLite模型转换为DLC文件。
snpe-tflite-to-dlc --input_network inception_v3.tflite--input_dim input "1,299,299,3"--output_path inception_v3.dlc
# snpe-pytorch-to-dlc工具将PyTorch TorchScript模型转换为等效的Qualcomm®Neural Processing SDK DLC文件。下面的命令将ResNet18 PyTorch模型转换为DLC文件。
snpe-pytorch-to-dlc --input_network resnet18.pt--input_dim input "1,3,224,224"--output_path resnet18.dlc
# snpe-onnx-to-dlc工具将序列化的ONNX模型转换为等效的DLC表示。
snpe-onnx-to-dlc --input_network models/bvlc_alexnet/bvlc_alexnet/model.onnx--output_path bvlc_alexnet.dlc

◆ 量化

每个snpe-framework-to-dlc转换工具都将非量化模型转换为非量化DLC文件。量化需要另一个步骤。snpe-dlc-quantize工具用于将模型量化为支持的定点格式之一。

例如,下面的命令将把一个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

Linux Host

转到模型的基本位置并运行snpe-net-run。

cd $SNPE_ROOT/examples/Models/InceptionV3snpe-net-run --container dlc/inception_v3_quantized.dlc --input_list data/cropped/raw_list.txt

snpe-net-run完成后,结果将保存到$SNPE_ROOT/examples/Models/InceptionV3/output目录中。

◆ Run on Android Platform

设置SNPE_TARGET_ARCH

export SNPE_TARGET_ARCH=aarch64-android

PUSH库和二进制文件

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

export SNPE_TARGET_ARCH=aarch64-androidexport SNPE_TARGET_DSPARCH=hexagon-v73
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"
adb push $SNPE_ROOT/lib/$SNPE_TARGET_ARCH/*.so \/data/local/tmp/snpeexample/$SNPE_TARGET_ARCH/libadb push $SNPE_ROOT/lib/$SNPE_TARGET_DSPARCH/unsigned/*.so \/data/local/tmp/snpeexample/dsp/libadb push $SNPE_ROOT/bin/$SNPE_TARGET_ARCH/snpe-net-run \/data/local/tmp/snpeexample/$SNPE_TARGET_ARCH/bin

PUSH模型相关数据Android

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模型

可以使用CPU或者DSP,如下。

使用CPU Runtime:

adb shellexport SNPE_TARGET_ARCH=aarch64-androidexport LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/data/local/tmp/snpeexample/$SNPE_TARGET_ARCH/libexport PATH=$PATH:/data/local/tmp/snpeexample/$SNPE_TARGET_ARCH/bincd /data/local/tmp/inception_v3snpe-net-run --container inception_v3_quantized.dlc --input_list target_raw_list.txtexit

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

adb pull /data/local/tmp/inception_v3/output output_android

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

python3 scripts/show_inceptionv3_classifications_snpe.py -i data/target_raw_list.txt \-o output_android/ \-l data/imagenet_slim_labels.txt

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

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

使用DSP Runtime:

需要--use_dsp选项

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

adb shellexport SNPE_TARGET_ARCH=aarch64-androidexport LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/data/local/tmp/snpeexample/$SNPE_TARGET_ARCH/libexport PATH=$PATH:/data/local/tmp/snpeexample/$SNPE_TARGET_ARCH/binexport ADSP_LIBRARY_PATH="/data/local/tmp/snpeexample/dsp/lib;/system/lib/rfsa/adsp;/system/vendor/lib/rfsa/adsp;/dsp"cd /data/local/tmp/inception_v3snpe-net-run --container inception_v3_quantized.dlc --input_list target_raw_list.txt --use_dspexit

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

adb pull /data/local/tmp/inception_v3/output output_android_dsp

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

python3 scripts/show_inceptionv3_classifications_snpe.py -i data/target_raw_list.txt \-o output_android_dsp/ \-l data/imagenet_slim_labels.txt

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

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

以上,本文分享的内容就结束啦。


http://www.mrgr.cn/news/34914.html

相关文章:

  • #Swift Automatic Initializer Inheritance
  • 《目标检测》——基础理论知识(目标检测的数据集、评价指标:IOU、mAP、非极大抑制NMS)
  • WPF-控件的属性值的类型转化
  • 【HBase原理及应用实训课程】第五章 HBase与MapReduce的集成
  • 第四节-OSI-网络层
  • 前端神经网络入门(三):深度学习与机器学习的关系、区别及核心理论支撑 - 以Brain.js示例
  • JUC并发编程_ReadWriteLock
  • 【机器学习】---元强化学习
  • 【Qualcomm】高通SNPE框架的使用 | 原始模型转换为量化的DLC文件 | 在Android的CPU端运行模型
  • 大数据-146 Apache Kudu 安装运行 Dockerfile 模拟集群 启动测试
  • @JsonFormat与@DateTimeFormat的区别
  • 金九银十,字节的第一面来咯
  • (8)mysql容器启动第一次无论输入密码与否均会报错处理
  • Linux复习--网络基础(OSI七层、TCP三次握手与四次挥手、子网掩码计算)
  • Transformer-LSTM网络的轴承寿命预测,保姆级教程终于来了!
  • 数据结构和算法之树形结构(3)
  • 花半小时用豆包Marscode 和 Supabase免费部署了一个远程工作的导航站
  • 2025 广州国际新能源汽车功率半导体技术展览会与您相约广州
  • linux文件目录指令合集--拷贝、移动、查看
  • 到底是谁配谁-《分析模式》漫谈33
  • 【附实例】Python字典的各种操作
  • c++哈希
  • 算法:二维数组查找
  • UWB为什么是首选的室内定位技术
  • 【VMware】虚拟机安装
  • 基于Java+Jsp+SpringMVC漫威手办商城系统设计和实现