Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥

tf.keras가 모바일을 만나면

tf.keras가 모바일을 만나면

[양재R&D혁신허브x모두의연구소] AI Tech Networking Seminar - 제 2회 On-Device AI "아키텍처부터 디바이스까지"

세션 내용 : 딥알못(딥러닝을 알지 못하는) 모바일 개발자가 직접 tf.keras를 활용하여 강아지/고양이용 Object Detection / Landmark Detection 모델을 설계하고, 모바일에 배포하기 까지의 End2End 과정을 공유합니다. On-Device AI 모델을 직접 설계하고 Serving 하는 관점에서 고려해야할 점들을 다각적인 시각으로 살펴봅니다.

소개 : 모바일 환경에서의 머신러닝 기술에 가치를 느끼는 안드로이드 개발자입니다. 모두의연구소 MoT(Machine Learning of Things) 랩에서 Tensorflow Lite, Android NN API, MLKit에 대해 공부하고 있습니다. Research Engineer들과의 더 나은 협업을 위해 딥러닝을 공부하며, 지표 측정과 테스트를 생활화 합니다. 본업은 개발, 취미는 딥러닝! 덕업일치 하며 성장 중인 병아리 주니어 개발자입니다.

jeongah.arie

July 10, 2019
Tweet

More Decks by jeongah.arie

Other Decks in Technology

