Core MLによるiOS深層学習アプリの実装と性能分析
丹野 良介，泉 裕貴，柳井 啓司
電気通信⼤学 ⼤学院情報理⼯学研究科
情報学専攻

研究背景
深層学習をサーバ側で学習し，エッジ側で推論を⾏う
Edge Computingによる利⽤の増加
サーバ側の負担軽減
セキュリティ⾯の向上

⼤量の畳込み演算を⾼速に処理する必要性
AlexNet: 約11億回

1Core MLはご存知でしょうか？

2

3Core ML(ML: Machine Learning)とはiOS11から追加された機械学習API群(2017年9⽉⼀般公開)
学習済みモデルをiOS上で推論できるようにモデルを変換して利⽤
MPS(GPU), BNNS(CPU)のラッパー

iOS10では．．．(Apple提供)
MPS(Metal Performance Shaders)
GPU利⽤のニューラルネットワークAPI

BNNS(Basic Neural Network Subroutines)
CPU利⽤のニューラルネットワークAPI
iOS10

iOS11

Your AppYour AppVision

NLP

新しく追加

CoreMLMPS

BNNSMPSBNNSGPUCPUGPUCPU

4Core ML(ML: Machine Learning)とは問題点(iOS10)

独⾃で各API(MPS(GPU), BNNS(CPU))を利⽤したネットワーク
構造を書く必要性
学習したモデルをiOS⽤のフォーマットに書き出す必要性
CPU, GPUを使うのは敷居が⾼かった

上記の問題点を解決したのがCore ML
疑問「パフォーマンスはどの程度？」

iOS10

iOS11

Your AppYour App
VisionNLP

新しく追加

CoreML
MPS

BNNS

MPS

BNNS

GPU

CPU

GPU

CPU

5

⼀⽅，弊研究室のこれまでの研究
Chainer2C(Caffe2C)
Chainer/Caffeで学習したネットワークを iOS/Androidで動作可能なC⾔語コードに⾃動変換するモデルコンバータ
オリジナルの順伝搬演算ライブラリとリンク → ⾼速動作可能
CPUのみ利⽤

学習済
モデル

Caffe2C
Chainer2C

Your App
Chainer2C
Accelarete (Blas)
CPU6

⽬的Core ML(GPU利⽤)とChainer2C(CPU利⽤)を⽐較
両者の推論処理部分のベンチマークを取って，パフォーマンスを⽐較検討

本当にGPUって早いの？
Core MLを使うと何が便利なの？
どこまでの処理がiPhoneで実現可能なの？
Your App
VisionNLP

CoreMLYour App
Chainer2C

MPS

BNNS

Accelarete (Blas)

GPUCPUCPU

深層学習iOSアプリ実装レシピ
外部ライブラリ利⽤
TenforFlow for iOS, OpenCV
Caffe2など…

GPU利⽤(Core ML)

CPU利⽤(Chainer2C)

7

8

外部ライブラリ利⽤
フレームワーク⾃体が iOS 上で動くように設計されている．または，学習済みモデルを利⽤するラッパーが⽤意されている．
例：TensorFlow for iOS, OpenCV, Caffe2…

最適化が不⼗分なためパフォーマンス低い
Chainer2C(最適化)
OpenCV DNN(⾮最適化)
16倍ほど遅い

AlexNetの推論結果[ms]Chainer2C

OpenCV DNN

AlexNetiPhone7Plus

106.91663.8

右図)AlexNet

9

GPU利⽤(Core ML)
学習済みモデルをiOS上で推論できるようにモデルを変換して利⽤OSSモデルコンバータ「coremltools」を利⽤

学習済
モデル

iOS11
Your App
VisionNLP「coremltools」によりCoreMLで利⽤可能な.mlmodelに変換

CoreMLMPSBNNSGPUCPU

deployCore ML modelCore MLYour App

CoreMLがサポートするフレームワーク群

学習済
モデル

coremltools

mxnet-tocoreml

torch2coreml

