Slide 1

Slide 1 text

iOSDC 2019 CoreMLで実現する 爆速のARサイズ計測 Kohei Arai @kokoheia

Slide 2

Slide 2 text

Kohei Arai @kokoheia ● Mercari / 新卒 iOS Engineer ● Twitter: @kokoheia ● Instagram: @kokoheia ● ポートレートを撮るのが趣味です ● 最近PUBGにハマっています

Slide 3

Slide 3 text

突然ですが、みなさん こんな経験をしたことは ありませんか?

Slide 4

Slide 4 text

「フリマアプリで洋服を出品したい!」

Slide 5

Slide 5 text

特に、洋服の「サイズ」を載せたい (コメントで聞かれた。。)

Slide 6

Slide 6 text

そうだ、AR Measureで 測ってみよう!

Slide 7

Slide 7 text

。。。。

Slide 8

Slide 8 text

。。。結構面倒くさい ● そもそも測る場所がわからない ● 測り方が合ってるか自信ない ● 何枚も出品したいけど時間かけたくない。。

Slide 9

Slide 9 text

IN THE NEXT FIVE MONTHS ARメジャーの課題 ● ARの体験に慣れるのに時間がかかる ● 大きいものを測るのが大変 ● メジャーを代替しただけなので計測にかか る時間はあまり変わらず Item 1 Item 2 Item 3 Item 4 Item 5 40 30 20 10 0

Slide 10

Slide 10 text

テクノロジーを使って もっと簡単に測ることは できないか!?

Slide 11

Slide 11 text

ML(機械学習) ✖AR で 爆速 & 超簡単にサイズ計測する

Slide 12

Slide 12 text

Demo

Slide 13

Slide 13 text

No content

Slide 14

Slide 14 text

仕組み 画像を撮影 ML(機械学習)で 画像内の特徴点の座標を 推定 特徴点の座標を元に AR Kitを使って現実世界 のスケールを得る。

Slide 15

Slide 15 text

MLモデル created by ARヒノボル / @liketableteninu 姿勢推定のモデルを応用 Alibabaのデータセット

Slide 16

Slide 16 text

2Dの推定 3Dの推定(AR) 仕組み

Slide 17

Slide 17 text

どれくらい 速くなったのか?

Slide 18

Slide 18 text

測定した対象 袖丈、肩幅、身幅、着丈の4点 出典: https://minne.com/items/17640623

Slide 19

Slide 19 text

サイズ計測にかかる時間 自力 ML + AR 40 ~ 50秒 10 ~ 15秒

Slide 20

Slide 20 text

もっと速くしたい!

Slide 21

Slide 21 text

CoreMLを使って サーバレスで推定

Slide 22

Slide 22 text

Demo 2: CoreML

Slide 23

Slide 23 text

No content

Slide 24

Slide 24 text

サイズ計測にかかる時間 自力 AR + ML (サーバー) 40 ~ 50秒 10 ~ 15秒 AR + CoreML 5秒未満

Slide 25

Slide 25 text

MLモデルの生成 Created by ARヒノボル / @liketableteninu

Slide 26

Slide 26 text

推定の精度 サーバー CoreML 身幅 2cm以内 2cm以内 着丈 5cm以内 5cm以内 袖丈 10cm前後 10cm前後 肩幅 10cm前後 10cm前後 推定しやすい 推定しづらい

Slide 27

Slide 27 text

● モデル自体を改善する ○ カテゴリごとの画像の数を増やして学習する ● 物体認識の精度をあげる (for CoreML) ○ 機械学習で物体認識してから、その範囲内で推定すると精度が上がる 精度を改善するために

Slide 28

Slide 28 text

ML ✖ AR Measureの可能性 ● 人間のサイズも測定できる → 服と照らし合わせてフィット度を計測する ● 靴やインテリアなど、服以外の商品にも応用が可能

Slide 29

Slide 29 text

ご清聴ありがとうございました!

Slide 30

Slide 30 text

おまけ

Slide 31

Slide 31 text

推定の速度 サーバー(GPU) サーバー(CPU) CoreML 2 ~ 3秒以下 6秒程度 1秒以下

Slide 32

Slide 32 text

月あたりコスト(一例) サーバー(GPU) サーバー(CPU) CoreML 約68,000円 / 台 約13,000円 / 台 無料 GPUはaws p2.xlarge, CPUはaws c5xlargeを参照。 GPU: 0.9(USD/hr) * 24 hrs * 30 days * 105(JPY/USD) = 68,040JPY CPU: 0.17(USD/hr) * 24 hrs * 30 days * 105(JPY/USD) = 12,852JPY

Slide 33

Slide 33 text

Pytorchからモデルを変換した理由 ● Turi Create や Create MLでモデルを作ることも 検討した ● Pythonで書かれた機械学習用のライブラリに比 べるとできる処理も限られていたためPytorchか らの変換を採用

Slide 34

Slide 34 text

非同期のHit Test処理

Slide 35

Slide 35 text

非同期のHit Test処理のTips Hit Testには3種類ある ● ARSCNView hitTest(_ point: CGPoint, types: ARHitTestResult.ResultType) -> [ARHitTestResult] ● ARSKView hitTest(_ point: CGPoint, types: ARHitTestResult.ResultType) -> [ARHitTestResult] ● ARFrame hitTest(_ point: CGPoint, types: ARHitTestResult.ResultType) -> [ARHitTestResult]

Slide 36

Slide 36 text

非同期のHit Test処理のTips ● 画像をサーバに送りレスポンスが帰ってくるのを待たなくては行 けなかった ● 今回は画像撮影時のARFrameを保存しておいて、レスポンスが 帰ってきてから、保存済みのARFrameからhitTest処理をするとい う実装をした ● 最初、予想した結果とはるかに異なる点がプロットされて戸惑っ た

Slide 37

Slide 37 text

非同期のHit Test処理のTips ARFrameを使ってhitTestをするときは、結果をinvertしないといけなかった

Slide 38

Slide 38 text

参考 ● https://www.digitaltrends.com/mobile/how-to-use-the-measure-app-in-ios-12/ ● https://github.com/matterport/Mask_RCNN ● https://github.com/LiMeng95/MultiPoseNet.pytorch ● https://tianchi.aliyun.com/mobile/gameDetail/231670 ● https://qiita.com/kamata1729/items/e54bcb7d0ed3d296daf8 ● https://aws.amazon.com/jp/emr/pricing/ ● https://pytorch.org/ ● https://github.com/onnx/onnx ● https://github.com/onnx/onnx-coreml ● https://developer.apple.com/documentation/arkit/arframe/2875718-hittest