Yardım Kaggle üzerinde TensorFlow ile Büyük Bariyer Resifi korumak Meydan Üyelik

TensorFlow operatörlerini seçin

TensorFlow Lite yerleşik operatör kitaplığı yalnızca sınırlı sayıda TensorFlow operatörünü desteklediğinden, her model dönüştürülebilir değildir. Ayrıntılar için operatör uyumluluğuna bakın.

Dönüşüme izin vermek için kullanıcılar, TensorFlow Lite modellerinde belirli TensorFlow operasyonlarının kullanımını etkinleştirebilir. Bununla birlikte, TensorFlow Lite modellerini TensorFlow operasyonlarıyla çalıştırmak, TensorFlow Lite yorumlayıcı ikili boyutunu artıran çekirdek TensorFlow çalışma zamanını çekmeyi gerektirir. Android için, yalnızca gerekli Tensorflow operasyonlarını seçerek oluşturarak bunu önleyebilirsiniz. Ayrıntılar için ikili boyutu küçültme bölümüne bakın.

Bu belge, seçtiğiniz bir platformda TensorFlow operasyonlarını içeren bir TensorFlow Lite modelinin nasıl dönüştürüleceğini ve çalıştırılacağını özetlemektedir. Ayrıca performans ve boyut ölçüleri ile bilinen sınırlamaları da tartışır.

Bir modeli dönüştür

Aşağıdaki örnek, belirli TensorFlow operasyonlarıyla bir TensorFlow Lite modelinin nasıl oluşturulacağını gösterir.

import tensorflow as tf

converter = tf.lite.TFLiteConverter.from_saved_model(saved_model_dir)
converter.target_spec.supported_ops = [
  tf.lite.OpsSet.TFLITE_BUILTINS, # enable TensorFlow Lite ops.
  tf.lite.OpsSet.SELECT_TF_OPS # enable TensorFlow ops.
]
tflite_model = converter.convert()
open("converted_model.tflite", "wb").write(tflite_model)

Çıkarımı Çalıştır

Belirli TensorFlow işlemleri desteğiyle dönüştürülmüş bir TensorFlow Lite modeli kullanırken, istemci ayrıca gerekli TensorFlow ops kitaplığını içeren bir TensorFlow Lite çalışma zamanı kullanmalıdır.

Android AAR

İkili dosya boyutunu küçültmek için lütfen bir sonraki bölümde anlatıldığı gibi kendi özel AAR dosyalarınızı oluşturun. İkili boyut önemli bir endişe değilse , MavenCentral'da barındırılan TensorFlow operasyonlarıyla önceden oluşturulmuş AAR'yi kullanmanızı öneririz.

Bunu, standart TensorFlow Lite AAR'ın yanına aşağıdaki gibi ekleyerek build.gradle bağımlılıklarınızda belirtebilirsiniz:

dependencies {
    implementation 'org.tensorflow:tensorflow-lite:0.0.0-nightly-SNAPSHOT'
    // This dependency adds the necessary TF op support.
    implementation 'org.tensorflow:tensorflow-lite-select-tf-ops:0.0.0-nightly-SNAPSHOT'
}

Gecelik anlık görüntüleri kullanmak için Sonatype anlık görüntü deposunu eklediğinizden emin olun.

Bağımlılığı ekledikten sonra, grafiğin TensorFlow işlemlerini işlemek için gerekli temsilci, bunları gerektiren grafikler için otomatik olarak yüklenmelidir.

android {
    defaultConfig {
        ndk {
            abiFilters 'armeabi-v7a', 'arm64-v8a'
        }
    }
}

Android AAR'ı Oluşturma

İkili boyutu veya diğer gelişmiş durumları azaltmak için kitaplığı manuel olarak da oluşturabilirsiniz. Çalışan bir TensorFlow Lite oluşturma ortamı olduğunu varsayarak, Android AAR'yi belirli TensorFlow operasyonlarıyla aşağıdaki gibi oluşturun:

sh tensorflow/lite/tools/build_aar.sh \
  --input_models=/a/b/model_one.tflite,/c/d/model_two.tflite \
  --target_archs=x86,x86_64,arm64-v8a,armeabi-v7a

