えいあーるれいの技術日記

ROS2やM5 Stack、Ubuntuについて書いています

GradCAMを使ってYOLOv5の識別根拠を調べる。(ウララ検出チャレンジ中間報告・競走馬・ディープラーニング)

この記事はウララ検出チャレンジに関連します。そろそろまとめレポートを出したいですが、しばらく学校の課題が忙しいので難しそう…

過去の記事は以下から見られます。

ar-ray.hatenablog.com

本来人間に近いウマ娘が馬と認識されているという謎現象を解明できないかと考えてました。

ウマ娘とは?:Cygamesによるスマートフォン向けゲームアプリ『ウマ娘 プリティーダービー』の略称で実在した競走馬をモチーフにした育成系ゲームおよびアニメ等メディアミックス作品。リリース直後から多くの層の支持を受け2021年の流行語にもノミネートされるほど大ヒットした。

あの伸びたツイートのコメントに「GradCAMを使えないのかなー」とあったので、GradCAMを試せそうなリポジトリを探してみたところ見つけました。この記事ではそのお試しレポートを書きました。

GradCAMとは

GradCAMとは、最終の畳み込みの特徴マッピングについて最終的な分類スコアの勾配を計算してその表示を行うアルゴリズムです。分析結果は赤→黄色→青の順に強く反応していることを示しています。

↓論文は以下のURLから

arxiv.org

YOLOv5とは

AIスタートアップ企業であるUltralyticsを設立したGlenn Jocher氏を中心として開発されている物体検出プログラムです。YOLOv5はハイエンドコンピュータからモバイル端末までの幅広いプラットフォームに対応しており、PyTorch Hub経由で扱うこともできます。

↓以下のリポジトリはYOLOv5の詳細です。

github.com


今回は、YOLOv5+GradCAMの組み合わせのリポジトリが公開されていたのでお借りして分析してみました。YOLOv4用に実装したかったのですが、時間的にも技量的にも難しかったのでちゃんと理解して他のモデルにも適応させてみたいです。

↓使用したリポジトリ(YOLOv5のライセンスは大丈夫なのか…?)

github.com

画像を解析

OpenCVやPyTorchなどのモジュールをインストールを行ったら、クローンしたyolov5-gradcamのディレクトリ内で以下のコマンドを実行します。画像は$HOME/Pictures/example.pngを読み込むことにします。

python3 main.py --model-path yolov5s.pt --img-path $HOME/Pictures/example.png

画像は某クレーンゲームで入手可能なぬいぐるみの画像を使いました。

結果は以下の画像の通りです。ぬいぐるみの中心部分を見ているみたいです。

f:id:Ray_ar:20220118231546p:plain

ウマ娘では?

解析画像については既にurara-challengeに結果画像をアップしています。

github.com

Twitterでも一部共有しています。

ウマ娘の判定では、人間判定と馬判定に少し違いが見られました。例えば、人間判定で強く認識されている部分は腰の部分ですが、馬判定では周辺の地面も巻き込んでいるように見えます。

馬では?

実際の競馬での馬の画像を使ってみました。

画像は東洋経済オンラインの記事のものをお借りしています。

f:id:Ray_ar:20220118235944p:plain

結果を見ると、先程のウマ娘の馬判定に見られた背景を巻き込んだ反応が見られています。2枚だけでは不十分ですが、これまでの検証の傾向を見る限りだと馬判定を行うAIは検出時に背景も見ているのかもしれません。

仮説:JRAの競走馬登録数において「白い馬」は5%程度→馬が影で学習しにくい?

2019年のデータになりますが、2016年に生産されて現3歳にあたる馬の中でJRAデビューした4694頭のうち、「白い馬」に分類される芦毛白毛の頭数は合計240です。

↓参考記事

spaia-keiba.com

これは、240÷4694×100 = 5.1 (%) より全体の5%程度となります。

黒っぽい物体や影になりやすい物体は特徴量を取り出しにくいからなのか誤検出をしばしば起こすことがあります。cell phone(携帯電話)がその例です。黒っぽい端末が多く、人間の手で操作されるため、手に持っている財布や手帳でも簡単に誤検出されます。

もしかしたら、晴天のときのデータが多く暗い色の馬は、前足と後足の間の芝やダートなどのより特徴量がはっきりしている地面に検出が引っ張られているのではないのかと考えています。(そして馬はたいてい芝かダート上に立っている)

すると以前のあのツイートの説明が付きそうな気がします。


ウマ娘は角度によって人間の判定が弱くなることがあるため、背景によっては馬判定になることがある』というのが現時点での見解です。


特徴量が影などによって制限されていたり、背景に決まった法則などがあると一見正しく学習されていても他の物体や環境でうまく動かないことがありそうです。

GradCAMなどの検出根拠を調べるツールは一般向けのAI応用において重要な要素になりそうだなーと個人的には感じました。

ウララ検出チャレンジについて

ウララ検出チャレンジとは、このツイートが発端で始まったディープラーニングを活用した世界一くだらない(?)探求プロジェクトです。データも募集しています!(DMで「検出チャレンジのデータ提供できます!」などと言っていただけるとありがたいです。)

名称は「ウマ娘」に登場するキャラクター「ハルウララ」がテディベアと判定されたことに注目があつまり拡散される一因になったことがきっかけです。

↓対象リポジトリはこちらから

github.com