お久しぶりです。くらくです。
今回は変わり種と言いますか、特殊な記事です。昨日「CEDEC2020」という学会にて、「遊戯王ニューロン」についての技術的なお話を聞く機会がありましたので、そのレポートのような記事となります。
とはいえ、専門的すぎると読む人を選びますし、講演内容の全文を文字起こしする行為は禁止されているので、あくまで概要を掻い摘んでお話するといった流れになります。
yamachi-9rakura.hatenablog.com
yamachi-9rakura.hatenablog.com
yamachi-9rakura.hatenablog.com
yamachi-9rakura.hatenablog.com
はじめに
今回お話するのは「遊戯王ニューロン」のカード認識機能についてです。
これを実現している技術、学問的な立ち位置は、画像認識やコンピュータビジョンといった分野に相当します。
アプリのユーザであればわかるかと思いますが、「遊戯王ニューロン」のカード認識機能はかなりの高性能でして、レアリティによる光や照明による反射をある程度許容し、多言語のカードにも対応しています。
遊戯王ニューロンのカード認識の仕組み
遊戯王ニューロンのカード認識は2つのステップからなります。
- カメラアプリから得た画像からカード領域を検出する
- 検出した領域のカードが何なのかを推論する
このどちらにも機械学習の手法が取り入れられています。
機械学習とは
全然知らない人にわかるよう簡単に言えば、いわゆる「AI」です。
求めたい結果を得るために、データを与えて学習させ、識別器を生成します。
その識別器に未知のデータを与えて、より良い結果が得られるように学習を繰り返すことが機械学習となります。
わかりやすいように遊戯王を用いて例えます。
前述した識別器をセレナちゃんに例えます。最初セレナちゃんはポンコツなので、《クリボー》と《ハネクリボー》の違いがわかりません。
そこで、レアリティ違いも含め、いろんな角度、条件下で撮影した《クリボー》と《ハネクリボー》の写真データをセレナちゃんに食べさせます。流石にかわいそうなので写真をもしたケーキとでもしましょうか。
食べさせる際に「これはクリボーだからね」と渡したものが何かを伝え、学習をさせます。
十分にケーキ(訓練データ)をセレナちゃんに食べさせたあと、全く違う条件で撮影した《ハネクリボー》のケーキ(未知データ)を渡します。
それによりセレナちゃんは渡されたケーキが《ハネクリボー》だと理解できるようになりました!!!
データを食べることで学習したセレナちゃんは、《クリボー》と《ハネクリボー》を分類できる立派な識別器となったのです!!
……セレナちゃん……ごめんね……。
なんとなく、機械学習について雰囲気が掴めたところで、早速仕組みの説明にいきます!
カメラアプリから得た画像からカード領域を検出する
まずはカードがどこにあるのかを検出します。ユーザの人なら、カードを並べて検出させるっていうを一度はやったことあると思いますが、この認識機能を使うときにカード周りに矩形が表示されますよね。これが写真全体からみてカードの領域を検出しているということになります。
このカードの検出にも機械学習が用いられています。この場合、与える訓練データは「カード画像が含まれた風景データ」。得たい結果は「カードが風景の中のどこにあるのか」ということです。
カードが無造作に置かれている写真を大量に用意し、それを学習データとしてもちいることで、カメラから得た画像のどこにカードがあるかということを抽出できる学習器が得られます。
アプリでは10枚が限界みたいですね。
検出した領域のカードが何なのかを推論する
次に2番目のカード認識の話です。先述したカード領域の中にそれぞれ何のカードがあるか、というのを認識・推論します。
難しい話は無しにしますが、どのような学習データを用いたのかということだけ説明します。
流石に実物のカードを用意するのは大変なので、訓練データとして用意したのは「3DCGのカード」みたいです。それをいろんな角度、照明条件で用意し、訓練データとして用いているようでした(数にして数十万枚)。
それによって得られた膨大な量の訓練データを「VGG16」という有名な機械学習モデルを用いて学習させ、10000種のカードを分類できる識別器を実現させたようです。
今後についてや小話
ざっくりとした仕組みの説明は以上なのですが、色々開発に至っての小話みたいなのが多く出ていて面白かったです。
例えば、「自分の顔画像をカードに見立てて何に似ているか認識させる」といったユーザ側から出てきた遊びについては、開発側はかなり好意的でした。
また、カードを認識する数の限度を10枚としたのはデザイナーの意見だったようで、これに関しては、デザイナーよくいってくれたというような印象でした。(開発側は精度を担保するため、マーカーを用意して1枚ごとに認識させる予定だったらしい)
また、精度の低い事例として「ウィジャ盤」が挙げられていました。「ウィジャ盤」は米版と日本語版で同じカードでもイラストに書かれた文字は同じであるため、識別が難しいようです。(米版の《死のメッセージ「T」》と米版の《Spirit Message "A"》はニューロン上では同じとして扱われますからね)
また、発表の内容としては、肝となる部分はエッジ(スマホ等の端末)において、どのようにアプリを実現するかといったこと(負荷をどのように軽減するか)と、今後カードが増えていっても対応可能な機械学習モデルの選定などでした。
この辺りは難しいので今回は省きましたが、気になる方は調べれば出てくると思いますので是非。
私が驚いた点
少しだけ技術的な観点から私が驚いた点を書きます。
まず、認識をする際に「カードの枠」や「テキスト」などの情報を一切用いていないというのが驚きでした。
多言語に対応しているということで、ある程度テキスト情報による振り分けをしていると考えていたため、それがないのは驚きでした。(それゆえに前述した《ウィジャ盤》のような事例が発生しているよう)
また、遊戯王カードはモンスター、魔法、罠という種類ごとでカードを占める色が大きく異なりますし、同じモンスターでも通常、効果、儀式、融合、シンクロ、エクシシーズ、ペンデュラム、リンクと多くの種類が存在します。
そのため、識別器で識別を行う前段階である程度の振り分けをしていると考えていたため(そうすればそれぞれの専用の識別器を作り判定することができるので)、全てのカードを内包し、10000分類を行う識別器であると知った時は驚きでした。
実際に上記のような多段モデルも試したようですが、逆に精度が悪くなったようです。(最初の振り分けで失敗すると良い精度が得られないため)
それだけ「VGG16」というモデルが優れているのかもしれませんね。(私は使ったことがないので)
遊戯王カードが増え続ける限り、アプリの開発、更新は続いていくはずなので、今後に期待できますね!!
さいごに
まとめます。
- 遊戯王ニューロンでは機械学習を用いてカード認識を行なっている
- 遊戯王ニューロンではカード領域検出とカード種類分類の2ステップでカード認識を可能にしている
- 遊戯王ニューロンは技術的にも結構すごいアプリである
今回はCEDEC2020にて発表された『「遊戯王ニューロン」における10000種類カード認識:エッジAIの手法と工夫』のレポート記事という立ち位置で色々かかせていただきました。
変わり種の記事で、技術的なお話をするという何ともハードルが高げな記事でしたが、私自身楽しんで書くことげできました。難しい部分をほとんど省いたので、初めてこういう技術に触れる方にも伝われば良いなと思います。