目次
- はじめに
- モノクロ画像とカラー画像
- CALTECH画像データを取得する
- Neural Network Consoleでの動作確認
- さすがに学習データが少なすぎるな
- 追記
- おまけ:ImageNetのデータ取得でめげたこと
はじめに
この記事は2017年のリライトです。
説明にNeural Network Consoleの画面を使っていますが、Ver1.00のものです。
そのため、最新バージョンとはデザインも機能も異なります。
ご容赦ください。
モノクロ画像とカラー画像
カラー画像データを使ってCNN(LeNet)をやります。
カラー画像データは、カルフォルニア工科大学が機械学習用に配布してくれている「Computational Vision At CALTECH」を使います。
今までは画像データに「MNIST(手書き数字画像)」を使ってました。
見てわかる通り、MNISTは白黒の「モノクロ画像」です。
でも、今回使うのは「カラー画像」です。
モノクロとカラーの画像データで大きく違うのは「チャンネル数」です。
チャンネルとは同じ対象物に対する異なる周波数の画像のことです。
異なる周波数とは赤(R)緑(G)青(B)のように色の違いを示します。
モノクロ(グレースケール)は白と黒の濃淡だけで表現することが可能ですが、カラーだと赤緑青の三原色の組み合わせで表現する必要があります。
つまり、カラー画像は「Rチェンネル」「Gチャンネル」「Bチャンネル」という、3チャンネルの画像が必要になるというわけです。
ですから。
モノクロとカラーだと、同じサイズでも情報量は3倍になります。
学習するにせよ、評価するにせよ、より複雑度が増して時間もかかるようになります。
CALTECH画像データを取得する
さて。
まずカラー画像データを取得します。
カルフォルニア工科大学の「Computational Vision At CALTECH」の画像データ・セットは以下のサイト(画像にリンクをはってます)から取得できます。
こちらのページには、ホント色々な画像データ・セットがあるんですけど、今回は一番手頃な「caltech101」を選びます。
ここから「101_ObjectCategories.tar.gz (131Mbytes)」をDownloadして解凍します。
101種類のカテゴリに分類されたカラー画像データがはいってます。
Neural Network Consoleでの動作確認
適当な場所にフォルダを作って、ファイルをその下にコピーします。
その時にサブフォルダの名前は、それは「0」「1」「2」等に修正しておきます。
注意点としては、画像を置いたフォルダに他の余分なファイルを置かないことです。
これでデータの準備は終わりです。
以前は、この段階でリサイズしておく必要があったのですが、今は、「Create Object」と同時でリサイズできるようになってますから。
新規DATASETの作成
ニューラルネットワークコンソールを起動します。
最初にDATASETの登録をしておきます。
Create Objectボタンを押します。
今回はこんな感じで設定しました。
元画像のサイズがバラバラなので、ReSizeにチェックは必須です。
あと、カラーなので、OutputChannelは、3(RGB)です。
ここは絶対間違えないようにします。
Applyを押して、しばらく待てば、新しいDATASETができます。
さて、後はサンプルプロジェクトのLeNet.sdcproj を開いて、別名で保存し、ネットワークをこのDATASETに置き換えて、レイヤーを組み替えていきます。
CALTECHデータを使えるように変更する
とはいえ、実は変更するところはあまりないです。
まず、DATASETは上で作成したものに差し替えます。
IPUTのサイズをカラー画像にあわせて変更する
EDITタブでINPUTの設定を変更します。
1,28,28がデフォルトなので、カラーの128x128画像にあわせて、「3,128,128」と打ち替えるだけです。
3つのカテゴリ分類に絞る
後は、今回は3つのカテゴリのみチョイスしているので、softmaxの直前のAffineのOUTPUTを「3」にします。
変更はこれだけです。
後は、自動計算で設定されるのを、そのまま使います。
Configタブ
最後にCOFIGタブで、BatchSizeとepocheを修正します。
Caltechの画像は1カテゴリあたり、40~60枚程度なので、バッチサイズをデフォルトの64のままだとエラーで学習されません。
とりあえず、16とか8とか小さな数にしておく必要があります。
あと、データ枚数が少ないので、せめてepoche数だけでも100くらいに増やしておきます。
これで、上書き保存します。
最終的なネットワークモデル
最終的なネットワークモデルはこんな感じです。
学習の実行
学習した結果としては、こんな感じです。
うーん。
微妙。
評価の実行
続けて、評価を行います。
accuracy(正確さ)が82.85%・・・。
微妙です。
さすがに学習データが少なすぎるな
学習データが非常に少ないので予想はしてましたが。
なんともはや・・な結果です。
さすがに、フルカラーの画像データ・セットを学習するのに、40枚程度のサンプル数では全く足りません。
モノクロの手書き数字のMNISTですら、10種類で約60000枚学習させて、やっと98%以上の数字がだせるくらいですからね。
仕方ないですね。
とりあえず、今回はこんなところです。
次は、少ない画像データを水増しして、もう少し精度をあげていくようにしてみます。
ではでは。
追記
やってみたのがこちらです。
おまけ:ImageNetのデータ取得でめげたこと
本当は、ResNetでやろうと思ってました。
ImageNetの画像をDATASETに使うResNetのサンプルです。
だから、まずImageNet(http://www.image-net.org/) からデータをダウンロードして、DATASETを作る必要があります。
ちなみに、そのまま動かすと、こんなエラーがでて一瞬で終わります(^^;)。
ユーザ登録してダウンロードをしようとしたのですが。
なんと、ダウンロードの承認を得るのに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営業日以内に連絡が来ることを期待してください」です。
ということで、承認メールを待ってたのですが、結局、承認メールは届きません。
却下されたのか、スパムフィルターで承認メールが削除されてしまったのか。
うーーん。
却下された可能性も高いですね。
なので、あきらめた・・というわけです。