Ta strona została przetłumaczona przez Cloud Translation API.
Switch to English

Wybierz operatory TensorFlow

Ponieważ wbudowana biblioteka operatorów TensorFlow Lite obsługuje tylko ograniczoną liczbę operatorów TensorFlow, nie każdy model można konwertować. Aby uzyskać szczegółowe informacje, patrz zgodność operatora .

Aby umożliwić konwersję, użytkownicy mogą włączyć korzystanie z niektórych operacji TensorFlow w swoim modelu TensorFlow Lite. Jednak uruchamianie modeli TensorFlow Lite z operacjami TensorFlow wymaga wciągnięcia podstawowego środowiska wykonawczego TensorFlow, co zwiększa rozmiar pliku binarnego interpretera TensorFlow Lite. W przypadku Androida możesz tego uniknąć, selektywnie budując tylko wymagane operacje Tensorflow. Aby uzyskać szczegółowe informacje, zobacz zmniejszanie rozmiaru binarnego .

W tym dokumencie opisano, jak przekonwertować i uruchomić model TensorFlow Lite zawierający operacje TensorFlow na wybranej platformie. Omówiono także wskaźniki wydajności i rozmiaru oraz znane ograniczenia .

Konwertuj model

Poniższy przykład pokazuje, jak wygenerować model TensorFlow Lite przy użyciu wybranych operacji TensorFlow.

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)

Uruchom wnioskowanie

W przypadku korzystania z modelu TensorFlow Lite, który został przekonwertowany z obsługą wybranych operacji TensorFlow, klient musi również używać środowiska wykonawczego TensorFlow Lite, które zawiera niezbędną bibliotekę operacji TensorFlow.

Android AAR

Aby zmniejszyć rozmiar binarny, utwórz własne niestandardowe pliki AAR zgodnie z instrukcjami w następnej sekcji . Jeśli rozmiar pliku binarnego nie stanowi większego problemu, zalecamy użycie wstępnie utworzonego AAR z operacjami TensorFlow hostowanymi w JCenter .

Możesz to określić w zależnościach build.gradle , dodając go obok standardowego TensorFlow Lite AAR w następujący sposób:

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

Po dodaniu zależności niezbędny delegat do obsługi operacji TensorFlow wykresu powinien zostać automatycznie zainstalowany dla wykresów, które ich wymagają.

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

Tworzenie AAR dla Androida

Aby zmniejszyć rozmiar binarny lub inne zaawansowane przypadki, możesz również ręcznie zbudować bibliotekę. Zakładając działające środowisko kompilacji TensorFlow Lite , skompiluj AAR systemu Android za pomocą wybranych operacji TensorFlow w następujący sposób:

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

Spowoduje to wygenerowanie pliku AAR bazel-bin/tmp/tensorflow-lite.aar dla wbudowanych i niestandardowych bazel-bin/tmp/tensorflow-lite.aar TensorFlow Lite; i wygeneruj plik AAR bazel-bin/tmp/tensorflow-lite-select-tf-ops.aar dla operacji TensorFlow. Jeśli nie masz działającego środowiska kompilacji, możesz również budować powyższe pliki za pomocą dockera .

Stamtąd możesz zaimportować pliki AAR bezpośrednio do swojego projektu lub opublikować niestandardowe pliki AAR w lokalnym repozytorium Maven:

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

Na koniec w mavenLocal() build.gradle aplikacji upewnij się, że masz zależność mavenLocal() i zastąp standardową zależność TensorFlow Lite tą, która obsługuje wybrane operacje TensorFlow:

allprojects {
    repositories {
        jcenter()
        mavenLocal()
    }
}

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

iOS

Korzystanie z CocoaPods

Zapewniamy nocne, wstępnie skompilowane, wybrane opcje TF ops CocoaPods, na których możesz polegać wraz z TensorFlowLiteSwift lub TensorFlowLiteObjC CocoaPods.

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

Po uruchomieniu pod install należy podać dodatkową flagę konsolidatora, aby wymusić załadowanie wybranej platformy TF ops do projektu. W projekcie Xcode przejdź do opcji Build Settings -> Other Linker Flags i dodaj:

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

Powinieneś wtedy móc uruchomić dowolne modele przekonwertowane za pomocą SELECT_TF_OPS w aplikacji na iOS. Na przykład możesz zmodyfikować aplikację Image Classification iOS, aby przetestować wybraną funkcję TF ops.

  • Zastąp plik modelu plikiem przekonwertowanym z włączoną SELECT_TF_OPS .
  • Dodaj zależność TensorFlowLiteSelectTfOps do Podfile zgodnie z instrukcjami.
  • Dodaj dodatkową flagę konsolidatora, jak powyżej.
  • Uruchom przykładową aplikację i sprawdź, czy model działa poprawnie.

Korzystanie z Bazel + Xcode

