【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.xdnf.cn/news/148471.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

Axure精选各类组件案例集锦:设计灵感与实战技巧

在设计大屏页面时,设计师们面临着如何构建丰富、直观且用户友好的界面的挑战。幸运的是,Axure等强大的原型设计工具提供了丰富的可视化组件库,为设计师们提供了无限的设计灵感和实战技巧。本文将通过精选的各类组件案例,探讨大屏设…

综合题第二题(路由器的配置)

题目 如何计算子网掩码 我们可以观察到上图的IP地址后面有“/26”、“30”。我们都知道子网掩码是由多个连续“1”和多个连续“0”组成的,“、26”表示子网掩码的二进制表达中有26个1。 例如:156.95.9.128/26 1111 1111.1111 1111.1111 1111.1100 0000…

摒弃“流量思维”,以精准流量驱动企业发展——基于开源 AI 智能名片、链动 2+1 模式及 O2O 商城小程序的思考

摘要:本文深入探讨在当前竞争激烈的营销环境下,摒弃“流量思维”的紧迫性与必要性。强调做内容营销不能仅仅局限于发文案,而应摆脱一味追求阅读量、推荐量和粉丝数的误区,聚焦于获取精准流量。结合开源 AI 智能名片、链动 21 模式…

??实验——完全使用Ansible部署多台服务器的服务

文章目录 需求两台Web服务器部署同一Web应用WeCenter,且两台服务器的用户上传的数据目录挂载到共享存储服务器中,总数据保存在一台数据库服务器中使用sersync简单实现两台共享存储服务器之间的Web应用共享数据目录的数据同步每天定时将两台Web服务器的We…

中国中车在线测评考的啥?大易题库如何通过|附真题型国企题库通关秘籍和攻略

言语理解题目:这类题目主要考察你的语言理解和表达能力,例如,给你一个段落,让你根据段落内容选择最合适的答案。要点是快速捕捉文段中的关键信息,理解作者的意图和观点 逻辑推理题目:这类题目需要你从一组…

盘点那些功能强大的思维导图在线工具,你用过几个

如果我们日常遇到比较繁杂的信息需要梳理,那我比较推荐使用思维导图在线工具进行梳理。这些工具可以通过图形化的方式展示各种信息之间的关系。这篇文章我将要介绍几款好用的思维导图工具帮我们更好的组织思维。 1.福晰思维导图 链接一下:https://www.…

RAG技术全面解析:Langchain4j如何实现智能问答的跨越式进化?

LLM 的知识仅限于其训练数据。如希望使 LLM 了解特定领域的知识或专有数据,可: 使用本节介绍的 RAG使用你的数据对 LLM 进行微调结合使用 RAG 和微调 1 啥是 RAG? RAG 是一种在将提示词发送给 LLM 之前,从你的数据中找到并注入…

记录:ubuntu20.04的安装和必要的开发准备

记录ubuntu20.04的安装和必要的开发准备 准备1. 安装ubuntu20.04时的Tips2. 屏幕亮度调节问题3. 解决 "No Wi-Fi Adapter Found"4. Nvidia Driver && cuda5. 修改安装源6. ssh 远程开发 准备 没有装双系统,只有 ubuntu20.04,记录安装之…

微服务--Gateway网关

在微服务架构中,Gateway(网关)是一个至关重要的组件,它扮演着多种关键角色,包括路由、负载均衡、安全控制、监控和日志记录等。 Gateway网关的作用 统一访问入口: Gateway作为微服务的统一入口&#xff0c…

HTTP协议1.1请求头和keep-alive

请求头分类 End-to-end(端对端) 必须全部带给目标服务器,不会被中途变化或去掉 Hop-by-hop(逐跳头) 比如客户端发请求,要路过代理(例如Nginx),头可以被自动删掉,来到真正服务器上…

IAR创建工程与工程配置

第一步:先创建一个新的工作区间 第二步:创建一个新的工程(工程名与文件夹名字要一致) 第三步:添加组 第四步:往各个组里添加文件 第五步:配置工程 因为我的程序下载是通过ST-link的SWD&#xf…

正向科技|格雷母线定位系统的设备接线安装示范

格雷母线安装规范又来了,这次是设备接线步骤 格雷母线是格雷母线定位系统的核心部件,沿着移动机车轨道方向上铺设,格雷母线以相互靠近的扁平状电缆与天线箱电磁偶合来进行信号传递,从而检测得到天线箱在格雷母线长度方向上的位置。…

C++ | Leetcode C++题解之第432题全O(1)的数据结构

题目&#xff1a; 题解&#xff1a; class AllOne {list<pair<unordered_set<string>, int>> lst;unordered_map<string, list<pair<unordered_set<string>, int>>::iterator> nodes;public:AllOne() {}void inc(string key) {if (…

安卓13删除下拉栏中的设置按钮 android13删除设置按钮

总纲 android13 rom 开发总纲说明 文章目录 1.前言2.问题分析3.代码分析4.代码修改5.编译6.彩蛋1.前言 顶部导航栏下拉可以看到,底部这里有个设置按钮,点击可以进入设备的设置页面,这里我们将更改为删除,不同用户通过这个地方进入设置。也就是下面这个按钮。 2.问题分析…

[Unity Demo]从零开始制作空洞骑士Hollow Knight第九集:制作小骑士基本的攻击行为Attack以及为敌人制作生命系统和受伤系统

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、制作小骑士基本的攻击行为Attack 1.制作动画以及使用UNITY编辑器编辑2.使用代码实现扩展新的落地行为和重落地行为3.使用状态机实现击中敌人造成伤害机制二…

前端vue-3种生命周期,只能在各自的领域使用

上面的表格可以简化为下面的两句话&#xff1a; setup是语法糖&#xff0c;下面的两个import导入是vue3和vue2的区别&#xff0c;现在的vue3直接导入&#xff0c;比之前vue2简单 还可以是导入两个生命周期函数

kafka负载均衡迁移(通过kafka eagle)

在grafana监控中发现kafka的各个节点磁盘不均匀 出现这样的情况是因为kafka默认是以文件数作为平衡的条件的。换句话说&#xff0c;kafka不会管一个副本有多大&#xff0c;只会看磁盘中有多少个副本文件。 解决方式&#xff1a; 1、修改策略&#xff0c;改为按照磁盘大小平衡…

闯关leetcode——69. Sqrt(x)

大纲 题目地址内容 解题代码地址 题目 地址 https://leetcode.com/problems/sqrtx/description/ 内容 Given a non-negative integer x, return the square root of x rounded down to the nearest integer. The returned integer should be non-negative as well. You mu…

《动手学深度学习》笔记1.10——激活函数←模型初始化←数值稳定性

目录 1. 数值稳定性 1.1 神经网络的梯度 1.2 数值稳定性的常见两个问题 1.3 梯度爆炸 1.3.1 MLP的例子 1.3.2 使用ReLU激活函数 1.3.3 产生的问题 1.4 梯度消失 1.4.1 使用sigmoid激活函数 1.4.2 梯度消失的问题 1.5 总结 2. 让训练更稳定 2.1 目标 (ResNet, LSTM…

深入探究PR:那些被忽视却超实用的视频剪辑工具

如果想要了解视频剪辑的工具&#xff0c;那一定听说过pr视频剪辑吧。如果你是新手其实我更推荐你从简单的视频剪辑工具入手&#xff0c;这次我就介绍一些简单好操作的视频剪辑工具来入门吧。 1.福晰视频剪辑 连接直达>>https://www.pdf365.cn/foxit-clip/ 这款工具操…