Google Play Hizmetleri'ndeki LiteRT'ye, Native API'ye ek olarak Java veya Kotlin kodundan kullanılabilen Java API'leri aracılığıyla da erişilebilir. Özellikle, Google Play Hizmetleri'ndeki LiteRT, LiteRT Interpreter API aracılığıyla kullanılabilir.
Çevirmen API'lerini kullanma
TensorFlow çalışma zamanı tarafından sağlanan LiteRT Interpreter API, ML modelleri oluşturmak ve çalıştırmak için genel amaçlı bir arayüz sunar. Google Play Hizmetleri çalışma zamanında TensorFlow Lite'ı kullanarak Interpreter API ile çıkarım çalıştırmak için aşağıdaki adımları uygulayın.
1. Proje bağımlılıkları ekleme
LiteRT için Play Hizmetleri API'sine erişmek üzere uygulama projesi kodunuza aşağıdaki bağımlılıkları ekleyin:
dependencies {
...
// LiteRT dependencies for Google Play services
implementation 'com.google.android.gms:play-services-tflite-java:16.1.0'
// Optional: include LiteRT Support Library
implementation 'com.google.android.gms:play-services-tflite-support:16.1.0'
...
}
2. LiteRT'nin başlatılmasını ekleyin
LiteRT API'lerini kullanmadan önce Google Play Hizmetleri API'sinin LiteRT bileşenini başlatın:
Kotlin
val initializeTask: Task<Void> by lazy { TfLite.initialize(this) }
Java
Task<Void> initializeTask = TfLite.initialize(context);
3. Yorumlayıcı oluşturma ve çalışma zamanı seçeneğini ayarlama
InterpreterApi.create()
kullanarak bir yorumlayıcı oluşturun ve aşağıdaki örnek kodda gösterildiği gibi InterpreterApi.Options.setRuntime()
işlevini çağırarak Google Play Hizmetleri çalışma zamanını kullanacak şekilde yapılandırın:
Kotlin
import org.tensorflow.lite.InterpreterApi import org.tensorflow.lite.InterpreterApi.Options.TfLiteRuntime ... private lateinit var interpreter: InterpreterApi ... initializeTask.addOnSuccessListener { val interpreterOption = InterpreterApi.Options().setRuntime(TfLiteRuntime.FROM_SYSTEM_ONLY) interpreter = InterpreterApi.create( modelBuffer, interpreterOption )} .addOnFailureListener { e -> Log.e("Interpreter", "Cannot initialize interpreter", e) }
Java
import org.tensorflow.lite.InterpreterApi import org.tensorflow.lite.InterpreterApi.Options.TfLiteRuntime ... private InterpreterApi interpreter; ... initializeTask.addOnSuccessListener(a -> { interpreter = InterpreterApi.create(modelBuffer, new InterpreterApi.Options().setRuntime(TfLiteRuntime.FROM_SYSTEM_ONLY)); }) .addOnFailureListener(e -> { Log.e("Interpreter", String.format("Cannot initialize interpreter: %s", e.getMessage())); });
Android kullanıcı arayüzü iş parçacığının engellenmesini önlediği için yukarıdaki uygulamayı kullanmanız gerekir. İş parçacığı yürütme işlemini daha yakından yönetmeniz gerekiyorsa yorumlayıcı oluşturma işlemine Tasks.await()
çağrısı ekleyebilirsiniz:
Kotlin
import androidx.lifecycle.lifecycleScope ... lifecycleScope.launchWhenStarted { // uses coroutine initializeTask.await() }
Java
@BackgroundThread InterpreterApi initializeInterpreter() { Tasks.await(initializeTask); return InterpreterApi.create(...); }
4. Çıkarım çalıştırma
Oluşturduğunuz interpreter
nesnesini kullanarak run()
yöntemini çağırıp bir çıkarım oluşturun.
Kotlin
interpreter.run(inputBuffer, outputBuffer)
Java
interpreter.run(inputBuffer, outputBuffer);
Donanım hızlandırma
LiteRT, grafik işleme birimleri (GPU'lar) gibi özel donanım işlemcileri kullanarak modelinizin performansını hızlandırmanıza olanak tanır. Temsilciler adı verilen donanım sürücülerini kullanarak bu özel işlemcilerden yararlanabilirsiniz.
GPU temsilcisi, Google Play Hizmetleri aracılığıyla sağlanır ve Interpreter API'nin Play Hizmetleri sürümleri gibi dinamik olarak yüklenir.
Cihaz uyumluluğunu kontrol etme
Bazı cihazlar, TFLite ile GPU donanım hızlandırmayı desteklemez. Hataları ve olası kilitlenmeleri azaltmak için TfLiteGpu.isGpuDelegateAvailable
yöntemini kullanarak bir cihazın GPU temsilcisiyle uyumlu olup olmadığını kontrol edin.
Bir cihazın GPU ile uyumlu olup olmadığını onaylamak için bu yöntemi kullanın ve GPU desteklenmediğinde yedek olarak CPU'yu kullanın.
useGpuTask = TfLiteGpu.isGpuDelegateAvailable(context)
useGpuTask
gibi bir değişkeniniz olduğunda, cihazların GPU temsilcisini kullanıp kullanmadığını belirlemek için bu değişkeni kullanabilirsiniz.
Kotlin
val interpreterTask = useGpuTask.continueWith { task -> val interpreterOptions = InterpreterApi.Options() .setRuntime(TfLiteRuntime.FROM_SYSTEM_ONLY) if (task.result) { interpreterOptions.addDelegateFactory(GpuDelegateFactory()) } InterpreterApi.create(FileUtil.loadMappedFile(context, MODEL_PATH), interpreterOptions) }
Java
Task<InterpreterApi.Options> interpreterOptionsTask = useGpuTask.continueWith({ task -> InterpreterApi.Options options = new InterpreterApi.Options().setRuntime(TfLiteRuntime.FROM_SYSTEM_ONLY); if (task.getResult()) { options.addDelegateFactory(new GpuDelegateFactory()); } return options; });
Interpreter API'leri ile GPU
GPU temsilcisini Interpreter API'leriyle kullanmak için:
Play Hizmetleri'ndeki GPU temsilcisini kullanmak için proje bağımlılıklarını güncelleyin:
implementation 'com.google.android.gms:play-services-tflite-gpu:16.2.0'
TFlite başlatma işleminde GPU temsilci seçeneğini etkinleştirin:
Kotlin
TfLite.initialize(context, TfLiteInitializationOptions.builder() .setEnableGpuDelegateSupport(true) .build())
Java
TfLite.initialize(context, TfLiteInitializationOptions.builder() .setEnableGpuDelegateSupport(true) .build());
Yorumlayıcı seçeneklerinde GPU temsilcisini etkinleştirin:
addDelegateFactory() within
InterpreterApi.Options()` işlevini çağırarak temsilci fabrikasını GpuDelegateFactory olarak ayarlayın:Kotlin
val interpreterOption = InterpreterApi.Options() .setRuntime(TfLiteRuntime.FROM_SYSTEM_ONLY) .addDelegateFactory(GpuDelegateFactory())
Java
Options interpreterOption = InterpreterApi.Options() .setRuntime(TfLiteRuntime.FROM_SYSTEM_ONLY) .addDelegateFactory(new GpuDelegateFactory());
Bağımsız LiteRT'den taşıma
Uygulamanızı bağımsız LiteRT'den Play Hizmetleri API'sine taşımayı planlıyorsanız uygulama projesi kodunuzu güncellemek için aşağıdaki ek kılavuzu inceleyin:
- Kullanım alanınızın desteklendiğinden emin olmak için Sınırlamalar bölümünü inceleyin.
- Kodunuzu güncellemeden önce, özellikle LiteRT'nin (TF Lite) 2.1 sürümünden önceki sürümlerini kullanıyorsanız modelleriniz için performans ve doğruluk kontrolleri yapmanızı öneririz. Böylece, yeni uygulamayla karşılaştırabileceğiniz bir temel oluşturabilirsiniz.
- Kodunuzun tamamını LiteRT için Play Hizmetleri API'sini kullanacak şekilde taşıdıysanız uygulama boyutunuzu küçültmek için mevcut LiteRT çalışma zamanı kitaplığı bağımlılıklarını (
org.tensorflow:tensorflow-lite:*
içeren girişler) build.gradle dosyanızdan kaldırmanız gerekir. - Kodunuzda
new Interpreter
nesne oluşturma işlemlerinin tümünü belirleyin ve her biriniInterpreterApi.create()
çağrısını kullanacak şekilde değiştirin. YeniTfLite.initialize
işlevi eşzamansızdır. Bu nedenle, çoğu durumda doğrudan değiştirilemez. Arama tamamlandığında bir dinleyici kaydetmeniz gerekir. 3. adım kodundaki kod snippet'ine bakın. org.tensorflow.lite.Interpreter
veyaorg.tensorflow.lite.InterpreterApi
sınıflarını kullanarak herhangi bir kaynak dosyayaimport org.tensorflow.lite.InterpreterApi;
veimport org.tensorflow.lite.InterpreterApi.Options.TfLiteRuntime;
ekleyin.InterpreterApi.create()
işlevine yapılan ve tek bağımsız değişken içeren tüm çağrılarda bağımsız değişken listesinenew InterpreterApi.Options()
ekleyin..setRuntime(TfLiteRuntime.FROM_SYSTEM_ONLY)
,InterpreterApi.create()
ile yapılan tüm çağrıların son bağımsız değişkenine eklenir.org.tensorflow.lite.Interpreter
sınıfının diğer tüm örnekleriniorg.tensorflow.lite.InterpreterApi
ile değiştirin.
Bağımsız LiteRT ve Play Hizmetleri API'sini yan yana kullanmak istiyorsanız LiteRT (TF Lite) 2.9 veya sonraki bir sürümünü kullanmanız gerekir. LiteRT (TF Lite) 2.8 sürümü ve önceki sürümleri, Play Hizmetleri API sürümüyle uyumlu değildir.