NeuralNetworkConsole

Neural Network Console Challengeに参加してみた!【Part2】

Neural Network Console Challenge_2

スポンサーリンク

こんにちは、 ぴろ です。

Neural Network Console Challenge(NNC Challenge)というAIで写真素材を画像分類するコンテストの2作品目の記事なります。

1作品目の記事についてはNeural Network Console Challengeに参加してみた!【 Part1】を見て頂ければと思います。

本コンテストを簡単に説明すると、提供された画像をNeural Network Console(NNC)を使用して画像分類モデルを作成するコンテスト形式のオンラインイベントになります。

細かい説明はPart1に任せるとして、さっそくやってみます。

前回と違う点は以下になります。

  • テーマは「写真を撮影したカメラメーカーを分類する」
  • ネットワークは単純なCNNとResnet-50で検証を行う
  • GPUは利用枠ではなくローカルで用意したGPU

 

スポンサーリンク

NNC Charangeのテーマの選定

NNC Challengeに参加したらまずはテーマを決めていきます。

本コンテストでは以下の4種類のテーマから選んで新たな画像カテゴリ分類を考えます。

  • 『人物画像をNNCで学習させ新しいオノマトペ(擬音語/擬声語/擬態語)の画像カテゴリ分類を作り出す』
    例)ニコニコ/バチバチ/ゴリゴリ
  • 『画像内人物をNNCで学習させ画角/焦点距離による画像分類を作り出す』
    例)正面向き/バストアップ/全身/背面
  • 『NNCで画像を学習し人の感情によって分類』
    例)嬉しい/悲しい/恥ずかしい
  • 上記以外のチャレンジテーマを自由に設定しての応募も可
    ※ただし画像分類のテーマに限る

冒頭でも記載しましたが、今回のテーマは写真を撮影したカメラメーカーを分類する」にしたいと思います。

このテーマにした理由は次の2つです。

  • 前回は「写真内の人物がいる場所が屋内か屋外かを分類する」という2値分類モデルなので3種以上にチャレンジしたい
  • アノテーションに時間をかけたくないため、すぐに分類できるExif情報を使用する

もしこれができれば、ある種のサービスとして、好みの写真からその人にあったカメラメーカーを診断するというサービスができそうですね♪

Exif情報とは、カメラで撮影した画像データに、撮影条件に関する情報(シャッター速度や焦点距離など)を保存する画像ファイル形式の規格です。

NNCで使用する学習・評価用データの準備

準備

アノテーションの実施

アノテーション(画像のタグ付け分類)を行います。

カメラのメーカーで分類したいので、まずはメーカーの情報を表示します。

画像ファイルがあるフォルダを詳細表示にして、列名のところを右クリックして[その他]をクリックします。

NeuralNetworkConsole2

少しスクロールして[カメラの製造元]にチェックをつけてOKをクリックします。

NeuralNetworkConsole2

[カメラの製造元]の列が追加されました。

NeuralNetworkConsole2

あとはメーカーごとにフォルダを分けていきます。

メーカーと画像枚数は以下になりました。

メーカー
枚数 使用可否
Canon
6551
Sony
847
NIKON
645
FUJIFILM
567
Leica
405
DJI
3 ×
不明
982 ×

DJIは枚数が少なすぎるので対象外とします。

メーカーが不明の画像も他のラベルの精度に影響を与えるかもしれないので対象外とします。

そのため今回は5種類のメーカーを分類するモデルを作成します。

アノテーションを行い、各メーカーの画像サンプルは以下のようになりました。

Canon

Sony

NIKON

FUJIFILM

NeuralNetworkConsole2

Leica

NeuralNetworkConsole2

学習用データ提供:PIXTA

正直どの写真がどのメーカーなのかの見分けがつきませんが、果たしてAIは見分けてくれるのか、いざ検証です。

データセットの用意

アノテーションが完了したらツールを使用してデータセットを作成します。

学習用と評価用の割合は7:3で分類します。

前回は1000枚1セットとしていましたが、今回は学習用はひとまとめにします。

学習用は6310枚、評価用は2705枚になりました。

NeuralNetworkConsole2

NNCでニューラルネットワーク(アルゴリズム)を作成

