やしのブログ

無能底辺院生やらせていただいてます

tensorflowでfine-tuning

自前の画像で画像分類を行うfine-tuningを試してみる
まず必要なライブラリ群をそろえる

色々試したけど最終的に以下の内容で落ち着いた
かなり回り道をしたので色々間違ってるかもしれない

  • Bazel
  • Miniconda2
    • 最初は3.6でやったけどAndroidアプリのビルドでエラー出たので2.7に切り替え.設定ファイル弄れば回避できるらしかったけど不慣れなビルドツールで変なことしたくなかったので安定を選んだ
  • Numpy
    • Pip install numpyとapt-get install python-numpyの両方が必要だった


ソースコードはお馴染みのgithubから持ってくる

$ git clone https://github.com/tensorflow/tensorflow 
$ cd tensorflow
$ git checkout Branch


公式のチュートリアルに従って行う
まずはトレーニング用の画像を持ってくる
自分で用意しても良いんだろうけど今回は試しなので用意されているものを使う

cd ~
curl -O http://download.tensorflow.org/example_images/flower_photos.tgz
tar xzf flower_photos.tgz

中身は花の名前の付いたディレクトリが5つあり中には画像ファイルが600-800程度入っていた
このディレクトリ名がクラス名になるらしい
ディレクトリ名が自動的にクラス名になるのは簡単でいいかも

続いてビルド

bazel build tensorflow/examples/image_retraining:retrain

corei7のデスクトップパソコンで30分ほどかかった
初回のビルドが終わると次回からは早いらしい

そしてfine-tuningを行う

bazel-bin/tensorflow/examples/image_retraining/retrain --image_dir ~/flower_photos
    • image_dirには先ほどの花の画像群を展開した場所を指定する

私の環境ではpythonのモジュールが足らないだののエラーがでたのでpipでインストールを行った

このスクリプトを実行するとgoogleが作った高性能なモデルinception v3がダウンロードされそれに対してfine-tuningが行われる
正直中で何をやっているのかよくわからない

fine-tuningだからか思ったより学習には時間がかからなかった
学習されたモデルは/tmp/output_graph.pbに出力されラベルファイルが/tmp/output_label.txtに出力される


これで学習が完了したので実際にラベリングして確認してみる
先ほどと同じようにビルドと実行を行う

bazel build tensorflow/examples/image_retraining:label_image
bazel-bin/tensorflow/examples/image_retraining/label_image \
--graph=/tmp/output_graph.pb --labels=/tmp/output_labels.txt \
--output_layer=final_result:0 \
--image=$HOME/flower_photos/daisy/21652746_cc379e0eea_m.jpg

これで結果が出れば完了