Google I / O'daki önemli notları, ürün oturumlarını, atölyeleri ve daha fazlasını izleyin Oynatma listesine bakın

Meta verileri kullanarak model arayüzleri oluşturun

Geliştiriciler, TensorFlow Lite Meta Verilerini kullanarak Android'de entegrasyonu etkinleştirmek için sarmalayıcı kodu 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ğlamasını Kullanın

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

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 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. build.gradle , 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 aktar 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 Sample Code bölümüne kopyalayıp yapıştırın. Android Studio'da ml dizini altında bulunan TFLite modeline çift tıklayarak bu ekrana geri dönebilirsiniz. Android Studio'daki model ayrıntıları sayfası

Hızlanan model çıkarımı

ML Model Binding, geliştiricilere, temsilcilerin 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. Aşağıdaki bağımlılığı içerdiği modül build.gradle dosyasını 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 çok CPU iş parçacığı kullanarak çalıştırmıyorsa, cihazda çalışan GPU'nun TensorFlow GPU temsilcisi ile 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 özgü sarmalayıcı kodu oluşturmak için TensorFlow Lite Android sarıcı kod oluşturucuyu kullanabilir. Sarmalayıcı kodu, doğrudan ByteBuffer ile etkileşim ByteBuffer ihtiyacını ortadan kaldırır. Bunun yerine, geliştiriciler TensorFlow Lite modeliyle Bitmap ve Rect gibi yazılı nesnelerle etkileşime girebilirler.

Kod oluşturucunun kullanışlılığı, TensorFlow Lite modelinin meta veri girişinin tamlığına bağlıdır. <Codegen usage> aracının her alanı nasıl ayrıştırdığını görmek için metadata_schema.fbs içindeki 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ığı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')

Üretilen kodu kullanma

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

Gerekirse, oluşturulan kodu bir dizin yapısında açın. Üretilen 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, dizin ve aranmak ithal modülünü kullanarak classify_wrapper .

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")

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

Hızlanan model çıkarımı

Oluşturulan kod, geliştiricilere, temsilcilerin 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ği veya Hizmetinden 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

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