高通AI Hub Android ImageClassification程式介紹

上一篇博文「Qualcomm AI Hub介紹」。高通AI Hub為開發者提供了一個強大的平台,以優化、驗證和部署在Android設備上的機器學習模型。這篇文章將介紹如何使用高通AI Hub進行圖像分類的程式碼開發,並提供一個實際的例子來展示其在Android平台上的應用。
 

程式碼介紹

高通AI Hub支持多種機器學習框架,如TensorFlow Lite、Quancomm AI Engine Direct和ONNX Runtime,並能夠將訓練好的模型轉換為優化的on-device執行格式。開發者可以通過AI Hub的模型庫,選擇適合自己應用需求的模型,並進行相應的優化。此外,AI Hub還提供了詳細的on-device性能分析工具,幫助開發者了解模型在實際設備上的運行情況。

於官方提供的Github ai-hub-apps進行下載,使用Android Studio開啟app/android,就可以看到ImageClassification、SemanticSegmentation及SuperResolution,本篇博文介紹ImageClassification程式碼的部分及執行,使用Android Studio開啟專案畫面如下圖:

高通AI Hub Android ImageClassification程式介紹

ImageProcessing.java

    裡面有一個靜態方法 resizeAndPadMaintainAspectRatio,其功能是調整圖片大小,同時維持圖片的寬高比(Aspect Ratio)。如果圖片無法完全符合給定的輸出尺寸,則會加入填充區域(padding),使得最終輸出的圖片符合要求的寬度和高度。

TFLiteHelpers.java

    TensorFlow Lite (TFLite) 的輔助工具,用於為 TensorFlow Lite 模型建立解譯器(interpreter)和相應的硬體加速委派(delegate),例如 GPU 或 NPU。主要功能是根據指定的硬體加速選項,自動嘗試為 TFLite 模型分配不同的硬體委派來優化推論性能。

  1. CreateInterpreterAndDelegatesFromOptions

            用於根據指定的優先級順序,創建 TFLite 解譯器並分配硬體加速委派。它會根據委派的優先順序來嘗試分配不同的委派類型,如 GPU 或 NPU,並在無法使用時降級至 CPU 運算(例如使用 XNNPack 提供的 CPU 加速)。

  1. CreateInterpreterFromDelegates

           此函式實際上是根據之前創建的委派來生成解譯器。主要負責配置 TFLite 解譯器的參數,例如 CPU 線程數和是否使用 XNNPack 作為後備計算選項。若解譯器創建失敗,則會記錄失敗原因並返回 null。

  1. CreateDelegate

            此函式根據指定的委派類型(如 GPUv2 或 QNN_NPU)創建對應的硬體委派。每一個委派都有對應的函式進行初始化,例如 CreateGPUv2Delegate 或 CreateQNN_NPUDelegate。

  1. CreateGPUv2Delegate

            這個函式負責創建和配置 GPUv2 委派,它會將 GPU 設定為最大性能模式,允許使用浮點精度 FP16 進行計算,來提升 GPU 運行效率。

  1. CreateQNN_NPUDelegate

            此函式負責為支援 Qualcomm NPU 的裝置創建 QNN 委派,根據裝置支援的硬體類型來選擇使用 DSP 或 HTP 來加速推論計算。

