이 페이지는 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'
    // This dependency adds the necessary TF op support.
    implementation 'org.tensorflow:tensorflow-lite-select-tf-ops:0.0.0-nightly'
}

종속성을 추가하면 그래프의 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 와 같이 리소스에서 명시 적으로 초기화해야하는 제어 흐름 작업 및 작업은 아직 지원되지 않습니다.
  • 지원되지 않는 최적화 : 학습 후 양자화 라고하는 최적화를 적용하는 경우 TensorFlow Lite 작업 만 양자화 (또는 최적화)되지만 TensorFlow 작업은 부동 (또는 최적화되지 않음)으로 유지됩니다.

향후 계획

다음은 진행중인이 파이프 라인의 개선 사항 목록입니다.

  • 성능 향상 -TensorFlow 작업이 포함 된 TensorFlow Lite가 하드웨어 가속 대리자 (예 : NNAPI 및 GPU 대리자)와 잘 협력하도록하기위한 작업이 진행되고 있습니다.