今回は2種類のモデルを作成します。

Part1と同じ単純なCNNと、Resnet-50のネットワークの2種類のニューラルネットワークを作成してどちらが高い精度なのか検証をしようと思います。

単純なCNNの作成

Part1と同様、単純なCNNは以下の動画を参考にして作成しました。

作成したネットワークは以下になりました。

NeuralNetworkConsole2

Part1のニューラルネットワークと違う点は以下になります。

  • 一番最後のAffineレイヤの[OutShape]を5に変更(5種類の分類モデルのため)
  • 活性化関数を[Sigmoid]から[Softmax]に変更
  • ロス関数を[BinaryCrossEntropy]から[CategoricalCrossEntropy]に変更

活性化関数とロス関数の関係は以下がとても参考になります。

Resnet-50の作成

Neural Network Console クラウド版スターターガイド-画像分類編-(PDF)を参考にして作成しました。

クラウド版といえど操作方法はWindows版と大差ありません。

作成したネットワークは以下になりました。

参考にした資料と違う点は一番最後のAffineレイヤの[OutShape]を5にしています。

NeuralNetworkConsole2

学習・評価の実施

学習

ニューラルネットワークの作成とデータセットを設定したら、いよいよ学習・評価を行います。

バッチサイズの設定

まずはバッチサイズを64⇒16に変更行います。

理由はRednet-50は層が深いので、バッチサイズがデフォルトの64だとメモリ使用量が大きすぎて以下のようなメモリエラーで出るためです。

RuntimeError: memory error in nbla::Memory::alloc
C:\ci\builds\N8z3XsS_\0\nnabla\builders\all\nnabla\src\nbla\memory\memory.cpp:38
Failed `this->alloc_impl()`: class nbla::CudaMemory allocation failed.

 

[CONFIG]タブをクリックして[Batch Size]を16に変更すればOKです。

単純なCNNではメモリ不足は起きませんが、条件はなるべく同じにしておきたいので、単純なCNNとResnetの両方で設定しておきます。

NeuralNetworkConsole2

学習の開始

構造自動探索機能を使って半日ほど学習させ、一番性能の良さそうなモデルで評価を行います。

単純なCNN

NeuralNetworkConsole2

Resnet-50

NeuralNetworkConsole2

結果としては[TRAINING ERROR]はResnet-50の方が小さいですが、単純CNNの方がなだらかに誤差が小さくなっているように見えます。

これで評価をしてみたらどうなるのでしょうか。

単純なCNN

NeuralNetworkConsole2

Resnet-50

NeuralNetworkConsole2 精度(Accuracy)を見てみると、単純なCNNは90%、Resne-50は81%で10%近く精度に差が出ましたね。

単純に深い層なら精度が上がるというわけではないんですね。

今回は5種類の分類だから深い層じゃなくても単純なCNNの方が適していたということでしょうか。

私自身の理解が及ばないので、まだまだ勉強が必要ですね。

Neural Network Console Challengeへの参加まとめ

本コンテストに参加して2つのテーマでモデルを作成しました。

私はまだプログラミングでディープラーニングを実装できるスキルもなく、初めてのGUIツールの利用でしたが公式Youtubeチャンネルのおかげでスムーズに利用することができました。

使い方だけでなくディープラーニングに基礎知識も分かりやすく解説してくれているがとても良かったです。

プログラミングで実装できなくても、Neural Network Consoleがあればエポック数やバッチサイズを変えたら?活性化関数を別にしてみようか?などといった検証が簡単にできるので、よりディープラーニング関する知識が身に付きやすいツールだと言えるのではないでしょうか。

もちろんこれを機に理解を深めてプログラミングでも実装できるように勉強していきます。

Neural Network Console Challenge_1
Neural Network Console Challengeに参加してみた!【Part1】こんにちは、 ぴろ です。 Neural Network Console Challenge(NNC Challenge)というA...
Neural Network Console 使用方法
ディープラーニング入門!Neural Network Consoleを使ってみたので使用方法を解説こんにちは。ぴろ です。 Sonyが提供しているNeural Network Consoleをご存知でしょうか? Pytho...

スポンサーリンク