TensorFlowLiteのデモをiPhoneで試してみた記録

TensorFlowLiteのデモをiPhoneで試してみた記録
えびかずき
えびかずき

こんにちは、えびかずきです。

今回はiPhoneでTensorFlowLiteのデモを試してみたので、備忘録として手順を残しておこうと思います。

こんな人におすすめ:
・iPhoneでTensorFlowによる学習済みモデルを動かしたい
・TensorFlowLiteの使い方を知りたい

こんな人にはおすすめでない:
・PCがMacでない
(残念ながらXcodeが使えないと今回の手順は実行できません)

開発環境

・MacOS Big Sur 11.2.1
Xcode 12.5(iOSアプリ開発のために必要)
CocoaPods 1.10.1(TensorFlowLiteのインストールのために必要)
TensorFlowLite 1.13.1
TensorFlowLiteGpuExperimental 0.0.1

・iPhone8

やりたいこと

TensorFlowLiteを使えば、学習済みTensorFlowモデルをiOSアプリとしてiPhoneに移植できることを知り、その手始めとして公式のデモを動かしてみようと思いました。

公式チュートリアルはこちら↓

TensorFlow LiteGPUデリゲート

githubにも同様のチュートリアルがあります↓

TensorFlow Lite GPU delegate

では順を追って手順を説明していきます。

手順

1.Xcodeのインストール

iOS開発のためのIDEとしてXcodeを準備しておく必要があります。

通常はAppStoreからインストールできます。

しかし私の場合PCのストレージが比較的少なかったため、通常のやり方ではうまくいきませんでした。

ということで、AppleのdeveloperサイトからXcode12.5のインストールファイルをダウンロードして手動で展開してインストールをしました。

https://developer.apple.com/download/more/

この場合、Xcode12.5のインストールファイル(約11GB)をダウンロードした状態かつ、PCの残ストレージを35GBまで頑張って空けたところでXcodeのインストールに成功しました。

よってXcode12.5のインストールには少なくとも46GBの残ストレージが必要ですので、お気をつけください。

のっけからかなり苦戦してます。幸先悪いなあ(笑)

なおこの方法の場合、初期実行時に以下のような追加コンポーネントのインストール要求が来ますので、「install」をクリックします。

2.CocoaPodsのインストール

続いてPCにCocoaPodsをインストールします。

CocoaPodsはiOS開発向けパッケージ管理ツールです。

インストールはRubyのGemを使います。

RubyはMacにデフォルトで搭載されているので、以下のようにしてgemですぐにインストールできます。

$ gem install cocoapods

ちなみに今回の私の場合は、以前Rubyでアプリ開発をしていた経験があるため、rbenv環境でRuby2.6.5を使いました。

こんなところでまたRubyと再開するとは。

久しぶりにGemさわりました。

さて、上記コマンドを実行したらcocoapodsが正常に動くか確認してみましょう。

以下のようにpodコマンドを実行して、コマンドのhelp画面が出てきたらきちんとインストールできています。

$ pod

つづいて、以下のように初期セットアップをします。

$ pod setup

「Setup completed」と出力されれば成功です。

3.デモプログラムの準備

TensorFlowLiteのデモプログラムを準備します。

まず、以下のようにTensorFlowのリポジトリをgitでダウンロードします。

$ git clone https://github.com/tensorflow/tensorflow

このファイルの中には、デモサンプルをダウンロードするためのシェルスクリプト(.sh)が用意されていますので、これを実行します。

$ sh tensorflow/lite/examples/ios/download_models.sh

これでデモプログラムが準備できました。

4.TensorFlowLiteをインストールする

それではいよいよ、cocoapodsを使ってTensorFlowLiteをインストールします。

tensorflow/tensorflow/lite/examples/ios/cameraのディレクトリへ移動して、

ターミナルから以下の「pod install」コマンドを実行します。

$ pod install

ちなみにpod installはカレントディレクトリのPodfileを参照して、そこに記載されたパッケージをまとめてインストールします。

