探索QCS6490目标检测AI应用开发(三):模型推理

作为《探索QCS6490目标检测AI应用开发》文章,紧接上一期,我们介绍如何在应用程序中介绍如何使用解码后的视频帧结合Yolov8n模型推理。 高通 Qualcomm® AI Engine Direct 是一套能够针对高通AI应用加速的软件SDK,更多的内容可以访问:Qualcomm Documentation

AI Engine Direct也称QNN,在本期文章的第一期中我们介绍了如何使用AI Engine Direct的工具链去转换ONNX模型,我们接下来讲介绍如何在应用中去推理转换好的Yolov8n模型

1.前置条件

1.1 环境搭建

确报你已经完成了以下准备工作

  • 按照《探索QCS6490目标检测AI应用开发(一):Yolov8n模型转换及量化》中的指导,完成了Yolov8n模型的量化,得到序列化后的模型文件yolov8n_quant.bin
  • 准备一块QCS6490开发板
  • AI Engine Direct开发包已安装部署到QCS6490开发板

1.2 下载AI Engine Direct Helper

AI Engine Direct提供了丰富的API接口,可以非常接近硬件底层高效利用资源。为了简化模型推理过程,我们推荐使用AI Engine Direct Helper,它是在AI Engine Direct基础上封装的一个助手类,能够以极少的代码实现模型的推理。

下载 AI Engine Direct Helper

GitHub - quic/ai-engine-direct-helper

QCS6490开发板上进行相应的编译工作,以生成可用的库文件。

2. 模型推理

在集成模型推理之前,请确保已经阅读并遵循了AI Engine Direct Helper User Guide中的环境设置指南。这包括设置必要的库文件路径、安装Python及其扩展等。

利用AI Engine Direct Helper ,只需要几行代码就可以完成模型的推理

https://github.com/quic/ai-engine-direct-helper/blob/main/Docs/User_Guide.md

#include "LibQNNHelper.hpp"

int main() {
    // 初始化日志级别
    SetLogLevel(2);

    // 创建LibQNNHelper实例
    LibQNNHelper libQNNHelper;

    // 定义输入输出缓冲区
    std::vector<uint8_t*> inputBuffers;
    std::vector<uint8_t*> outputBuffers;
    std::vector<size_t> outputSize;

    // 模型初始化
    std::string model_name = "yolov8n";
    std::string model_path = "/path/to/yolov8n_quant.bin";
    std::string backend_lib_path = "/path/to/libQnnHtp.so";
    std::string system_lib_path = "/path/to/libQnnSystem.so";

    if (!libQNNHelper.ModelInitialize(model_name, model_path, backend_lib_path, system_lib_path)) {
        QNN_ERR("ModelInitialize failed\n");
        return -1;
    }

    // 填充输入缓冲区
    // ... 此处应填充解码后的视频帧数据到inputBuffers ...

    // 执行模型推理
    if (!libQNNHelper.ModelInference(model_name, inputBuffers, outputBuffers, outputSize)) {
        QNN_ERR("ModelInference failed\n");
        // 清理资源
        libQNNHelper.ModelDestroy(model_name);
        return -1;
    }

    // 使用outputBuffers中的数据进行后处理,如绘制检测框等

    // 释放输出缓冲区内存
    for (int j = 0; j < outputBuffers.size(); j++) {
        free(outputBuffers[j]);
    }
    outputBuffers.clear();
    outputSize.clear();

    // 销毁模型并释放资源
    libQNNHelper.ModelDestroy(model_name);

    return 0;
}

作者:Ricky Li

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值