iOS 앱에서 머신러닝이
해결할 수 있는 문제들
Vision편
NAVER
곽도영
● NAVER CONOMI 개발팀에서 iOS 개발 담당
● MoT Labs에서 iOS 개발 담당
● iOS 앱 개발 취미, 지금은 업
● ML 공부중
● 모바일 기기 위에 머신러닝 관심
Awesome Machine Learning
DEMOs with iOS
https://github.com/motlabs/awesome-ml-demos-with-ios
발표를 하게 된 계기는
머신러닝
모델 제작자
입장에서
머신러닝
모델 사용자
입장에서
그래서 오늘 할 이야기는
사용자 프라이버시 친화적인 앱
네트워크 비용 절감
지연시간 감소
왜 모바일 머신러닝을 사용하나요?
검증
데이터 입력
출력
학습 추론
머신러닝 개발 프로세스
검증
데이터 입력
출력
학습 추론
머신러닝 개발 프로세스
검증
데이터 입력
출력
학습 추론
머신러닝 개발 프로세스
검증
모델
추출
데이터 입력
출력
학습 추론
모바일 머신러닝 개발 프로세스
검증
모델
추출
데이터 입력
출력
학습 추론
이슈 이슈
이슈
모바일 머신러닝 개발 프로세스
https://leanpub.com/coreml-survival-guide
CORE ML SURVIVAL
GUIDEhttps://github.com/ysh329/deep-learning-model-convertor
Deep Learning Model Convertors
모델 추출 단계 (참고)
추론이란?
본론으로 들어가면
추론입력 출력
추론이란?
→ 입력에대해서 예측한 결과를 출력하는 것
추론
Mountain
...
기존의 룰베이스 알고리즘으로 해결할 수 없었던 문제를 해결
추론이란?
추론할 때
사용하는 도구는?
https://github.com/fritzlabs/Awesome-Mobile-Machine-Learning
Vision
Natural
Language
Speech
MLKit/
Vision
MLKit/
Language
Sound
Analysis
Accelerate and
BNNS
MPS C++ Lib C++ Lib
Your App
TF Lite
Pytorch
Mobile
Core ML
iOS의 머신러닝 프레임워크
https://images.app.goo.gl/GnjEn7hWLA4xhQwH9
https://images.app.goo.gl/gTB3iFncwt7XNZc56
https://images.app.goo.gl/2JneWt3SRNi4BDdL7
아래로 갈수록 어려움
모델 사용
프레임워크 API 사용🏛
애플(혹은 오픈소스)에서 제공되는 모델 사용
직접 학습한 모델을 변환하여 사용
iOS에서 머신러닝을 사용하는 2가지 방법
그럼, 어떤 문제를 해결
할 수 있을까요?
Image Classification
카테고리
...
acorn squash
cucumber
bell pepper
mushroom
granny smith
strawberry
orange
lemon
fig
pineapple
banana
jackfruit
custard apple
pomegranate
hay
carbonara
chocolate sauce
dough
meat loaf
pizza
red wine
...
...
0.01%
0.12%
0.31%
0.65%
0.04%
0.00%
0.00%
0.60%
0.14%
0.04%
97.21%
0.01%
0.22%
0.31%
0.65%
0.04%
0.00%
0.00%
0.60%
0.14%
0.01%
...
Image Classification
잠시, 구현 방법 소개
커스텀 모델 구현 방법
MobileNetV2.mlmodel
먼저 해야할 것: 어디선가 모델을 구해와서 Xcode에 넣는다
구현 1번째 방법: 자동생성된 클래스 활용하기(1/3)
커스텀 모델 구현 방법
구현 1번째 방법: 자동생성된 클래스 활용하기(2/3)
커스텀 모델 구현 방법
구현 1번째 방법: 자동생성된 클래스 활용하기(3/3)
커스텀 모델 구현 방법
pixelBuffer 크기를 모델
크기에 맞게 전처리 필요
구현 2번째 방법: Vision 프레임워크로 전후처리
커스텀 모델 구현 방법
구현 2번째 방법: Vision 프레임워크로 전후처리
커스텀 모델 구현 방법
My모델
Vision Model
Vision Request
완료핸들러
구현 2번째 방법: Vision 프레임워크로 전후처리
커스텀 모델 구현 방법 VNClassificationObservation
● 카테고리
● 확률
구현 2번째 방법: Vision 프레임워크로 전후처리
커스텀 모델 구현 방법
Image Classification
● 사진이 어떤 카테고리에 속하는지 찾아줌
● 입력: 이미지
● 출력: 카테고리 (VNClassificationObservation)
https://github.com/tucan9389/ImageClassification-CoreML
다음으로
Object Detection
위치와 영역
https://github.com/tucan9389/ObjectDetection-CoreML
Object Detection
https://images.app.goo.gl/KB5ci9xLkf2Sp9kN8
car: 98%
car: 98%
car: 98%
car: 98%
traffic light: 89%
traffic light: 89%
https://images.app.goo.gl/KB5ci9xLkf2Sp9kN8
car: 98%
car: 98%
car: 98%
car: 98%
traffic light: 89%
traffic light: 89%
● 위치와 영역
● 위치와 영역
● 카테고리
Object Detection
후처리: (필요시)좌표 변환
(0,0)
(1,1)
(0,0)
(width, height)
Object Detection
● 사진에서 객체의 위치와 영역을 찾아줌
● 입력:이미지
● 출력:
○ 위치와 영역 (VNDetectedObjectObservation)
○ 위치와 영역 + 카테고리 (VNRecognizedObjectObservation)
● 후처리: 좌표 변환
https://github.com/tucan9389/ObjectDetection-CoreML
Object Detection
Text RecognitionText Detection
Tools ● Apple’s Vision Framework
● Apple’s Vision Framework
● Google’s ML Kit Framework
Input/
Output
응용된 API
Text Recognition
응용
Image to XXXmap
Depth Prediction &
Pose Estimation &
Image Segmentation
● 사진에서 픽셀별 카메라와 거리를 찾아줌
● 입력: 이미지
● 출력: Depthmap
(VNCoreMLFeatureValueObservation)
● Depth Camera 없이 가능
https://github.com/tucan9389/DepthPrediction-CoreML
Depth Prediction
● 사진에서 사람의 골격 위치를 찾아줌
● People Occlusion (ARKit에선..)
● 입력: 이미지
● 출력: Heatmap
(VNCoreMLFeatureValueObservation)
https://github.com/tucan9389/PoseEstimation-CoreML
https://www.youtube.com/watch?v=OrOZxOTIv-g
Pose Estimation
https://www.youtube.com/watch?v=OrOZxOTIv-g
후처리: Heatmap 가공
Pose Estimation
Pose Estimation 응용
Pose Estimation Text Detection
Text Recognition
Just Point It
● 사진에서 픽셀별 카테고리를 찾아줌
● 입력: 이미지
● 출력: Segmentation Map
(VNCoreMLFeatureValueObservation)
https://www.jeremyjordan.me/semantic-segmentation/
https://github.com/tucan9389/ObjectSegmentation-CoreML
Image Segmentation
https://www.jeremyjordan.me/semantic-segmentation/
● 사진에서 픽셀별 카테고리를 찾아줌
● 입력: 이미지
● 출력: Segmentation Map
(VNCoreMLFeatureValueObservation)
https://github.com/tucan9389/ObjectSegmentation-CoreML
Image Segmentation
Pose Estimation Depth Estimation Image Segmentation
Input
Output
Type 14 x 96 x 96 Array<Float> 96 x 96 Array<Float> 96 x 96 Array<Int>
Range 0.0 ~ 1.0 0.0 ~ 1.0 0, 1, 2, 3, …, 20
Heatmap Depthmap Segmentation map
Image to Image
Image Style Transfer &
Super Resulotion
Image Style Transfer
https://www.appcoda.com/coreml-turi-create/
https://github.com/backnotprop/fast-style-transfer-coreml
https://github.com/s1ddok/HED-CoreML
https://www.appcoda.com/coreml-turi-create/
https://github.com/imxieyi/waifu2x-ios
Super Resolution
Image Classification
Object Detection
Pose Estimation
Depth Prediction
Image Segmentation
Image Style Transfer
Super Resolution
카테고리
위치와 영역
xxx map 결과
image-to-image
정리 한번..
서비스에 사용한다면?
서비스에 모델을 사용할 때 고려할 점
1. 실데이터로 모델 검증
2. 추론속도 비교
Image Segmentation (DeepLabV3)
기기별 추론속도 비교(1/3)
Image Classification (MobileNetV2)
기기별 추론속도 비교(2/3)
iPhone 11 Pro
추론시간은 15 ms
100장에 1.5 s
iPhone X
추론시간은 50 ms
100장에 10 s
기기별 추론속도 비교(3/3)
마무리
• 다양한 모델의 기능
• 모델별 입출력
• 서비스에서 고려할점 (실데이터 검증, 추론시간)
https://github.com/motlabs/awesome-ml-demos-with-ios
감사합니다
doyoung.gawk@navercorp.com
WE ARE HIRING!
[Let's Swift 2019] iOS 앱에서 머신러닝이 해결 할 수 있는 문제들

[Let's Swift 2019] iOS 앱에서 머신러닝이 해결 할 수 있는 문제들