アラカン"BOKU"のITな日常

文系システムエンジニアの”BOKU”が勉強したこと、経験したこと、日々思うことを書いてます。

オリジナル画像で新規データ・セットを追加するやり方:使い方9/ニューラルネットワークコンソール

オリジナルの学習・評価用画像を使って、新規データ・セットを作成します。 

今回利用する画像データは、自作の「画像データ大量生成ツール」で作ったものです。 

この「画像データ大量生成ツール」のダウンロード場所や仕組み(VBAソースコード含む)と、使い方の解説はこちらに書いてます。

arakan-pgm-ai.hatenablog.com

 

ただ、画像の準備を簡単にするために上記を使っていますが、別に用意できるなら、それを使っても手順は同じです。  

2017/11/30追記

例えば、こちらの記事で利用している「Caltech」の画像データを使うとか。

arakan-pgm-ai.hatenablog.com

 

別の画像データを使う場合は適宜読み替えてください。 

2017/12/01追記

>以降の説明の画像は、Version1.00のものを使ってます。

>Version1.10で一部アイコンのデザインが変更になっています。

>ただ、見ればわかる範囲と判断して画面の貼り替えはしていません。 

 

画像データの取得

 

こちらで用意したオリジナル画像を使うときは、GitHubから画像データをダウンロードします。

github.com

 

ZIPファイルでダウンロードしてください。 

今回用意した画像データはこんな感じにアルファベット1文字を、様々なフォントと文字サイズと場所でバリエーションを作ったものです。

f:id:arakan_no_boku:20170902223040j:plain

 この「A,a」なら「0」、「B,b」なら「1」を正解として、フォルダを作ってます。 

フォルダ名とかは変更しないでください。

 

画像データを配置するルール

 

ニューラルネットワークコンソールの画像データは、以下のルールに従って格納する必要があります。

  • フォルダ毎に分類されていないといけない。
  • フォルダ名が正解ラベルと一致していないといけない。
  • フォルダ名と正解ラベルは、0,1,2・・等の数字にしておく

 ようするに、ニューラルネットワークコンソールの画像データは、正解ラベル(例えば、0とか1とか)の名前にしたフォルダの下に、サイズを揃えた画像データを置いておけば良いということです。 

自分で画像を用意できる方は、そのようにして、以下を読み替えてもらえば良いと思いますが、とりあえず、上記ダウンロードデータをベースに説明は続けます。  

さて、ダウンロードしたファイルを解凍して、適当なフォルダに置きます。 

このフォルダはあくまでワーク用の一時フォルダです。 

今回は、c:\tmp\bokudata というフォルダを作って、そこに置きました。

f:id:arakan_no_boku:20170902232400j:plain

ここで、気をつけないといけないことがあります。 

・このフォルダに他のファイルをおかないこと

・ファイル名やフォルダ名に全角文字を含めないこと

です。 

おいても、DATASET作成時にはエラーにはならなくても、学習や評価の実行時に原因不明としか見えないエラーで苦しむことになります。 

 

新規データセットを生成する場所の準備

 

さっきのフォルダは作業用です。 

今度は、DATASETを格納する「本番用」のフォルダを作ります。 

ここで注意するのは。 

本番用のフォルダにファイルをコピーするのは、ニューラルネットワークコンソールにまかせる必要がある

ということです。  

今回は、{ニューラルネットワークコンソールのインストールフォルダ}\samples\sample_dataset フォルダの下に適当なフォルダを作ります。 

今回は、「bokudata」にしました。

 

ニューラルネットワークコンソールで新規データ・セット作成

 

ニューラルネットワークコンソールを立ち上げます。

f:id:arakan_no_boku:20170902223807j:plain

 そして、DATASETを開き、「+ Create Dataset」ボタンを押します。 

ここで必要な項目を入力します。

f:id:arakan_no_boku:20170902233244j:plain

 簡単に解説しておきます。 

Source Dir

 :ダウンロードしたデータを置いたフォルダを指定します。

 :今回の場合、c:\tmp\bokudata です。


Output Dir

 :処理済のデータを出力するフォルダを指定します。

 :今回の場合、{インストールフォルダ}\samples\sample_dataset\bokudataです。


Shaping Mode

 :デフォルトのままで問題ないです。

 

Output Color Ch

 :今回はモノクロデータなので、「1」です。

 :カラー画像の場合は「3」に変更します。

 

Output Width

 :出力画像の横幅です。今回は「28✕28」ですから、28です。


Output Height

 :出力画像の縦幅です。今回は「28✕28」ですから、28です


Shuffle the order of the data

 :デフォルトのまま(ON)にします。シャッフルしてくれます。


