Google Play 서비스의 TensorFlow Lite(베타)

TensorFlow Lite는 2022년 2월 17일부터 현재 버전의 Play 서비스를 실행하는 모든 Android 기기에서 공개 베타로 Google Play 서비스 API에서 사용할 수 있습니다. 이 API를 사용하면 TensorFlow Lite 라이브러리를 앱에 정적으로 번들링하지 않고도 기계 학습 모델을 실행할 수 있습니다. 다음을 수행할 수 있습니다.

  • 앱 크기 줄이기
  • 안정적인 최신 버전의 TensorFlow Lite에서 향상된 성능 확보

이 페이지에서는 Android 앱의 Google Play 서비스 API에서 새로운 TensorFlow Lite를 사용하는 방법에 대한 간략한 개요를 제공합니다.

Google Play 서비스에 대한 자세한 내용은 Google Play 서비스 웹사이트를 참조하십시오.

앱에 TensorFlow Lite 추가

앱 모듈 종속성을 약간 변경하고 새 API를 초기화하고 특정 클래스를 인터프리터 객체로 사용하여 Google Play 서비스 API에서 TensorFlow Lite를 사용할 수 있습니다. 다음 지침은 앱 코드를 수정하는 방법에 대한 자세한 내용을 제공합니다.

1. 프로젝트 종속성 추가

TensorFlow Lite용 Play Services API에 액세스하려면 앱 프로젝트 코드에 다음 종속성을 추가하세요.

dependencies {
...
    // Tensorflow Lite dependencies for Google Play services
    implementation 'com.google.android.gms:play-services-tflite-java:16.0.0-beta02'
    // Optional: include Tensorflow Lite Support Library
    implementation 'com.google.android.gms:play-services-tflite-support:16.0.0-beta02'
...
}

2. TensorFlow Lite 초기화 추가

TensorFlow Lite API를 사용 하기 전에 Google Play 서비스 API의 TensorFlow Lite 구성요소를 초기화합니다.

코틀린

val initializeTask: Task<Void> by lazy { TfLite.initialize(this) }

자바

Task<Void> initializeTask = TfLite.initialize(context);

3. 인터프리터 생성 및 런타임 옵션 설정

InterpreterApi.create() 를 사용하여 인터프리터를 만들고 다음 예제 코드와 같이 InterpreterApi.Options.setRuntime() 을 호출하여 Google Play 서비스 런타임을 사용하도록 구성합니다.

코틀린

import org.tensorflow.lite.InterpreterApi
import org.tensorflow.lite.InterpreterApi.Options.TfLiteRuntime
...
private lateinit var interpreter: InterpreterApi
...
initializeTask.addOnSuccessListener {
  val interpreterOption =
    InterpreterApi.Options().setRuntime(TfLiteRuntime.FROM_SYSTEM_ONLY)
  interpreter = InterpreterApi.create(
    modelBuffer,
    interpreterOption
  )}
  .addOnFailureListener { e ->
    Log.e("Interpreter", "Cannot initialize interpreter", e)
  }

자바

import org.tensorflow.lite.InterpreterApi
import org.tensorflow.lite.InterpreterApi.Options.TfLiteRuntime
...
private InterpreterApi interpreter;
...
initializeTask.addOnSuccessListener(a -> {
    interpreter = InterpreterApi.create(modelBuffer,
      new InterpreterApi.Options().setRuntime(TfLiteRuntime.FROM_SYSTEM_ONLY));
  })
  .addOnFailureListener(e -> {
    Log.e("Interpreter", String.format("Cannot initialize interpreter: %s",
          e.getMessage()));
  });

Android 사용자 인터페이스 스레드를 차단하지 않기 때문에 위의 구현을 사용해야 합니다. 스레드 실행을 더 자세히 관리해야 하는 경우 인터프리터 생성에 Tasks.await() 호출을 추가할 수 있습니다.

코틀린

import androidx.lifecycle.lifecycleScope
...
lifecycleScope.launchWhenStarted { // uses coroutine
  initializeTask.await()
}

자바

@BackgroundThread
InterpreterApi initializeInterpreter() {
    Tasks.await(initializeTask);
    return InterpreterApi.create(...);
}

4. 추론 실행

생성한 interpreter 객체를 사용하여 run() 메서드를 호출하여 추론을 생성합니다.

코틀린

