Google I/O'yu ayarladığınız için teşekkür ederiz. İsteğe bağlı olarak tüm oturumları görüntüleyin İsteğe bağlı olarak izleyin

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 Binding'i kullanın

Meta verilerle geliştirilmiş TensorFlow Lite modelleri için geliştiriciler, proje ayarlarını 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. Sarıcı kod, doğrudan ByteBuffer ile etkileşim kurma ihtiyacını ortadan kaldırır. Bunun yerine geliştiriciler, Bitmap ve Rect gibi yazılan nesnelerle TensorFlow Lite modeliyle etkileşim kurabilir.

Android Studio'da bir TensorFlow Lite modelini içe aktarın

  1. TFLite modelini kullanmak istediğiniz modüle sağ tıklayın veya File , ardından New > Other > TensorFlow Lite Model seçeneğine tıklayın TensorFlow Lite içe aktarma işlevine erişmek için menülere sağ tıklayın

  2. TFLite dosyanızın konumunu seçin. Araçların, ML Model bağlama ile modülün bağımlılığını sizin adınıza yapılandıracağını ve tüm bağımlılıkların otomatik olarak Android modülünüzün build.gradle dosyasına 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. TFLite modeli için içe aktarma iletişim kutusu

  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 dönebilirsiniz. Android Studio'da model ayrıntıları sayfası

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ı için bir yol sağlar.

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

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

Adım 2. Modeli birden fazla CPU iş parçacığı kullanarak çalıştırmıyorsa, cihazda çalışan GPU'nun TensorFlow GPU temsilcisiyle uyumlu olup olmadığını tespit edin:

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şturun

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

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 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ı kurmanız gerekecek:

pip install tflite-support

Tamamlandığında, 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ş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

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

Gerekirse oluşturulan kodu bir dizin yapısına açın. Oluşturulan kodun 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 kullanarak, içe aktarılan dizin ve modül classify_wrapper olarak adlandırılır.

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

Oluşturulan kitaplık modülünü tüketecek olan 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")

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

  • Context : Android Etkinliğinden veya Hizmetinden Bağlam
  • (İsteğe bağlı) Device : GPUDelegate veya NNAPIDelegate gibi TFLite hızlandırma temsilcisi
  • (İ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

Bir 'java.io.FileNotFoundException: Bu dosya bir dosya tanımlayıcı olarak açılamaz; muhtemelen sıkıştırılmıştır' hatası, 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"
}