カテゴリー: Tech

MLKitで使えるTensorflow Liteについて調べてみた

はじめに

こんにちは。前回の記事でAndroid MLKitを通じて初めて機械学習に接し、以降も少しずつ学習を続けています。
その記事の最後のあたりで、Tensorflow Liteの独自モデルによる解析についてほんの少しだけ触れました。
「on-device解析は出来ることや精度に限界がある、じゃあ自分でモデルを作ってみたい」
「でもTensorflow Liteのモデルってどう作るんだろう」
となり調べてみたところ、Tensorflowそのものについて理解する必要があるとわかりました。
以下は知識整理のためのまとめと、実際にTensorflow環境を作って、触ってみるところまでの記事となります。

そもそもTensorflowとは

「機械学習といえばTensorflow」という感じで名前だけはよく見聞きするTensorflowですが、実際にどういうものなのかをざっくり表現すると機械学習で推測を行う際に使用するモデルを構築するライブラリという認識です。

そしてTensorflow Liteとは

Liteという名前の通り軽量版で、Tensorflowで作ったモデルから変換・作成されます。
学習はTensorflowで行って、そこから出力されたTensorflow Liteのモデルを使って推測を行うもので、モバイル環境での使用を想定して開発されています。
モバイル環境ではCPUやメモリ、ストレージなど様々なリソースに制限がありますので「学習をモバイル端末では行わない」かつ「軽量」なのがミソなのだと思います。

Tensorflowの環境構築

Tensorflowを扱えないと、Tensorflow Liteの独自モデル作成もできないと分かりましたので、まずmacOS High SierraでPythonおよびTensowflowの環境構築をしていきます。目標は独自モデルの作成ですが、まずはHello Worldです。
macOSのデフォルトではPython2系のため、3系をインストールします。
またCommand Line toolshomebrewはインストール済みの前提で進めていきます。

pyenv, pyenv-virtualenvをインストール

rbenvやphpenvと同様に、Pythonのバージョンを簡単に切り替えるためのpyenv, pyenv-virtualenvをインストールします。

$ brew install pyenv
$ brew install pyenv-virtualenv

$ vi ~/.bash_profile

# 以下3行を.bash_profileの末尾に追記します
export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"

# 設定反映
source ~/.bash_profile

続いてPythonの最新版(記事作成時点で3.7.0)をインストールします。

# インストールできるバージョン一覧を表示
$ pyenv install -l
Available versions:
  2.1.3
  2.2.3
  2.3.7
  2.4
  2.4.1
  ...
  3.6.5
  3.6.6
  3.7.0
  3.7-dev
  3.8-dev
  ...
  stackless-3.4-dev
  stackless-3.4.1
  stackless-3.4.2
  stackless-3.4.7

# インストール
$ pyenv install 3.7.0

# Shims更新
$ pyenv rehash

pyenv install 3.7.0 でエラーになる場合

Xcode command line toolsがインストールされていないと、zipimport.ZipImportError: can't decompress data; zlib not availableというエラーが出ますので、以下のコマンドでインストールしましょう。

$ xcode-select --install

Tensorflow用の環境を作成する

$ pyenv virtualenv 3.7.0 TensorFlow
$ pyenv rehash
$ pyenv global TensorFlow

# 確認
$ python --version
Python 3.7.0

pip, Tensorflowインストール

pipはPythonのパッケージ管理システムです。rubyのgem, phpのcomposerですね。
TensorflowはPythonのライブラリですので、pipでインストールします。

$ easy_install pip
$ easy_install --upgrade six
$ pip install --upgrade pip
$ pip3 install --upgrade tensorflow

Hello World

ここまで来たら動作確認です。Pythonの対話形式でコードを実行します。

$ python
>>>> import tensorflow as tf
>>>> hello = tf.constant('Hello TensorFlow!')
>>>> sess = tf.Session()

ここまで実行したところで、私の環境(MacBook Pro 2017)では2018-08-21 23:14:01.418426: I tensorflow/core/platform/cpu_feature_guard.cc:141] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2 FMAというWarningが出ました。
ひとまず無視して以下のコードを実行し、ひとまず動くことは確認できました。

>>>> print (sess.run(hello))
'Hello TensorFlow!'
>>>> 

Warningの内容について

エラーメッセージで検索してみると、ズバリな記事がありました。
macOS で「this TensorFlow binary was not compiled to use: AVX2 FMA」エラー
ざっくり言うと「精度と速度があまり出ないけどスルーしても動く」というものでした。
もう少し詳しく説明するとAVX2FMAはCPUの拡張命令の一種で、私のMacBook Proでは対応しているものの、pip経由でインストールしたTensorflowのバイナリが非対応だったようです。

さいごに

いかがでしたでしょうか。「Android端末上でMLKitを動かす」という目的から始まった学習ですが、PythonやTensorflowにも手を伸ばすことになりました。
まだHello Worldの段階なので、ここから実際にどうモデルを作るのかとなると、正直なところよく理解できていません(「ひたすらデータを大量に食わせれば精度が上がる」程度の雑な認識でした…)。
機械学習入門として真っ先に候補となる分野は画像認識ですが、個人的には会話AIにも興味があります。必要な知識の膨大さにとにかく圧倒されている現状ですが、引き続き学んでいきます。

参考

関連記事

nomura

シェア
執筆者:
nomura

最近の投稿

フロントエンドで動画デコレーション&レンダリング

はじめに 今回は、以下のように…

2週間 前

Goのクエリビルダー goqu を使ってみる

はじめに 最近携わっているとあ…

3週間 前

【Xcode15】プライバシーマニフェスト対応に備えて

はじめに こんにちは、suzu…

2か月 前

FSMを使った状態管理をGoで実装する

はじめに 一般的なアプリケーシ…

3か月 前