建筑公司網(wǎng)站應(yīng)該則么做google搜索首頁
作為《探索QCS6490目標(biāo)檢測AI應(yīng)用開發(fā)》文章,緊接上一期,我們介紹如何在應(yīng)用程序中介紹如何使用解碼后的視頻幀結(jié)合Yolov8n模型推理。 高通 Qualcomm? AI Engine Direct?是一套能夠針對高通AI應(yīng)用加速的軟件SDK,更多的內(nèi)容可以訪問:Qualcomm Documentation
AI Engine Direct也稱QNN,在本期文章的第一期中我們介紹了如何使用AI Engine Direct的工具鏈去轉(zhuǎn)換ONNX模型,我們接下來講介紹如何在應(yīng)用中去推理轉(zhuǎn)換好的Yolov8n模型
1.前置條件
1.1 環(huán)境搭建
確報你已經(jīng)完成了以下準(zhǔn)備工作
- 按照《探索QCS6490目標(biāo)檢測AI應(yīng)用開發(fā)(一):Yolov8n模型轉(zhuǎn)換及量化》中的指導(dǎo),完成了Yolov8n模型的量化,得到序列化后的模型文件yolov8n_quant.bin
- 準(zhǔn)備一塊QCS6490開發(fā)板
- AI Engine Direct開發(fā)包已安裝部署到QCS6490開發(fā)板
1.2?下載AI Engine Direct?Helper
AI Engine Direct提供了豐富的API接口,可以非常接近硬件底層高效利用資源。為了簡化模型推理過程,我們推薦使用AI Engine Direct Helper,它是在AI Engine Direct基礎(chǔ)上封裝的一個助手類,能夠以極少的代碼實現(xiàn)模型的推理。
下載 AI Engine Direct?Helper
GitHub - quic/ai-engine-direct-helper
在QCS6490開發(fā)板上進行相應(yīng)的編譯工作,以生成可用的庫文件。
2. 模型推理
在集成模型推理之前,請確保已經(jīng)閱讀并遵循了AI Engine Direct Helper User Guide中的環(huán)境設(shè)置指南。這包括設(shè)置必要的庫文件路徑、安裝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);// 創(chuàng)建LibQNNHelper實例LibQNNHelper libQNNHelper;// 定義輸入輸出緩沖區(qū)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;}// 填充輸入緩沖區(qū)// ... 此處應(yīng)填充解碼后的視頻幀數(shù)據(jù)到inputBuffers ...// 執(zhí)行模型推理if (!libQNNHelper.ModelInference(model_name, inputBuffers, outputBuffers, outputSize)) {QNN_ERR("ModelInference failed\n");// 清理資源libQNNHelper.ModelDestroy(model_name);return -1;}// 使用outputBuffers中的數(shù)據(jù)進行后處理,如繪制檢測框等// 釋放輸出緩沖區(qū)內(nèi)存for (int j = 0; j < outputBuffers.size(); j++) {free(outputBuffers[j]);}outputBuffers.clear();outputSize.clear();// 銷毀模型并釋放資源libQNNHelper.ModelDestroy(model_name);return 0;
}
作者:Ricky Li