ImageClassification.java

    基於 TensorFlow Lite 的影像分類器,用來從給定的影像中推測出最有可能的物件類別。主要的功能包括模型的加載、預處理影像、推論以及後處理推論結果,並且能夠返回處理時間等性能資訊。

  1. ImageClassification

        功能:從指定的模型和標籤路徑中創建影像分類器。

        參數:
            context:應用程式的上下文。
            modelPath:模型文件的路徑。
            labelsPath:標籤文件的路徑。
            delegatePriorityOrder:指定計算單元優先順序(例如 GPU、CPU 等)。
 

  1. preprocess

        功能:將輸入的影像預處理為模型可以接受的格式。

        步驟:
            檢查影像尺寸是否符合模型的輸入要求,必要時進行縮放。
            根據模型的數據類型(如 FLOAT32 或 UINT8)轉換影像數據。

  1. postprocess

       功能:將模型輸出的結果轉換為可讀取的標籤(類別)。

        步驟:
            讀取模型的輸出。
            根據預測值選出信心最高的幾個結果(TOP-K),並轉換為對應的標籤名稱。

  1. predictClassesFromImage()

        功能:對給定的影像進行分類,返回最有可能的類別。

        步驟:


            進行預處理(preprocess)。
            使用解釋器進行推論。
            後處理輸出結果(postprocess)。
            返回分類結果。

  1. findTopKFloatIndices() 和 findTopKByteIndices()

        功能:從模型輸出的數據中找出信心最高的 K 個結果,分別處理 float 和 byte 類型的輸出。

        實現:使用優先佇列(PriorityQueue)來追蹤最大值,並返回這些最大值對應的索引。

 

MainActivity.java

使用 TensorFlow Lite 來進行影像分類。它主要負責初始化 UI 元件、管理影像選擇與處理、並進行模型推論。如果執行時發生圖像讀取錯誤問題,需要在loadImageFromStringAsync函式做調整:

// try (InputStream inputImage = getAssets().open("images/" + imagePath))
try (InputStream inputImage = getAssets().open( imagePath))

 

模型及App執行

TFLite模型:

模型部分可以依據AI Hub提供的Image Classification選項的TFLite模型,下載自己所需的模型,並放置於ImageClassification/src/main/assets檔案夾底下,修改Android Studio內的 gradle.properties,修改:classification_tfLiteModelAsset=xxxxxxx.tflite

 

程式運作:

高通AI Hub提供的Android程式碼,除了在高通提供相關晶片的開發板上執行,也可以在擁有高通晶片的手機上執行,實機測試是使用小米11手機。

執行結果如下方Gif動畫,App最下方Image透過下拉式選單選擇內建的三張圖片或相簿圖片,所澤完成後上方會出現選擇的圖片,按下RUN MODEL按鈕即可開始推論,當然也可以選擇CPU Only體驗一下沒有硬體加速的推論時間,而All Hardware則會使用QNN_NPU + GPUv2 + XNNPack等硬體加速。

 

小結

本篇博文就到這裡,通過高通AI Hub Android開發者可以更輕鬆地將先進的AI模型集成到他們的應用中。高通AI Hub的文檔和模型庫提供了豐富的資源,幫助開發者探索和實現AI領域的應用。希望這篇博文對你有所幫助,謝謝你的閱讀!

 

參考

ai-hub-apps

AI Hub Image Classification 

 

►Q&A

問:如何獲取高通AI Hub Model的ImageClassification模型?
答:您可以訪問高通AI Hub的GitHub頁面或官方網站,這裡提供了模型的開源代碼和安裝指南。

問:部署模型時需要注意哪些性能和精度問題?
答:在部署模型時,您需要考慮模型的延遲、記憶體使用等性能指標,以及模型在特定設備上的精度。高通AI Hub提供了性能指標和優化指南,幫助您選擇最適合您需求的模型。

問:如果在部署過程中遇到問題,該如何解決?
答:如果在模型部署過程中遇到性能、精度或其他問題,您可以通過高通AI Hub的支持Slack 提交問題。此外,您也可以參考官方文檔中的疑難解答部分。

問:高通AI Hub Model可以在哪些設備上運行?
答:高通AI Hub Model支持在多種設備上運行,包括但不限於Snapdragon 845, Snapdragon 855/855+, Snapdragon 865/865+, Snapdragon 888/888+等多款芯片組的設備。

問:高通AI Hub Model支持哪些計算單元和精度?
答:高通AI Hub Model支持CPU、GPU、NPU(包括Hexagon DSP、HTP)等計算單元,並支持FP16的浮點數和INT8、INT4的整數精度。這些特性使得模型能夠在不同的硬件上實現高效運行。

★博文內容均由個人提供,與平台無關,如有違法或侵權,請與網站管理員聯繫。

★文明上網,請理性發言。內容一周內被舉報5次,發文人進小黑屋喔~

評論