ML Kit에서 AutoML Vision을 사용하여 기기 내 이미지 분류 모델 학습 및 배포

1. 소개

최근 머신러닝의 발전으로 컴퓨터가 이미지 속 사물을 비교적 쉽게 인식할 수 있게 되었습니다. 이 Codelab에서는 다양한 유형의 객체를 인식할 수 있는 이미지 분류 모델을 빌드한 다음 이 모델을 Android 및 iOS 앱에 배포하는 엔드 투 엔드 여정을 살펴보겠습니다. ML Kit 및 AutoML을 사용하면 머신러닝 전문 지식이 없어도 대규모로 모델을 빌드하고 배포할 수 있습니다.

ML Kit란 무엇인가요?

ML Kit는 강력하고 사용하기 쉬운 패키지로 Android 및 iOS 앱에 Google의 머신러닝 전문 지식을 적용하는 모바일 SDK입니다. 머신러닝 경험이 있든 없든 단 몇 줄의 코드로 필요한 기능을 쉽게 구현할 수 있습니다. 텍스트, 얼굴 등을 인식할 수 있는 여러 API가 있으며, 이를 즉시 사용할 수 있습니다. 그러나 이미지에서 다양한 종류의 꽃을 인식하는 것과 같이 API에서 지원하지 않는 객체를 인식해야 하는 경우에는 자체 모델을 학습시켜야 합니다. 여기에 AutoML이 도움이 될 수 있습니다.

AutoML이란 무엇인가요?

Cloud AutoML은 Google의 최첨단 전송 학습과 신경망 아키텍처 검색 기술을 활용하여 머신러닝 전문 지식이 부족한 개발자도 비즈니스 니즈에 맞게 고품질 모델을 학습시킬 수 있는 머신러닝 제품군입니다.

이 Codelab에서는 ML Kit의 AutoML Vision Edge를 사용하여 꽃 분류 모델을 학습시킵니다. 모델은 클라우드에서 학습되지만, 이후 완전히 기기 내에서 추론을 실행하기 위해 앱이 번들로 묶거나 다운로드합니다.

93f21fd287496e4e.png

학습할 내용

  • ML Kit에서 AutoML Vision Edge를 사용하여 이미지 분류 모델을 학습시키는 방법
  • ML Kit SDK를 사용하여 샘플 Android 또는 iOS 앱에서 실행하는 방법

필요한 항목

Android 앱의 경우

iOS 앱의 경우

  • 최신 버전의 XCode (v10.2 이상)
  • iOS 시뮬레이터 또는 실제 iOS 기기 (v9.0 이상)
  • CocoaPods
  • Swift의 iOS 개발에 관한 기본 지식

2. 설정

코드 및 학습 데이터 세트 다운로드

이 Codelab의 소스 코드와 학습 데이터 세트가 포함된 ZIP 보관 파일을 다운로드합니다. 로컬 머신에서 보관 파일을 추출합니다.

Firebase Console 프로젝트 만들기

  1. Firebase Console로 이동합니다.
  2. Create New Project를 선택하고 프로젝트 이름을 'ML Kit Codelab'으로 지정합니다.

Android 앱 설정

  1. Firebase 프로젝트에 Android 앱을 추가합니다. Android 패키지 이름: com.google.firebase.codelab.mlkit.automl
  2. google-services.json 구성 파일을 다운로드하여 Android 앱(android/mlkit-automl/app/google-services.json)에 배치합니다.

iOS 앱 설정

  1. Firebase 프로젝트에 iOS 앱을 추가합니다. iOS 번들 ID: com.google.firebase.codelab.mlkit.automl
  2. GoogleService-Info.plist 구성 파일을 다운로드하고 안내에 따라 iOS 앱(ios/mlkit-automl/GoogleService-Info.plist)에 배치합니다.

3. 학습 데이터 세트 준비

다양한 유형의 객체를 인식하도록 모델을 학습시키려면 이미지 세트를 준비하고 각 이미지에 라벨을 지정해야 합니다. 이 Codelab에서 사용할 수 있도록 크리에이티브 커먼즈 라이선스 꽃 사진 보관 파일을 만들었습니다.

데이터 세트는 이전 단계에서 다운로드한 ZIP 보관 파일에 포함된 flower_photos.zip라는 ZIP 파일로 패키징됩니다.

데이터 세트 살펴보기

flower_photos.zip 파일을 추출하면 데이터 세트에 민들레, 데이지, 튤립, 해바라기, 장미 등 5가지 꽃 유형의 이미지가 포함되어 있으며 꽃의 이름을 딴 폴더로 구성되어 있습니다. 이렇게 하면 AutoML에 피드할 학습 데이터 세트를 만들고 이미지 분류 모델을 학습시킬 수 있습니다.

이 학습 데이터 세트에는 꽃 유형별로 200개의 이미지가 있습니다. 모델을 학습시키려면 클래스당 최소 10개의 이미지만 있으면 됩니다. 하지만 학습 이미지가 많을수록 일반적으로 모델이 향상됩니다.

