날짜를 저장하십시오! Google I / O가 5 월 18 일부터 20 일까지 반환됩니다. 지금 등록
이 페이지는 Cloud Translation API를 통해 번역되었습니다.
Switch to English

TensorFlow 연산자 선택

TensorFlow Lite 내장 연산자 라이브러리는 제한된 수의 TensorFlow 연산자 만 지원하므로 모든 모델을 변환 할 수있는 것은 아닙니다. 자세한 내용은 운영자 호환성을 참조하십시오.

변환을 허용하기 위해 사용자는 TensorFlow Lite 모델에서 특정 TensorFlow 작업 을 사용하도록 설정할 수 있습니다. 그러나 TensorFlow 작업으로 TensorFlow Lite 모델을 실행하려면 핵심 TensorFlow 런타임을 가져와야하므로 TensorFlow Lite 인터프리터 바이너리 크기가 늘어납니다. Android의 경우 필요한 Tensorflow 작업 만 선택적으로 빌드하여이를 방지 할 수 있습니다. 자세한 내용은 바이너리 크기 줄이기를 참조하세요.

이 문서는 선택한 플랫폼에서 TensorFlow 작업이 포함 된 TensorFlow Lite 모델을 변환 하고 실행 하는 방법을 설명합니다. 또한 성능 및 크기 메트릭알려진 제한 사항에 대해서도 설명 합니다 .

모델 변환

다음 예제에서는 선택한 TensorFlow 작업을 사용하여 TensorFlow Lite 모델을 생성하는 방법을 보여줍니다.

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)

추론 실행

일부 TensorFlow 작업을 지원하여 변환 된 TensorFlow Lite 모델을 사용하는 경우 클라이언트는 TensorFlow 작업의 필수 라이브러리를 포함하는 TensorFlow Lite 런타임도 사용해야합니다.

Android AAR

바이너리 크기를 줄이려면 다음 섹션의 안내에 따라 사용자 지정 AAR 파일을 빌드하십시오. 바이너리 크기가 큰 문제가 아니라면 JCenter에서 호스팅되는 TensorFlow 작업과 함께 사전 빌드 된 AAR을 사용하는 것이 좋습니다.

다음과 같이 표준 TensorFlow Lite AAR과 함께 추가하여 build.gradle 종속성에서이를 지정할 수 있습니다.

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

종속성을 추가했으면 그래프의 TensorFlow 작업을 처리하는 데 필요한 대리자가 필요한 그래프에 대해 자동으로 설치되어야합니다.

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

Android AAR 빌드

바이너리 크기 또는 기타 고급 사례를 줄이기 위해 라이브러리를 수동으로 빌드 할 수도 있습니다. 작동하는 TensorFlow Lite 빌드 환경을 가정하고 다음과 같이 선택한 TensorFlow 작업을 사용하여 Android AAR을 빌드합니다.

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

그러면 TensorFlow Lite 내장 및 사용자 지정 작업에 대한 AAR 파일 bazel-bin/tmp/tensorflow-lite.aar 가 생성됩니다. TensorFlow 작업에 대한 AAR 파일 bazel-bin/tmp/tensorflow-lite-select-tf-ops.aarbazel-bin/tmp/tensorflow-lite-select-tf-ops.aar 합니다. 작동하는 빌드 환경이없는 경우 docker를 사용하여 위의 파일을 빌드 할 수도 있습니다.

여기에서 AAR 파일을 프로젝트로 직접 가져 오거나 사용자 지정 AAR 파일을 로컬 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

마지막으로 앱의 build.gradle 에서 mavenLocal() 종속성이 있는지 확인하고 표준 TensorFlow Lite 종속성을 선택한 TensorFlow 작업을 지원하는 종속성으로 mavenLocal() .

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

CocoaPods 사용

우리는 밤을위한 선택 TF의 작전 CocoaPods 미리 만들어진 제공 armv7arm64 당신이 옆에 따라 달라질 수 있습니다, TensorFlowLiteSwift 또는 TensorFlowLiteObjC CocoaPods을.

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

pod install 실행 한 후에는 선택한 TF ops 프레임 워크를 프로젝트에 강제로로드하기 위해 추가 링커 플래그를 제공해야합니다. Xcode 프로젝트에서 Build Settings > Other Linker Flags 로 이동하여 다음을 추가합니다.

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

그러면 iOS 앱에서 SELECT_TF_OPS 로 변환 된 모든 모델을 실행할 수 있습니다. 예를 들어이미지 분류 iOS 앱 을 수정하여 선택한 TF 작업 기능을 테스트 할 수 있습니다.

  • 모델 파일을 SELECT_TF_OPS 활성화 된 변환 된 파일로 바꿉니다.
  • 지시에 따라 TensorFlowLiteSelectTfOps 종속성을 Podfile 추가합니다.
  • 위와 같이 추가 링커 플래그를 추가하십시오.
  • 예제 앱을 실행하고 모델이 올바르게 작동하는지 확인합니다.

