cojimaru BLOG

エンジニア支援のために技術情報を発信するブログ

Google Colaboratory上でKerasを使って画像認識をやってみた

f:id:cojimaru-chan:20210213051256p:plain

はじめに

どうも、こじまるです。
前回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)にアクセスすることで始めることができます。まず、ノートブックを新規作成をクリックします。
f:id:cojimaru-chan:20210213012309j:plain
新しいノートブックが作成されます。
f:id:cojimaru-chan:20210213012347j:plain
pythonが実行できることを確認するために、Hello Worldを出力させてみます。スクリプトを入力し、エディタの左側の矢印ボタンを押下します。
f:id:cojimaru-chan:20210213012911j:plain
スクリプトが実行され、Hello Worldが出力されました。
f:id:cojimaru-chan:20210213012437j:plain

GPUの設定

Google ColaboratoryでGPUを使ってスクリプトを実行するには、追加設定が必要になります。[メニュー]->[ランタイム]->[ランタイムのタイプの変更]を押下すると、ポップアップが表示されます。ハードウェアアクセラレータをプルダウンメニューから変更できるので、GPUに変更してください。
f:id:cojimaru-chan:20210213012500j:plain

CIFAR-10 画像認識

CIFAR-10とは

CIFAR-10(CIFAR-10 and CIFAR-100 datasets)とは、画像認識などで使用されるデータセットになります。CIFAR-10のデータセットは、訓練データ : 50000枚、テストデータ : 10000枚で構成されており、下記のような10種類のクラスで構成されています。
f:id:cojimaru-chan:20210213014500j:plain

実装

モデルの作成

今回は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
コード

実装したコードはgithubに公開しています。
github.com


コードの作成にあたり、下記のサイトを参考にしました。
参考サイト

実行結果

テスト結果は下記のようになりました。精度も0.80とそれなりに高い値が記録されています。

loss :  0.6048096418380737
accuracy :  0.8062000274658203

学習の推移と誤差は下記の通りです。
f:id:cojimaru-chan:20210213040119p:plain
f:id:cojimaru-chan:20210213040132p:plain

50epochの学習には大体200s(4s x 50epoch)程で完了しました。

まとめ

Google Colaboratoryを初めて使ってみましたが、導入に時間もかからず、GPUも使えるのでかなり便利です。AIを使って何かしてみたいという方は、こちらのサービスを利用することをおすすめします。

今回の記事で、KerasでCNNのモデルを作成しましたが、煩雑な処理をほとんど記述する必要なく、コードを作成することができました。(筆者は以前、numpyとTheanoでCNNを書いていたので、実装が物凄く楽だなと感じました。)今後想定している株価予測となると、別のモデル(RNN)を使うことになるので、その学習を始めるところから開始しようと思います。