e5772b6527a6048d.png 6c4443d31cd5653e.png

4. 모델 학습

학습 데이터 세트 업로드

  1. Firebase Console에서 방금 만든 프로젝트를 엽니다.
  2. ML Kit를 선택합니다. AutoML
  3. 일부 시작 화면이 표시될 수 있습니다. 해당하는 경우 시작하기를 선택합니다.
  1. 설정 진행이 완료되면 데이터 세트 추가를 선택하고 이름을 'Flowers'(꽃)로 지정합니다.
  2. 학습 데이터에는 이미지당 라벨이 하나만 포함되므로 모델 목표에서 단일 라벨 분류를 선택합니다.
  3. 만들기를 선택합니다.
  4. 이전 단계에서 다운로드한 flower_photos.zip 파일을 업로드하여 꽃 학습 데이터 세트를 가져옵니다.
  5. 가져오기 작업이 완료될 때까지 몇 분 정도 기다립니다.
  6. 이제 데이터 세트를 올바르게 가져온 것을 확인할 수 있습니다.
  7. 학습 데이터 세트의 모든 이미지에 라벨이 지정되었기 때문에 모델 학습을 진행할 수 있습니다.

cdb18b61f890934f.png

이미지 분류 모델 학습

이 모델은 컴퓨팅 성능과 저장공간이 제한적인 모바일 기기에서 실행되기 때문에 모델의 정확성뿐만 아니라 크기와 속도에도 신경을 써야 합니다. 모델 정확성, 지연 시간 (즉, 이미지를 분류하는 데 걸리는 시간), 모델 크기 사이에는 항상 장단점이 있습니다. 일반적으로 정확성이 높은 모델도 더 크고 이미지를 분류하는 데 더 오래 걸립니다.

AutoML은 정확성을 위해 최적화하거나 지연 시간과 모델 크기에 맞게 최적화하거나 둘 사이의 균형을 맞추도록 선택할 수 있는 몇 가지 옵션을 제공합니다. 모델이 학습시킬 수 있는 시간도 선택할 수 있습니다. 데이터 세트가 클수록 더 오래 학습해야 합니다.

dd6b7eaa2dd5a9de.png

모델을 직접 학습시키려면 다음 단계를 따르세요.

  1. 모델 학습을 선택합니다.
  2. 범용 옵션과 학습 시간 1시간을 선택합니다.
  3. 학습 작업이 완료될 때까지 몇 시간 정도 기다립니다.
  4. 학습 작업이 완료되면 학습된 모델의 성능에 대한 평가 측정항목이 표시됩니다.

73f98fbed5ae5ee5.png

5. 모바일 앱에서 모델 사용

준비

  • 이 Codelab에는 앞서 모바일 앱에서 학습시킨 이미지 분류 모델을 사용하는 방법을 보여주는 Android 및 iOS 샘플 앱이 모두 포함되어 있습니다. 두 앱의 기능은 유사합니다. 더 익숙한 플랫폼을 선택할 수 있습니다.
  • 계속하기 전에 샘플 앱을 다운로드하고 2단계에서 구성했는지 확인하세요.
  • 또한 선택한 플랫폼 (Android/iOS)에 맞는 앱을 빌드할 수 있도록 로컬 환경이 설정되어 있는지 확인하세요.

이미지 분류 모델 다운로드

  • 이전 단계에서 모델을 학습시킨 경우 다운로드를 선택하여 모델을 가져옵니다.
  • 모델을 학습시키지 않았거나 학습 작업이 아직 완료되지 않은 경우 샘플 앱에 포함된 모델을 사용할 수 있습니다.

샘플 앱에 모델 추가

샘플 앱에 모델을 추가하기만 하면 바로 사용할 수 있습니다. ML Kit AutoML을 앱에 통합하는 방법에 대한 전체 가이드는 문서 ( Android, iOS)를 참조하세요. ML Kit SDK와 상호작용하는 코드는 각각 ImageClassifier.ktImageClassifier.swift 파일에 있으므로 거기서부터 앱의 작동 방식을 살펴볼 수 있습니다.

모델을 배포하는 방법에는 로컬과 원격이라는 두 가지 옵션이 있습니다.

  • 로컬 모델은 주로 앱 바이너리에 이미지 분류 모델을 번들로 묶는 데 사용되지만 로컬 저장소에 저장된 모델을 제공할 수도 있습니다. 번들을 사용하면 사용자가 App Store / Play 스토어에서 앱을 다운로드한 후 모델을 바로 사용할 수 있으며 인터넷 연결 없이도 작동합니다.
  • 원격 모델은 모델이 Firebase에서 호스팅되고 처음 필요할 때만 사용자 기기에 다운로드됨을 의미합니다. 그 후에는 모델이 오프라인에서도 작동합니다.

2e71ed2c7cb8757c.png