Transcript

  1. 자기소개 • 본업은 개발, 취미는 딥러닝! 딥러닝 공부하는 안드로이드 개발자

    • Research Engineer들과의 더 나은 협업을 위해 딥러닝을 공부합니다. • 지표 측정과 테스트를 생활화 합니다. • Tensorflow Lite, ML Kit, Caffe2 on Mobile, Android NN API, Federated Learning… 신정아 (Jeongah Arie Shin) 모두의연구소 MoT / Naver ClovaAI
  2. 오늘의 이야기는 … 딥알못(딥러닝을 알지 못하는) 안드로이드 개발자가 직접 CNN

    모델(Landmark Detection, Object Detection)을 설계해서 직접 학습시키고, 직접 Tensorflow Lite, ML Kit으로 Serving 하는 이야기 ** End2End
  3. Index 1) On-Device AI End2End 2) Why I choose tf.keras

    3) Model Overview ­ Landmark Detection, Object Detection 4) Model Architecture 5) Model Training 6) Model Serving 7) Trial and Error
  4. Machine Learning Pipeline (Usual case) Training - 데이터 분석, 데이터

    전처리, 모델 설계, 모델 학습, 테스트, parameter tuning
  5. Machine Learning Pipeline (Usual case) Conversion - 모바일용으로의 경량화 5'-JUF$POWFSUFS

     $PNQBUJCMFXJUIPUIFSGSBNFXPSLT ,FSBT 1Z5PSDI j  )%'  4BWFE.PEFM  'SP[FO(SBQI  4FTTJPO
  6. On-Device AI End2End tf.contrib.learn.evaluate tf.estimator.Estimator tf.lite.Interpreter 모델에 대한 성능 평가

    GQT *OGFSFODF5JNF NT $16 )BSEXBSF"DDFMFSBUJPO j Serving 과정에 대한 평가
  7. On-Device AI End2End tf.contrib.learn.evaluate tf.estimator.Estimator tf.lite.Interpreter 모델에 대한 성능 평가

    GQT *OGFSFODF5JNF NT $16 )BSEXBSF"DDFMFSBUJPO j Serving 과정에 대한 평가 Rollback
  8. 2010 2013 2014 2015 2017 Why I choose tf.keras 수많은

    오픈소스 딥러닝 프레임워크 / 라이브러리들
  9. CoreML (Apple) Caffe2Go (Facebook) Fritz.ai Mace (Shaomi) MLKit Why I

    choose tf.keras On-Device AI를 지원하는 딥러닝 프레임워크 / 라이브러리들
  10. Why I choose tf.keras 쉬운 모델 설계 / 학습 +

    Tensorflow Lite 기반의 Serving
  11. Why I choose tf.keras 쉬운 모델 설계 / 학습 +

    Tensorflow Lite 기반의 Serving : 신경망 레이어 구성, 비용 함수 계산, 최적화, 초기화, 활성화 함수, 정규화 등의 기능 구현을 간단한 모듈로써 사용 가능
  12. Why I choose tf.keras 쉬운 모델 설계 / 학습 +

    Tensorflow Lite 기반의 Serving : 학습 디버깅을 위한 시각화 도구 Tensorboard 제공, Theano Backend의 Keras 학습 디버깅에 이슈가 많 은 점이 한 몫 하기도 했음.
  13. Why I choose tf.keras 쉬운 모델 설계 / 학습 +

    Tensorflow Lite 기반의 Serving : 제일 많은 Serving 경험을 가진 프레임워크. Tensorflow Backend의 Keras를 활용했기 때문에 (weight 추 출 부터 시작하여) Model Conversion이 쉽고, Tensorflow Lite Evaluation 체계를 활용할 수 있음.
  14. Why I choose tf.keras 쉬운 모델 설계 / 학습 +

    Tensorflow Lite 기반의 Serving tf.keras + Tensorflow Lite (Android Native)
  15. Why I choose tf.keras 쉬운 모델 설계 / 학습 +

    Tensorflow Lite 기반의 Serving tf.keras + Tensorflow Lite (Android Native)
  16. Model Overview Object Detection + Landmark Detection - 귀여운게 체-고

    - Snapchat, Snow에서 출시한 동물 전용 AR 카메라를 만들 목적으로 시작 - 데이터셋 구하기가 쉬움(kaggle, 오픈 데이터셋 …) - 지루하고 긴 데이터 전처리 과정에서의 기쁨을 얻을 수 있었음❤
  17. Model Overview Object Detection + Landmark Detection 주어진 이미지에서 강아지/고양이가

    위치한 영역을 검출(Object Detection), 9개의 Facial Feature 분석(Landmark Detection)
  18. Model Overview Object Detection + Landmark Detection [DEMO] 고양이용 Landmark

    Detection 모바일에의 적용 주어진 이미지에서 강아지/고양이가 위치한 영역을 검출(Object Detection), 9개의 Facial Feature 분석(Landmark Detection)
  19. Model Architecture Object Detection + Landmark Detection ­ MobileNet V2

    기반 * MobileNet V2 이전 버전의 MobileNet의 Standard Convolution이 무겁기 때문에 이를 DSC(Depthwise Seperable Convolution) mobilenetv2_model = mobilenetv2.MobileNetV2(input_shape=(img_size, img_size, 3), alpha=1.0, depth_multiplier=1, include_top=False, weights='imagenet', input_tensor=inputs, pooling='max')
  20. Model Training Facial Feature. Bounding Box를 전처리 하는 모바일 인터페이스

    기반의 Annotation Tool 개발 - 2000장의 Training Set을 kaggle, 오픈 데이터셋 등을 통해 수집 - 200장의 Test Set 크롤링(Phantom.js)
  21. Model Serving End2End : 18 ~ 30 fps (Mobile GPU

    가속시) 5FOTPSGMPX -JUF .-,JU  (16%FMFHBUJPO"1*੄ ੸ਊ  5FOTPSGMPX .PEFM0QUJNJ[BUJPO5PPMLJU ഝਊ
  22. Model Serving 전처리/후처리 클래스에 어떤 역할을 위임할 것인가? .tflite input

    output 전처리 : ImageClassifer convertBitmapToByteBuffer() loadModel() loadAsset() … 후처리 : ImageClassiferFloatException runInference() addPixelValue() getProbability() getLabelProbArray() …
  23. 5FOTPSGMPX -JUFҗ .-,JU࠺Ү 5FOTPSGMPX -JUF $VTUPN.PEFM݅ ૑ਗ 1SFUSBJOFE ػ ҳӖ੄

    ݽ؛ٜ੉ ݆੉ ա৬੓૑݅ ӝࠄ੸ਵ۽ ೐۽ં౟ী ૒੽ UGMJUF ౵ੌ ੉ध೧ঠ ೣ 0O%FWJDF୶ۿ݅ ૑ਗ ೞ٘ਝয оࣘҗ ઁೠ੸ਵ۽ (164FSWJOHоמ .-,JU 1SPEVDUJPO3FBEZݽ؛ .BEFCZ(PPHMF $VTUPN.PEFMݽف ૑ਗ 0O%FWJDF୶ۿ  ௿ۄ਋٘ ୶ۿ ݽف ૑ਗ ف ߑߨ ݽف 'JSFCBTFഝਊ ೞ٘ਝয оࣘ਷ оמೞ૑݅ ই૒ $164FSWJOH݅ оמ
  24. 5FOTPSGMPX -JUF 'BTUFSXJUI.PCJMF(16 %FWFMPQFS1SFWJFX  ୹୊IUUQTXXXUFOTPSGMPXPSHMJUFQFSGPSNBODFHQV import org.tensorflow.lite.Interpreter import org.tensorflow.lite.experimental.GpuDelegate

    // Initialize interpreter with GPU delegate protected val delegate = GpuDelegate() protected var options = (Interpreter.Options()).addDelegate(delegate) protected var interpreter = Interpreter(model, options) // Run inference while (true) { writeToInput(input) interpreter.run(input, output) readFromOutput(output) } // Clean up delegate.close() ✓ ࢜۽਍ (16#BDLFOE ª (16оਊ ৈࠗܳ PQUJPO ച ೧ࢲ ࢎਊ ✓ ӝઓ $16CBTFE*NQMFNFOUBUJPO ª *OUFSQSFUFSী NPEFM MPBE0/-:
  25. 5FOTPSGMPX -JUF 'BTUFSXJUI.PCJMF(16 %FWFMPQFS1SFWJFX  ୹୊IUUQTXXXUFOTPSGMPXPSHMJUFQFSGPSNBODFHQV ✓ .PCJMF(16ܳ оࣘೡ ࣻ

    ੓ח 5FOTPSGMPX 0QFSBUPSח ೠ੿غয ੓਺ ✓ (16%FMFHBUFীࢲ ૑ਗೞ૑ ঋח 0QFSBUPSо ࢎਊػ ࠗ࠙ী ೠীࢲ $16৬੄ ߽೯੸ੋ ࢎਊ੉ оמೞ૑݅ $16݅ ࢎਊೡ ٸ ࠁ׮ غ۰ ࢿמ੉ ೞۅؼ ࣻ ੓਺ ✓ (16࢚ীࢲ੄ UFOTPSEBUB DIBOOFM ஠ݫۄ ೞ٘ਝযо 3(#"ܳ ૑ਗೡ ٸ 3(#9  DIBOOFM ഋधਵ۽ JOQVUਸ ֍ਵݶ ࢿמ ೱ࢚੉ оמೣ
  26. Trial and Error ­ Model Size ✓ Post-training Quantization with

    Tensorflow Model Optimization Toolkit - Fully Quantized (weight/activation) Model Size : 9.6mb -> 5.2mb / End2End : 30 ~ 45 fps (Mobile GPU 가속시), accuracy loss 1% 이내
  27. Trial and Error ✓ 앞으로의 많은 TODO - Pruning API의

    적용 - During-training Quantization 시도 - End2End Model 개발 (Object Detection / Landmark Detection 결합) - 반려동물별 Custom Model의 개발