前回の記事で、ネコ品種分類器をつくり、我が家のネコちゃんたちの判別結果を紹介しました。
【ネコと機械学習4】Pytorchを使ったネコの品種分類器の実装
今回は、ネコ品種分類器の判断根拠を可視化しました。
我が家の可愛いネコちゃんと一緒に機械学習の面白さ、楽しんでいってください♪
(2022年12月18日追記) 実装方法はこちらです
データセット
前回と同様、データセットはKaggleにあるOxfordのVGGが用意したデータセットを使いました。https://www.kaggle.com/datasets/zippyz/cats-and-dogs-breeds-classification-oxford-dataset
ネコ12品種それぞれ200枚、合計2,400枚のデータセットです。
分類番号 | 品種名 | データ数 |
0 | アビシニアン | 200 |
1 | ベンガル | 200 |
2 | バーマン | 200 |
3 | ボンベイ | 200 |
4 | ブリティッシュショートヘア | 200 |
5 | エジプシャンマウ | 200 |
6 | メインクーン | 200 |
7 | ペルシャ | 200 |
8 | ラグドール | 200 |
9 | ロシアンブルー | 200 |
10 | シャム | 200 |
11 | スフィンクス | 200 |
合計 | 2400 |
分類モデル
分類モデルについても前回と同様、EfficientNet-b7を用いました。efficientnet-b7は、resnetなど既存モデルにおけるネットワークの深さや広さなどのパラメータをバランスよく最適化したモデルであり、畳み込みニューラルネットでとても高い性能を出すことができます。
今回学習したモデルは、検証データに対する決定係数は0.8でした。
訓練データの決定係数はほぼ1なので、過学習していることがわかります。
今回の判断根拠の可視化でどのようなことがわかるでしょうか?
判断根拠の可視化(GradCAM)
判断根拠の可視化にはGradCAMを用いました。
CAMはClass Activation Mapping の略であり、畳み込みニューラルネットワークの活性化層(=判断結果の情報)から、画像のどの部分に注目して分類結果が下されたかを数値で計算し、ヒートマップで元画像に重ねることで示すことができます。
GradCAMは、CAMの改良版であり、畳み込みニューラルネットワークの出力層の勾配からヒートマップを作成します。
勾配の計算に改良したことで、ネットワークの構造に拠らずCAMを作成することができます。
我が家のリンク君に使ってみた
我が家のニャンズを代表して、ノルウェージャンフォレストキャットのリンク君の分類結果と判断根拠を紹介したいと思います!
分類結果サマリー
この棒グラフの結果は、12枚の分類結果を平均したものです。
リンク君はノルウェージャンフォレストキャットなので、ペルシャ、メインクーン、ラグドールなどの洋物ネコに分類されています。
リンク君はふさふさで可愛い~♪^^
各画像の判断結果
各画像の分類結果には、ペルシャ、メインクーン、ラグドールが多く、サマリー棒グラフの結果と一致します。
ただし、アビシニアンも混じっていることがわかります。
(下段の右から2番目がアビシニアン 21.3%)
この原因をGradCAMで探れるでしょうか?
GradCAMによる分類根拠の可視化
リンク君の分類結果にCAMを重ねてみました。
ペルシャ、メインクーン、ラグドールと分類した画像は、リンク君の体部分に注目して分類されたことがわかります。
一方、アビシニアンと判断した画像のみ、リンク君とずれた位置を見ていることがわかります。
よって、今回利用したモデルには、被写体を正しくとらえられない場合があることがわかります。
この課題を解決するためには、データ水増しを試し、被写体(=ネコ)を確実にとらえられる様に改善するのが良いと思います。
説明可能AI(XAI)の重要性について
近年、説明可能AI(Explainable AI : XAI)が注目されつつあります。
今回紹介したように、分類結果の根拠を見える化することで、AIが不適切な位置に注目している場合を検知できるため、精度の改善に役立ちます。
それだけでなく、説明可能性は企業活動で大いに生かされます。
AIの説明性を高めておくことで、役員や上司がAIに詳しくない場合でも、納得感のある説明がしやすくなります。
私も精度の追求だけでなく、説明性の観点からも技術の研鑽をしていきたいと思います。
実装コードも紹介したいと思います
今回はネコ品種分類器の判断根拠の見える化を紹介しました。
後ほど、実装したコードも紹介したいと思いますので、よろしくお願いします!
(2022年12月18日追記) 実装方法はこちらです
参考サイト様
GoogleColaboratoryを用いたGradCAMの実装方法はこちらのサイト様を参考にさせて頂きました。
https://htomblog.com/python-gradcam
洋物という判断がされるところが、やっぱり!ですね^ ^