Deep Learning用の学習データとしては、MNISTの手書きの数字がよく使われますが、そればかりやっていても面白くないので、自分で撮影した画像を使った学習データを作成してみようと思います。
Neural Network Consoleでは、集めた画像から学習データ用のフォーマットを作るのは、Neural Network Consoleがやってくれるので、ユーザーがやるのは画像データを集めるだけ。
今回はInterfaceの8月号に乗っていた きのこの山 と たけのこの里 の画像をChainerを使って分類する!
という記事の内容をマネして、きのこの山 と たけのこの里 の画像をNeural Network Consoleで分類してみたいと思います。
この記事によると、それぞれの画像を約40枚撮影し、さらに画像の回転、上下、左右の反転を行うことで、画像の枚数を水増しすると書いてありましたが、画像をそれぞれ40枚(計80枚)撮影するのも大変なので、C#でWebカメラで撮影した画像から、きのこの山 や たけのこの里 の写っている部分を切り出し、その画像を90°、180°、270°回転したものと、上下、左右を反転した画像の計6枚をマウスの1クリックでファイルに保存するプログラムを、まずは作成しました。
※このプログラムはこちら↓のページで公開しています。
このプログラムを使って、きのこの山 と たけのこの里 の画像をそれぞれ約1500枚の画像を撮影しました。
撮影した画像は、それぞれの分類ごとのフォルダに分けて保存しておきます。
次にNeural Network ConsoleでHomeのDATASETを選択し、+Create Datasetを選択します。
次に学習データの設定を行います。
Source Dir | 分類ごとのフォルダに分けて画像が保存されているフォルダを指定します。 |
Output Dir | 学習データを出力するフォルダを指定します。 (最初は空のフォルダ) |
Shaping Mode | 元の画像と出力する画像の縦横比が異なるときの処理方法を指定します。
●Triming 画像の幅もしくは高さの短い方を出力サイズに合わせて、余計な部分をカットする ●Radding 画像の幅もしくは高さの長い方を出力サイズに合わせて、余白部分を黒(0)で埋める |
Output Color Ch | ●1(モノクロ画像)
●3(カラー画像) |
Output Width | 出力画像の幅 |
Shufle the order of the data | 画像データをシャッフルして出力します。 |
Output File 1 | 学習に用いるデータセットのファイル名(*.csv)を指定します。 |
Output File 2 | 学習データの評価用に用いるデータセットのファイル名(*.csv)を指定します。 |
Ratio | 学習用:評価用に用いる画像の枚数の割合を指定します。
(足して100にすること) |
上記の値を設定し、 Apply ボタンをクリックします。
すると、出力フォルダにリサイズされた画像とデータセットのCSVファイルが作成されます。
CSVファイルの中身はこんな↓感じに、学習用の画像画像ファイル名と正解のラベル(今回は0がきのこの山、1がたけのこの里)のペアが各行ごとに記載されいます。
これでデータセットの作成は完了です。
試しに、このデータセットを使って学習と評価を行ってみたいと思います。
今回は、一番シンプルな4と9の分類のサンプルプロジェクト(01_logistic_regression)を使って、データセットの部分を差し替えてみたいと思います。
まず、サンプルプロジェクト(01_logistic_regression)を開いて、別の名前でプロジェクトを保存します。
保存は右上の Save as より行います。
プロジェクトのDATASETの部分クリックします。
すると、作成したデータセットが読み込まれます。
次にデータセットがもともとの4と9の識別用のデータセットが設定されたままの状態なので、今回作成したデータセットに変更します。
左側に表示されているTraining と Validation の部分を選択して、右上のOpen datasetをクリックします。
今回はTraining に train.csv、Validationにtest.csv ファイルを指定しています。
これで、Datasetの設定も完了。
ニューラルネットワークの部分は一か所だけ変更しています。
手書き文字の4と9の分類の時は、モノクロ画像だったので、入力(Input)のサイズが
1,28,28
でしたが、今回はカラー画像なので
3,28,28
と変更しました。
続いて、Train の下の▶マークをクリックして、データの学習を行った結果がこちら↓
次にEvalutionの下の▶マークをクリックして、評価を行った結果がこちら↓
ただ、データセットを入れ替えて試してみただけなのに、分類の精度(Accuracy)が99.85%と表示されています。
まだ、Deep Learningをそんなに理解できていないのに、なんとなくで、これだけの精度が出てしまうのは、やっぱりNeural Network Consoleはすごい!!
適当にやっても、すぐに結果がわかる(見える)のは、大事だな~
と、つくづく関心させられてしまいます。
とは言っても、まだ、一つ一つの言葉が理解できていないので、Neural Network Consoleを触りながら勉強していこうと思っています。
※撮影に使用した きのこの山 と たけのこの里 は私がおいしく頂きました。
ちなみに、私はたけのこの里の方が好きです。
←Deep Learningへ戻る
コメント
SNNCのお勉強中です。この記事は大変参考になりました。学習始めたばかりなのでこれくらい簡便なほうが助かります。この文書を参考に犬と猫の画像分類やってみようと思います 取り急ぎ御礼申し上げます
おかもとさん、コメント頂きありがとうございます。
私自身もPythonがあまり分かっていない状態からDeepLearningを勉強していたのですが、ソニーのNeural Network Consoleはネットワークの構築に集中できて直感的なので、Neural Network Consoleに助けられた感がありますね。