一、简介
本教程将详细介绍基于高通平台进行 SNPE 的 SDK 开发过程,包括相关概念、环境准备、项目结构以及模型转换等内容。通过本教程,您将能够了解如何利用高通 SNPE 推理引擎在高通设备上实现深度学习模型的部署与应用开发。
(一)什么是 SNPE
SNPE(Snapdragon Neural Processing Engine)是高通公司开发的一款用于在其骁龙处理器上进行神经网络推理的软件开发工具包(SDK)。它允许开发者将深度学习模型部署到支持高通骁龙芯片的设备上,实现高效的设备端人工智能计算,支持多种深度学习框架训练的模型,如 Caffe、Caffe2、TensorFlow 等。
(二)开发环境准备
项目地址: https://github.com/gesanqiu/SNPE_Tutorial
- 开发平台:Qualcomm® QRB5165(Linux - Ubuntu 18.04)。
- 图形界面:Weston(Wayland)。
- 开发框架
- Gstreamer - 1.14.5。
- OpenCV - 4.5.5(需用户编译安装,且修改CMakeLists.txt中的OpenCV_DIR)。
- 算法引擎:snpe - 2.5.0.4052(SNPE Runtime Library 需用户从官方链接下载并放到开发板指定目录)。
- 算法示例模型:YOLOv5s.onnx(可从官方 repo 通过 export.py
获取,详细流程请阅读./doc/ModelConvert.md)。 - 第三方库
- gflags。
- json-glib-1.0。
- glib-2.0。
- spdlog-1.10.0。
- jsoncpp-1.7.4。
- mosquitto。
- mosquitto-clients(可使用apt - get install安装,如sudo apt-get install libjson-glib-dev libgflags-dev libjsoncpp-dev libmosquitto-dev mosquitto mosquitto-clients)。
- 构建工具:CMake - 3.10.2。
- 打包工具:checkinstall - 1.6.2。
(三)项目结构概述
- alg/yolov5s文件夹:对 AIRunner
的封装,包含AlgInterface.h、AlgYolov5s.cpp、CMakeLists.txt、Common.h和yolov5s.json等文件。 - benchmark/yolov5s文件夹:基准测试文件,有create_raw.py、cropped、results(包含benchmark_stats_YOLOv5s.csv)、snpe-bench_cmds.sh、target_raw_list.txt、yolov5s.dlc和yolov5s_example.json等。
- doc文件夹:教程文档,包括Benchmark.md、FAQ.md、images、ModelConvert.md、ModelQuantize.md、SNPETask.md和YOLOv5s.md。
- images文件夹:存放相关图片。
- lib文件夹:包含libAlgYolov5s.so和libYOLOv5s.so(YOLOv5s SDK 的 ELF 文件)。
- model文件夹:存放模型相关文件,如yolov5s_full.dlc(从yolov5s_full.onnx转换而来)、yolov5s_full.onnx(从 YOLOv5s v6.0.pt 转换而来)、yolov5s_labels.txt(YOLOv5s
的类别)、yolov5s.onnx(从裁剪后的 YOLOv5s v6.0.pt
转换而来)、yolov5s_v2.5.dlc、yolov5s_v2.5_quantized.dlc(yolov5s_v2.5.dlc的量化版本)和yolov5s_v2.5.txt(yolov5s_v2.5.dlc的信息)。 - snpetask文件夹:SNPE runtime SDK,包含SNPETask.cpp和SNPETask.h。
- test文件夹:测试程序,分为test_image(图片输入测试)和test_video(视频流输入测试),各自包含CMakeLists.txt、config.json、main.cpp等文件,test_image还包含测试图片,test_video包含与视频处理相关的头文件和配置文件。
- utility文件夹:包含Logger.h(基于 spdlog 库的单例日志记录器)和utils.h。
- yolov5s文件夹:YOLOv5s 推理
SDK,包含CMakeLists.txt、inc(包含YOLOv5s.h和YOLOv5sImpl.h)和src(包含YOLOv5s.cpp和YOLOv5sImpl.cpp)。 - 根目录下还有.gitignore、CMakeLists.txt、LICENSE、README.md、build.sh和buildmsvc.bat等文件。
二、模型转换(Model Convert)
-
步骤概述
- 此步骤的目的是将.tf/.tflite/.onnx/caffe/caffe2/.pt等网络预训练模型转换为一个能够被 SNPE 加载的 DLC 文件。
-
示例模型(以 YOLOv5s 为例)
- 本项目中提供了yolov5s.onnx模型,它是从 YOLOv5s v6.0.pt 转换而来的裁剪后的模型。同时,还有从yolov5s_full.onnx转换得到的yolov5s_full.dlc等模型文件可供参考。
-
转换工具及方法
- SNPE 提供了相应的转换工具,具体使用方法可参考官方文档。一般来说,需要根据模型的类型和 SNPE 的要求进行参数配置,以确保转换的正确性。在本项目中,详细的模型转换流程可阅读./doc/ModelConvert.md文件获取更多信息。