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

1. 소개

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

ML Kit이란 무엇인가요?

ML Kit는 강력하고 사용하기 쉬운 패키지로 Android 및 iOS 앱에 Google의 머신러닝 전문 지식을 적용하는 모바일 SDK입니다. 머신러닝 분야에 경험이 있든 없든 코드 몇 줄만 작성하면 필요한 기능을 쉽게 구현할 수 있습니다. 텍스트, 얼굴 등을 인식할 수 있는 API가 여러 개 있으며 이러한 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 콘솔 프로젝트 만들기

  1. Firebase Console로 이동합니다.
  2. 새 프로젝트 만들기를 선택하고 프로젝트 이름을 '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/mlkit-automl/GoogleService-Info.plist의 iOS 앱에 넣습니다.

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 스튜디오 툴바에서 실행 ( 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. 이전에 만든 'Flowers' 데이터 세트를 선택합니다.
  5. 학습 작업이 완료되었는지 확인한 후 모델을 선택합니다.
  6. 게시를 선택하고 이름을 'mlkit_flowers'로 지정합니다. b63a58b83e814acd.png

원격 모델로 꽃 인식

샘플 앱은 원격 모델을 사용할 수 있는 경우 원격 모델을 사용하도록 구성됩니다. 원격 모델을 게시한 후에는 앱을 다시 실행하여 모델 다운로드를 트리거하기만 하면 됩니다. 앱 화면의 바닥글에 있는 '소스' 값을 확인하여 앱이 원격 모델을 사용하고 있는지 확인할 수 있습니다. 작동하지 않으면 아래의 '문제 해결' 섹션을 참고하세요.

7c8292293fd858ad.png de359886ccecef2.png

문제 해결

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

Android 앱

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

iOS 앱

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

7. 축하합니다.

AutoML을 사용하여 자체 학습 데이터로 이미지 분류 모델을 학습시킨 다음 ML Kit를 사용하여 모바일 앱에서 모델을 사용하는 전체 여정을 살펴봤습니다.

ML Kit에 AutoML Vision Edge를 통합하는 방법을 알아보려면 문서를 참고하세요.

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

Android 샘플

iOS 샘플