Meta verileri kullanarak model arayüzleri oluşturun

Geliştiriciler, TensorFlow Lite Meta Verilerini kullanarak Android'de entegrasyonu etkinleştirmek için sarmalayıcı kod oluşturabilir. Çoğu geliştirici için Android Studio ML Model Binding'in grafik arayüzü kullanımı en kolay olanıdır. Daha fazla özelleştirmeye ihtiyacınız varsa veya komut satırı araçlarını kullanıyorsanız TensorFlow Lite Codegen de mevcuttur.

Android Studio ML Model Bağlamayı Kullanın

Meta verilerle geliştirilmiş TensorFlow Lite modelleri için geliştiriciler, projeye yönelik ayarları otomatik olarak yapılandırmak ve model meta verilerine dayalı sarmalayıcı sınıfları oluşturmak için Android Studio ML Model Binding'i kullanabilir. Sarma kodu, ByteBuffer ile doğrudan etkileşim kurma ihtiyacını ortadan kaldırır. Bunun yerine geliştiriciler TensorFlow Lite modeliyle Bitmap ve Rect gibi yazılan nesnelerle etkileşime girebilir.

TensorFlow Lite modelini Android Studio'ya içe aktarma

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

  2. TFLite dosyanızın konumunu seçin. Araçların, modülün bağımlılığını sizin adınıza ML Model bağlamayla 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 aktarmak için ikinci onay kutusunu seçin.

  3. Finish tıklayın.

  4. İçe aktarma başarılı olduktan sonra aşağıdaki ekran görünecektir. 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ındaki TFLite modeline çift tıklayarak bu ekrana geri dönebilirsiniz.

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

ML Model Binding, geliştiricilerin delege kullanımı ve iş parçacığı sayısı aracılığıyla kodlarını hızlandırmalarını sağlar.

Adım 1. Modül build.gradle 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 temsilcisiyle uyumlu olup olmadığını tespit edin (eğer modeli birden fazla CPU iş parçacığı kullanarak çalıştırmıyorsanız):

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şturucuyla model arayüzleri oluşturun

Meta verilerle geliştirilmiş TensorFlow Lite modeli için geliştiriciler, platforma özel sarmalayıcı kod oluşturmak amacıyla TensorFlow Lite Android sarmalayıcı kod oluşturucuyu kullanabilir. Sarma kodu, ByteBuffer ile doğrudan etkileşim kurma ihtiyacını ortadan kaldırır. Bunun yerine geliştiriciler TensorFlow Lite modeliyle Bitmap ve Rect gibi yazılan nesnelerle etkileşime girebilir.

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

Sarmalayıcı Kodu oluştur

Aşağıdaki araçları terminalinize kurmanız gerekecektir:

pip install tflite-support

Tamamlandıktan sonra kod oluşturucu aşağıdaki sözdizimi kullanılarak 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

Ortaya çıkan kod hedef dizinde bulunacaktır. Google Colab veya başka bir uzak ortam kullanıyorsanız, sonucu bir zip arşivine 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

Gerekirse oluşturulan kodu bir dizin yapısına açın. Üretilen kodun kökünün SRC_ROOT olduğu varsayılır.

TensorFlow lite modelini kullanmak istediğiniz Android Studio projesini açın ve oluşturulan modülü şu şekilde içe aktarın: Ve Dosya -> Yeni -> Modülü İçe Aktar -> SRC_ROOT seçin

Yukarıdaki örneği kullanırsak, içe aktarılan dizin ve modül classify_wrapper olarak adlandırılacaktır.

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

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

Android bölümünün altına aşağıdakileri ekleyin:

aaptOptions {
   noCompress "tflite"
}

Bağımlılıklar bölümünün altına aşağıdakileri ekleyin:

implementation project(":classify_wrapper")

3. Adım: Modelin kullanılması

// 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 delege kullanımı ve iş parçacığı sayısı aracılığıyla kodlarını hızlandırmalarını sağlar. Bunlar, üç parametre aldığından model nesnesi başlatılırken ayarlanabilir:

  • Context : Android Etkinliği veya Hizmetinin Bağlamı
  • (İsteğe bağlı) Device : TFLite hızlandırma temsilcisi, örneğin GPUDelegate veya NNAPIDelegate
  • (İsteğe bağlı) numThreads : Modeli çalıştırmak için kullanılan iş parçacığı sayısı - varsayılan birdir.

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

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

Sorun giderme

'Java.io.FileNotFoundException' alırsanız: Bu dosya, dosya tanımlayıcı olarak açılamaz; muhtemelen sıkıştırılmıştır' hatası alıyorsanız, kütüphane modülünü kullanacak uygulama modülünün Android bölümünün altına aşağıdaki satırları ekleyin:

aaptOptions {
   noCompress "tflite"
}