Google Colaboratory上でKerasを使って画像認識をやってみた
はじめに
どうも、こじまるです。
前回Webスクレイピングのプログラムを作成していたら、AIを使った株価予測などもしてみたいなと思い、Google Colaboratoryを使ってみることにしました。今回は、Google Colaboratoryの利用方法とAIで画像認識をやってみたことについて記事にまとめております。
対象読者
- AI初心者の方
- Google Colaboratoryを使ってみたい方
- Kerasを使ってみたい方
この記事を見てわかること
- Google Colaboratoryの使い方
- Kerasでの画像認識の実装
Google Colaboratoryとは
Google Colaboratoryは、Googleアカウントを持っているユーザが無料で使用できるpythonの実行環境です。その環境では、機械学習を行う上で必須になってくる
- プログラムの実行環境
- GPUなどの資源
を無料で使用することができます。
個人で機械学習を行うための資源を用意しようと思った場合、NVIDIA(https://www.nvidia.com/ja-jp/)といったGPUを販売しているメーカーから購入する必要があるので、その実行環境が無料で手に入るというのは本当に凄いですね。
Google Colaboratoryの始め方
Google Colaboratoryは、Googleアカウントでログインし、サイト(https://colab.research.google.com/?hl=ja)にアクセスすることで始めることができます。まず、ノートブックを新規作成をクリックします。
新しいノートブックが作成されます。
pythonが実行できることを確認するために、Hello Worldを出力させてみます。スクリプトを入力し、エディタの左側の矢印ボタンを押下します。
スクリプトが実行され、Hello Worldが出力されました。
CIFAR-10 画像認識
CIFAR-10とは
CIFAR-10(CIFAR-10 and CIFAR-100 datasets)とは、画像認識などで使用されるデータセットになります。CIFAR-10のデータセットは、訓練データ : 50000枚、テストデータ : 10000枚で構成されており、下記のような10種類のクラスで構成されています。
実装
モデルの作成
今回はCNN(Convolutional Neural Network)を使用します。CNNとは、畳み込み層とプーリング層から構成されるNeural Networkになります。CNNに関しては詳細に説明しないので、必要であれば、下記のサイトを参考にしてください。
qiita.com
今回使用するネットワークは、Krizhevskyらの論文(https://dl.acm.org/doi/10.1145/3065386)で記載されていますネットワークを参考に作成しています。パラメータは筆者の経験と数回のチューニングを行った結果より決定しました。
Model: "sequential_1" _________________________________________________________________ Layer (type) Output Shape Param # ================================================================= conv2d_4 (Conv2D) (None, 30, 30, 32) 896 _________________________________________________________________ activation_7 (Activation) (None, 30, 30, 32) 0 _________________________________________________________________ max_pooling2d_2 (MaxPooling2 (None, 15, 15, 32) 0 _________________________________________________________________ conv2d_5 (Conv2D) (None, 15, 15, 64) 18496 _________________________________________________________________ activation_8 (Activation) (None, 15, 15, 64) 0 _________________________________________________________________ conv2d_6 (Conv2D) (None, 15, 15, 64) 36928 _________________________________________________________________ activation_9 (Activation) (None, 15, 15, 64) 0 _________________________________________________________________ conv2d_7 (Conv2D) (None, 15, 15, 64) 36928 _________________________________________________________________ activation_10 (Activation) (None, 15, 15, 64) 0 _________________________________________________________________ max_pooling2d_3 (MaxPooling2 (None, 7, 7, 64) 0 _________________________________________________________________ dropout_2 (Dropout) (None, 7, 7, 64) 0 _________________________________________________________________ flatten_1 (Flatten) (None, 3136) 0 _________________________________________________________________ dense_3 (Dense) (None, 1024) 3212288 _________________________________________________________________ activation_11 (Activation) (None, 1024) 0 _________________________________________________________________ dropout_3 (Dropout) (None, 1024) 0 _________________________________________________________________ dense_4 (Dense) (None, 1024) 1049600 _________________________________________________________________ activation_12 (Activation) (None, 1024) 0 _________________________________________________________________ dense_5 (Dense) (None, 10) 10250 _________________________________________________________________ activation_13 (Activation) (None, 10) 0 ================================================================= Total params: 4,365,386 Trainable params: 4,365,386 Non-trainable params: 0
実行結果
テスト結果は下記のようになりました。精度も0.80とそれなりに高い値が記録されています。
loss : 0.6048096418380737 accuracy : 0.8062000274658203
学習の推移と誤差は下記の通りです。
50epochの学習には大体200s(4s x 50epoch)程で完了しました。