SE_BOKUのまとめノート的ブログ

SE_BOKUが知ってること・勉強したこと・考えたことetc

CNNで分類するときのモノクロ画像とカラー画像の違い/ニューラルネットワーク

f:id:arakan_no_boku:20190326212937j:plain

目次

はじめに

この記事は2017年のリライトです。

説明にNeural Network Consoleの画面を使っていますが、Ver1.00のものです。

そのため、最新バージョンとはデザインも機能も異なります。

ご容赦ください。

モノクロ画像とカラー画像

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

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

今までは画像データに「MNIST(手書き数字画像)」を使ってました。

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

f:id:arakan_no_boku:20190328192441j:plain

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

f:id:arakan_no_boku:20190328192651j:plain

モノクロとカラーの画像データで大きく違うのは「チャンネル数」です。

チャンネルとは同じ対象物に対する異なる周波数の画像のことです。

異なる周波数とは赤(R)緑(G)青(B)のように色の違いを示します。

モノクロ(グレースケール)は白と黒の濃淡だけで表現することが可能ですが、カラーだと赤緑青の三原色の組み合わせで表現する必要があります。

つまり、カラー画像は「Rチェンネル」「Gチャンネル」「Bチャンネル」という、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種類のカテゴリに分類されたカラー画像データがはいってます。 

Neural Network Consoleでの動作確認

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

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

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

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

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

新規DATASETの作成

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

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

Create Objectボタンを押します。

f:id:arakan_no_boku:20171102222537j:plain

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

f:id:arakan_no_boku:20190329233131j:plain

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

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

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

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

f:id:arakan_no_boku:20171102224832j:plain

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

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

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

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

f:id:arakan_no_boku:20171102234731j:plain

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

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営業日以内に連絡が来ることを期待してください」です。 

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

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

うーーん。

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

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