interpreter.run(inputBuffer, outputBuffer)

자바

interpreter.run(inputBuffer, outputBuffer);

Google Play 서비스의 TensorFlow Lite

Google Play 서비스 API의 TensorFlow Lite를 사용하면 Play 서비스에서 새 메서드를 사용하여 앱을 초기화한 후 앱의 실제 TensorFlow Lite Java API 에 액세스할 수 있습니다. 이 접근 방식을 사용하면 기존 앱의 코드 변경을 최소화하고 새로운 구현을 간소화할 수 있습니다. 이 기능의 API에 대한 자세한 내용은 TensorFlow Lite API 참조를 참조 하세요.

독립형 TensorFlow Lite에서 마이그레이션

앱을 독립형 TensorFlow Lite에서 Play 서비스 API로 마이그레이션하려는 경우 앱 프로젝트 코드 업데이트에 대한 다음 추가 지침을 검토하세요.

  1. 이 페이지의 제한 사항 섹션을 검토하여 사용 사례가 지원되는지 확인하십시오.
  2. 코드를 업데이트하기 전에 특히 TensorFlow Lite 버전 2.1 이전 버전을 사용하는 경우 모델에 대한 성능 및 정확도 검사를 수행하여 새 구현과 비교할 기준선을 확보하십시오.
  3. TensorFlow Lite용 Play 서비스 API를 사용하도록 모든 코드를 마이그레이션한 경우 기존 TensorFlow Lite 런타임 라이브러리 종속성( org.tensorflow: tensorflow-lite :* 항목)을 build.gradle 파일에서 제거하여 다음을 수행해야 합니다. 앱 크기를 줄일 수 있습니다.
  4. 코드에서 new Interpreter 객체 생성의 모든 발생을 식별하고 InterpreterApi.create() 호출을 사용하도록 수정합니다. 이 새로운 API는 비동기식이므로 대부분의 경우 즉시 교체할 수 없으며 호출이 완료될 때 리스너를 등록해야 합니다. 3단계 코드의 코드 스니펫을 참조하세요.
  5. import org.tensorflow.lite.InterpreterApi; import org.tensorflow.lite.InterpreterApi.Options.TfLiteRuntime; org.tensorflow.lite.Interpreter 또는 org.tensorflow.lite.InterpreterApi 클래스를 사용하는 모든 소스 파일에.
  6. InterpreterApi.create() 에 대한 결과 호출에 단일 인수만 있는 경우 인수 목록에 new InterpreterApi.Options() 를 추가합니다.
  7. InterpreterApi.create() 에 대한 호출의 마지막 인수에 .setRuntime(TfLiteRuntime.FROM_SYSTEM_ONLY) 을 추가하십시오.
  8. org.tensorflow.lite.Interpreter 클래스의 다른 모든 항목을 org.tensorflow.lite.InterpreterApi 로 교체하십시오.

독립형 TensorFlow Lite와 Play 서비스 API를 나란히 사용하려면 TensorFlow Lite 2.9(또는 그 이상)를 사용해야 합니다. TensorFlow Lite 2.8 및 이전 버전은 Play 서비스 API 버전과 호환되지 않습니다.

예시 앱

예제 앱 에서 Google Play 서비스의 TensorFlow Lite 구현 예제를 검토하고 테스트할 수 있습니다.

테스트

Google Play 서비스에서 TensorFlow Lite를 구현한 후 애플리케이션을 테스트하고 앱의 기계 학습 모델 기능을 실행해야 합니다. 해결할 수 없는 오류나 문제가 발생하는 경우 아래 지원 및 피드백 섹션에 설명된 채널을 사용하여 신고해 주세요.

LoadingException: 허용되는 모듈이 없습니다.

베타 출시 기간 동안 개발 환경을 통해 앱을 테스트하는 동안 앱이 TensorFlow Lite 클래스( TfLite.intialize(context) )를 초기화하려고 하면 예외가 발생할 수 있습니다.

com.google.android.gms.dynamite.DynamiteModule$LoadingException:
  No acceptable module com.google.android.gms.tflite_dynamite found.
  Local version is 0 and remote version is 0.

