高通AI Engine SDK(QNN)使用教程(环境配置、模型转换、量化、推理、分析)

在这里插入图片描述

1. Introduction

1.1 什么是QNN

QNN是高通发布的神经网络推理引擎,是SNPE的升级版,其主要功能是:

  • 完成从Pytorch/TensorFlow/Keras/Onnx等神经网络框架到高通计算平台的模型转换;
  • 完成模型的低比特量化(int8),使其能够运行在高通神经网络芯片上;
  • 提供测试工具(qnn-net-run),可以运行网络并保存输出;
  • 提供测试工具(qnn-profile-viewer),可以进行FLOPS、参数量、每一层运行时间等分析;

1.2 QNN与SNPE的变化

  • SNPE模型使用容器(DL container)格式保存,QNN模型使用cpp,json和bin文件保存;
  • SNPE模型在运行前无需编译,可以直接在不同平台下运行,QNN的模型需要先编译到对应平台,才可以运行;
  • SNPE模型转化(snpe-xxx-to-dlc)和模型量化(snpe-dlc-quantize)在QNN中被合并到一个步骤(qnn-xxx-converter)

2. Linux端

QNN的Linux端提供这些功能:

qnn-accuracy-debugger
qnn-netron
qnn-platform-validator
qnn-tensorflow-converter
qnn-accuracy-evaluator
qnn-net-run
qnn-profile-viewer
qnn-tflite-converter
qnn-context-binary-generator
qnn-onnx-converter
qnn-pytorch-converter
qnn-throughput-net-run
qnn-model-lib-generator
qnn-op-package-generator
qnn-quantization-checker

模型转化、模型量化、模型分析等操作需要在Linux下完成。

2.1 环境配置

2.1.1 拷贝文件

以qnn-2.13.2.230822为例,将QNN的SDK解压到服务器端,然后配置环境变量(仅在当前终端生效,新开终端需要再次配置):

export QNN_SDK_ROOT=/path/to/your/qnn-2.13.2.230822

执行初始化操作:

source ${QNN_SDK_ROOT}/bin/envsetup.sh

输出:

[INFO] AISW SDK environment set                                                                                    
[INFO] QNN_SDK_ROOT: /xxx/xxx/qnn-2.13.2.230822 

2.1.2 配置Python环境

新建Conda环境(推荐):

conda create -n qnn python==3.8
conda activate qnn

自动安装依赖:

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

如果遇到Permission denied,需要把 ${QNN_SDK_ROOT}/bin路径下的文件赋予可执行权限:

chomd 777 ${QNN_SDK_ROOT}/bin/*

2.1.3 安装Linux依赖

执行:

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

2.1.4 测试

执行

qnn-net-run --version

输出:

qnn-net-run pid:1947023                               
<think>好的,我现在需要帮助用户了解如何在QNN平台上部署YOLOv5模型。首先,我需要回顾用户提供的引用内容,特别是引用3,其中提到了QNN的部署方法。用户提供的引用3提到,QNN的demo原本比较复杂,所以进行了重构,使其代码结构更清晰。这可能意味着用户需要简化步骤或更详细的指导。 首先,我应该确认QNN是什么。根据引用3,QNN高通公司的神经网络SDK,用于在骁龙平台上加速AI模型。用户可能是在移动设备或嵌入式设备上部署YOLOv5,因此需要转换模型QNN支持的格式,并集成到应用程序中。 接下来,用户的问题是关于部署YOLOv5到QNN的具体教程。根据现有的引用,用户可能已经熟悉了其他框架如ONNX和NCNN(引用1和2),但需要转向QNN。因此,我需要整理出一个步骤指南,可能包括模型转换量化、集成到QNN环境,以及测试。 第一步通常是模型转换。YOLOv5通常是用PyTorch训练的,所以需要将PyTorch模型转换为ONNX,然后再转换QNN支持的格式。引用1中提到了MNNConvert工具将ONNX转为MNN模型,但QNN可能需要不同的转换工具,可能需要使用高通提供的转换工具,比如SNPE(Snapdragon Neural Processing Engine)或者直接使用QNN转换工具。不过引用3提到的是QNN的example重构,可能直接使用QNN转换流程。 然后,需要考虑模型量化。引用2提到ncnn模型量化转换QNN可能也需要类似的步骤,将FP32模型转换为INT8,以提高推理速度。需要确认QNN是否支持PTQ(训练后量化)或QAT(量化感知训练)。 接下来是代码集成部分。引用3提到重构QNN的demo,使其结构更清晰。因此,用户可能需要编写C++代码,调用QNN的API来加载模型、处理输入输出。可能需要预处理图像,执行推理,后处理获取检测结果。 测试阶段,可能需要编译和运行示例,如引用2中的ncnn例子,使用类似的方式在QNN环境中运行。可能需要注意输入输出的张量形状是否匹配,以及后处理的正确性。 需要确保每一步都正确,比如模型转换时的层支持情况,是否有不支持的算子需要替换或自定义实现。此外,部署到Android端可能需要JNI接口或相关的Android NDK配置,这可能涉及到引用2中提到的Android部署经验。 最后,可能还需要性能优化,如多线程推理、内存优化等,以确保实时性。用户可能需要参考QNN的文档和社区资源来解决特定问题。</think>在QNN平台上部署YOLOv5模型可分为以下步骤,结合模型转换、代码重构和部署优化: ### 一、环境准备 1. 安装QNN SDK(需高通开发者账号) 2. 准备YOLOv5 PyTorch模型(`.pt`格式) 3. 安装ONNX运行时环境 ```bash pip install onnx onnx-simplifier ``` ### 二、模型转换流程 1. **PyTorch转ONNX** ```python import torch model = torch.hub.load('ultralytics/yolov5', 'yolov5s') torch.onnx.export(model, torch.randn(1,3,640,640), "yolov5s.onnx", opset_version=12) ``` 2. **ONNX模型优化** ```bash python -m onnxsim yolov5s.onnx yolov5s-sim.onnx ``` 3. **QNN模型转换** 使用QNN提供的模型转换工具(需注意算子兼容性): ```bash qnn-convert
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值