TensorFlow iOSのサンプルを動かす

6月8日にTensorFlowがiOSをサポートしました。
ここではTensorFlowのインストールからiOSのサンプルを動かすまでを記します。

⚠️TensorFlow 0.9.0 RC0 時点の記事です。

インストール

  1. 事前準備
    protobuf 3 が必要になるのでインストールしていなければ、インストールしておきます。
    homebrew以外をお使いの方は各々の方法でインストールしてください。

    > brew install --devel protobuf
  2. ダウンロード

    > curl -L -O https://github.com/tensorflow/tensorflow/archive/v0.9.0rc0.tar.gz`
    > tar -xvzf tensorflow-0.9.0rc0.tar.gz
  1. ビルド
    完了するまでに時間が掛かるので && で繋いで寝る前に実行することをお勧めします。

    > cd tensorflow-0.9.0rc0

    > ./tensorflow/contrib/makefile/download_dependencies.sh

    > make -f tensorflow/contrib/makefile/Makefile TARGET=IOS IOS_ARCH=ARM64

    > ./tensorflow/contrib/makefile/compile_ios_protobuf.sh

    > ./tensorflow/contrib/makefile/compile_ios_tensorflow.sh

サンプルを実行

simpleサンプルを実行してみます。

cd ./tensorflow/contrib/ios_examples/simple

  1. 事前準備
    必要なデータをダウンロードします。

    > cd data

    > curl -L -O https://storage.googleapis.com/download.tensorflow.org/models/inception5h.zip

    > unzip inception5h.zip
  2. プロジェクト設定の修正
    Header Search Paths の設定が実際のディレクトリパスと合致していなかったので修正しました。
    環境によって異なるかもしれないので、実際のパスを確認して修正してください。

    旧:$(SRCROOT)/../../makefile/downloads/eigen-eigen-f3a13643ac1f
    新:$(SRCROOT)/../../makefile/downloads/eigen-eigen-d02e6a705c30

  3. コードの修正
    graph.pb.h L127-139PROTOBUF_DEPRECATED_ATTR にエラーが出るので削除します。
    これはワークアラウンドですが、Issue(#183) が上がっているのでそのうち解決すると思います。

    /*PROTOBUF_DEPRECATED_ATTR*/ void clear_version();
    /*PROTOBUF_DEPRECATED_ATTR*/ static const int kVersionFieldNumber = 3;
    /*PROTOBUF_DEPRECATED_ATTR*/ ::google::protobuf::int32 version() const;
    /*PROTOBUF_DEPRECATED_ATTR*/ void set_version(::google::protobuf::int32 value);
  4. ビルド&実行
    ここまででビルドが通って実行できるようになっているはずです。

    simpleサンプルの起動画面

参考

TensorFlow Makefile - GitHub

TensorFlow iOS Examples - GitHub

protobuf v3.0.0-alpha-2 is in Homebrew now - GitHub