Bazel + Xcode 사용

iOS 용 일부 TensorFlow 작업이 포함 된 TensorFlow Lite는 Bazel을 사용하여 빌드 할 수 있습니다. 먼저 iOS 빌드 지침 에 따라 Bazel 작업 영역 및 .bazelrc 파일을 올바르게 구성합니다.

iOS 지원이 활성화 된 상태로 작업 영역을 구성한 후에는 다음 명령을 사용하여 일반 TensorFlowLiteC.framework 위에 추가 할 수있는 선택 TF ops 애드온 프레임 워크를 빌드 할 수 있습니다. 선택 TF의 작전 프레임 워크가 구축 될 수 없습니다 i386 명시 적으로 제외 대상 아키텍처의 목록을 제공 할 필요가 있으므로, 아키텍처 i386 .

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

그러면 bazel-bin/tensorflow/lite/ios/ 디렉터리 아래에 프레임 워크가 생성됩니다. iOS 빌드 가이드의 Xcode 프로젝트 설정 섹션에 설명 된 유사한 단계에 따라이 새 프레임 워크를 Xcode 프로젝트에 추가 할 수 있습니다.

앱 프로젝트에 프레임 워크를 추가 한 후 앱 프로젝트에 추가 링커 플래그를 지정하여 선택한 TF 작업 프레임 워크를 강제로로드해야합니다. Xcode 프로젝트에서 Build Settings > Other Linker Flags 로 이동하여 다음을 추가합니다.

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

C ++

bazel 파이프 라인을 사용하여 TensorFlow Lite 라이브러리를 빌드 할 때 다음과 같이 추가 TensorFlow ops 라이브러리를 포함하고 활성화 할 수 있습니다.

  • 필요한 경우 --config=monolithic 빌드 플래그를 추가하여 모 놀리 식 빌드를 활성화합니다.
  • TensorFlow ops 델리게이트 라이브러리 종속성을 빌드 종속성에 추가하십시오 : tensorflow/lite/delegates/flex:delegate .

대리자가 클라이언트 라이브러리에 연결되어있는 한 런타임에 인터프리터를 만들 때 필요한 TfLiteDelegate 가 자동으로 설치됩니다. 일반적으로 다른 대리자 유형에 필요한 것처럼 대리자 인스턴스를 명시 적으로 설치할 필요는 없습니다.

파이썬

일부 TensorFlow 작업이 포함 된 TensorFlow Lite는 TensorFlow pip 패키지 와 함께 자동으로 설치됩니다.TensorFlow Lite Interpreter pip 패키지 만 설치하도록 선택할 수도 있습니다.

메트릭

공연

내장 및 일부 TensorFlow 작업을 혼합하여 사용하는 경우 동일한 TensorFlow Lite 최적화 및 최적화 된 내장 작업을 모두 사용할 수 있으며 변환 된 모델과 함께 사용할 수 있습니다.

다음 표는 Pixel 2의 MobileNet에서 추론을 실행하는 데 걸린 평균 시간을 설명합니다. 나열된 시간은 평균 100 회 실행입니다. 이러한 타겟은 --config=android_arm64 -c opt 플래그를 사용하여 Android 용으로 빌드되었습니다.

짓다 시간 (밀리 초)
기본 제공 작업 만 ( TFLITE_BUILTIN ) 260.7
TF 작업 만 사용 ( SELECT_TF_OPS ) 264.5

바이너리 크기

다음 표는 각 빌드에 대한 TensorFlow Lite의 바이너리 크기를 설명합니다. 이러한 대상은 --config=android_arm -c opt 사용하여 Android 용으로 빌드되었습니다.

짓다 C ++ 바이너리 크기 Android APK 크기
기본 제공 작업 만 796KB 561KB
기본 제공 작업 + TF 작업 23.0 메가 바이트 8.0MB
내장 작업 + TF 작업 (1) 4.1 메가 바이트 1.8MB

(1) 이러한 라이브러리는 8 개의 TFLite 내장 작업과 3 개의 Tensorflow 작업이있는 i3d-kinetics-400 모델 용으로 선택적으로 빌드됩니다. 자세한 내용은 TensorFlow Lite 바이너리 크기 줄이기 섹션을 참조하세요.

알려진 제한

  • 지원되지 않는 유형 : 특정 TensorFlow 작업은 일반적으로 TensorFlow에서 사용할 수있는 전체 입력 / 출력 유형 집합을 지원하지 않을 수 있습니다.
  • 지원되지 않는 작업 : HashTableV2 와 같이 리소스에서 명시 적으로 초기화해야하는 제어 흐름 작업 및 작업은 아직 지원되지 않습니다.

업데이트

  • 버전 2.5 (아직 공식적으로 출시되지 않음)
  • 버전 2.4
    • 하드웨어 가속 델리게이트와의 호환성이 향상되었습니다.