TensorFlowのサンプルコードといえば、MNIST(手書き数字データ)の画像分類でしょ?と思っていませんか?
今日は、もう少し深層学習らしいCIFAR-10の画像分類に挑戦しましょう。
この記事は、
- CIFAR-10ってなに?
- TensorFlowをインストールすれば、CIFAR-10の画像分類を試せるの?
- 公式チュートリアルでCIFAR-10の記事を見つけたけど、手っ取り早く試せないの?
というあなたに送る、TensorFlowを使ってCIFAR-10の画像分類をやってみた記事です。
では、始めましょう。
TensorFlowとは
TensorFlowは、機械学習や深層学習のプログラムを実装する際に使用できるライブラリです。
TensorFlowとは何か?については、以下の記事で説明していますので、よく分からない方は確認してみてくださいね。
CIFAR-10とは
CIFAR-10は、airplane(飛行機)、automobile(自動車)、bird(鳥)、cat(猫)、deer(鹿)、dog(犬)、frog(カエル)、horse(馬)、ship(船)、truck(トラック)のいずれかが写っている写真を集めて、ラベルをつけたデータセットです。
CIFAR-10を学習できれば、写真に写っている物体を区別できるだろうというわけです。
もちろん、10種類限定なのでパソコンとかスマートフォンの画像を見せても、正しくは分類できませんが、それでも手書き数字よりは複雑なタスクになりますね。
CIFAR-10については、以下のサイトをご覧ください。
参考:https://www.cs.toronto.edu/~kriz/cifar.html
CIFAR-10の画像分類に挑戦!
TensorFlowのサイトに、「Convolutional Neural Networks」(畳み込みニューラルネットワーク)というチュートリアルがあります。
参考:https://www.tensorflow.org/tutorials/deep_cnn
このチュートリアルでは、CIFAR-10の画像分類を行っています。
そこで、この記事では、チュートリアルで解説されているプログラムを動かす方法を説明します!
スクリプトをダウンロードする
まずは、以下のページから、必要なファイルをダウンロードします。
参考:https://github.com/tensorflow/models/tree/master/tutorials/image/cifar10
ダウンロードするファイルは、以下の4つです。
- cifar10.py
- cifar10_eval.py
- cifar10_input.py
- cifar10_train.py
この4つのファイルを同じフォルダに保存します。
任意のフォルダに保存すれば大丈夫ですので、ここでは「D:\TensorFlow\CNN」フォルダに保存しました。
ちなみに、公式のチュートリアルでは、cifar10_multi_gpu_train.pyもダウンロードするように指示されていますが、これは複数のGPUを使用しているパソコン用のスクリプトです。
このcifar10_multi_gpu_train.pyを、cifar10_train.pyの代わりに実行すると、学習が高速に進みます。
私も試してみましたが、GPUが1つしかないのでcifar10_train.pyと同じ程度の学習時間がかかりそうでした。
学習する
プログラムの準備ができたら、TensorFlowをインストールした環境で機械学習を実行してみましょう。
ここでは、Anaconda Navigatorを起動し、GPU版TensorFlowをインストールしたPython環境を起動して、「D:\TensorFlow\RNN」フォルダに保存したcifar10_train.pyを実行する操作を説明します。
(1)Anaconda Navigatorを起動します。
(2)「Environment」をクリック後、「tensorflow-gpu」をクリックし、「」をクリックして、「Open Terminal」をクリックします。
(3)「D:」と入力し、Enterキーを押します。
(4)「cd TensorFlow\CNN」と入力し、Enterキーを押します。
(5)「python cifar10_train.py」と入力し、Enterキーを押します。
実行中は以下のような画面が表示されます。
「step xxxxx」の部分が、1000000(100万)になると終了ですので、終了するまで待ちます。
手元のパソコン(Intel Core i5-4430+NVIDIA GeForce GTX 1050 Ti)では、約8時間かかりました。
公式チュートリアルの記事と比較して、10倍くらいの速さで処理できているので、あちらでは80時間くらいかかるということですね…。
(5)学習が終了したら、「python cifar10_eval.py」と入力し、Enterキーを押します。
精度が表示されます。
今回は86.6%の精度が出ました。
MNISTデータの学習では、もっと短い時間でもっと高い精度がでていましたので、CIFAR-10の学習は難しいと言うことがわかりますね。
MNISTデータの学習については、以下の記事でまとめていますので、ぜひ比較してみてください。
まとめ
今回は、CIFAR-10と呼ばれる画像セットを紹介し、TensorFlowの公式チュートリアルの記事に従って、CIFAR-10を学習してみました。
MNISTデータと同じ10クラス分類なのですが、モデルが複雑なため学習時間が圧倒的に長くなります。
精度についても、MNISTデータの学習では90~99%になっていましたが、CIFAR-10の学習では86.6%と、さほど精度が高くない印象を受けました。
同じCNNでも、学習内容によってモデルが変わり、学習時間も精度も大きく変化することがわかります。
次は、あなたが必要な画像セットを作成して、CNNで学習させてみてはいかがでしょうか?
面白い結果が出たら教えてくださいね!