Meta verileri kullanarak model arayüzleri oluşturma

Geliştiriciler LiteRT meta verilerini kullanarak sarmalayıcı kodu kullanabilirsiniz. Çoğu geliştirici için Android Studio ML Model Bağlama'nın grafik arayüzü en kolay yöntem budur. Daha fazla özelleştirmeye ihtiyacınız varsa veya komut satırı kullanıyorsanız LiteRT Codegen aracı da mevcuttur.

Android Studio ML Model Bağlamayı Kullanma

Meta veriler ile geliştirilmiş LiteRT modelleri için geliştiriciler, otomatik olarak yapılandırmak için Android Studio ML Model Binding'i kullanabilir. ve modele göre sarmalayıcı sınıfları oluşturabilirsiniz. meta verilerdir. Sarmalayıcı kodu, doğrudan ByteBuffer Geliştiriciler bunun yerine LiteRT modeliyle etkileşime geçebilir Bitmap ve Rect gibi yazılan nesnelerle.

Android Studio'da LiteRT modelini içe aktarma

  1. TFLite modelini kullanmak istediğiniz modülü sağ tıklayın veya File, ardından New > Other LiteRT Model

  2. TFLite dosyanızın konumunu seçin. Aracın ML Modeli bağlama ile modülün bağımlılığını sizin yerinize yapılandırın ve tüm bağımlılıkları otomatik olarak Android modülünüzün build.gradle dosyası yükleyin.

    İsteğe bağlı: Aşağıdaki durumlarda TensorFlow GPU'yu içe aktarmak için ikinci onay kutusunu işaretleyin GPU hızlandırmayı kullanmak istiyorsunuz.

  3. Finish simgesini tıklayın.

  4. İçe aktarma işlemi başarılı olduktan sonra aşağıdaki ekran görünür. Başlamak için kodu kopyalayın ve Kotlin veya Java'yı seçin. Kodu kopyalayıp Sample Code bölümü. Çift tıklayarak bu ekrana dönebilirsiniz TFLite modelini Android Studio'da ml dizininde bulabilirsiniz.

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

Makine Öğrenimi Model Bağlaması, geliştiricilerin ve yetki verilmiş kullanıcı kullanımını ve ileti dizisi sayısını dikkate alın.

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

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

2. adım: Cihazda çalışan GPU'nun TensorFlow GPU ile uyumlu olup olmadığını algılar modeli birden çok 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
      

LiteRT kod oluşturucuyla model arayüzleri oluşturma

Meta veriler ile geliştirilmiş LiteRT modeli için geliştiriciler, aşağıdakini oluşturmak için LiteRT Android sarmalayıcı kod oluşturma aracı sarmalayıcı kodu kullanabilirsiniz. Sarmalayıcı kodu, etkileşime geçme ihtiyacını ortadan kaldırır doğrudan ByteBuffer ile iletişime geçebilirsiniz. Bunun yerine, geliştiriciler TensorFlow ile Bitmap ve Rect gibi yazılan nesneleri içeren basit model.

Kod oluşturucunun yararlı olup olmadığı LiteRT modelinin meta veri girişi. <Codegen usage> bölümüne bakın alakalı alanların altına metadata_schema.fbs, kod oluşturma aracının her alanı nasıl ayrıştırdığını görebilirsiniz.

Sarmalayıcı Kodu oluştur

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

pip install tflite-support

İşlem tamamlandıktan sonra kod oluşturma aracı şu söz dizimi 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

Bu işlem sonucunda elde edilen kod hedef dizinde bulunur. Şu durumda: Google Colab veya başka bir uzaktan kumanda kullanarak sonuçları zip arşivinde sıkıştırmak ve indirmek bunu Android Studio projenize ekleyin:

# 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ı halinde açın. Kök oluşturulan kodun SRC_ROOT olduğu varsayılır.

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

Yukarıdaki örneğe göre, içe aktarılan dizin ve modül classify_wrapper

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

Oluşturulan kitaplık modülünü kullanacak 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();
}

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

Oluşturulan kod, geliştiricilere kod yazma sürecini hızlandırma olanağı sunar yetki verilmiş kullanıcı sayısı ve kullanıcı sayısı ileti dizileri. Bunlar, model nesnesi başlatılırken parametre:

  • Context: Android Etkinliği veya Hizmeti'nden bağlam
  • (İsteğe bağlı) Device: TFLite hızlandırma yetkisi. Örnek: 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 yetkisi ve en fazla üç iş parçacığı kullanmak için model şöyle olur:

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ı; muhtemelen sıkıştırılmıştır' hatasını almak için aşağıdaki satırları ekleyin uygulama modülünün kitaplık modülünü kullanan Android bölümünün altında:

aaptOptions {
   noCompress "tflite"
}