TensorFlowのモデルをカスタマイズする

TensorFlow

はじめに

AIを勉強し始めたばかりの私が、TensorFlow向けに提供されているモデルをカスタマイズする方法についてまとめるよ。間違いがあったら教えてね。

モデルをカスタマイズしよう

TensorFlow向けの画像分類向けのモデルには、Inception-V3, MobileNetといったものがある。これら以外にもいろいろありそうだけど、まずはこの辺を押さえておけばよさそう。

これらはすでにトレーニング済みのモデルであり、かなり高精度で多くのものを識別することができる。しかし、これらはどこかの組織が自分たちの識別させたいものを識別させられるように学習させてたもの。実際に我々が識別させたいものを識別できるようになっているわけではないのです。なので、我々が識別させたいものを識別させるように何とかカスタマイズする必要がある。

難しいことはよくわからないけど、そのカスタマイズする方法として転移学習というものを使うと効率が良いらしい。で、そのチュートリアルも出てるから、今回はそれをやってみよう!

ちなみに転移学習についてこの辺を読むと、わからないなりにわかった気になる。

転移学習:機械学習の次のフロンティアへの招待

なぜうまくいくのかはよくわかってないのですが、どうやらConvolutional Neural Network(CNN)の下層の方では汎用的な特徴を学んでいるらしいという経験則があります。

じゃ、早速やってみよう

前提環境

今回は、フルスクラッチでやる。VM上に素のDebian9.5(stretch)をインストールした直後から始めます。

また、TensorFlowはCPU版を使います。GPU持ってないので・・・。誰か資金援助を・・・(´・ω・`)

まずはTensorFlowのインストール

素のDebianではpython3のpipやgitが入っていないので、まずはインストール。

そのあと、TensorFolwをインストールします。

我が家の環境では大体30秒程度で終わりました。インストール状況は次のコマンドで確認します。今回インストールされたTensoFlowはv1.9.0でした。

転移学習のツール導入

転移学習のツールがgithubに上がっているので取得する。

また転移学習用のサンプルデータも上がっているので、こいつをとってくる。

なお、ダウンロードされるデータサイズは218Mです(2018/07/29現在)。

転移学習の設定

  • 解像度:画像のサイズを指定する。128, 160, 192, 224pxのどれかが選べるみたい。
  • The relative size of the model as a fraction of the largest MobileNet:なんだかわからない。けど大きい値のほうが精度が上がるようです。1.0, 0.75, 0.50, 0.25が選べます。

今回はチュートリアルに従い、解像度は224px, relative sizeは0.50にします。環境変数に次のように設定しておきましょう。

TensorBoardの準備

転移学習の進捗を確認するためにTensorBoardを起動しておきます。起動後は、ブラウザでhttp://localhost:6006/でアクセスすれば、進捗を確認できるようになります。

ブラウザでアクセスするとこんな感じの画面が出る。今回はVM上にDebianを動かしているので、別のPCから接続している。なので、アドレスがlocalhostではないですね。

ついに転移学習はじめます!

転移学習は次のコマンドを打てばいいだけ。

我が家の環境では大体4分で完了しました。

実際に使ってみましょう

このバラを識別させてみる。

次のコマンドを打って、みましょう。

99%の確率でバラであることを識別しました!!

これで既存のモデルを鼻を識別できるモデルにカスタマイズすることができました。

次は、チュートリアルとは違うもので試してみます。

 


参考文献

TensorFlow For Poets

AIではPython3が必須です。Pythonはこちらの本がお勧めです。特に入門のほうは翻訳が素晴らしい。


コメント