TensorFlow Lite z wybranymi opcjami TensorFlow dla iOS można zbudować za pomocą Bazel. Najpierw postępuj zgodnie z instrukcjami kompilacji systemu iOS, aby poprawnie skonfigurować obszar roboczy Bazel i plik .bazelrc .

Po skonfigurowaniu obszaru roboczego z włączoną obsługą systemu iOS możesz użyć następującego polecenia, aby zbudować wybraną strukturę dodatków TF ops, którą można dodać do zwykłego TensorFlowLiteC.framework . Zauważ, że frameworku Select TF ops nie można zbudować dla architektury i386 , więc musisz jawnie podać listę architektur docelowych, z wyłączeniem i386 .

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

Spowoduje to wygenerowanie frameworka w bazel-bin/tensorflow/lite/experimental/ios/ . Możesz dodać tę nową strukturę do projektu Xcode, wykonując podobne kroki opisane w sekcji Ustawienia projektu Xcode w przewodniku kompilacji systemu iOS.

Po dodaniu struktury do projektu aplikacji należy określić dodatkową flagę konsolidatora w projekcie aplikacji, aby wymusić załadowanie wybranej struktury TF ops. W projekcie Xcode przejdź do opcji Build Settings -> Other Linker Flags i dodaj:

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

C ++

Podczas budowania bibliotek TensorFlow Lite przy użyciu potoku bazel, dodatkową bibliotekę TensorFlow ops można dołączyć i włączyć w następujący sposób:

  • W razie potrzeby włącz kompilacje monolityczne, dodając flagę --config=monolithic build.
  • Dodaj zależność biblioteki delegatów TensorFlow ops do zależności kompilacji: tensorflow/lite/delegates/flex:delegate .

Należy pamiętać, że niezbędny TfLiteDelegate zostanie zainstalowany automatycznie podczas tworzenia interpretera w czasie wykonywania, o ile delegat jest połączony z biblioteką klienta. Nie jest konieczne jawne instalowanie wystąpienia delegata, jak jest to zwykle wymagane w przypadku innych typów delegatów.

Pyton

TensorFlow Lite z wybranymi opcjami TensorFlow zostanie automatycznie zainstalowany wraz z pakietem pip TensorFlow . Możesz także wybrać instalację samego pakietu pip TensorFlow Lite Interpreter .

Metryka

Występ

W przypadku korzystania z kombinacji wbudowanych i wybranych operacji TensorFlow, wszystkie te same optymalizacje i zoptymalizowane wbudowane operacje TensorFlow Lite będą dostępne i użyteczne w przekonwertowanym modelu.

W poniższej tabeli opisano średni czas potrzebny do wykonania wnioskowania w sieci MobileNet na Pixelu 2. Wymienione czasy to średnio 100 uruchomień. Te cele zostały zbudowane dla Androida przy użyciu flag: --config=android_arm64 -c opt .

Budować Czas (milisekundy)
Tylko wbudowane TFLITE_BUILTIN ( TFLITE_BUILTIN ) 260,7
Korzystanie tylko z operacji TF ( SELECT_TF_OPS ) 264,5

Rozmiar binarny

W poniższej tabeli opisano binarny rozmiar TensorFlow Lite dla każdej kompilacji. Te cele zostały zbudowane dla Androida przy użyciu --config=android_arm -c opt .

Budować Rozmiar binarny C ++ Rozmiar APK dla Androida
Tylko wbudowane operacje 796 KB 561 KB
Wbudowane operacje + operacje TF 23,0 MB 8,0 MB
Wbudowane operacje + operacje TF (1) 4,1 MB 1,8 MB

(1) Te biblioteki są budowane selektywnie dla modelu i3d-kinetics-400 z 8 wbudowanymi operacjami TFLite i 3 operacjami Tensorflow. Aby uzyskać więcej informacji, zobacz sekcję Zmniejszanie rozmiaru binarnego TensorFlow Lite .

Znane ograniczenia

  • Nieobsługiwane typy: niektóre operacje TensorFlow mogą nie obsługiwać pełnego zestawu typów wejść / wyjść, które są zwykle dostępne w TensorFlow.
  • Nieobsługiwane operacje: operacje i operacje przepływu sterowania, które wymagają jawnej inicjalizacji z zasobów, takie jak HashTableV2 , nie są jeszcze obsługiwane.
  • Nieobsługiwane optymalizacje: jeśli zastosujesz optymalizację znaną jako kwantyzacja potreningowa, tylko operacje TensorFlow Lite zostaną skwantyzowane (lub zoptymalizowane), ale operacje TensorFlow pozostaną jako zmiennoprzecinkowe (lub niezoptymalizowane).

Przyszłe plany

Poniżej znajduje się lista ulepszeń tego potoku, które są w toku:

  • Poprawiona wydajność - Trwają prace nad zapewnieniem, że TensorFlow Lite z operacjami TensorFlow dobrze współpracuje z delegatami przyspieszanymi sprzętowo, na przykład delegatami NNAPI i GPU.