TensorFlow で画像認識 (CNN 法)

Last update: 2016-08-09

[期間限定記事] オンライン学習サイト Udemy で Python とデータサイエンスを学ぼう *割引中1,200円*

本ページでは、Google Brain Team によって開発されたオープンソースの機械学習エンジンである、TensorFlow (テンソルフロー) を利用して、ディープラーニングの一種である、CNN 法 (Convolutional Neural Network, 畳み込みニューラルネットワーク, ConvNet とも呼ばれる) によるモデルを構築して、画像の自動クラス分類器 (判別器) を作成し、実行する方法を紹介します。

もし、まだ TensorFlow をインストールしていない場合は、「TensorFlow をインストール」の手順にてインストール作業を行いましょう。

今回使用するデータ (CIFAR-10 データセット)

本手順では、TensorFlow の Convolutional Neural Network のチュートリアル にしたがって、CIFAR-10 (読み方は、シーファー・テン または サイファー・テンと発音されます) という名前のデータセットで、32px × 32px のクラス付け済み画像 60,000 件を用います。

CIFAR-10 では、各画像に、airplane (飛行機), automobile (自動車), bird (鳥), cat (ネコ), deer (鹿), dog (犬), frog (カエル), horse (馬), ship (船), truck (トラック) の 10 個のクラスが付けられており、 学習を行って作成したモデルを用い、与えられた画像が何の画像であるか (=どのクラスに属するか) を判定するモデルを作成します。

各クラスの画像は、次のようになっています。
cifar
The CIFAR-10 dataset のページより引用)

データセットの構成は以下です。

  • 訓練用 (Training) データ: 50,000 件
  • 検証用 (Testing) データ: 10,000 件

データの読み込みと学習の実施

チュートリアルのコード (cifar10_train.py) を実行し、データをダウンロード、解凍してから訓練用データで学習を行います。
以下は、チュートリアルのコードに、日本語で説明を付け加えたものです。

問題なく実行できていれば、以下のようにダウンロードが行われ、学習が進められます。

training1

※ Jupyter Notebook で実行した場合、計算終了時に以下のようなエラーが表示される場合がありますが正しく計算できています。
training2

検証用データを用いて精度を確認 (モデル評価)

続いて、作成したモデルと検証用データを用いてどのくらいの精度で正しく分類ができたかを確認します。以下コードもチュートリアルのコードを参考に、一部修正したものを実行します。こちらも、チュートリアルのコード (cifar10_eval.py) を参考に、日本語で説明を付け加えたものです。

なお、このモデル評価プログラムは、上記の学習用プログラムを実行中に並行して学習中のモデルの精度を検証しながら、実行できるようになっています。

プログラムを実行した結果は以下です。結果によると、0.803 (80.3%) の精度で正しく識別できたことがわかります。

eval2

※ Jupyter Notebook で実行した場合、計算終了時に以下のようなエラーが表示される場合がありますが正しく計算できています。

TensorBoard でモデルを確認

TensorBoard (テンソルボード) は、TensorFlow で作成したモデルや学習状況を可視化するWebアプリケーションです。
以下コマンドを実行すると、ブラウザが起動し、TensorBoard の画面が表示されます。--logdir オプションにて、可視化対象となるディレクトリを指定します。

ブラウザ上では以下のように、パラメータの推定状況、モデルを可視化した図などが参照できます。

ロス関数の値の減少状況。10,000 回実行後、0.9 付近で収束しつつあることが一目でわかります。
tb01

グラフ (モデルを可視化した図) が参照できます。
tb02

参考: tensorflow/tensorflow/models/image/cifar10 at r0.9 · tensorflow/tensorflow
Convolutional Neural Networks

See also