きっかけはちょっと余計な疑問でした。
デビットカードをようやく作ったことでサブスクやネット注文が容易にできるようになり動画をサブスクし始めたのが一ヶ月前。
いろいろ探して番組を視聴しているうちに年齢や性別の関係からかオススメに「ウマ娘」がでてきて視聴し始めたのがこの作品を知るきっかけになりました。
ゲームベースのアニメで好きなものと言ったら、ポケモンとかイナズマイレブン(無印)くらいで、実は今年の秋まで1期12話のアニメをほとんど見ていませんでした。
「ウマ娘」。名前は耳にしたことあるけど馬って言われても分からんしな〜〜。でもなんか人気らしいしな〜〜と思いつつ1期を見たらとても良かった。
個性豊かな可愛らしいキャラクターたちがレース場を爆走するというギャップ、憧れの先輩を目指して(というよりも仲間)とともに練習に励みたとえ挫折しても仲間たちと協力して乗り越えていくという誰でも没入できるストーリー…続きが気になりすぎて1週間経たないうちに2期も見終わってしまいました。
ウマ娘とは?:Cygamesによるスマートフォン向けゲームアプリ『ウマ娘 プリティーダービー』の略称で実在した競走馬をモチーフにした育成系ゲームおよびアニメ等メディアミックス作品。リリース直後から多くの層の支持を受け2021年の流行語にもノミネートされるほど大ヒットした。
結局「馬」なのか「人間」なのか
アニメを見ながら、「ウマ娘」は「馬」なのか「人間」なのかどうか気になってきました。
世界観的に「ウマ娘」は「ウマ娘」であり、それは間違いないのですが…モンスター系の作品だと必ずと言っていいほど出現する生物的な考察記事やスレッドが散見されます。
ウマ娘も例外なく議論や考察がなされていますが、いまいちはっきりと結論がついていない雰囲気です。あとは、人間と同等のことができて身体能力が長けているのなら人間勝てなくね?という考察とかもちょこちょことみかけました。
以下、関連する記事で読んだものなど↓
そこで、私は物体認識ツールを使って私なりの結論をだそうと考えたわけです。
とりあえず、私なりに考えたウマ娘の「馬」の要素と「人間」の要素を見た目の視点から挙げてみて、どちらが寄っているかを考察しました。
馬
耳としっぽが生えている。
人間よりもずっと前傾姿勢で走っている。
それだけ?(前傾姿勢ってビジュアルとあんまり関係ないのでは…)
人間
人間(女性)の体をしている。(公式に身長とスリーサイズが 載っている)
衣装を身につけている。
2足歩行である。
顔がほぼ人間のアニメキャラと同じである。(少なくとも目・鼻・口の間隔は人間のアニメキャラそのものである)
う〜〜〜〜ん。これは人間要素の圧勝ですね。というより、遠目から見たら普通にアイドルが走っ…(これ以上は言ってはいけない)
しかし百聞は一見に如かずというわけで、ゲームをインストールしてチュートリアルを撮影して検出させてみることにしました。
環境
ここでは、Darknetというディープニューラルネットワークを用いたアルゴリズムを使用しています。モデルはYOLOv4-cspです。
ディープラーニングとは、対象の全体像から細部までの各々の粒度の概念を階層構造として関連させて学習する手法のこと(Wikipedia)で、コンピュータが教師データや経験などの情報に基づいて自ら閾値などのパラメータを決定していくものです。Darknetは事前に画像データと正解データを与えて学習を行っていきます。
その中で、Darknetは、2016年にYOLOという名称で発表されたリアルタイム物体認識(RealTime Object Detection)アルゴリズムです。Darknetは発表当時からとても速い物体認識認識を可能にし、それ以降の物体認識アルゴリズムに大きな影響を与えています。詳しいことは他の記事を見てもらったほうがより分かりやすく、そして詳しく説明されているので、ぜひ調べてみてください。
YOLOv4-cspは、YOLO(v1)の後継であり、さらなる検出速度と精度の向上に成功したモデルです。
論文(YOLOv4-csp)
リポジトリ(Alexey Bochkovskiy)
リポジトリからソースコードをダウンロードしてビルドすれば動きます!これが無料というのがもはや意味分からん…
コンピュータ環境
モデルがあっても、コンピュータがなければどうしようもありません。私は以下の環境を使いました。
Google Colaboratory でもDarknetの体験はできるので、高性能なコンピュータを購入する必要はありません。
GPU:NVIDIA GeForce RTX 2080Ti
RAM:64GB DDR4
OS:Ubuntu 20.04 LTS
CUDA:11.5
cuDNN:8.3
計算機として購入しているものを使用しました。過去の買い物記事は以下のリンクから見られます。
Intel i9 12900KF
NVIDIA GeForce RTX 2080Ti
GPUがなくても検出結果が変わるということではないので、RAMが許す限り好きなコンピュータで実行しましょう。環境構築と実行はREADMEやその他サイトに書いてあります。
結果は??
全部人間として認識されて一件落着…かと思いきや、思いもよらない結果が待っていました。
アニメで見たウマ娘を深層学習に通すとどうなるのかな〜と思ってゲームのチュートリアル画面をdarknetに通してみたら、
— Ar-Ray (@Ray255Ar) 2021年12月5日
本当に馬だと判定されてしまい困惑しています🐎 pic.twitter.com/XVgqo5zD1s
なんと、馬がいたのです!!!
いや、馬じゃん、と思われるとは思いますが、アニメキャラクターは経験上、人間を指し示す"person"として識別されるので、これは想定外だったのです。
TLの分析によると・・・?
このツイートを行ってから数時間たったら100件ほどいいねが付き、フォロワーの方から「それ、背景が原因じゃね?」とのご指摘をいくつか頂きました。ありがとうございます。
確かにバウンディングボックスでクラス分けをするときは長方形を作成して物体を識別させています。Darknetは背景クラスを作らず、マスクによる識別もしていないため、確かにCOCOデータセットの背景が偏っていたら影響を与えるのかもしれません。
さらに、追加で調べていくと、青い背景と上半身のみが写っている場合では凧の判定が生じることも分かっています。
凧と認識されてしまった例。 pic.twitter.com/zzKiySMzLj
— Ar-Ray (@Ray255Ar) 2021年12月6日
これは調べなければと思い、次は、芝生が見えないようにフィールドを塗りつぶしてみました。すると…?
【報告】
— Ar-Ray (@Ray255Ar) 2021年12月6日
本当に背景がウマ娘たちを馬と認識する原因になっているのかどうかをしらべるために背景を塗りつぶして彼女たちをなぞのばしょに送り込んだところ、馬判定が消えました。 https://t.co/F1zWYvT8v0 pic.twitter.com/PFVUQuDFYD
なんと、馬の判定が一切出なくなってしまったのです。これは、馬のデータセットによる学習結果が背景情報も込みだったのではないのかと考えられます。人間の判定も一部消えていますが、馬が一方的に判定から除外されたということは背景が大きく関わっているということでしょう。
動画での検証
動画も作成してみました。ここでは、YOLOX-xというアンカーフリーな物体検出アルゴリズムを使用しています。
追記:別のモデルもお試し(YOLOX-x)
— Ar-Ray (@Ray255Ar) 2021年12月6日
確かに背景が緑になった瞬間に明らかに馬判定が多くなっていそう。
Model:https://t.co/y1jxoIKyZq pic.twitter.com/4yRT7cfrZZ
YouTubeにもアップしました。(音が割れています。すみません…)
けっこういろいろな検出が見えますが、背景が緑になった時に明らかに馬判定が増えているので、間違いなさそうです。
まとめ
COCOデータセットでトレーニングしたDarknet-YOLOv4-cspではウマ娘は基本「人間」として検出されますが、レース場の芝などの特殊な環境だと「馬」として認識されることが分かりました。
これは、背景や姿勢、ネットワーク構造によって大きく変わる可能性があることを考慮してください。(そもそもこのようなデータセットはアニメやゲームのキャラクターを対象にしていないため、「あ。そんな風になるんだー」程度で捉えてほしいところです。)
しかし、彼女たちも芝生から出れば現実の学生と何ら変わらない(?)会話をし、ライバルでもある友達と行動を共にします。もしかしたらウマ娘たちはレース場で「馬」となっているのかもしれませんね。
その他反応
元ツイートが1万いいね3000RTに到達しました。私のこれまでの技術関連の発信と比べ物にならないくらいの伸びを見てとても驚きました。これがいわゆる「バズる」ということなのでしょうか?通常はどんなに伸びても50〜100ほどだったので珍しいです。
ほとんどの引用RTやリプライは読めていると思うので、その中でも最も多く取り上げられていたのは、
ハルウララがテディベア
というところでした。確かに。
テディベア誤判定はアニメや人形などの検出を行うときに結構出現するので、別に珍しくないかなー程度だったのですが、想像以上に伸びてしまうと、全く物体検出やってない人にもツイートがまわるので当然の反応かもしれません。
しかし、その全てが「笑いました」「よい」「かわいい」などの肯定的な意見だったので問題ないでしょう!?🐻