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를 사용하여 꽃 분류 모델을 학습시킵니다. 모델은 클라우드에서 학습되지만, 이후 완전히 기기 내에서 추론을 실행하기 위해 앱이 번들로 묶거나 다운로드합니다.
학습할 내용
- ML Kit에서 AutoML Vision Edge를 사용하여 이미지 분류 모델을 학습시키는 방법
- ML Kit SDK를 사용하여 샘플 Android 또는 iOS 앱에서 실행하는 방법
필요한 항목
Android 앱의 경우
- Android 스튜디오 최신 버전 (v3.4 이상)
- Play 스토어가 있는 Android 스튜디오 에뮬레이터 또는 실제 Android 기기 (v5.0 이상)
- Kotlin을 이용한 Android 개발에 관한 기본 지식
iOS 앱의 경우
- 최신 버전의 XCode (v10.2 이상)
- iOS 시뮬레이터 또는 실제 iOS 기기 (v9.0 이상)
- CocoaPods
- Swift의 iOS 개발에 관한 기본 지식
2. 설정
코드 및 학습 데이터 세트 다운로드
이 Codelab의 소스 코드와 학습 데이터 세트가 포함된 ZIP 보관 파일을 다운로드합니다. 로컬 머신에서 보관 파일을 추출합니다.
Firebase Console 프로젝트 만들기
- Firebase Console로 이동합니다.
- Create New Project를 선택하고 프로젝트 이름을 'ML Kit Codelab'으로 지정합니다.
Android 앱 설정
- Firebase 프로젝트에 Android 앱을 추가합니다. Android 패키지 이름:
com.google.firebase.codelab.mlkit.automl
google-services.json
구성 파일을 다운로드하여 Android 앱(android/mlkit-automl/app/google-services.json
)에 배치합니다.
iOS 앱 설정
- Firebase 프로젝트에 iOS 앱을 추가합니다. iOS 번들 ID:
com.google.firebase.codelab.mlkit.automl
GoogleService-Info.plist
구성 파일을 다운로드하고 안내에 따라 iOS 앱(ios/mlkit-automl/GoogleService-Info.plist
)에 배치합니다.
3. 학습 데이터 세트 준비
다양한 유형의 객체를 인식하도록 모델을 학습시키려면 이미지 세트를 준비하고 각 이미지에 라벨을 지정해야 합니다. 이 Codelab에서 사용할 수 있도록 크리에이티브 커먼즈 라이선스 꽃 사진 보관 파일을 만들었습니다.
데이터 세트는 이전 단계에서 다운로드한 ZIP 보관 파일에 포함된 flower_photos.zip
라는 ZIP 파일로 패키징됩니다.
데이터 세트 살펴보기
flower_photos.zip
파일을 추출하면 데이터 세트에 민들레, 데이지, 튤립, 해바라기, 장미 등 5가지 꽃 유형의 이미지가 포함되어 있으며 꽃의 이름을 딴 폴더로 구성되어 있습니다. 이렇게 하면 AutoML에 피드할 학습 데이터 세트를 만들고 이미지 분류 모델을 학습시킬 수 있습니다.
이 학습 데이터 세트에는 꽃 유형별로 200개의 이미지가 있습니다. 모델을 학습시키려면 클래스당 최소 10개의 이미지만 있으면 됩니다. 하지만 학습 이미지가 많을수록 일반적으로 모델이 향상됩니다.
4. 모델 학습
학습 데이터 세트 업로드
- Firebase Console에서 방금 만든 프로젝트를 엽니다.
- ML Kit를 선택합니다. AutoML
- 일부 시작 화면이 표시될 수 있습니다. 해당하는 경우 시작하기를 선택합니다.
- 설정 진행이 완료되면 데이터 세트 추가를 선택하고 이름을 'Flowers'(꽃)로 지정합니다.
- 학습 데이터에는 이미지당 라벨이 하나만 포함되므로 모델 목표에서 단일 라벨 분류를 선택합니다.
- 만들기를 선택합니다.
- 이전 단계에서 다운로드한
flower_photos.zip
파일을 업로드하여 꽃 학습 데이터 세트를 가져옵니다. - 가져오기 작업이 완료될 때까지 몇 분 정도 기다립니다.
- 이제 데이터 세트를 올바르게 가져온 것을 확인할 수 있습니다.
- 학습 데이터 세트의 모든 이미지에 라벨이 지정되었기 때문에 모델 학습을 진행할 수 있습니다.
이미지 분류 모델 학습
이 모델은 컴퓨팅 성능과 저장공간이 제한적인 모바일 기기에서 실행되기 때문에 모델의 정확성뿐만 아니라 크기와 속도에도 신경을 써야 합니다. 모델 정확성, 지연 시간 (즉, 이미지를 분류하는 데 걸리는 시간), 모델 크기 사이에는 항상 장단점이 있습니다. 일반적으로 정확성이 높은 모델도 더 크고 이미지를 분류하는 데 더 오래 걸립니다.
AutoML은 정확성을 위해 최적화하거나 지연 시간과 모델 크기에 맞게 최적화하거나 둘 사이의 균형을 맞추도록 선택할 수 있는 몇 가지 옵션을 제공합니다. 모델이 학습시킬 수 있는 시간도 선택할 수 있습니다. 데이터 세트가 클수록 더 오래 학습해야 합니다.
모델을 직접 학습시키려면 다음 단계를 따르세요.
- 모델 학습을 선택합니다.
- 범용 옵션과 학습 시간 1시간을 선택합니다.
- 학습 작업이 완료될 때까지 몇 시간 정도 기다립니다.
- 학습 작업이 완료되면 학습된 모델의 성능에 대한 평가 측정항목이 표시됩니다.
5. 모바일 앱에서 모델 사용
준비
- 이 Codelab에는 앞서 모바일 앱에서 학습시킨 이미지 분류 모델을 사용하는 방법을 보여주는 Android 및 iOS 샘플 앱이 모두 포함되어 있습니다. 두 앱의 기능은 유사합니다. 더 익숙한 플랫폼을 선택할 수 있습니다.
- 계속하기 전에 샘플 앱을 다운로드하고 2단계에서 구성했는지 확인하세요.
- 또한 선택한 플랫폼 (Android/iOS)에 맞는 앱을 빌드할 수 있도록 로컬 환경이 설정되어 있는지 확인하세요.
이미지 분류 모델 다운로드
- 이전 단계에서 모델을 학습시킨 경우 다운로드를 선택하여 모델을 가져옵니다.
- 모델을 학습시키지 않았거나 학습 작업이 아직 완료되지 않은 경우 샘플 앱에 포함된 모델을 사용할 수 있습니다.
샘플 앱에 모델 추가
샘플 앱에 모델을 추가하기만 하면 바로 사용할 수 있습니다. ML Kit AutoML을 앱에 통합하는 방법에 대한 전체 가이드는 문서 ( Android, iOS)를 참조하세요. ML Kit SDK와 상호작용하는 코드는 각각 ImageClassifier.kt
및 ImageClassifier.swift
파일에 있으므로 거기서부터 앱의 작동 방식을 살펴볼 수 있습니다.
모델을 배포하는 방법에는 로컬과 원격이라는 두 가지 옵션이 있습니다.
- 로컬 모델은 주로 앱 바이너리에 이미지 분류 모델을 번들로 묶는 데 사용되지만 로컬 저장소에 저장된 모델을 제공할 수도 있습니다. 번들을 사용하면 사용자가 App Store / Play 스토어에서 앱을 다운로드한 후 모델을 바로 사용할 수 있으며 인터넷 연결 없이도 작동합니다.
- 원격 모델은 모델이 Firebase에서 호스팅되고 처음 필요할 때만 사용자 기기에 다운로드됨을 의미합니다. 그 후에는 모델이 오프라인에서도 작동합니다.
Android 앱
- Android 스튜디오를 엽니다.
android/mlkit-automl/
에서 Android 앱을 가져옵니다.- (선택사항) 다운로드한 모델을 추출하고 샘플 앱에 포함된 모델 위에 콘텐츠를 복사합니다.
- 이제 Android 스튜디오 툴바에서 Run ( )을 클릭하고 다양한 유형의 꽃을 인식할 수 있는지 확인합니다.
iOS 앱
- 터미널을 열고
ios/mlkit-automl/
폴더로 이동합니다. pod install
를 실행하여 Cocoapods를 통해 종속 항목 다운로드open MLVisionExample.xcworkspace/
를 실행하여 Xcode에서 프로젝트 작업공간을 엽니다.- (선택사항) 다운로드한 모델을 추출하고
ios/ml-automl/Resources/automl/
의 샘플 앱에 포함된 모델로 콘텐츠를 복사합니다. - 이제 Xcode 툴바에서 실행 ( )을 클릭하여 다양한 종류의 꽃을 인식할 수 있는지 확인합니다.
6. (선택사항) 원격 모델 사용
ML Kit의 원격 모델을 사용하면 Tensorflow Lite 모델을 앱 바이너리에 포함하지 않고 필요할 때 Firebase에서 주문형으로 다운로드할 수 있습니다. 원격 모델은 로컬 모델에 비해 몇 가지 이점이 있습니다.
- 더 작은 앱 바이너리
- 앱을 업데이트하지 않고도 모델을 업데이트할 수 있음
- 여러 버전의 모델을 사용한 A/B 테스트
이 단계에서는 원격 모델을 게시하고 샘플 앱에서 사용합니다. 이 Codelab의 4단계에서 모델 학습을 완료했는지 확인하세요.
모델 게시
- Firebase Console로 이동합니다.
- 'ML Kit AutoML Codelab'을 선택합니다. 돌아가겠습니다
- ML Kit를 선택합니다. AutoML도 활용할 수 있습니다
- '꽃'을 선택합니다. 데이터 세트를 다운로드합니다.
- 학습 작업이 완료되었는지 확인한 후 모델을 선택합니다.
- 게시를 선택하고 이름을 'mlkit_flowers'로 지정합니다. <ph type="x-smartling-placeholder"></ph>
원격 모델로 꽃 인식
사용 가능한 경우 원격 모델을 사용하도록 샘플 앱이 구성되어 있습니다. 원격 모델을 게시한 후에는 앱을 다시 실행하여 모델 다운로드를 트리거하기만 하면 됩니다. 'Source'(소스)를 보고 앱이 원격 모델을 사용하고 있는지 확인할 수 있습니다. 앱 화면의 바닥글에 있습니다. '문제 해결'을 참고하세요. 섹션을 참조하세요.
문제 해결
샘플 앱에서 여전히 로컬 모델을 사용하는 경우 원격 모델 이름이 코드 내에 올바르게 설정되어 있는지 확인하세요.
Android 앱
ImageClassifier.kt
페이지로 이동하여 이 블록을 찾습니다.
val remoteModel = FirebaseRemoteModel.Builder(REMOTE_MODEL_NAME).build()
- 코드에 설정된 모델 이름이 이전에 Firebase Console을 통해 게시한 모델 이름과 일치하는지 확인합니다.
- 이제 Android 스튜디오 툴바에서 Run ( )을 클릭하여 앱을 다시 실행합니다.
iOS 앱
ImageClassifier.swift
로 이동하여 이 블록을 찾으세요.
return RemoteModel(
name: Constant.remoteAutoMLModelName,
allowsModelUpdates: true,
initialConditions: initialConditions,
updateConditions: updateConditions
)
- 코드에 설정된 모델 이름이 이전에 Firebase Console을 통해 게시한 모델 이름과 일치하는지 확인합니다.
- 이제 Xcode 툴바에서 실행 ( )을 클릭하여 앱을 다시 실행합니다.
7. 축하합니다.
AutoML을 사용하여 자체 학습 데이터로 이미지 분류 모델을 학습시킨 다음 ML Kit를 사용하여 모바일 앱에서 모델을 사용하는 엔드 투 엔드 여정을 진행했습니다.
ML Kit의 AutoML Vision Edge를 자체 앱에 통합하는 방법은 문서를 참조하세요.
ML Kit 샘플 앱을 사용하여 Firebase ML Kit의 다른 기능을 확인할 수도 있습니다.
Android 샘플
iOS 샘플