LoginSignup
28
41

More than 5 years have passed since last update.

Kerasで学習したモデルをAndroidで動かしてみた

Last updated at Posted at 2017-09-20

はじめに

Kerasで学習したモデルをAndroidで動かすにあたり、意外とネット上に参考記事がなかったのでメモ。

今回はTensorFlowのAndroidカメラデモアプリをベースに、Kerasで学習したモデルをAndroid上で動かせるようにしました。

1. Kerasの学習モデルを作る

モデルを用意するにあたり、人工知能に関する断創録さんの「VGG16のFine-tuningによる17種類の花の分類」を非常に参考にさせていただきました。機械学習系ではいつもお世話になっています。感謝。

今回はより使いやすようにように、記事先で使われているプログラムを改良。
以下のような機能を追加。

  • 識別クラスやサンプル数などの各種パラメータを学習データのディレクトリ構造から取得
  • 識別クラスを記述したラベルファイルを出力
  • 各種パラメータはオプションやコマンドライン引数で指定
  • 重みだけでなくモデル構造も含めて出力する
  • etc...

使い方はリンク先参照。
https://github.com/icchi-h/fine-tuning-keras

2. 学習モデルをTensorFlowの形式に変換

AndroidのTensorFlowデモアプリで利用されている学習モデルはProtocol Buffers(.pb)形式であるため、Kerasの学習モデルをそのまま利用することはできません。

そこで、amir-abdiさんが公開されているコードをベースにモデルの変換プログラムを用意。

使い方はリンク先参照。
https://github.com/icchi-h/keras_to_tensorflow

3. Androidアプリの準備

今回はGoogleがTensorFlowリポジトリ内で公開しているAndroid Camera Demoの中のTF Classifyを利用します。
Googleの推奨するようにBazelでビルドしてもいいですし、私はBazelを使わずAndroid Studioで開発したかったので、プロジェクトに少し手を加えました。

以下の記事でAndroid Studioでアプリをビルドするまでの手順をまとめています。
https://qiita.com/icchi_h/items/a1df9f27569714edfc5e

4. アプリの学習モデル・ラベルファイルを変更

アプリのデフォルトの学習モデル・ラベルファイルと手順1で用意したものに変更します。といっても用意したモデル・ラベルファイルを特定ディレクトリにコピーして、コード上でファイル名を定義している部分を変更するだけ。

モデル・ラベルファイルの設置

手順3でAndroid Studioを使った場合では、Project内にassetsディレクトリが表示されているはず。そこに自分のモデル・ラベルファイルをドラッグ&ドロップまたは、assetsを右クリック→Reveal in FinderでFinderを使ってファイルをコピー。

モデル・ラベルファイル名の定義を変更

/src/org/tensorflow/demo/ClassifierActivity.javaの61行目から各種パラメータが定義されているので、それを用意した学習モデルに合わせ変更。手順1で紹介したコードをそのまま利用している場合は以下のように変更。

INPUT_SIZE = 150;
IMAGE_MEAN = 0;
IMAGE_STD = 255;
INPUT_NAME = "input_1";
OUTPUT_NAME = "sequential_1/dense_2/Softmax";
MODEL_FILE = "file:///android_asset/<your model file>.pb";
LABEL_FILE = "file:///android_asset/<your label file>.txt";
28
41
7

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
28
41