"BOKU"のITな日常

BOKUが勉強したり、考えたことを頭の整理を兼ねてまとめてます。

CNNで3カテゴリ分類(モノクロ画像とカラー画像の違い)/Neural Network Consoleの使い方

今回は、カラー画像データを使ってCNN(LeNet)をやります。 

カラー画像データは、カルフォルニア工科大学が機械学習用に配布してくれている「Computational Vision At CALTECH」を使います。 

f:id:arakan_no_boku:20190326212937j:plain


モノクロ画像とカラー画像の違い

 

今までは画像の場合「MNIST(手書き数字画像)」を使ってました。

見てわかる通り、MNISTは白黒の「モノクロ画像」です。

f:id:arakan_no_boku:20190328192441j:plain

でも、今回使うのは「カラー画像」です。

f:id:arakan_no_boku:20190328192651j:plain

モノクロとカラーでは「チャンネル数」が違います。

モノクロ(グレースケール)は白と黒の濃淡だけでよいので、1チャンネルで表現できますが、カラーだとRGB(RedGreenBlue)の組合せで色を表現する必要があるので、3チャンネル分必要だ・・というわけです。

www.cg-ya.net

ですから、モノクロとカラーだと、同じサイズでも情報量は3倍になりますから、学習するにせよ、評価するにせよ、より複雑度が増して時間もかかるようになるというわけですね。
 

 

CALTECH画像データを取得する

 

さて。

まずカラー画像データを取得します。

カルフォルニア工科大学の「Computational Vision At CALTECH」の画像データ・セットは以下のサイト(画像にリンクをはってます)から取得できます。

f:id:arakan_no_boku:20171102201127j:plain

こちらのページには、ホント色々な画像データ・セットがあるんですけど、今回は一番手頃な「caltech101」を選びます。

f:id:arakan_no_boku:20171102201555j:plain

 

ここから「101_ObjectCategories.tar.gz (131Mbytes)」をDownloadして解凍します。 

101種類のカテゴリに分類されたカラー画像データがはいってます。 

 

適当な場所にフォルダを作って、ファイルをその下にコピーします。 

その時にサブフォルダの名前は、それは「0」「1」「2」等に修正しておきます。 

注意点としては、画像を置いたフォルダに他の余分なファイルを置かないことです。 

これでデータの準備は終わりです。

以前は、この段階でリサイズしておく必要があったのですが、今は、「Create Object」と同時でリサイズできるようになってますから。

 

新規DATASETの作成

 

ニューラルネットワークコンソールを起動します。 

最初にDATASETの登録をしておきます。 

Create Objectボタンを押します。

f:id:arakan_no_boku:20171102222537j:plain

登録方法は、以下の記事で一回紹介していますので、こちらを参照ください。

arakan-pgm-ai.hatenablog.com

今回はこんな感じで設定しました。

f:id:arakan_no_boku:20190329233131j:plain

元画像のサイズがバラバラなので、ReSizeにチェックは必須です。

あと、カラーなので、OutputChannelは、3(RGB)です。 

ここは絶対間違えないようにします。

Applyを押して、しばらく待てば、新しいDATASETができます。

f:id:arakan_no_boku:20171102224832j:plain

 

LeNetプロジェクトを開く

 

さて、後はサンプルプロジェクトのLeNet.sdcproj を開いて、別名で保存し、ネットワークをこのDATASETに置き換えて、レイヤーを組み替えていきます。

 

CALTECHデータを使えるように変更する 

 

とはいえ、実は変更するところはあまりないです。 

まず、DATASETは上で作成したものに差し替えます。

f:id:arakan_no_boku:20171102234731j:plain

 

INPUTのサイズをカラー画像にあわせて変更する

 

EDITタブでINPUTの設定を変更します。

f:id:arakan_no_boku:20171102235039j:plain

 

1,28,28がデフォルトなので、カラーの128x128画像にあわせて、「3,128,128」と打ち替えるだけです。

 

3つのカテゴリ分類に絞る

 

後は、今回は3つのカテゴリのみチョイスしているので、softmaxの直前のAffineのOUTPUTを「3」にします。

f:id:arakan_no_boku:20171102235438j:plain

 

変更はこれだけです。 

後は、自動計算で設定されるのを、そのまま使います。 

 

Configタブ

 

最後にCOFIGタブで、BatchSizeとepocheを修正します。

f:id:arakan_no_boku:20171102235712j:plain

 

Caltechの画像は1カテゴリあたり、40~60枚程度なので、バッチサイズをデフォルトの64のままだとエラーで学習されません。 

とりあえず、16とか8とか小さな数にしておく必要があります。 

あと、データ枚数が少ないので、せめてepoche数だけでも100くらいに増やしておきます。 

これで、上書き保存します。 

 

最終的なネットワークモデル

 

最終的なネットワークモデルはこんな感じです。

f:id:arakan_no_boku:20171103000143j:plain

 

学習の実行

 

学習した結果としては、こんな感じです。

f:id:arakan_no_boku:20190329233600j:plain

うーん。 

微妙。 

 

評価の実行

 

続けて、評価を行います。

f:id:arakan_no_boku:20190329233637j:plain

accuracy(正確さ)が82.85%・・・。

微妙です。

 

さすがに学習データが少なすぎるな

 

学習データが非常に少ないので予想はしてましたが。

なんともはや・・な結果です。 

さすがに、フルカラーの画像データ・セットを学習するのに、40枚程度のサンプル数では全く足りません。 

モノクロの手書き数字のMNISTですら、10種類で約60000枚学習させて、やっと98%以上の数字がだせるくらいですからね。 

仕方ないですね。 

とりあえず、今回はこんなところです。 

次は、少ない画像データを水増しして、もう少し精度をあげていくようにしてみます。

ではでは。 

追記

やってみたのがこちらです。

arakan-pgm-ai.hatenablog.com

 

おまけ:ImageNetのデータ取得でめげたこと

 

本当は、ResNetでやろうと思ってました。

ImageNetの画像をDATASETに使うResNetのサンプルです。

だから、まずImageNet(http://www.image-net.org/) からデータをダウンロードして、DATASETを作る必要があります。 

ちなみに、そのまま動かすと、こんなエラーがでて一瞬で終わります(^^;)。

f:id:arakan_no_boku:20171101205846j:plain

ユーザ登録してダウンロードをしようとしたのですが。

なんと、ダウンロードの承認を得るのに5日間程度かかりそうだ・・というメッセージが返ってきました。 

こんなメッセージです。

We are reviewing your request. When we approve your request, we will notify you by email. You should expect to hear from us in 5 work days.  

つまり、「確認して承認したらメールで連絡する。5営業日以内に連絡が来ることを期待してください」です。 

ということで、承認メールを待ってたのですが、結局、承認メールは届きません。

却下されたのか、スパムフィルターで承認メールが削除されてしまったのか。

うーーん。

却下された可能性も高いですね。

なので、あきらめた・・というわけです。