이 오류는 Google Play 서비스 API의 TensorFlow Lite를 아직 테스트 기기에서 사용할 수 없음을 의미합니다. 기기에서 테스트하는 데 사용하는 사용자 계정 으로 이 Google 그룹 tflite-play-services-beta-access 에 가입하면 이 예외를 해결할 수 있습니다. 베타 액세스 그룹에 추가되면 이 예외가 해결되어야 합니다.

액세스 권한이 부여되고 오류가 해결되려면 이 그룹에 가입한 후 영업일 기준 최소 1일이 소요됩니다. 이 오류가 계속 발생하면 아래 지원 및 피드백 섹션에 설명된 채널을 사용하여 신고하세요.

제한 사항

Google Play 서비스의 TensorFlow Lite는 현재 공개 베타 버전이며 다음과 같은 제한 사항이 있습니다.

  • 현재 Google Play 서비스에서는 NNAPI 대리자 만 지원합니다. GPU 및 Flex를 포함한 다른 TensorFlow Lite Delegates 는 현재 지원되지 않습니다.
  • 기본 API 를 통한 TensorFlow Lite 액세스는 지원되지 않습니다. TensorFlow Lite Java API만 Google Play 서비스를 통해 사용할 수 있습니다.
  • 사용자 지정 작업을 포함하여 실험적이거나 더 이상 사용되지 않는 TensorFlow Lite API는 지원되지 않습니다.

지원 및 피드백

TensorFlow Issue Tracker를 통해 이 베타 릴리스 기능에 대한 피드백을 제공하고 지원을 받을 수 있습니다. Google Play 서비스에서 TensorFlow Lite용 문제 템플릿 을 사용하여 문제 및 지원 요청을 보고하세요.

약관 및 개인정보 보호정책

Google Play 서비스에서 TensorFlow Lite를 사용하면 Google API 서비스 약관 이 적용됩니다. Google Play 서비스의 TensorFlow Lite는 베타 버전이므로 해당 기능과 관련 API가 사전 통지 없이 변경될 수 있습니다.

Google Play 서비스 API에서 TensorFlow Lite를 사용하면 이미지, 비디오, 텍스트와 같은 입력 데이터 처리가 완전히 기기에서 발생하고 Google Play 서비스의 TensorFlow Lite는 해당 데이터를 Google 서버로 보내지 않습니다. 결과적으로 기기를 떠나지 않아야 하는 데이터를 처리하기 위해 API를 사용할 수 있습니다.

Google Play 서비스 API의 TensorFlow Lite는 버그 수정, 업데이트된 모델 및 하드웨어 가속기 호환성 정보와 같은 정보를 수신하기 위해 때때로 Google 서버에 연결할 수 있습니다. Google Play 서비스 API의 TensorFlow Lite는 앱에 있는 API의 성능 및 활용도에 대한 측정항목도 Google에 보냅니다. Google은 개인정보 보호정책 에 자세히 설명된 대로 이 측정항목 데이터를 사용하여 성능을 측정하고, API를 디버그, 유지 관리 및 개선하고, 오용 또는 남용을 감지합니다.

귀하는 관련 법률에서 요구하는 대로 Google Play 서비스 측정항목 데이터의 TensorFlow Lite 처리에 대해 앱 사용자에게 알릴 책임이 있습니다.

당사가 수집하는 데이터에는 다음이 포함됩니다.

  • 장치 정보(예: 제조업체, 모델, OS 버전 및 빌드) 및 사용 가능한 ML 하드웨어 가속기(GPU 및 DSP). 진단 및 사용 분석에 사용됩니다.
  • 진단 및 사용 분석에 사용되는 장치 식별자입니다.
  • 앱 정보(패키지 이름, 앱 버전). 진단 및 사용 분석에 사용됩니다.
  • API 구성(예: 사용 중인 대리자). 진단 및 사용 분석에 사용됩니다.
  • 이벤트 유형(예: 인터프리터 생성, 추론). 진단 및 사용 분석에 사용됩니다.
  • 오류 코드. 진단에 사용됩니다.
  • 성능 메트릭. 진단에 사용됩니다.

다음 단계

TensorFlow Lite를 사용하여 모바일 애플리케이션에서 기계 학습을 구현하는 방법에 대한 자세한 내용은 TensorFlow Lite 개발자 가이드 를 참조하세요. TensorFlow Hub 에서 이미지 분류, 객체 감지 및 기타 애플리케이션을 위한 추가 TensorFlow Lite 모델을 찾을 수 있습니다.