深層学習モデルの可視化ツールGrad-CAM
こんにちは。らずべりーです。
深層学習モデルについて勉強中です。 といっても、自分の写真を学習済みモデル(主にVGG16)に認識させて遊んでるだけですが。
VGG16というのは転移学習やFine-tuningなどによく使われている学習済みモデルで、Kerasから使えます。詳しい説明は以下のページを参照。
https://www.kaggle.com/keras/vgg16
In this work we investigate the effect of the convolutional network depth on its accuracy in the large-scale image recognition setting. Our main contribution is a thorough evaluation of networks of increasing depth using an architecture with very small (3x3) convolution filters, which shows that a significant improvement on the prior-art configurations can be achieved by pushing the depth to 16-19 weight layers. These findings were the basis of our ImageNet Challenge 2014 submission, where our team secured the first and the second places in the localisation and classification tracks respectively.
↓Google翻訳さん
本研究では、畳み込みネットワークの深さが大規模な画像認識設定におけるその精度に及ぼす影響を調べる。 私たちの主な貢献は、非常に小さい(3x3)畳み込みフィルタを備えたアーキテクチャを使用して、深度のネットワークを徹底的に評価することです。これは、深さを16-19の重さまで押し込むことによって従来技術の構成を大幅に改善できることを示しています。 これらの調査結果は、ImageNet Challenge 2014提出の基礎となりました。私たちのチームは、ローカリゼーションと分類のそれぞれで第1位と第2位を確保しました。
なんかすごそうですね。
このVGG16さんがどこを見ているのかわかる(?)ツールを見つけたのでご紹介。 Grad-CAMというらしい。
Grad-CAMとは?
あるものと判定された時に、どのあたりの情報が主に元になっているのかをヒートマップで可視化してくれるそうです。(もうちょっと込み入っているとは思いますが。)
↓元論文はコチラ
[1610.02391] Grad-CAM: Visual Explanations from Deep Networks via Gradient-based Localization
詳しい原理は勉強中。このあたりのページで丁寧に解説してくれています。
Grad-CAMの論文を流し読むurusulambda.wordpress.com
www.slideshare.net
む、、、難しい(~_~) ぼちぼち勉強します o(・`д・´。)
とりあえず使ってみる
学習済みモデルで試すだけなら、TorchまたはKerasで実装されたものを以下のサイトで提供してくれているのですぐに試せます。
- Torch実装版。
- Keras実装版。
ありがたやー。
自分で学習したモデルを使いたいなら、このプログラムのソースコードを元に書き直す必要がありそうです。
結構ハードルが高そうですが、頑張ればできなくもなさそうな(素人考え)。
Grad-CAMの使い方
Python&Keras派の私はとりあえずKeras実装版でお試し。
$ git clone https://github.com/jacobgil/keras-grad-cam.git
でダウンロードして、ターミナルでgrad-cam.py
ファイルのあるフォルダ(keras-grad-cam
)をカレントディレクトリにして
$ python grad-cam.py <path_to_image>
で完了です。<path_to_image>のところに画像のパスを手入力するか、Macならファイルをドラッグして画像のパスが入力されればOKです。実行するとkeras-grad-cam
フォルダの中にgradcam.jpg
とguided_gradcam.jpg
という2つの画像ファイルが出力されます。
簡単ですね。素晴らしい。
Grad-CAMの結果
使ったのは、道端で見かけたたんぽぽの写真。
VGG16での予測は
stone_wall (n04326547) with probability 0.35
縁石を認識してしまった模様(泣)
次に、植物だけ切り出したものも。
VGG16での予測は
daisy (n11939491) with probability 0.62
同じキク科の花の名前が出てきて良い感じ。
では、いよいよGrad-CAMでVGG16さんがどのあたりを見ていたのかを探っていきます。
結果は、、、
全体像では左下が赤くなっていて、そのあたりの縁石に注目してしまっていることがわかります。
切り出した写真ではたんぽぽの花に注目していたのですね。よくできました!
VGG16さんの気持ちがわかって楽しいので、今後もぼちぼち使っていきたいです。