deployCore ML modelCore MLYour App10

11

CPU利⽤(Chainer2C)
Chainer2C(Caffe2C)

Chainer/Caffeで学習したネットワークを iOS/Androidで動作可能なC⾔語コードに⾃動変換するモデルコンバータ
オリジナルの順伝搬演算ライブラリとリンク → ⾼速動作可能
CPUのみ利⽤

学習済
モデル

Caffe2C
Chainer2C

Your App
Chainer2C
Accelarete (Blas)CPUChainer2Cの⾼速動作可能な理由
Multithread 化による NEON/BLAS の効率的な利⽤

Acceralate (内部的にはNeon命令(ARM のSIMD命令)を利⽤
32bit浮動⼩数点演算が各スレッドについて4並列実⾏= 8並列演算

CNN に掛かる演算の可能な限りの事前計算の実⾏
CONV＋BNの事前計算によるBN計算の省略
Your App
Chainer2C
Accelarete (Blas)
CPU

12

13

ベンチマーク
認識タスク(iPhone8/7)
AlexNetAlexNet+BN
Network-In-Network(NIN)
NIN+BN
GoogLeNet
Inception-v3(299x299)
ResNet50
VGG16
VGG19
MobileNet
SqueezeNet(227x227)
基本的に元論⽂の実装のまま
⼊⼒サイズは224x224(例外有)変換タスク(iPad Pro2017)
Fast Neural Style Transfer
⼊⼒サイズは640x480

Network-In-Network + BN

14

layer no.
(1) original NIN(2) 4layers+BN
元論⽂との主な差異
11x11x96 conv1 11x11x96 conv1
1ReLU関数の直前にBNを配置
1x1x96 cccp1_1 1x1x96 cccp1_1
2
1x1x96 cccp1_2 1x1x96 cccp1_2
3Batch Normalization
5x5x256 conv2 3x3x256 conv2_1
41x1x256 cccp2_1 3x3x256 conv2_2
55x5 conv -> 3x3 conv
1x1x256 cccp2_2 1x1x256 cccp2_1
63x3x384 conv3 1x1x256 cccp2_2
71x1x384 cccp3_1 3x3x384 conv3
8
conv4のfeature mapsを
1x1x384 cccp3_2 1x1x384 cccp3_1
91024 -> 768に下げる
3x3x1024 conv4 1x1x384 cccp3_2
101x1x1024 cccp4_1 3x3x768 conv4
111x1xN cccp4_2 1x1x768 cccp4_1
12avg. pool
1x1xN cccp4_2
13softmax
avg. pool14
softmax
15161718weights
7.6Million
5.5Million
computation
1.1Billion
1.2Billion

15

認識タスクベンチマーク（iPhone7Plus）
CoreML vs. オリジナル順伝搬ライブラリ
GPU vs. CPU only
47.6

NIN+BN

Chainer2C(CPU)
202.9

VGG19
163.5

VGG16

151.3

Inception-v3

CoreML(GPU)

81.7

ResNet50
63.5

GoogLeNet
NIN+BN49.6

NIN

47.8

・Chainer2C(multithread + BLAS +若⼲の計算の⼯夫)の⽅が早い

42.7

MobileNet37.8

SqueezeNet
AlexNet+BN

32.8

AlexNet

31.4
0.0

50.0

100.0

150.0

200.0

実⾏速度ベンチマーク（iPhone8Plus）

16

CoreML vs. オリジナル順伝搬ライブラリ
GPU vs. CPU only
Chainer2C
NIN+BN
(CPU)

36.9
130.8

VGG19107.4

VGG16
81.4

Inception-v3

77.5

ResNet50
59.9

GoogLeNet

CoreML MobileNet
(GPU)

41.6

NIN-BN

41.1

NIN

40.7

SqueezeNet

36.9

AlexNet+BN

36.9

AlexNet

35.2
0.0

20.0

40.0

・Chainer2C(multithread+BLAS+若⼲の計算の⼯夫)の⽅が早い

[ms]
60.0

80.0

100.0

120.0

140.0

NIN+BN(Chainer2C)を利⽤したデモ動画

17Fast Neural Style Transfer
特定の画⾵変換を順伝搬で⾏うCNNを学習
元論⽂との差異

down-sampling layerとup-sampling layerの追加
最初と最後のconvのカーネルを
9x9 conv -> 5x5 conv

推論処理時間(640x480)
Core ML: 512 [ms]Chainer2C: 841 [ms]iPad Pro 201718

スタイル変換(デモ動画)Chainer2C

19

Tanno, R. and Yanai, K.: DeepStyleCam: A Real-time Style Transfer App on iOS,
Proc. of International MultiMedia Modeling Conference (MMM) (2017)

ベンチマークを終えて20

Chainer2Cの場合(CPU利⽤)
2つの⾼性能コアと4つの⾼効率コアの合計6コア(iPhone8)
2core * 4 = 最⼤8並列演算

Core ML(GPU利⽤)
Apple独⾃設計 3 コア GPU * 4 = 最⼤12並列演算
16bit浮動⼩数点演算

認識タスクならそれほどパフォーマンスに差はないむしろCPUの⽅が若⼲早い
CNNの処理時間 < GPUのオーバーヘッド

⾼解像度の画像を処理するなど，⾼負荷の処理をする場合
は，GPU利⽤が効果的
スタイル変換の例

実装例：⾷事検出＋カロリー推定
物体検出とカロリー推定を組み合わせたアプリ

物体検出：YOLOv2[Redmon et al, CVPR, 2017]
カロリー推定：Multi-task CNN[Ege et al, MVA, 2017]
カロリー推定の部分は午後のセッションで！

⾷事検出
カロリー推定21

⾷事検出＋カロリー推定(処理フロー)22

1. YOLOv2で⾷事検出
2. 検出された各⾷事領域のバウンディングボックス情報から画像をクロップ
3. クロップした各⾷事画像をカロリー値を推定するCNNの⼊⼒とする
Food Detection
YOLOv2

Calorie Estimation
Multi-taskCNN

518 kcal
スパゲッティ

⾷事検出＋カロリー推定(デモ動画)

Tanno, R., Ege, T. and Yanai, K.: DeepCalorieCam: An iOS App for Dish
Detection and Calorie Estimation, Proc. of International Workshop on
Multimedia Assisted Dietary Management (MADIMA) (2017)23

良いとこ悪いとこ

24

良いところ

ネットワーク構造などは既存のフレームワークベースなので，⼀々ネイティブ側でレイヤの実装などは考えなくて良いので，学習ハードルが低い
GPU利⽤なのでネットワークを⾊々同時に使える
GPUノートブックは不要
デモをしようと思ったら，最新のiPhoneさえあればOK研究成果は直ぐにiOSに実装してデモ！

悪いところ

CoreML側がどう処理してるか細かい部分まで把握できない
マルチスケール⼊⼒が不可能(FCNの場合でも⼊⼒画像サイズは固定)
CoreMLの現在の仕様？

まとめと今後の課題

25

昨今話題のCore ML(GPU)を弊研究室のCNNライブラリ(CPU)と⽐較してパフォーマンスを計測した認識などの処理が軽いタスクや⽐較的，低い解像度(224x224など)の場合はCPUの⽅が若⼲早い結果にGPUのオーバーヘッドが⼤きい

しかし，⾼負荷の処理や⾼い解像度(640x480など)の場合は，GPUを使った実⾏の⽅が圧倒的に早い結果にCore MLを使った所感…
各レイヤの実装やCNN⾼速化はAppleにお任せなので，モバイルへのdeployが⾮常に便利に
ただ，Core ML側がサポートしてないレイヤは使えないので，超最新のネットワークなどは未対応

今後の課題

バッテリ消費量のGPU vs CPUについても今後分析を⾏う

26

結論

PCで動作するものはiPhoneでも⼗分に動きます…
Core MLを利⽤して研究成果をモバイルに直ぐdeploy！

カバーするレイヤ例

27

予備動画２種類

28

29

⽂字隠蔽ネットワーク
情景画像中の⽂字を隠蔽するネットワーク
Input: ⽂字有 -> Output: ⽂字無[Nakamura et al, ICDAR, 2017]

U-Netを利⽤
画像サイズが同じものを深い層から段階的に統合
局所的特徴を保持したまま，全体的位置情報の復元が可能

Input

OutputConcatenate
Down-Sampling
Up-Sampling⽂字隠蔽ネットワーク(デモ動画)

30

マルチスタイル変換

31

Neural Style Transfer[Gatys et al, 2015]
画像の形状を保持したまま画⾵を変換
順伝搬及び誤差逆伝搬を複数回繰り返す
GPUで画像の⽣成に数⼗秒程度

Fast Style Transfer[ECCV 2016][1]
特定の画⾵変換を順伝搬で⾏うCNNを学習
⾮常に⾼速に画像を変換可能
1つのモデルで単⼀の画⾵変換のみ学習
消費メモリの増⼤，学習に時間要

・ [1]の拡張
・ 単⼀モデルで複数のスタイルを任意重みで合成

マルチスタイル変換(デモ動画)

32

Tanno, R. and Yanai, K.: DeepStyleCam: A Real-time Style Transfer App on iOS,
Proc. of International MultiMedia Modeling Conference (MMM) (2017)

予備，補⾜33

まとめ
深層学習ネットワークをモバイルに実装

技術的知⾒や応⽤例を検討
CoreMLとオリジナル順伝搬ライブラリとの⽐較
実⾏速度ベンチマーク
実装例3種類の紹介

今後の課題

深層学習＋AR(拡張現実)を融合したカロリー推定アプリの実現

34

The gap between framework and Hardware 35
backends

NNVM Compiler: Open Compiler for AI
Frameworks

36

米Microsoftと米Facebookは9月7日（現地時間）、AI（人工知能）開発者がフレームワーク間のスイッチを簡単にできるようにするオープンソースプロジェクト「OpenNeural Network Exchange（ONNX）」(https://www.msn.com/jajp/news/techandscience/microsoft%E3%81%A8facebook%E3%80%81ai%E9%96%8
B%E7%99%BA%E8%80%85%E5%90%9
1%E3%81%91%E3%82%AA%E3%83%B
C%E3%83%97%E3%83%B3%E3%82%B
D%E3%83%BC%E3%82%B9%E3%83%9
7%E3%83%AD%E3%82%B8%E3%82%A
7%E3%82%AF%E3%83%88%E3%80%8
Connx%E3%80%8D/ar-AArtKDy から引用)[NNVM Compiler: Open Compiler for AI Frameworks, 2017/10/6](http://www.tvmlang.org/2017/10/06/nnvm-compilerannouncement.htmlから引用)

37

ONNX: Open Neural Network Exchange
あるAIフレームワークで構築した学習モデルを異なる機
械学習システムに簡単に切り替えることを⽬的

異なるフレームワーク間の相互運⽤性を可能にして研究から製造へのパスを流れさせることは AI コミュニティにおける⾰新スピードを早める

AR+深層学習の裏付け

38

http://araruaru.hatenadiary.com/entry/2017/09/22/1245
36
マーカーARとマーカーレスARSLAM(Simultaneous Localization and Mapping)技術がiphoneに搭載
⾼精度なマーカーレスARの実現

実装例

⾳の空間記録(https://wired.jp/2017/09/28/artist-uses-an-iphone/)

Core MLはご存知ですか？

39

Core MLはご存知ですか？
学習タスク
教師データ

deployを容易にするのが…

Core ML
炒飯: 0.2
ラーメン: 0.7
味噌汁: 0.1

学習

推論タスク
推論エンジン

40・多くの計算リソースが必須
・GPU利⽤

学習済
モデル
How toimplement ??

・⽐較的能⼒が低くてもOK・CPUでOK