上一篇博文“Qualcomm AI Hub介紹”。高通AI Hub為開發(fā)者提供了一個強大的平臺,以優(yōu)化、驗證和部署在Android設(shè)備上的機器學(xué)習(xí)模型。這篇文章將介紹如何使用高通AI Hub進行圖像分類的程式碼開發(fā),并提供一個實際的例子來展示其在Android平臺上的應(yīng)用。
程式碼介紹
高通AI Hub支持多種機器學(xué)習(xí)框架,如TensorFlow Lite、Quancomm AI Engine Direct和ONNX Runtime,并能夠?qū)⒂?xùn)練好的模型轉(zhuǎn)換為優(yōu)化的on-device執(zhí)行格式。開發(fā)者可以通過AI Hub的模型庫,選擇適合自己應(yīng)用需求的模型,并進行相應(yīng)的優(yōu)化。此外,AI Hub還提供了詳細的on-device性能分析工具,幫助開發(fā)者了解模型在實際設(shè)備上的運行情況。
于官方提供的Github ai-hub-apps進行下載,使用Android Studio開啟app/android,就可以看到ImageClassification、SemanticSegmentation及SuperResolution,本篇博文介紹ImageClassification程式碼的部分及執(zhí)行,使用Android Studio開啟專案畫面如下圖:
ImageProcessing.java:
里面有一個靜態(tài)方法 resizeAndPadMaintainAspectRatio,其功能是調(diào)整圖片大小,同時維持圖片的寬高比(Aspect Ratio)。如果圖片無法完全符合給定的輸出尺寸,則會加入填充區(qū)域(padding),使得最終輸出的圖片符合要求的寬度和高度。
TensorFlow Lite (TFLite) 的輔助工具,用于為 TensorFlow Lite 模型建立解譯器(interpreter)和相應(yīng)的硬件加速委派(delegate),例如 GPU 或 NPU。主要功能是根據(jù)指定的硬件加速選項,自動嘗試為 TFLite 模型分配不同的硬件委派來優(yōu)化推論性能。
CreateInterpreterAndDelegatesFromOptions
用于根據(jù)指定的優(yōu)先級順序,創(chuàng)建 TFLite 解譯器并分配硬件加速委派。它會根據(jù)委派的優(yōu)先順序來嘗試分配不同的委派類型,如 GPU 或 NPU,并在無法使用時降級至 CPU 運算(例如使用 XNNPack 提供的 CPU 加速)。
CreateInterpreterFromDelegates
此函式實際上是根據(jù)之前創(chuàng)建的委派來生成解譯器。主要負責(zé)配置 TFLite 解譯器的參數(shù),例如 CPU 線程數(shù)和是否使用 XNNPack 作為后備計算選項。若解譯器創(chuàng)建失敗,則會記錄失敗原因并返回 null。
CreateDelegate
此函式根據(jù)指定的委派類型(如 GPUv2 或 QNN_NPU)創(chuàng)建對應(yīng)的硬件委派。每一個委派都有對應(yīng)的函式進行初始化,例如 CreateGPUv2Delegate 或 CreateQNN_NPUDelegate。
CreateGPUv2Delegate
這個函式負責(zé)創(chuàng)建和配置 GPUv2 委派,它會將 GPU 設(shè)定為最大性能模式,允許使用浮點精度 FP16 進行計算,來提升 GPU 運行效率。
CreateQNN_NPUDelegate
此函式負責(zé)為支持 Qualcomm NPU 的裝置創(chuàng)建 QNN 委派,根據(jù)裝置支持的硬件類型來選擇使用 DSP 或 HTP 來加速推論計算。
ImageClassification.java:
基于 TensorFlow Lite 的影像分類器,用來從給定的影像中推測出最有可能的物件類別。主要的功能包括模型的加載、預(yù)處理影像、推論以及后處理推論結(jié)果,并且能夠返回處理時間等性能資訊。
ImageClassification
功能:從指定的模型和標(biāo)簽路徑中創(chuàng)建影像分類器。
參數(shù):
context:應(yīng)用程式的上下文。
modelPath:模型文件的路徑。
labelsPath:標(biāo)簽文件的路徑。
delegatePriorityOrder:指定計算單元優(yōu)先順序(例如 GPU、CPU 等)。
preprocess
功能:將輸入的影像預(yù)處理為模型可以接受的格式。
步驟:
檢查影像尺寸是否符合模型的輸入要求,必要時進行縮放。
根據(jù)模型的數(shù)據(jù)類型(如 FLOAT32 或 UINT8)轉(zhuǎn)換影像數(shù)據(jù)。
postprocess
功能:將模型輸出的結(jié)果轉(zhuǎn)換為可讀取的標(biāo)簽(類別)。
步驟:
讀取模型的輸出。
根據(jù)預(yù)測值選出信心最高的幾個結(jié)果(TOP-K),并轉(zhuǎn)換為對應(yīng)的標(biāo)簽名稱。
predictClassesFromImage()
功能:對給定的影像進行分類,返回最有可能的類別。
步驟:
進行預(yù)處理(preprocess)。
使用解釋器進行推論。
后處理輸出結(jié)果(postprocess)。
返回分類結(jié)果。
findTopKFloatIndices() 和 findTopKByteIndices()
功能:從模型輸出的數(shù)據(jù)中找出信心最高的 K 個結(jié)果,分別處理 float 和 byte 類型的輸出。
實現(xiàn):使用優(yōu)先佇列(PriorityQueue)來追蹤最大值,并返回這些最大值對應(yīng)的索引。
MainActivity.java:
使用 TensorFlow Lite 來進行影像分類。它主要負責(zé)初始化 UI 元件、管理影像選擇與處理、并進行模型推論。如果執(zhí)行時發(fā)生圖像讀取錯誤問題,需要在loadImageFromStringAsync函式做調(diào)整:
// try (InputStream inputImage = getAssets().open("images/" + imagePath))
try (InputStream inputImage = getAssets().open( imagePath))
模型及App執(zhí)行
TFLite模型:
模型部分可以依據(jù)AI Hub提供的Image Classification選項的TFLite模型,下載自己所需的模型,并放置于ImageClassification/src/main/assets檔案夾底下,修改Android Studio內(nèi)的 gradle.properties,修改:classification_tfLiteModelAsset=xxxxxxx.tflite
程式運作:
高通AI Hub提供的Android程式碼,除了在高通提供相關(guān)芯片的開發(fā)板上執(zhí)行,也可以在擁有高通芯片的手機上執(zhí)行,實機測試是使用小米11手機。
執(zhí)行結(jié)果如下方Gif動畫,App最下方Image透過下拉式選單選擇內(nèi)建的三張圖片或相簿圖片,選擇完成后上方會出現(xiàn)選擇的圖片,按下RUN MODEL按鈕即可開始推論,當(dāng)然也可以選擇CPU Only體驗一下沒有硬件加速的推論時間,而All Hardware則會使用QNN_NPU + GPUv2 + XNNPack等硬件加速。
小結(jié)
本篇博文就到這里,通過高通AI Hub Android開發(fā)者可以更輕松地將先進的AI模型集成到他們的應(yīng)用中。高通AI Hub的文檔和模型庫提供了豐富的資源,幫助開發(fā)者探索和實現(xiàn)AI領(lǐng)域的應(yīng)用。
參考
ai-hub-apps
AI Hub Image Classification
Q&A
問:如何獲取高通AI Hub Model的ImageClassification模型?
答:您可以訪問高通AI Hub的GitHub頁面或官方網(wǎng)站,這里提供了模型的開源代碼和安裝指南。
問:部署模型時需要注意哪些性能和精度問題?
答:在部署模型時,您需要考慮模型的延遲、記憶體使用等性能指標(biāo),以及模型在特定設(shè)備上的精度。高通AI Hub提供了性能指標(biāo)和優(yōu)化指南,幫助您選擇最適合您需求的模型。
問:如果在部署過程中遇到問題,該如何解決?
答:如果在模型部署過程中遇到性能、精度或其他問題,您可以通過高通AI Hub的支持Slack 提交問題。此外,您也可以參考官方文檔中的疑難解答部分。
問:高通AI Hub Model可以在哪些設(shè)備上運行?
答:高通AI Hub Model支持在多種設(shè)備上運行,包括但不限于Snapdragon 845, Snapdragon 855/855+, Snapdragon 865/865+, Snapdragon 888/888+等多款芯片組的設(shè)備。
登錄大大通網(wǎng)站閱讀原文,提問/評論,獲取技術(shù)文檔等更多資訊!
-
高通
+關(guān)注
關(guān)注
76文章
7467瀏覽量
190623 -
Android
+關(guān)注
關(guān)注
12文章
3936瀏覽量
127397 -
開發(fā)板
+關(guān)注
關(guān)注
25文章
5050瀏覽量
97456 -
Qualcomm
+關(guān)注
關(guān)注
8文章
673瀏覽量
52112 -
tensorflow
+關(guān)注
關(guān)注
13文章
329瀏覽量
60535
發(fā)布評論請先 登錄
相關(guān)推薦
評論