Core ML과 ML Kit(TensorFlow Lite)를 이용해 iOS에서 머신러닝을 돌려보는 예제 모음 저장소입니다.
MoT Lab에 iOS 개발 담당으로 있으면서 만들어봤던 프로젝트들입니다. 공개하기에 좋은 코드는 아니지만 iOS에서 머신러닝을 돌려보았을때 어떤 것들이 어디까지 구현가능한지 영감을 얻는데 도움이 될 수 있지 않을까 생각했습니다.
공개된 프로젝트에대해 조언이나 개선사항은 이슈에 남겨주세요. PR은 언제나 환영입니다.
- Core ML
- MLKit
- etc. (Tensorflow Lite, Tensorflow Mobile)
전체적인 흐름은 대부분의 ML 프레임워크가 비슷하게 사용됩니다. 각자 프레임워크에 호환되는 모델 포멧이 있으며, Tensorflow에서 만들어진 모델 포멧으로부터 변환시키는 작업이 필요합니다.
호환되는 모델을 준비했다면, ML 프레임워크를 사용하여 추론을 실행합니다. 추론을 실행하기 전/후에 전처리/후처리를 해줘야하며, ML 프레임워크마다 편의성의 정도가 다릅니다.
더 자세한 설명은 슬라이드 자료를 참고해주세요.
MobileNet 모델을 실행시켜본 예제입니다.
MobileNet-CoreML | MobileNet-MLKit |
---|---|
-
- PoseEstimationForMobile에서 제공하는 Core ML 모델 준비
- iOS에서 CoreML으로 실시간 추론
-
- PoseEstimationForMobile에서 제공하는 tflite 모델 준비
- iOS에서 ML Kit으로 실시간 추론
-
- dont-be-turtle 프로젝트로 학습하여 모델 준비
- CoreML 모델로 변환
- iOS에서 CoreML으로 실시간 추론
-
- 직접 촬영한 5천개의 손가락 사진 준비
- KeypointAnnotation 앱으로 어노테이션 시켜 데이터셋 준비
- PoseEstimationForMobile 프로젝트로 학습하여 모델 생성
- CoreML 모델로 변환
- iOS에서 CoreML으로 실시간 추론
- KeypointAnnotation(준비중...)
: 커스텀 Estimation 데이터셋을 준비하기위한 어노테이션 툴
PoseEstimation-CoreML | PoseEstimation-MLKit |
---|---|
dont-be-turtle-ios |
---|
FingertipEstimation-CoreML | KeypointAnnotation(preparing...) |
---|---|
- SSDMobileNet-CoreML
: 90개의 물체를 인지(물체의 위치와 크기를 찾고 카테고리를 식별합니다).
SSDMobileNet-CoreML |
---|
-
TextDetection-CoreML
: Vision의 내장된 모델을 사용하여 텍스트를 찾기. -
TextRecognition-MLKit
: Firebase의 내장된 모델을 사용하여 텍스트를 인식. -
WordRecognition-CoreML-MLKit(준비중...)
: Core ML의 내장된 Text Detection으로 글자를 찾고, 단어를 찾아서, ML Kit으로 단어를 인식.TextDetection-CoreML TextRecognition-MLKit WordRecognition-CoreML-MLKit
Create ML | Core ML |
---|---|
실행시간: 추론시간 + 후처리시간
WordRecognition-CoreML-MLKit: Text Detection(내장 Core ML 모델) + Text Recognition(내장 ML Kit 모델)
추론시간(ms) | 실행시간(ms) | FPS | |
---|---|---|---|
MobileNet-CoreML | 40 | 40 | 23 |
MobileNet-MLKit | 120 | 130 | 6 |
PoseEstimation-CoreML | 51 | 65 | 14 |
PoseEstimation-MLKit | 200 | 217 | 3 |
SSDMobileNet-CoreML | 72 | 180 | 5 |
TextDetection-CoreML | 12 | 13 | 30(max) |
TextRecognition-MLKit | 35~200 | 40~200 | 5~20 |
WordRecognition-CoreML-MLKit | 23 | 30 | 14 |
데모 상단에서 추론시간, 실행시간, fps를 실시간으로 확인할 수 있습니다.
한 입력에대한 한 결과 출력 세부적인 결과 그리기 디버깅용 테스트?
- Pose Estimation: point마다 점을 찍고 연결, 각 point마다 confidence 출력
- ...
여러 입력에대한 여러 결과를 종합적으로 분석
- 평균 execution time, fps
- 누적 execution time, fps...?
- 총 execution time
- rendering time
- ...
- Core ML | Apple Developer Documentation
- Machine Learning - Apple Developer
- WWDC17 - Core ML 발표자료
- WWDC18 - Core ML 2 발표자료
- ML Kit - Firebase
- Apple's Core ML 2 vs. Google's ML Kit: What's the difference?
- iOS에서 머신러닝 슬라이드 자료
- MoTLabs Blog