Wybierz operatory TensorFlow

Wbudowana biblioteka operatorów LiteRT obsługuje tylko liczba operatorów TensorFlow, nie każdy model można konwertować. Więcej informacji: znajdziesz w artykule o zgodności operatorów.

Aby umożliwić konwersję, użytkownicy mogą włączyć korzystanie z określonych TensorFlow Ops w modelu LiteRT. Uruchomienie Modele LiteRT z operacjami TensorFlow wymagają wciągania Środowisko wykonawcze TensorFlow, które zwiększa rozmiar pliku binarnego interpretera LiteRT. W przypadku Androida można tego uniknąć, wybiórczo tworząc tylko wymagane elementy Tensorflow . Szczegółowe informacje znajdziesz w artykule Zmniejszanie wartości binarnych rozmiar.

Z tego dokumentu dowiesz się, jak przekonwertować i uruchom model LiteRT zawierający operacje TensorFlow w z wybranej platformy. Omawiamy również skuteczność i rozmiar danych i znanych ograniczeniach.

Konwertowanie modelu

Poniższy przykład pokazuje, jak wygenerować model LiteRT z opcją wyboru Operacje 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 LiteRT ops.
  tf.lite.OpsSet.SELECT_TF_OPS # enable TensorFlow ops.
]
tflite_model = converter.convert()
open("converted_model.tflite", "wb").write(tflite_model)

Uruchom wnioskowanie

Jeśli używasz modelu LiteRT, który został przekonwertowany i obsługuje wybierz operacje TensorFlow, klient musi też używać środowiska wykonawczego LiteRT, zawiera niezbędną bibliotekę operacji TensorFlow.

AAR na Androida

Aby zmniejszyć rozmiar pliku binarnego, skompiluj własne pliki AAR zgodnie z instrukcjami przejdź do następnej sekcji. Jeśli rozmiar pliku binarnego nie jest obaw, zalecamy użycie gotowego AAR z operacjami TensorFlow hostowana w MavenCentral.

Możesz to określić w zależnościach build.gradle, dodając je razem standardowy AAR LiteRT:

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'
}

Aby korzystać z nocnych zrzutów ekranu, dodaj opcję Sonatype (ujęcie) .

Po dodaniu zależności wyznacz odpowiedniego przedstawiciela do obsługi Operacje TensorFlow w grafie powinny być instalowane automatycznie w przypadku wykresów wymagających .

Uwaga: zależność operacji TensorFlow jest stosunkowo duża, więc chcesz odfiltrować z pliku .gradle niepotrzebne interfejsy ABI x86, konfigurując abiFilters.

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

Tworzenie aplikacji AAR na Androida

W celu zmniejszenia rozmiaru plików binarnych lub innych zaawansowanych przypadków można również ręcznie. Zakładając działającą kompilację LiteRT, , utwórz aplikację AAR na Androida z wybranymi operacjami TensorFlow jako następujące:

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 wbudowane i niestandardowe operacje LiteRT, i wygenerować 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 też skompilować pliki powyżej pliku dockera.

Następnie możesz zaimportować pliki AAR bezpośrednio do projektu lub opublikuj 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 panelu build.gradle aplikacji sprawdź, czy masz mavenLocal() i zastąp standardową zależność LiteRT tą, która obsługuje wybrane operacje TensorFlow:

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

Korzystanie z CocoaPods

LiteRT zapewnia conoc gotowe, wybrane operacje TF CocoaPods dla arm64, na które możesz polegać obok TensorFlowLiteSwift lub TensorFlowLiteObjC CocoaPods.

Uwaga: jeśli musisz użyć wybranych operacji TF w symulatorze x86_64, możesz utworzyć wybierz platformę operacji. Zobacz Korzystanie z Bazel + Xcode. .

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

Po uruchomieniu funkcji pod install musisz podać dodatkową flagę tagu łączącego do: wymuszania wczytywania w projekcie wybranej platformy operacji TF. W projekcie Xcode przejdź do Build Settings -> Other Linker Flags oraz dodać:

2.9.0 w wersji >= 2.9.0:

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

Dla wersji < 2.9.0:

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

Powinno być możliwe uruchamianie wszystkich modeli przekonwertowanych za pomocą interfejsu SELECT_TF_OPS w aplikacji na iOS. Możesz na przykład zmodyfikować klasyfikację obrazów iOS aplikacja aby przetestować wybraną funkcję operacji TF.

  • Zastąp plik modelu plikiem przekonwertowanym z włączoną funkcją SELECT_TF_OPS.
  • Dodaj zależność TensorFlowLiteSelectTfOps do Podfile zgodnie z instrukcjami.
  • Dodaj podaną wyżej flagę tagu łączącego.
  • Uruchom przykładową aplikację i sprawdź, czy model działa prawidłowo.

Korzystanie z Bazel + Xcode