gitでダウンロードしたPodfileの中には、以下のようにTensorFlowLiteの記載があります。

  pod 'TensorFlowLite', '1.13.1'

これでTensorFlowLiteがインストールされました。

5.デモサンプルをビルドする

今回はTensorLiteのexamplesに入っている「tflite_camera_example」というデモファイルを試していきます。

このデモはGoogleのMobileNet v1学習済みモデルが使われていて、iOSアプリのコードはObjective-Cで書かれています。

それでは、contents.xcworkspacedataからXcodeを開いて、サンプルをビルドしていきます。

contents.xcworkspacedataの場所はこちら↓
tensorflow/tensorflow/lite/examples/ios/camera/tflite_camera_example.xcworkspace/contents.xcworkspacedata

ビルド手順:

・「Signin&Capabilities」からAppleアカウントにサインインする。

・以降は下図に従って設定をしていく。

これで準備が整ったので、アプリをビルドして、iPhoneで画像認識を試してみました!

6.デモの様子

こんな感じで、iPhoneから画像認識のデモができました。

ここではキーボードとモニターを認識してます。

GPUを使おうとしたがうまくいかなかった

続いてGPUを使えるように、設定を変更していきました。

まず、TensorFlowLiteGpuExperimentalを使用するために、Podfileの中身を以下のように修正。

Podfileはtensorflow/tensorflow/lite/examples/ios/cameraにあります。

  # pod 'TensorFlowLite', '1.13.1'
  pod 'TensorFlowLiteGpuExperimental', '0.0.1'

そして、CameraExampleViewController.hをエディタで開いて、22行目あたりの数値を0から1へ、以下のように修正しましたが、うまくiPhoneで動作しませんでした。

#define TFLITE_USE_GPU_DELEGATE 1

なぜかよくわからないですが、こういうエラーが出てうまくいかない。。。

ということで、この続きはまた今度ということにします。

まとめ

今回はiPhoneでTensorFlowLiteのデモを試してみた記録を記事にしてみました。

普段はPythonを使うことが多いので、Xcodeを使う開発はあまり慣れていないですが、なんとかデモを試すところまでは辿り着きました。

今後はSwiftとTensorFlowLiteを使ってiOS向けのAIアプリを開発していければと思っています

また進展があれば記事に残そうと思います。

気長にお待ちください。

今回は以上、それではまた次回の記事でお会いしましょう!

参考

記事作成にあたって、以下の情報が参考になりました。

基本的な手順についての参考資料:

・iOSでTensorFlow Liteを試してみたら思いの外ハマって、サンプルの修正PRを投げた話/Qiita

MobileNet関連:

MobileNetの元論文
MobileNets/arXiv

MobileNet関連の日本語記事:
・速くて軽くて精度の良い、MobileNetのポイントをまとめてみた/Qiita
・MobileNet(v1,v2,v3)を簡単に解説してみた/Qiita

トラブルシューティング:

rbenvでruby環境を作ってgemを使う方法)
・Macにgemをインストールする流れ – Homebrew→rbenv→bundlerで管理する/夢見るゴリラ

iPhone側がアプリを拒絶する場合)
信頼されていないエンタープライズデベロッパ、と表示される/Okage

ビルド時のエラーコードへの対応)
・clang: error: linker command failed with exit code 1 が出たときの体験談/Qiita
・[xcode] Archiveすると「clang: error: linker command failed with exit code 1 (use -vto see invocation)」エラーが発生した時/BlueBear I/O

次に進むための資料:

各プラットフォームでのTensorFlowLite操作方法)
・TensorFlow Lite の推論/公式チュートリアル

モデルの変換についてはこちら)
TensorFlow Lite コンバータ/公式チュートリアル

・コンバータ Python API ガイド/公式チュートリアル

・TensorFlow Lite を使ってみた。/Qiita

・初心者に優しくないTensorflow Lite の公式サンプル/Qiita

機械学習カテゴリの最新記事