$30 off During Our Annual Pro Sale. View Details »

バーチャル背景を実現しよう

BOB
September 18, 2021

 バーチャル背景を実現しよう

BOB

September 18, 2021
Tweet

More Decks by BOB

Other Decks in Technology

Transcript

  1. バーチャル背景を実現しよう 2021 / 09 / 17 iOSDC Japan 2021 Arata

    Yokoyama / GitHub : ARATAYOKOYAMA Twitter : BOBG 1018 Vi
  2. About Me • Arata Yokoyama • 2020年サイバーエージェント新卒⼊社 • タップルのiOSエンジニア •

    北海道出⾝ • アイドル‧特撮‧ガンダムを 
 こよなく愛している 2
  3. People Occlusion 1 0 ⼈をARコンテンツの前に表⽰できるようにする仕組みです 動作要件:iOS 13 以上,A 1 2

    以上 *ARFaceTrackingは深度カメラが必要ARWorldTrackingCon fi gurationと ARFaceTrackingCon fi gurationのみで動作します frameSemanticsɿhttps://developer.apple.com/documentation/arkit/arconfiguration/3089121-framesemantics 2 .ARKit
  4. 画質を最低にする • ⾼画質な順に先頭から⼊っているため,最後を選択する Max: 1440 * 1080 60 FPS Min:

    1280 * 720 30 FPS 1 5 ARKitʹ͓͚ΔΧϝϥͷղ૾౓ͱϑϨʔϜϨʔτɿhttps://qiita.com/shu223/items/86ef45b4b5c0bba0276f 2 .ARKit
  5. メリット 導⼊が後述するCoreMLより⽐較的楽だと感じてます ARコンテンツを⽤いたスタンプなど,今後の展望もあります デメリット 動作条件が厳しい • iOS 13 以上,A 12

    以上 *ARFaceTrackingは深度カメラが必要 iPhoneXS系統,XR, 11 系統,12系統,SE 2 st(iOS 1 4 ) メリット‧デメリット 2 1 動作OK iPhoneX, iPhone 8 系統, それ以前の端末 動作NG 2 .ARKit
  6. 背景分離 • 概要 - 前景らしい領域を与えて,分離させる • 実現⼿段の1つ:GrabCut - 古くから使われている⼿法 -

    iOSで実現しようとすると,フルスクラッ チ or OpenCVが必要かもしれない - YOLOと組み合わせる⽅法もあるがお⾒送り 2 4 3 .CoreML OpenCV Grabcut: http://labs.eecs.tottori-u.ac.jp/sd/Member/oyamada/OpenCV/html/py_tutorials/py_imgproc/py_grabcut/py_grabcut.html GrabCut, C. Rother, V. Kolmogorov, and A. Blake, ””Grabcut” - interactive foreground ex-traction using iterated graph cuts.” ACM Transactions on Graphics, Vol.23, No.2,pp.309–314, 2004.
  7. セグメンテーション • 概要(weblioより) - 区分,分割 - 市場細分化 • 具体的なイメージ -

    ある画像のうち,ここは⽝ここは⼈のように,領域を分割して意味合い をもたせることができます - ⼤きく分けて⼆種類存在します 2 5 3 .CoreML segmentation:https://ejje.weblio.jp/content/segmentation
  8. セグメンテーション セマンティックセグメンテーション 2 6 インスタンスセグメンテーション • ピクセル単位で分類 • 空や道路など不定形も分割しやすい •

    物体らしい領域を検出し,その中でピクセル単位で分割 • セマンティックより⾼速 • 同⼀カテゴリ,異なるオブジェクトも分割できる 3 .CoreML
  9. セグメンテーション セマンティックセグメンテーション 2 7 インスタンスセグメンテーション • ピクセル単位で分類 • 空や道路など不定形も抽出しやすい •

    物体らしい領域を検出し,その中でピクセル単位で分類 • セマンティックより⾼速 • 同⼀カテゴリ,異なるオブジェクトも分割できる リアルタイムインスタンスセグメンテーション + マスク処理 3 .CoreML
  10. 求められる条件 1 . 商⽤利⽤可能であること 2 . ⼈間をリアルタイムにインスタンスセグメンテーションできる こと 3 .

    1と2を満たす中で,fpsが⾼いもの 
 *今回は精度よりスピードを優先したため,IOU等は指標に置いておりません 2 9 3 .CoreML
  11. 候補 3 0 ީิҰཡ Ϟσϧ໊ -JDFODF (JUIVC .BTL3$// .*5-JDFOTF IUUQTHJUIVCDPNNBUUFSQPSU

    .BTL@3$// %FFQ-BC7 "QBDIF-JDFOTF IUUQTHJUIVCDPNUFOTPS fl PX %FFQ-BC71MVT "QBDIF-JDFOTF IUUQTHJUIVCDPNUFOTPS fl PX &TQ/FU "QBDIF-JDFOTF IUUQTHJUIVCDPNFTQOFU FTQOFU #J4F/FU .*5-JDFOTF IUUQTHJUIVCDPN$PJO$IFVOH #J4F/FU 3 .CoreML
  12. 論⽂上でのパフォーマンス 3 1 3 .CoreML DeepLabV3ͷϕϯνϚʔΫ[1] Ϟσϧ໊ 94 9 %FFQ-BC7

    GQT GQT %FFQ-BC7'1 GQT GQT %FFQ-BC7*OU-65 GQT GQT DeepLabV3 PlusͷϕϯνϚʔΫ[2] Ϟσϧ໊  9 94 %FFQ-BC71MVT GQT GQT GQT • V 3 PLusはモバイル端末での動作を想定して改良 • 実装⽅法によって変化するので,参考程度にしました [2] Searching for MobileNetV3 : https://arxiv.org/pdf/1905.02244.pdf [1] Performance Test : https://github.com/tucan9389/SemanticSegmentation-CoreML/issues/2
  13. 今回の発表で使⽤するモデル • Deeplab V 3 FP 16 Appleのdeveloperサイトでも紹介されている 精度 <

    速度を重視 Apache License 2 . 0 3 2 Core MLϞσϧɿhttps://developer.apple.com/jp/machine-learning/models/ DeepLab: Deep Labelling for Semantic Image Segmentationɿhttps://github.com/tensorflow/models/tree/master/research/deeplab DeepLab: Semantic Image Segmentation with Deep Convolutional Nets, Atrous Convolution, and Fully Connected CRFsɿhttps://arxiv.org/abs/1606.00915 3 .CoreML
  14. MLModelCon fi guration:MLComuteUnits 3 5 • mlmodelをinitするときにMLModelCon fi gurationを渡す 


    (con fi gを渡さないと警告が出ます) • MLComuteUnitsは3種類存在する 3 .CoreML
  15. MLComuteUnits:cpuOnly • 推論をCPUのみで⾏う • 他2つに⽐べて,パフォーマンスが低下する場合が多い • 何らかの理由でGPUを使⽤できない or 使⽤を回避するべきと判 断したときに選択すると良い

    • モデルのネットワーク構造によっては,CPUのみの⽅が早いこ ともあるかもしれない 3 6 MLComputeUnits.cpuOnlyɿhttps://developer.apple.com/documentation/coreml/mlcomputeunits/cpuonly 3 .CoreML
  16. MLComuteUnits:all • CPU‧GPUに加えて,ANE(apple neural engine)も使⽤して 推論する ANE:A 11 以降に組み込まれている機械学習専⽤のチップ 3

    8 MLComputeUnits.allɿhttps://developer.apple.com/documentation/coreml/mlcomputeunits/all ಛू εϚʔτϑΥϯ্࢙࠷ڧͷ৺ଁ෦ʮA12 Bionicʯνοϓͷ͢͝͞ɿhttps://book.mynavi.jp/macfan/detail_summary/id=98905 ৽iPhoneͷʮA12 Bionicʯ͸Կ͕ੌ͍ͷ͔ɿhttps://japanese.engadget.com/jp-2018-09-13-iphone-a12-bionic.html " " ౥ࡌݸ਺ʢݸʣ   ॲཧೳྗ ʢ014ʣ ໿ԯ ໿ஹ 3 .CoreML A 12 はA 11 の約8倍
  17. MLComuteUnits:all • ANEを開発者が扱えるのは,A 12 以降? A 11 の1個はFaceIDに使⽤しているかもしれないと議論されていた InstrumentsでもA 11

    では確認できず 3 9 Does iPhone 8 is possible to run models on ANE? #667 apple/coremltoolsɿhttps://github.com/apple/coremltools/issues/667 "Ͱ$PSF.-Λ࢖༻ "Ͱ$PSF.-Λ࢖༻ "ͷ݁ՌΛҰ෦֦େ 3 .CoreML
  18. ベンチマーク • 使⽤モデル:公式配布のDeepLab v 3 fp 16 • FPSの計測⽅法:FPSCounter •

    計測タイミング:推論を始めてから推論結果が返ってくるまで 4 1 ϕϯνϚʔΫ݁Ռ J1IPOF9 J1IPOF94 $16࢖༻཰ ʢʣ   '14   Semantic segmentation demoɿhttps://github.com/hollance/SemanticSegmentationMetalDemo/blob/master/Shadow/FPSCounter.swift 3 .CoreML
  19. CoreML Tools • Python製のライブラリ - Tensor fl ow製やKeras製のモデルをmlmodelへ変換できる - mlmodelのinputとoutputを変換できる

    - mlmodelの半精度化もできる • 今回の動作環境 Python 3 . 8 5 0 3 .CoreML MLModel Overviewɿhttps://coremltools.readme.io/docs/mlmodel
  20. CoreML Tools: Q&A Q. Visionで扱いたいし,とりあえず変換してもOK? A. No.⼤本のモデルのネットワーク構造に依存. 
 サイズやカラーコードを適当に変更すると,精度の低下等に繋がる 


    Q. 画像系のmlmodelならVisionで扱うのがベスト? A. NO. 予測結果をどう扱いたいかによる. 
 画像にすると,ピクセル単位の情報が失われてしまう 5 3 3 .CoreML
  21. CIImage:ベンチマーク • 使⽤モデル:公式配布のDeepLab v 3 fp 16 • FPSの計測⽅法:FPSCounter •

    計測タイミング:推論を始めてから推論結果が返ってくるまで 5 8 ϕϯνϚʔΫ݁Ռ J1IPOF9 J1IPOF94 '14 6**NBHF   '14 $**NBHF   Semantic segmentation demoɿhttps://github.com/hollance/SemanticSegmentationMetalDemo/blob/master/Shadow/FPSCounter.swift 3 .CoreML
  22. 開発中のtips • 複数端末で検証する A 11 , A 12 など世代によって,パフォーマンスが⼤きく異なる •

    動作端末を決めておく A 10 (iPhone 7 など)は正直厳しいです • If Debugでくくるなど,本番に含まれないようにする リジェクト要因になります 6 5 4.本番導⼊に向けて
  23. まとめ 6 9 ߲໨ ಺༰ എܠ όʔνϟϧഎܠͷधཁ͕͕͋ͬͨ λοϓϧͰ͸೥݄ʹϦϦʔε "3,JU 1FPQMF0DDMVTJPOΛ࢖࣮ͬͯݱ

    ಈ࡞୺຤͸"Ҏ্ $PSF.- ϦΞϧλΠϜηάϝϯςʔγϣϯͱϚεΫॲཧʹΑ࣮ͬͯݱ ಈ࡞ਪ঑୺຤͸"Ҏ্ ։ൃਃ੥࣌ͷUJQT ։ൃத͸ຊ൪ίʔυʹ"3ཁૉΛࠞͥͳ͍ ϓϥΠόγʔϙϦγʔͳͲͷ௥ՃΛ๨Εͳ͍