LiteRT z wybranymi operacjami TensorFlow na iOS można tworzyć za pomocą Bazel. Najpierw postępuj zgodnie z instrukcjami kompilacji na iOS, aby skonfigurować Prawidłowo obszar roboczy Bazel i plik .bazelrc.

Po skonfigurowaniu obszaru roboczego z włączoną obsługą iOS możesz korzystać z to polecenie, aby utworzyć platformę dodatków do operacji TF, którą można dodać. w porównaniu ze zwykłym TensorFlowLiteC.framework. Pamiętaj, że wybrane operacje TF nie można utworzyć dla architektury i386, więc musisz podaj listę architektur docelowych z wyłączeniem i386.

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

Spowoduje to wygenerowanie platformy w: bazel-bin/tensorflow/lite/ios/ katalogu. Możesz dodać tę nową platformę do projektu Xcode, wykonując następujące czynności: podobne kroki opisane w projekcie Xcode ustawieniach w panelu Przewodnik po tworzeniu aplikacji na iOS.

Po dodaniu platformy do projektu aplikacji pojawi się dodatkowa flaga tagu łączącego powinien być określony w projekcie aplikacji, aby wymusić wczytywanie wybranych operacji TF platformy. W projekcie Xcode otwórz Build Settings -> Other Linker Flags oraz dodać:

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

Kod C/C++

Jeśli do tworzenia LiteRT używasz usługi Bazel lub CMake tłumacza, możesz włączyć przekazywanie dostępu do Flex, łącząc LiteRT Flex przekazać dostęp do biblioteki udostępnionej. Możesz ją utworzyć w Bazelu za pomocą poniższego polecenia.

bazel build -c opt --config=monolithic tensorflow/lite/delegates/flex:tensorflowlite_flex

To polecenie spowoduje wygenerowanie następujących udostępnianych zasobów w bazel-bin/tensorflow/lite/delegates/flex

Platforma Nazwa biblioteki
Linux libtensorflowlite_flex.so
macOS libtensorflowlite_flex.dylib
Windows tensorflowlite_flex.dll

Pamiętaj, że niezbędna aplikacja TfLiteDelegate zostanie zainstalowana automatycznie, gdy podczas tworzenia języka tłumaczonego podczas działania, o ile połączona jest biblioteka udostępniona, it nie jest konieczne do jawnego instalowania instancji z przekazanym dostępem, tak jak zwykle wymagane w przypadku innych typów przedstawicieli.

Uwaga: ta funkcja jest dostępna od wersji 2.7.

Python

LiteRT z wybranymi operacjami TensorFlow zostanie zainstalowany automatycznie pakietu pip TensorFlow. Dostępne opcje wybrać opcję zainstalowania tylko narzędzia tłumaczeniowego LiteRT (pip) .

Dane

Wyniki

Jeśli używasz kombinacji wbudowanych i wybranych operacji TensorFlow, wszystkie funkcje Dostępne będą optymalizacje LiteRT i zoptymalizowane operacje wbudowane których można używać z przekonwertowanym modelem.

Tabela poniżej opisuje średni czas, jaki zajmuje wnioskowanie na podstawie MobileNet na Pixelu 2. Podane czasy to średnio 100 uruchomień. Te Cele dla Androida zostały utworzone przy użyciu tych flag: --config=android_arm64 -c opt.

Kompilacja Czas (milisekundy)
Tylko operacje wbudowane (TFLITE_BUILTIN) 260,7
Używanie tylko operacji TF (SELECT_TF_OPS) 264,5

Wartość atrybutu size pliku binarnego

W tej tabeli opisano rozmiar plików binarnych LiteRT w przypadku każdej kompilacji. Te cele utworzono dla Androida przy użyciu --config=android_arm -c opt.

Kompilacja Rozmiar pliku binarnego C++ Rozmiar pliku APK na Androida
Tylko operacje wbudowane 796 KB 561 KB
Wbudowane operacje + operacje TF 23,0 MB 8,0 MB
Operacje wbudowane + operacje TF (1) 4,1 MB 1,8 MB

(1) Te biblioteki są selektywnie tworzone pod kątem zgodności z modelem i3d-kinetics-400 model z 8 wbudowanymi operacjami TFLite i 3 procesami Tensorflow. Więcej informacji znajdziesz tutaj: Zmniejsz rozmiar pliku binarnego LiteRT.

Znane ograniczenia

  • Nieobsługiwane typy: niektóre operacje TensorFlow mogą nie obsługiwać pełnego zestawu typów danych wejściowych/wyjściowych, które są zwykle dostępne w TensorFlow.

Aktualizacje

  • Wersja 2.6
    • Obsługa operatorów opartych na atrybutach GraphDef i zasobów HashTable i usprawnianie inicjowania.
  • Wersja 2.5
  • Wersja 2.4
    • Poprawiła się zgodność z przedstawicielami z akceleracją sprzętową