Bu, TensorFlow Lite yerleşik ve özel işlemler için bazel-bin/tmp/tensorflow-lite.aar AAR dosyasını oluşturacaktır; ve TensorFlow işlemleri için bazel-bin/tmp/tensorflow-lite-select-tf-ops.aar AAR dosyasını oluşturun. Çalışan bir derleme ortamınız yoksa , docker ile yukarıdaki dosyaları da oluşturabilirsiniz .

Buradan, AAR dosyalarını doğrudan projenize aktarabilir veya özel AAR dosyalarını yerel Maven deponuzda yayınlayabilirsiniz:

mvn install:install-file \
  -Dfile=bazel-bin/tmp/tensorflow-lite.aar \
  -DgroupId=org.tensorflow \
  -DartifactId=tensorflow-lite -Dversion=0.1.100 -Dpackaging=aar
mvn install:install-file \
  -Dfile=bazel-bin/tmp/tensorflow-lite-select-tf-ops.aar \
  -DgroupId=org.tensorflow \
  -DartifactId=tensorflow-lite-select-tf-ops -Dversion=0.1.100 -Dpackaging=aar

Son olarak, uygulamanızın build.gradle mavenLocal() bağımlılığına sahip olduğunuzdan emin olun ve standart TensorFlow Lite bağımlılığını belirli TensorFlow işlemlerini destekleyen bir bağımlılıkla değiştirin:

allprojects {
    repositories {
        mavenCentral()
        maven {  // Only for snapshot artifacts
            name 'ossrh-snapshot'
            url 'https://oss.sonatype.org/content/repositories/snapshots'
        }
        mavenLocal()
    }
}

dependencies {
    implementation 'org.tensorflow:tensorflow-lite:0.1.100'
    implementation 'org.tensorflow:tensorflow-lite-select-tf-ops:0.1.100'
}

iOS

CocoaPod'ları Kullanma

Armv7 ve arm64 için armv7 veya TensorFlowLiteObjC TensorFlowLiteSwift yanı sıra güvenebileceğiniz, her gece önceden oluşturulmuş seçili TF operasyonları CocoaPod'ları sağlıyoruz.

# In your Podfile target:
  pod 'TensorFlowLiteSwift'   # or 'TensorFlowLiteObjC'
  pod 'TensorFlowLiteSelectTfOps', '~> 0.0.1-nightly'

pod install çalıştırdıktan sonra, seçili TF ops çerçevesini projenize yüklemeye zorlamak için ek bir bağlayıcı bayrağı sağlamanız gerekir. Xcode projenizde Build Settings -> Other Linker Flags seçeneğine gidin ve şunu ekleyin:

-force_load $(SRCROOT)/Pods/TensorFlowLiteSelectTfOps/Frameworks/TensorFlowLiteSelectTfOps.framework/TensorFlowLiteSelectTfOps

Ardından, iOS uygulamanızda SELECT_TF_OPS ile dönüştürülmüş tüm modelleri çalıştırabilmeniz gerekir. Örneğin, Select TF ops özelliğini test etmek için Image Classification iOS uygulamasını değiştirebilirsiniz.

  • Model dosyasını, SELECT_TF_OPS etkinken dönüştürülmüş olanla değiştirin.
  • TensorFlowLiteSelectTfOps bağımlılığını talimat verildiği şekilde Podfile dosyasına ekleyin.
  • Ek bağlayıcı bayrağını yukarıdaki gibi ekleyin.
  • Örnek uygulamayı çalıştırın ve modelin doğru çalışıp çalışmadığını görün.

Bazel + Xcode'u Kullanma

iOS için belirli TensorFlow operasyonlarına sahip TensorFlow Lite, Bazel kullanılarak oluşturulabilir. İlk olarak, Bazel çalışma alanınızı ve .bazelrc dosyanızı doğru şekilde yapılandırmak için iOS oluşturma talimatlarını izleyin.

Çalışma alanını iOS desteği etkin olarak yapılandırdıktan sonra, normal TensorFlowLiteC.framework üzerine eklenebilecek seçkin TF ops eklenti çerçevesini oluşturmak için aşağıdaki komutu kullanabilirsiniz. Select TF ops çerçevesinin i386 mimarisi için oluşturulamayacağını unutmayın, bu nedenle i386 dışındaki hedef mimarilerin listesini açıkça sağlamanız gerekir.

