使用中繼資料產生模型介面

開發人員可以使用 LiteRT 中繼資料來產生 以便在 Android 上啟用整合。對大多數開發人員來說 Android Studio ML Model Binding 的圖形介面是 最容易使用如果您需要更多自訂項目,或是使用指令列 LiteRT Codegen 工具也可以這個工具使用。

使用 Android Studio 機器學習模型繫結

如果是有中繼資料強化的 LiteRT 模型, 開發人員可以使用 Android Studio 機器學習模型繫結功能, 專案設定並根據模型 中繼資料。只要使用包裝函式程式碼,就不需要直接與 ByteBuffer。開發人員可以與 LiteRT 模型互動 與輸入的物件,例如 BitmapRect

在 Android Studio 中匯入 LiteRT 模型

  1. 在您要使用 TFLite 模型的模組上按一下滑鼠右鍵,或按一下 File,然後New >Other >LiteRT Model

  2. 選取 TFLite 檔案的位置。請注意,這項工具 使用機器學習模型繫結和 所有依附元件都會自動插入 Android 模組的 build.gradle 檔案。

    選用:如有匯入 TensorFlow GPU,請選取第二個核取方塊,即可匯入 TensorFlow GPU 使用 GPU 加速功能

  3. 按一下「Finish」。

  4. 匯入成功後,您會看到以下畫面。開始 使用這個模型選取「Kotlin 或 Java」,然後複製程式碼並貼到 「Sample Code」專區。按兩下即可回到這個畫面 在 Android Studio 的 ml 目錄中找到 TFLite 模型。

加快模型推論速度

機器學習模型繫結功能可讓開發人員透過 委派代表使用委派項目和執行緒數量。

步驟 1:檢查內含下列的模組 build.gradle 檔案 依附元件:

    dependencies {
        ...
        // TFLite GPU delegate 2.3.0 or above is required.
        implementation 'com.google.ai.edge.litert:litert-gpu:2.3.0'
    }

步驟 2:偵測裝置上執行的 GPU 是否與 TensorFlow GPU 相容 委派 (如果不是使用多個 CPU 執行緒執行模型):

Kotlin

    import org.tensorflow.lite.gpu.CompatibilityList
    import org.tensorflow.lite.gpu.GpuDelegate

    val compatList = CompatibilityList()

    val options = if(compatList.isDelegateSupportedOnThisDevice) {
        // if the device has a supported GPU, add the GPU delegate
        Model.Options.Builder().setDevice(Model.Device.GPU).build()
    } else {
        // if the GPU is not supported, run on 4 threads
        Model.Options.Builder().setNumThreads(4).build()
    }

    // Initialize the model as usual feeding in the options object
    val myModel = MyModel.newInstance(context, options)

    // Run inference per sample code
      

Java

    import org.tensorflow.lite.support.model.Model
    import org.tensorflow.lite.gpu.CompatibilityList;
    import org.tensorflow.lite.gpu.GpuDelegate;

    // Initialize interpreter with GPU delegate
    Model.Options options;
    CompatibilityList compatList = CompatibilityList();

    if(compatList.isDelegateSupportedOnThisDevice()){
        // if the device has a supported GPU, add the GPU delegate
        options = Model.Options.Builder().setDevice(Model.Device.GPU).build();
    } else {
        // if the GPU is not supported, run on 4 threads
        options = Model.Options.Builder().setNumThreads(4).build();
    }

    MyModel myModel = new MyModel.newInstance(context, options);

    // Run inference per sample code
      

透過 LiteRT 程式碼產生器產生模型介面

對於使用中繼資料強化 LiteRT 模型, 開發人員可使用 LiteRT Android 包裝函式程式碼產生器 特定平台的包裝函式程式碼。只要使用包裝函式程式碼, 直接透過 ByteBuffer 存取。開發人員可以與 TensorFlow 互動 含有已輸入物件 (例如 BitmapRect) 的 Lite 模型。

程式碼產生器的實用性取決於 LiteRT 模型的中繼資料項目。請參閱「<Codegen usage>」一節 列在相關欄位中 metadata_schema.fbs、 ,瞭解 Codegen 工具如何剖析每個欄位。

產生包裝函式程式碼

您必須在終端機中安裝下列工具:

pip install tflite-support

完成後,您可以使用下列語法來使用程式碼產生器:

tflite_codegen --model=./model_with_metadata/mobilenet_v1_0.75_160_quantized.tflite \
    --package_name=org.tensorflow.lite.classify \
    --model_class_name=MyClassifierModel \
    --destination=./classify_wrapper

產生的程式碼會位於目的地目錄中。如果您是 使用 Google Colab 或其他遙控器 就能以 ZIP 封存檔的形式壓縮結果,並下載 加入 Android Studio 專案

# Zip up the generated code
!zip -r classify_wrapper.zip classify_wrapper/

# Download the archive
from google.colab import files
files.download('classify_wrapper.zip')

使用產生的程式碼

步驟 1:匯入產生的程式碼

視需要將產生的程式碼解壓縮至目錄結構。根 產生的程式碼假設為 SRC_ROOT

開啟要使用 LiteRT 的 Android Studio 專案 再透過下列方式匯入產生的模組新功能 ->匯入模組 -> 選取「SRC_ROOT

以上方範例來說,系統會呼叫 目錄和匯入的模組。 classify_wrapper

步驟 2:更新應用程式的 build.gradle 檔案

在使用產生的程式庫模組的應用程式模組中:

在 Android 部分下方,新增以下內容:

aaptOptions {
   noCompress "tflite"
}

在依附元件區段下方,新增以下內容:

implementation project(":classify_wrapper")

步驟 3:使用模型

// 1. Initialize the model
MyClassifierModel myImageClassifier = null;

try {
    myImageClassifier = new MyClassifierModel(this);
} catch (IOException io){
    // Error reading the model
}

if(null != myImageClassifier) {

    // 2. Set the input with a Bitmap called inputBitmap
    MyClassifierModel.Inputs inputs = myImageClassifier.createInputs();
    inputs.loadImage(inputBitmap));

    // 3. Run the model
    MyClassifierModel.Outputs outputs = myImageClassifier.run(inputs);

    // 4. Retrieve the result
    Map<String, Float> labeledProbability = outputs.getProbability();
}

加快模型推論速度

產生的程式碼可讓開發人員加快程式碼的執行速度 使用委派項目和 。您可以在初始化模型物件時設定這些項目,因為 參數:

  • Context:Android 活動或服務的背景資訊
  • (選用) Device:TFLite 加速委派。例如: GPUDelegate
  • (選用) numThreads:用於執行模型的執行緒數量 - 預設值為 1。

舉例來說,如要使用 GPU 委派和最多三個執行緒,您可以初始化 就像這樣

try {
    myImageClassifier = new MyClassifierModel(this, Model.Device.GPU, 3);
} catch (IOException io){
    // Error reading the model
}

疑難排解

如果收到「java.io.FileNotFoundException:這個檔案無法在 檔案描述元可能已經過壓縮錯誤,請插入下列幾行 在使用程式庫模組的應用程式模組的 Android 部分底下:

aaptOptions {
   noCompress "tflite"
}