ハードウェア技術者のスキルアップ日誌

某家電メーカーの技術者がスキルアップのために勉強したことを記録するブログです

Google Colaboratoryを使ってディープラーニングで画像認識をやってみた

ディープラーニングを実際に動かすやり方を学ぶ方法をいろいろと調べていたところ、
からあげさんの以下のサイトを見つけました。有料ですが500円だけでしたので購入し、試してみました。

note.mu

 

Google ColaboratoryというGoogleが提供しているサービスを使い、ディープラーニングを実装し、学習、推論まで行うことができました。今回はその結果を報告します。

 

Google Colaboratoryとは?

Google Colaboratory

https://colab.research.google.com/notebooks/welcome.ipynb?hl=ja

 ・クラウド上で実行されるJupytor Notebook環境
 ・設定不要で無料で利用できる
 ・GPUも使用可能 学習の時間短縮ができる

 

目標

入力された画像に対して、カメラ、犬、猫という3クラス識別するモデルを学習させ、そのモデルを使って実際に推論を実施する


手順

①教師データ収集
スクレイピングという方法を使い、インターネットから「カメラ」、「犬」、「猫」のキーワードで検索した画像を収集する
今回は1クラス120枚を収集
 ※以下は参考サイト

qiita.com


②収集した画像にラベル(カメラ、犬、猫)をつける
③画像をN増しする
 左右反転、ノイズ付加などを行い、1枚の画像から複数の画像を生成する
 用意した画像は1クラス2000枚
④作成した教師データを使い、学習を行う
 ネットワークモデルは以下の通り
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
conv2d_13 (Conv2D) (None, 64, 64, 32) 896
_________________________________________________________________
activation_19 (Activation) (None, 64, 64, 32) 0
_________________________________________________________________
conv2d_14 (Conv2D) (None, 62, 62, 32) 9248
_________________________________________________________________
activation_20 (Activation) (None, 62, 62, 32) 0
_________________________________________________________________
max_pooling2d_7 (MaxPooling2 (None, 31, 31, 32) 0
_________________________________________________________________
dropout_10 (Dropout) (None, 31, 31, 32) 0
_________________________________________________________________
conv2d_15 (Conv2D) (None, 31, 31, 64) 18496
_________________________________________________________________
activation_21 (Activation) (None, 31, 31, 64) 0
_________________________________________________________________
conv2d_16 (Conv2D) (None, 29, 29, 64) 36928
_________________________________________________________________
activation_22 (Activation) (None, 29, 29, 64) 0
_________________________________________________________________
max_pooling2d_8 (MaxPooling2 (None, 9, 9, 64) 0
_________________________________________________________________
dropout_11 (Dropout) (None, 9, 9, 64) 0
_________________________________________________________________
flatten_4 (Flatten) (None, 5184) 0
_________________________________________________________________
dense_7 (Dense) (None, 512) 2654720
_________________________________________________________________
activation_23 (Activation) (None, 512) 0
_________________________________________________________________
dropout_12 (Dropout) (None, 512) 0
_________________________________________________________________
dense_8 (Dense) (None, 3) 1539
_________________________________________________________________
activation_24 (Activation) (None, 3) 0
=================================================================
Total params: 2,721,827
Trainable params: 2,721,827
Non-trainable params: 0

 また、ハイパーパラメータは以下の通り
   # 学習率
    LEARNING_RATE = 0.001
   # バッチサイズ
    BATCH_SIZE = 5
   # エポック(世代数)
    EPOCHS = 60(デフォルト100から変更)
⑤学習したモデルに新たな画像データを入力し、正しく推論されるかを確認する


結果

学習時の教師データ、テストデータに対する正解率、エラー率の遷移を示します。

f:id:masashi_k:20190216021616p:plain   f:id:masashi_k:20190216021643p:plain


acc, lossの方が教師データに対する精度、エラー率、val_acc, val_lossの方がテストデータに対する精度、エラー率です。98-99%の正解率を実現できています。


このモデルに以下の画像を入力するとこのように正しくカメラと判別できました。

  f:id:masashi_k:20190216022159p:plain

まとめ、感想

GPUを使用しても学習には数時間かかりました。
途中ネット回線が切れて学習がやり直しになるなど、クラウドでのデメリットも経験。
しかし、チュートリアルの通りに実施することで、高い正解率の画像識別ができるモデルを作成することができました。

同様のやり方をすればいろいろなものを認識するモデルを作ることができますね。
イデアを出して何か別のものも作ってみたいと思っています。

現段階はサイトに記載されているソースコードをほぼそのまま実行しただけで各コードの意味はよくわかっていませんので、今後の応用のためにもソースコードを解読していく予定です。その結果もまたブログに上げたいと思います。