File Name

 :作成するデータセットCSVのファイル名です。

 :後で識別しやすい名前に変更します。


Ratio (%)

 :ここで指定した比率で、学習用データとテスト用データに振り分けてくれます。

 :学習用 75 テスト用 25 くらいが適当じゃないですかね。

 :ここを変更する時は、合計100になるように注意します。

 

入力できたら、「Apply」ボタンを押します。 

しばらく、こんな感じの画面がでてきますけど、待ちます。

f:id:arakan_no_boku:20170902234759j:plain

 

処理が終わると、こんな感じでプレビューされます。

f:id:arakan_no_boku:20170902234844j:plain

 

テキストデータを扱う時には、パスと正解ラベルを書いたCSVデータを、自分で作らないとダメだったのですが、画像の場合は、そのファイルもニューラルネットワークコンソールが自動生成してくれます。 

ここまでで、データ・セットの作成手順は終わりです。 

以降は、追加したデータ・セットを新規プロジェクトで使って、ちゃんと学習・評価できるかを見ていきます。

 

新規プロジェクトで新規データ・セットを使う

 

まず、確認用のプロジェクトを作ります。 

動作確認するだけなら、すでに作成済のプロジェクトやサンプルプロジェクトのデータ・セットだけ差し替えるだけでも可能です。 

なんですけど、今回は新規に作ったものでしてみます。 

PROJECTを開いて、「New Project」ボタンを押します。

f:id:arakan_no_boku:20170902235819j:plain

 

以下の順番でレイヤーをドラッグ&ドロップして、Shift+クリックで線でつなぎます。

  1. input
  2. convolution
  3. ReLU
  4. MaxPooling
  5. convolution
  6. ReLU
  7. MaxPooling
  8.  Affine
  9. Sigmoid
  10. BinaryCrossEntropy

 

超シンプルなCNN(Convolution Neural Network)です。

f:id:arakan_no_boku:20170903000525j:plain

 

とりあえず、この辺で一回名前をつけて、プロジェクトを保存しておきます。

f:id:arakan_no_boku:20170903002748j:plain

 

名前は自分がわかりやすければ、なんでもいいので、適当につけて・・っと。 

今回は、保存先も{インストールフォルダ}の下の「.\samples\sample_project」フォルダの下に適当なフォルダをつくって置くことにしてます。 

さて、保存できたら、設定していきます。 

まず、DATASETタブを開きます。

f:id:arakan_no_boku:20170903001244j:plain

 

右上の「Open dataset」ボタンを押し、表示された選択肢の中から、TrainingとValidationにそれぞれ、さきほど生成時に入力したCSVファイル名をさがして割り当てていきます。

 

正しく割当できていれば、Trainingが2640件、validationが880件になっているはずです。

f:id:arakan_no_boku:20170903001651j:plain

 

 

続けて、各レイヤーを設定していきます。 

今回はわざとデフォルトの設定にあわせて、データを作成しているので変更はいりませんが、サイズ等を変更した場合は、画像にあわせて変更する必要があります。 

Convolutionレイヤーは2つとも、W.initializerを「NormalAffineHeForward」に変更しておきます。

f:id:arakan_no_boku:20170903002306j:plain

 

理由がわからない場合は、こちらの記事も見てください。

arakan-pgm-ai.hatenablog.com

 

次にAffineのOUTPUTを、デフォルトの100から1に変更します。

f:id:arakan_no_boku:20170903145454j:plain

 

これをせず、デフォルトの100のままでもエラーにはならないですけど、正確さが20%とか30%とかに落ちてしまったりします。

 

学習と評価をやってみる

 

この設定で学習をやってみます。

f:id:arakan_no_boku:20170903003648j:plain

 

何かいい感じのきれいな学習曲線になってます。

f:id:arakan_no_boku:20170903145950j:plain

 

続けて、評価もやってみます。

f:id:arakan_no_boku:20170903150102j:plain

 

99.2%!上出来です。

f:id:arakan_no_boku:20170903150133j:plain

 

まあ、MNISTと同じようなデータをアルファベットで作ってみた・・というだけなので、結果がこうなるのは当然なのですがね。 

ただ、作成した独自画像データ・セットが使えて、かつ、DATASETへの追加手順も間違ってはないようだということで、めでたし、めでたしです。 

 

2017/12/01追記

Version1.10で主にこの部分のアイコンのデザインが変わってます。

f:id:arakan_no_boku:20171130202351j:plain

 


次の記事

arakan-pgm-ai.hatenablog.com

  

ニューラルネットワークコンソールカテゴリの記事一覧はこちらです。

arakan-pgm-ai.hatenablog.com

 f:id:arakan_no_boku:20171115215731j:plain