前言

高通 ® AI Engine Direct SDK 提供了用于 AI 开发的底层、统一 API。开发者借助该 SDK,能够更贴近硬件层面,并提升其 AI 模型在高通 ® AI 加速器上的性能,这些加速器包括:高通 ® Kryo™ 中央处理器(CPU)、高通 ® Adreno™ 图形处理器(GPU)以及高通 ® Hexagon™ 神经网络处理器(NPU)。开发者可以通过该 SDK 针对特定的加速器进行开发,也可以从 TensorFlow Lite 或 ONNX 运行时分配工作负载,以直接访问高通的 Hexagon™ NPU。

预训练模型下载

下载PyTorch预训练模型:

https://github.com/ultralytics/assets/releases/download/v8.3.0/yolov8n-pose.pt

模型转换

  安装配置

  模型转换需要用到AIMET 工具,在ubuntu系统上需要安装配置一个模型转换环境。 建议专门做一个转换环境的docker,

sudo docker pull ubuntu:22.04 sudo docker run -itd --name="qnn-2.24-ubuntu-22.04" --net=host \ --restart=always --privileged=true -e TZ="Asia/Shanghai" \ -v /etc/localtime:/etc/localtime:ro \ -v /tmp/.X11-unix:/tmp/.X11-unix \ -v /home/ts/qnn:/home/ts/qnn \ ubuntu:22.04 /bin/bash sudo docker exec -it qnn-2.24-ubuntu-22.04 /bin/bash

  上述命令在宿主机上执行,下面命令在docker容器中执行:

apt-get update apt-get install python3.10 python3.10-venv python3 -m venv venv source venv/bin/activate pip install --upgrade pip apt-get install curl cd /home/ts/qnn/2.28.2.241116 chmod +x ./bin/*.sh source ./bin/envsetup.sh ./bin/check-linux-dependency.sh chmod +x ./bin/check-python-dependency ./bin/check-python-dependency pip install onnx==1.12.0 onnxruntime==1.17.1 onnxsim==0.4.36 pip install torch==1.13.1 torchvision==0.14.1 chmod +x ./bin/envcheck ./bin/envcheck -a chmod +x ./bin/x86_64-linux-clang/* qnn-onnx-converter -h

  转onnx模型

 
from ultralytics import YOLO # Load the YOLOv8 model model = YOLO("/workdir/qualcomm/model/yolov8n-pose.pt") # Export the model to ONNX format model.export(format="onnx", imgsz=640, simplify=True, opset=14) # creates 'yolov8n.onnx' # Load the exported ONNX model onnx_model = YOLO("/workdir/qualcomm//model/yolov8n-pose.onnx")

模型的转换

模型的转换是指将onnx格式的模型文件转换为QNN格式的模型文件。这里的QNN格式的模型文举主要由.cpp、.bin和.json格式的文件组成。其中.cpp文件中展示了一系列的QNN API调用,.bin文件主要包括了模型的权重数据,.json文件主要描述模型文件内部的一些信息。模型的转换是通过在docker容器中执行QNN SDK中的命令qnn-onnx-convert来完成:

qnn-onnx-converter --input_network models/yolov8n-pose.onnx --input_dim images 1,3,640,640 --ignore_encodings --output_path models/yolov8n-pose.cpp qnn-onnx-converter --input_network models/yolov8n-pose.onnx --input_dim images 1,3,640,640 --output_path models/yolov8n-pose.cpp

这里,--input_dim用来指定输入层的名字,这里为images,以及输入层输入张量的shape,这里为1x3x640x640

3、生成.so和.bin文件

QNN SDK可以加载由QNN模型文件生成的.so文件和.bin文件,但两者的加载流程有所不同,简单起见,我们将QNN模型文件转换成.bin格式的文件。转换过程分为如下两步:

qnn-model-lib-generator -c models/yolov8n-pose.cpp -b models/yolov8n-pose.bin -o models -t x86_64-linux-clang --log_level=verbose qnn-context-binary-generator --model models/x86_64-linux-clang/libyolov8n-pose.so --backend /home/ts/qnn/2.28.2.241116/lib/x86_64-linux-clang/libQnnHtp.so --output_dir models/x86_64-linux-clang --binary_file yolov8n-pose

上述命令中,qnn-context-binary-generator命令通过--backend指定了模型推理使用的是HTP后端。

WoS推理运行

运行设备是Latitude 7455, Latitude 7455 是首款搭载 Windows 11 Arm(®) 的 AI PC([1]),采用高端设计,具备强大的设备端 AI 功能以及卓越的速度和效率。Latitude 7455 最高搭载骁龙(®) X Elite,可轻松处理复杂的工作负载,并提供突破性的电池续航时间([2])。

安装高通 AI Engine Direct SDK

高通 Package Manager官网下载sdk 2.28.2.241116

打开PowerShell终端,配置python虚拟环境名称为“py12qai34”, 安装参考 高通 AI Engine Direct SDK Windows Setup 高通 Documentation

下载源码:

git clone https://github.com/ThunderSoft-XA/XElite-Human-Pose-on-WoS

安装python依赖

pip install requests wget tqdm importlib-metadata qai-hub qai_hub_models huggingface_hub Pillow numpy opencv-python torch torchvision torchaudio transformers diffusers basicsr ultralytics==8.0.193

复制 依赖的QNN libraries 到qai_libs:

qai_libs\libQnnHtpV73Skel.so qai_libs\QnnHtp.dll qai_libs\QnnHtpV73Stub.dll qai_libs\QnnSystem.dll qai_libs\libqnnhtpv73.cat

将转换后的模型替换到models目录./models/yolov8-pose.bin

启动测试

python yolov8_pose.py

默认使用检测摄像头数据,效果如下:

更多推荐