こんにちは、えびかずきです。
今回は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に移植できることを知り、その手始めとして公式のデモを動かしてみようと思いました。
公式チュートリアルはこちら↓
githubにも同様のチュートリアルがあります↓
では順を追って手順を説明していきます。
手順
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 ガイド/公式チュートリアル
コメントを書く