TensorFlow LiteがAndroidやiOSデバイスのGPUをサポートしたようです1。
バックエンドはAndroidではOpenGL ES 3.1、iOSではMetal。
This new backend leverages:
- OpenGL ES 3.1 Compute Shaders on Android devices
- Metal Compute Shaders on iOS devices
iPhone 7では最大6倍の高速化が見られたようです。
By leveraging the new GPU backend in the future, inference can be sped up from ~4x on Pixel 3 and Samsung S9 to ~6x on iPhone7.
というわけで以下のチュートリアルページに従って試してみました。
試すまでの最小手順
TFリポジトリには昔からiOSでリアルタイム物体認識を行うサンプルが同梱されているのですが、これをGPUで処理するように変更していきます。
チュートリアルページでは実行速度を最大化するように細かい設定も書いてますが(Releaseビルドしろとか)、動かすために必要なものだけ抜粋して書いていきます。
1. モデルをダウンロード
スクリプトを走らせてサンプルで利用するモデルをダウンロードします。
$ cd tensorflow/lite/examples/ios
$ sh ./download_models.sh
2. GPUサポート版TF Liteを使うようPodfileを変更
# pod 'TensorFlowLite', '1.12.0'
pod 'TensorFlowLiteGpuExperimental'
で、pod install
します。
3. コードの修正
CameraExampleViewController.h
の、TFLITE_USE_CONTRIB_LITE
の値を1
から0
に、
// #define TFLITE_USE_CONTRIB_LITE 1
#define TFLITE_USE_CONTRIB_LITE 0
TFLITE_USE_GPU_DELEGATE
の値を0
から1
に変更します。
// #define TFLITE_USE_GPU_DELEGATE 0
#define TFLITE_USE_GPU_DELEGATE 1
4. Build & Run!
tflite_camera_example.xcworkspace
をXcodeで開いて実機で実行します。
GPUで動いていることを確認する
よく見る物体認識デモなので、これだけだとGPUで動いている実感がないかもしれません。
XcodeのGPU Reportで見てみるとちゃんとGPUが働いていました。
ちなみにこのときCPUの負荷は60%前後。(iPhone XS / iOS 12.1.2)
他の公式配布モデル
物体認識以外にも、魅力的なモデルが既に配布されています。以下のモデルはモバイルデバイスGPUで利用可能です。
DeepLab segmentation
セグメンテーション(領域分割)用のモデル。
image segmentation model that assigns semantic labels (e.g., dog, cat, car) to every pixel in the input image
(画像はGoogle AI Blogの記事より)
- https://storage.googleapis.com/download.tensorflow.org/models/tflite/gpu/deeplabv3_257_mv_gpu.tflite
PoseNet
ポーズ(姿勢)推定用のモデル。
vision model that estimates the poses of a person(s) in image or video
(画像はこちらから)
MobileNet SSD object detection
物体認識モデル。複数のオブジェクトをバウンディングボックスつきで検出してくれます。
image classification model that detects multiple objects with bounding boxes
(画像はこちらから)
まとめ
TensorFlow LiteがAndroid/iOSのGPUを利用するようになったとのことで、iOSで試してみました。姿勢推定、セグメンテーション、バウンディングボックス付き物体認識と魅力的なモデル群が既に利用可能なので、そちらも試してみたいと思います。
TensorFlow x iOS関連記事
- TensorFlowで作ったモデルをCore MLで利用する
- TensorFlowをiOSで動かしてみる
- TensorFlow for iOS のモデルについて - Qiita
- TensorFlowの学習済みモデルを拾ってきてiOSで利用する - Qiita
iOS x 機械学習 関連記事
- Core ML+Visionを用いた物体認識の最小実装 - Qiita
- iOSの機械学習フレームワークの比較 - Core ML / Metal Performance Shaders (MPSCNN) / BNNS - Qiita
- iOSのMPSCNNに渡すモデルパラメータのフォーマット / TensorFlowからの書き出し - Qiita
- iOSのMetalで畳み込みニューラルネットワーク - MPSCNNを用いた手書き数字認識の実装 - Qiita
- ドラッグ&ドロップで機械学習のモデルがつくれる「Create ML」の使い方 #WWDC18
- Visionなしで、Core ML単体で使う - Qiita
- Core MLの公式配布モデル6種の比較 - Qiita
-
とはいえまだDeveloper Preview ↩