Help us understand the problem. What is going on with this article?

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

More than 3 years have passed since last update.

はじめに

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";
icchi_h
都内のメディア企業で働く高専出身エンジニア
https://icchi.me
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
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  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
ユーザーは見つかりませんでした