bazel build -c opt --config=ios --ios_multi_cpus=armv7,arm64,x86_64 \
  //tensorflow/lite/ios:TensorFlowLiteSelectTfOps_framework

Bu, çerçeveyi bazel-bin/tensorflow/lite/ios/ dizini altında oluşturacaktır. Bu yeni çerçeveyi, iOS oluşturma kılavuzundaki Xcode proje ayarları bölümünde açıklanan benzer adımları izleyerek Xcode projenize ekleyebilirsiniz.

Çerçeveyi uygulama projenize ekledikten sonra, seçilen TF ops çerçevesini zorlamak için uygulama projenizde ek bir bağlayıcı bayrağı belirtilmelidir. Xcode projenizde Build Settings -> Other Linker Flags seçeneğine gidin ve şunu ekleyin:

-force_load <path/to/your/TensorFlowLiteSelectTfOps.framework/TensorFlowLiteSelectTfOps>

C++

Bazel ardışık düzenini kullanarak TensorFlow Lite kitaplıkları oluştururken, ek TensorFlow ops kitaplığı aşağıdaki gibi dahil edilebilir ve etkinleştirilebilir:

  • Gerekirse, --config=monolithic derleme bayrağını ekleyerek monolitik yapıları etkinleştirin.
  • TensorFlow ops temsilci kitaplığı bağımlılığını derleme bağımlılıklarına ekleyin: tensorflow/lite/delegates/flex:delegate .

Temsilci istemci kitaplığına bağlı olduğu sürece, çalışma zamanında yorumlayıcı oluşturulurken gerekli TfLiteDelegate otomatik olarak kurulacağını unutmayın. Diğer temsilci türlerinde tipik olarak gerekli olduğu gibi, temsilci örneğini açıkça yüklemek gerekli değildir.

piton

Belirli TensorFlow operasyonlarına sahip TensorFlow Lite, TensorFlow pip paketi ile otomatik olarak kurulacaktır. Ayrıca yalnızca TensorFlow Lite Interpreter pip paketini kurmayı da seçebilirsiniz.

Metrikler

Verim

Hem yerleşik hem de seçili TensorFlow işlemlerinin bir karışımını kullanırken, aynı TensorFlow Lite optimizasyonlarının ve optimize edilmiş yerleşik işlemlerin tümü dönüştürülen modelle kullanılabilir ve kullanılabilir olacaktır.

Aşağıdaki tablo, bir Pixel 2 üzerinde MobileNet'te çıkarımı çalıştırmak için geçen ortalama süreyi açıklamaktadır. Listelenen süreler, ortalama 100 çalıştırmadır. Bu hedefler Android için şu bayraklar kullanılarak oluşturulmuştur: --config=android_arm64 -c opt .

Yapı Zaman (milisaniye)
Yalnızca yerleşik işlemler ( TFLITE_BUILTIN ) 260.7
Yalnızca TF operasyonlarını kullanma ( SELECT_TF_OPS ) 264.5

ikili boyut

Aşağıdaki tabloda, her yapı için TensorFlow Lite'ın ikili boyutu açıklanmaktadır. Bu hedefler Android için --config=android_arm -c opt kullanılarak oluşturulmuştur.

Yapı C++ İkili Boyut Android APK Boyutu
Yalnızca yerleşik işlemler 796 KB 561 KB
Yerleşik operasyonlar + TF operasyonları 23.0 MB 8,0 MB
Yerleşik operasyonlar + TF operasyonları (1) 4,1 MB 1.8 MB

(1) Bu kitaplıklar, 8 TFLite yerleşik ops ve 3 Tensorflow ops ile i3d-kinetics-400 modeli için seçici olarak oluşturulmuştur. Daha fazla ayrıntı için lütfen TensorFlow Lite ikili boyutunu küçültme bölümüne bakın.

Bilinen sınırlamalar

  • Desteklenmeyen türler: Belirli TensorFlow işlemleri, tipik olarak TensorFlow'da bulunan giriş/çıkış türlerinin tamamını desteklemeyebilir.

güncellemeler

  • Sürüm 2.6
    • GraphDef özniteliği tabanlı operatörler ve HashTable kaynak başlatmaları için destekler iyileştirildi.
  • Sürüm 2.5
  • Sürüm 2.4
    • Donanım hızlandırmalı delegelerle uyumluluk geliştirildi