Android 앱

  1. Android 스튜디오를 엽니다.
  2. android/mlkit-automl/에서 Android 앱을 가져옵니다.
  3. (선택사항) 다운로드한 모델을 추출하고 샘플 앱에 포함된 모델 위에 콘텐츠를 복사합니다. 10cf6b1e0f34de29.png
  4. 이제 Android 스튜디오 툴바에서 Run ( c8b8a080b7ead886.png)을 클릭하고 다양한 유형의 꽃을 인식할 수 있는지 확인합니다.

2e71ed2c7cb8757c.png

iOS 앱

  1. 터미널을 열고 ios/mlkit-automl/ 폴더로 이동합니다.
  2. pod install를 실행하여 Cocoapods를 통해 종속 항목 다운로드
  3. open MLVisionExample.xcworkspace/를 실행하여 Xcode에서 프로젝트 작업공간을 엽니다.
  4. (선택사항) 다운로드한 모델을 추출하고 ios/ml-automl/Resources/automl/의 샘플 앱에 포함된 모델로 콘텐츠를 복사합니다.cd291fe04bcdc6ee.png
  5. 이제 Xcode 툴바에서 실행 ( 16629f86bbeb4208.png)을 클릭하여 다양한 종류의 꽃을 인식할 수 있는지 확인합니다.

65172c3f35336d4e.png

6. (선택사항) 원격 모델 사용

ML Kit의 원격 모델을 사용하면 Tensorflow Lite 모델을 앱 바이너리에 포함하지 않고 필요할 때 Firebase에서 주문형으로 다운로드할 수 있습니다. 원격 모델은 로컬 모델에 비해 몇 가지 이점이 있습니다.

  • 더 작은 앱 바이너리
  • 앱을 업데이트하지 않고도 모델을 업데이트할 수 있음
  • 여러 버전의 모델을 사용한 A/B 테스트

이 단계에서는 원격 모델을 게시하고 샘플 앱에서 사용합니다. 이 Codelab의 4단계에서 모델 학습을 완료했는지 확인하세요.

모델 게시

  1. Firebase Console로 이동합니다.
  2. 'ML Kit AutoML Codelab'을 선택합니다. 돌아가겠습니다
  3. ML Kit를 선택합니다. AutoML도 활용할 수 있습니다
  4. '꽃'을 선택합니다. 데이터 세트를 다운로드합니다.
  5. 학습 작업이 완료되었는지 확인한 후 모델을 선택합니다.
  6. 게시를 선택하고 이름을 'mlkit_flowers'로 지정합니다. <ph type="x-smartling-placeholder">b63a58b83e814acd.png</ph>

원격 모델로 꽃 인식

사용 가능한 경우 원격 모델을 사용하도록 샘플 앱이 구성되어 있습니다. 원격 모델을 게시한 후에는 앱을 다시 실행하여 모델 다운로드를 트리거하기만 하면 됩니다. 'Source'(소스)를 보고 앱이 원격 모델을 사용하고 있는지 확인할 수 있습니다. 앱 화면의 바닥글에 있습니다. '문제 해결'을 참고하세요. 섹션을 참조하세요.

7c8292293fd858ad.png de359886ccecef2.png

문제 해결

샘플 앱에서 여전히 로컬 모델을 사용하는 경우 원격 모델 이름이 코드 내에 올바르게 설정되어 있는지 확인하세요.

Android 앱

  1. ImageClassifier.kt 페이지로 이동하여 이 블록을 찾습니다.
val remoteModel = FirebaseRemoteModel.Builder(REMOTE_MODEL_NAME).build()
  1. 코드에 설정된 모델 이름이 이전에 Firebase Console을 통해 게시한 모델 이름과 일치하는지 확인합니다.
  2. 이제 Android 스튜디오 툴바에서 Run ( c8b8a080b7ead886.png)을 클릭하여 앱을 다시 실행합니다.

iOS 앱

  1. ImageClassifier.swift로 이동하여 이 블록을 찾으세요.
return RemoteModel(
  name: Constant.remoteAutoMLModelName,
  allowsModelUpdates: true,
  initialConditions: initialConditions,
  updateConditions: updateConditions
)
  1. 코드에 설정된 모델 이름이 이전에 Firebase Console을 통해 게시한 모델 이름과 일치하는지 확인합니다.
  2. 이제 Xcode 툴바에서 실행 ( 16629f86bbeb4208.png)을 클릭하여 앱을 다시 실행합니다.

7. 축하합니다.

AutoML을 사용하여 자체 학습 데이터로 이미지 분류 모델을 학습시킨 다음 ML Kit를 사용하여 모바일 앱에서 모델을 사용하는 엔드 투 엔드 여정을 진행했습니다.

ML Kit의 AutoML Vision Edge를 자체 앱에 통합하는 방법은 문서를 참조하세요.

ML Kit 샘플 앱을 사용하여 Firebase ML Kit의 다른 기능을 확인할 수도 있습니다.

Android 샘플

iOS 샘플