Meta verileri kullanarak model arayüzleri oluşturma

Geliştiriciler, TensorFlow Lite Meta Verileri'ni kullanarak Android'de entegrasyonu etkinleştirmek için sarmalayıcı kodu oluşturabilir. Çoğu geliştirici için en kolay kullanım alanı Android Studio ML Model Bağlamanın grafik arayüzüdür. Daha fazla özelleştirmeye ihtiyaç duyuyorsanız veya komut satırı araçları kullanıyorsanız TensorFlow Lite Codegen'den de yararlanabilirsiniz.

Android Studio ML Model Bağlamasını Kullanma

Meta veri ile geliştirilmiş TensorFlow Lite modellerinde geliştiriciler, proje ayarlarını otomatik olarak yapılandırmak ve model meta verilerine göre sarmalayıcı sınıfları oluşturmak için Android Studio ML Model Binding'i kullanabilir. Sarmalayıcı kodu, doğrudan ByteBuffer ile etkileşime geçme ihtiyacını ortadan kaldırır. Geliştiriciler bunun yerine Bitmap ve Rect gibi yazılmış nesneler kullanarak TensorFlow Lite modeliyle etkileşim kurabilir.

Android Studio'da TensorFlow Lite modelini içe aktarma

  1. TFLite modelini kullanmak istediğiniz modülü sağ tıklayın veya File seçeneğini, ardından New > Other > TensorFlow Lite Model seçeneğini tıklayın.

  2. TFLite dosyanızın konumunu seçin. Araçların, modülün bağımlılığını ML Modeli bağlaması ile sizin adınıza yapılandıracağını ve tüm bağımlılıkların Android modülünüzün build.gradle dosyasına otomatik olarak ekleneceğini unutmayın.

    İsteğe bağlı: GPU hızlandırmayı kullanmak istiyorsanız TensorFlow GPU'yu içe aktarmayla ilgili ikinci onay kutusunu işaretleyin.

  3. Finish simgesini tıklayın.

  4. İçe aktarma işlemi başarılı olduktan sonra aşağıdaki ekran görüntülenir. Modeli kullanmaya başlamak için Kotlin veya Java'yı seçin, kodu kopyalayıp Sample Code bölümünün altına yapıştırın. Android Studio'da ml dizini altında TFLite modelini çift tıklayarak bu ekrana geri dönebilirsiniz.

Model çıkarımını hızlandırma

ML Model Binding, geliştiricilerin yetki verilmiş kullanıcılar ve iş parçacığı sayısı ile kodlarını hızlandırması için bir yol sunar.

1. Adım: build.gradle modül dosyasının aşağıdaki bağımlılığı içerip içermediğini kontrol edin:

    dependencies {
        ...
        // TFLite GPU delegate 2.3.0 or above is required.
        implementation 'org.tensorflow:tensorflow-lite-gpu:2.3.0'
    }

2. adım: Cihazda çalışan GPU'nun, TensorFlow GPU temsilcisi ile uyumlu olup olmadığını tespit edin. Modeli birden fazla CPU iş parçacığı kullanarak çalıştırın:

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
      

TensorFlow Lite kod oluşturucu ile model arayüzleri oluşturma

Geliştiriciler, meta verilerle geliştirilmiş TensorFlow Lite modelinde, platforma özel sarmalayıcı kodu oluşturmak için TensorFlow Lite Android sarmalayıcı kod oluşturma aracını kullanabilir. Sarmalayıcı kodu, doğrudan ByteBuffer ile etkileşime geçme ihtiyacını ortadan kaldırır. Bunun yerine geliştiriciler, Bitmap ve Rect gibi yazılan nesneler aracılığıyla TensorFlow Lite modeliyle etkileşim kurabilir.

Kod oluşturma aracının kullanışlılığı, TensorFlow Lite modelinin meta veri girişinin tamlığına bağlıdır. Kod oluşturma aracının her bir alanı nasıl ayrıştırdığını görmek için metadata_schema.fbs içindeki ilgili alanların altındaki <Codegen usage> bölümüne bakın.

Sarmalayıcı Kodu Oluştur

Terminalinize aşağıdaki araçları yüklemeniz gerekir:

pip install tflite-support

Tamamlandıktan sonra, kod oluşturma aracı aşağıdaki söz dizimiyle kullanılabilir:

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

Bu işlem sonucunda elde edilen kod, hedef dizinde bulunur. Google Colab veya başka bir uzak ortam kullanıyorsanız sonucu bir zip arşivinde sıkıştırmak ve Android Studio projenize indirmek daha kolay olabilir:

# 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')

Oluşturulan kodu kullanma

1. Adım: Oluşturulan kodu içe aktarın

Oluşturulan kodu gerektiğinde bir dizin yapısına çıkartın. Oluşturulan kodun kökü SRC_ROOT olarak kabul edilir.

TensorFlow lite modelini kullanmak istediğiniz Android Studio projesini açın ve oluşturulan modülü içe aktarın. Ardından Dosya -> Yeni -> İçe Aktarma Modülü -> SRC_ROOT öğesini seçin.

Yukarıdaki örnekte, içe aktarılan dizin ve modül adı classify_wrapper olacaktır.

2. Adım: Uygulamanın build.gradle dosyasını güncelleyin

Oluşturulan kitaplık modülünü tüketecek uygulama modülünde:

Android bölümüne aşağıdakileri ekleyin:

aaptOptions {
   noCompress "tflite"
}

Bağımlılıklar bölümüne aşağıdakileri ekleyin:

implementation project(":classify_wrapper")

3. Adım: Modeli kullanma

// 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();
}

Model çıkarımını hızlandırma

Oluşturulan kod, geliştiricilerin yetki verilmiş kullanıcılar ve iş parçacığı sayısını kullanarak kodlarını hızlandırmaları için bir yol sunar. Bunlar, model nesnesi başlatılırken üç parametre aldığı için ayarlanabilir:

  • Context: Android Etkinliği veya Hizmetinden bağlam
  • (İsteğe bağlı) Device: TFLite hızlandırma yetkisi. Örneğin: GPUDelegate
  • (İsteğe bağlı) numThreads: Modeli çalıştırmak için kullanılan iş parçacığı sayısı. Varsayılan değer birdir.

Örneğin, bir GPU temsilcisi ve en fazla üç iş parçacığı kullanmak için modeli şu şekilde başlatabilirsiniz:

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

Sorun giderme

"java.io.FileNotFoundException: Bu dosya, dosya açıklayıcı olarak açılamıyor; büyük olasılıkla sıkıştırılmış" hatası alırsanız, uygulama modülünün kitaplık modülünü kullanacak olan Android bölümünün altına aşağıdaki satırları ekleyin:

aaptOptions {
   noCompress "tflite"
}