Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
40
Help us understand the problem. What are the problem?

More than 3 years have passed since last update.

@icchi_h

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

はじめに

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";
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
40
Help us understand the problem. What are the problem?