はじめに
ポケモンについて何となく知っている人向けの記事です(デジモンは知らなくてOK)
3月ごろにポケモンたかさおじさんが集計したアンケートの分析をお手伝いしたところ、アンケートの自由記述回答の6353件中、155件もデジモンについて言及するコメントがあった。
「デジモンと区別付かないよね」
「もはやポケモンじゃない…。デジモン…。昔のデザインに戻ってほしいなぁ…。。。」
「主観ですが、伝説のポケモンが角張った印象で、デジモンのような印象を受ける。」
「全体的に毛がなさそうなツルッとしたフォルムの子達が増えた気がします。デジモンっぽい」
「デザインがごちゃごちゃしすぎて子供が描くのが難しい デジモンに近くなってきている」
「ダイパまでのデザインがポケモンっぽいデザイン。それ以降はデジモンみたいな雰囲気。」
私は幼少期からポケモンには触れてきたが、デジモンにはあまり縁がなかったため、
デジモンと聞くと友人がカラオケで歌っていたButter-Flyとか、細田守が監督をやっていた「ぼくらのウォーゲーム!」のイメージが強く、
デジモンのことを詳しくは知らないが、
どうやら最近のポケモンはデジモンっぽいらしい
ポケモンのデザインについて、「デジモン」についての言及のある回答
https://docs.google.com/spreadsheets/d/1FZFh8Mfa3-CU-qeFMGtZ9xByxbJ9wMj2mSEJDzV-tiQ/edit#gid=1753266897ポケモンたかさおじさんの「ポケモンとデジモン」とデジモンに関する記事
https://pkmnheight.blogspot.com/2020/07/7.html
ポケモンとは?
知らない方は、ぜひ以下の記事をご覧ください。ここまで詳しく、調べ尽くした記事はありません。
わからなかった方は、ピカチュウとかポケモンGOがポケモンだと思ってもらえば多分大丈夫です。
ポケモンらしさ-3_デザイン史〜初代開発史編
http://pkmnheight.blogspot.com/2020/04/301.html
デジモンとは?
デジモンとは、デジタルモンスターの略称であり、
ポケモンの誕生より1年遅い1997年に初登場したバンダイの携帯育成ゲームの商品群である。
1996年に大ヒットした同じくバンダイのたまごっちを、育成要素だけでなく通信やバトルといった面に広げたものである。
ポケモンのゲームが主に任天堂の携帯ゲーム機で発売されていたのに対し、デジモンは据え置きゲーム機が主流となっている。
実在の生物や事物をモチーフに架空のモンスターをデザインしたものという点でポケモンのモンスター達とデジモンのモンスター達は一致している一方、ポケモンとデジモンは異なるデザイン趣向 があるように思える。
絵柄や使われている色。キャラクターの頭身数やデザインの複雑さなど、両者は大きく異なっている。
では、「最近のポケモンはデジモンっぽい」 とはどういうことなのだろうか?
こんな実験を考えてみた。
実験方法
「へえ・・・これが今のポケモンなんだ~。
うわっ!全然知らないやつバッカ!!!
ポケモンって変わっちゃったんだな~~~~。
おれも昔はポケモンやってたけどさ、
金銀までしか知らないんだよね。
ぶっちゃけさ、
今のポケモンってデジモンっぽくね???」
という方々の認識を再現するために、以下のような実験を行う。
実験:1999年発売のポケットモンスター金銀までの『昔のポケモン』と、デジモンをランダムに分類器を学習させた後、ルビー・サファイアから最新作までのポケモンと、残りのデジモンを分類させ、結果を集計。これを2000回繰り返し、誤分類率を集計する
実験に使用したポケモンのデジタル画像はポケモンずかん(公式)から入手。
https://zukan.pokemon.co.jp/
水彩画風のポケモン旧公式画像は海外の有志のサイトから拝借。
デジモン画像はデジモン図鑑(公式)で2020.3.10までアップされていたものを入手した。
https://digimon.net/reference/
使用した画像
- 金銀までのポケモン画像:全504枚(現行公式画像251+旧水彩公式画像253枚)
(学習用にランダムで392枚)
現行公式画像と、旧水彩公式画像を扱うことで、分類器のポケモンに対する思い入れを強くする効果を期待。
-
デジモン画像:公式画像957枚
(学習用にランダムで402枚)
なお、デジモンは一部同じポーズで色のみ変わっているものや、背景が書き込まれている画像があったため一部除外した。 -
テスト用
- ポケモン:968枚(ルビサファ以降804枚+学習に使われなかった168枚)
(メガシンカ・リージョンフォーム等は全てルビサファ以降として扱うものとする)
(2020/6/17にポケットモンスターソード・シールド『鎧の孤島』で新たにポケモンが追加されてしまったが、
面倒くさいので含めていない) - デジモン:学習用・検証用に使用されなかった残りの555枚
- ポケモン:968枚(ルビサファ以降804枚+学習に使われなかった168枚)
(メガシンカ・リージョンフォーム等は全てルビサファ以降として扱うものとする)
(2020/6/17にポケットモンスターソード・シールド『鎧の孤島』で新たにポケモンが追加されてしまったが、
これらの学習用・テスト用は毎回シャッフルし、異なるポケモンらしさ・デジモンらしさを抱く分類器が生まれるようにする。
- 画像サイズ
幅:224ピクセルに変換
縦:224ピクセルに変換
チャンネル数:3
これら実験に使用した画像はgithubにアップしました
https://github.com/mrok273/Qiita/tree/master/%E3%83%9D%E3%82%B1%E3%83%A2%E3%83%B3/poke_vs_digi/data
- 使用したモデル
ImageNetで事前学習済みのVGG16を、最終レイヤーの出力サイズを「2」に変更し、ポケモンとデジモンで分類できるように設定。
データ収集のイメージイラスト
集計結果
正解率
デジモンの正解率は90%
ポケモンは正解率が82%となった。
一度もポケモンに間違われなかったデジモンは約51%。
一方デジモンに一度も間違われなかったポケモンは約18%であった。
どうやらポケモンをポケモンと分類するほうが難しいらしい。
集計結果のcsvファイルをgithubにアップしました
https://github.com/mrok273/Qiita/tree/master/%E3%83%9D%E3%82%B1%E3%83%A2%E3%83%B3/poke_vs_digi
最近のポケモンは、デジモンっぽい!
デジモンへの誤分類率を世代ごとに集計すると、以下のようになった。
確かに後の世代ほどデジモンへの誤分類率が高い。
どうやら、
「最近のポケモンは、どちらかというとデジモン」
「今のはなんかデジモンっぽい」
「もはやデジモンと変わりないとさえ思える」
という意見も、全く根拠無しに言っているものではない らしい
そして、「4,7,8」世代が特にデジモンっぽいらしい。
最近のポケモンはどのへんがデジモンっぽいのか?
分類結果を見ると、ポケモンっぽさ とデジモンっぽさ にはなんとなく次のような特徴が見えてくる。
- デジモン
- 黒い
- トゲトゲしたデザイン
- 複雑
- ビビッドな色合い
- 描き込みが多い
- ポケモン
- パステルカラー
- 丸い
- シンプル
特に、デジモンっぽいグループを見てみると、以前私が投稿した記事に基づく、「デザインにおける情報量」(以降「情報量」)が高いデザインほど、デジモンに分類されやすいのがわかる。
実際、ポケモンとデジモンでは情報量に圧倒的な差があるようだ。
以前投稿し、ポケモンたかさおじさんのおかげでプチバズった記事。
「最近のポケモンはデザインが複雑になったのか?【Python】【OpenCV】」
https://qiita.com/mrok273/items/6f0bcdc62b6184f79308
情報量の少ないポケモン | 情報量の多いポケモン |
---|---|
デザインが複雑なだけではAIは「デジモンっぽい」とは感じない??
下図はポケモン・デジモンそれぞれの情報量と誤分類率の傾向である。
(赤線はsns.regplotによってロジスティック回帰を行った回帰線)
ポケモンはデザインが複雑になるほど、デジモンへの誤分類率が高くなる傾向がある。
一方、デジモンはデザインが単純なほど、ポケモンへの誤分類率が高い傾向にある。
しかし、情報量の多さはデジモンらしさの一要因ではあるようだが、それだけが決め手ではないらしい。
AIはどこを見ていたのか? 可視化その1.Grad-CAMによる貢献領域の可視化
CNNの可視化については以下のページが充実!!!
https://github.com/utkuozbulak/pytorch-cnn-visualizations
分類に使用したモデルは,5つの層で畳み込むことで最終的に4096の特徴量に変換しているため、人間の目で何が分類の結果に寄与しているのかを知るのは困難だが、
Grad-Camという手法を使うことで人間にもある程度認識しやすい状態となる。
例えば、以下の画像で「犬」と分類されるのに貢献した画像内の領域を可視化することができる。
ポケモン画像にGradCAMを使用した結果がこちらである。
「デジモン」分類への貢献領域 | 「ポケモン」分類への貢献領域 |
---|---|
フシギダネの目の部分がデジモン分類へ貢献、一方他の広い範囲に渡ってポケモン分類へ貢献しているのはわかるが、これだけではどのような特徴を見ているのかわからないので以下のように工夫した。
工夫:同程度に ポケモンっぽいポケモンとデジモンのキメラを作ってGrad-CAM
こちらは100%ポケモンだと分類されたポケモンのピカチュウと、
デジモンにもかかわらず、2000回中2000回ともポケモンだと誤分類されてしまったテリアモンである
ピカチュウ(ポケモン) ポケモンらしさ100% |
テリアモン(デジモン) ポケモンらしさ100% |
---|---|
この、ピカチュウ・テリアモンの両者ともポケモンへの分類率100%の画像を以下のように4種類のポケモンデジモンキメラ画像を作成する。
キメラ画像による可視化の例
例えば、下の画像はポケモンであるスバメ(右上)とデジモンであるポポモン(右下)の4種類のキメラ画像を作成し、それぞれポケモン分類貢献領域とデジモン貢献領域をGrad-CAMで取得したものである。
このポケモンとデジモンの組み合わせは、ポケモンへの分類率がそれぞれ64.25%,63.93%と最も近い者同士をマッチングさせている。
8つのキメラ画像のGrad-CAM結果のうち、
左4つはデジモン分類貢献領域、右4つはポケモン分類貢献領域を表す。
こうして8つのキメラ画像結果を見ると、スバメの目の部分のデジモン分類貢献が、本物のデジモンであるポポモンの領域に比べても高いのがわかる(図の左下)。
このように、同じくらいポケモンに分類されたポケモンとデジモンを結合させることにより、片方の画像のみで行うよりも、デジモンすぎることもポケモンすぎることもなくなり、GradCAMをかけたあとの貢献領域を視認しやすくなった。
AIはどこを見ていたのか? 可視化その2.フィルターの可視化と中間層の抽出
フィルタの可視化とは以下のようなものとなる。AIはこれらの構造が画像内にどのように存在・配置されているかを見て処理をしているらしい。
上のフィルタによく反応する構造は、それぞれ以下のようなものになる
左のフィルタでは爪や羽・毛のような細かいギザギザに反応し、右のフィルタでは目のような丸い構造によく反応する。
ポケモン-デジモンのどちらに分類しやすくなるかで 「ポケモン分類貢献フィルタ」「デジモン分類貢献フィルタ」 と定義した。
Utku Ozbulak氏のgithubのcnn_layer_visualization.pyを使用させていただきました。
https://github.com/utkuozbulak/pytorch-cnn-visualizations
VGG19ネットの24番目のフィルタ512チャンネルについて可視化と中間層の出力の抽出を行いました。pytorchでの中間層の出力を得る方法は以下のようにforwardを変更することで可能
def forward(self,x,target = 24):
results = []
for i,model in enumerate(self.features):
x = model(x)
if i == target:# ここで中間層の出力を取得
results.append(x)
x = self.net.avgpool(x)
x = torch.flatten(x)
for i,model in enumerate(self.classifiers):
x = model(x)
if ii == 6: # 最終出力も取得
results.append(x)
return results
中間層の出力から、フィルタに最も反応している領域周辺を取得するコード例
"""
私が使用した24番目のレイヤーでは幅28 $\times$ 28、元画像が224 $\times$ 224であるため、
1セルごとに8 $\times$ 8の領域を担当していることになる、
このコードでは画像の構造を把握しやすくするために、幅高さともに4ピクセルずつ余分に取得している
"""
#中間層の出力結果の読み込み
temp_df = pd.read_csv(layer_filename)
# 元の画像からnp.array作成
img_array = np.array(img_orig)
#28*28をflattenしたときのインデックスを取得
target_index = int(list(temp_df.loc[filter_num].sort_values(ascending=False).index)[0])
row = target_index//28
col = target_index%28
row_min = max(0,row*8 - 4)
row_max = min(row*8+12,224)
col_min = max(0,col*8 - 4)
col_max = min(col*8+12,224)
#対象領域が白すぎたら取得しないようにする
image_test = img_array[row*8:min(row*8+8,224),col*8:min(col*8+8,224)][:,:,:3]
white_area_per = np.where(image_test.reshape(-1,3)==[255,255,255],True,False)[:,0].sum()\
/image_test.reshape(-1,3).shape[0]
if white_area_per < 0.95:
#フィルタの出力値
attribute_value = temp_df.loc[filter_num,str(target_index)]
#部位抽出
image_array_part = img_array[row_min:row_max,col_min:col_max]
#PILで画像を作成
image_part = Image.fromarray(image_array_part).resize((64,64))
フィルタ画像で分類結果に有意なもののみ、以下のgithubにアップしました
https://github.com/mrok273/Qiita/tree/master/%E3%83%9D%E3%82%B1%E3%83%A2%E3%83%B3/poke_vs_digi/hidden_layer
ポケモン分類貢献フィルタ
ここに掲載しきれないものは以下のgithubにアップしました
https://github.com/mrok273/Qiita/tree/master/%E3%83%9D%E3%82%B1%E3%83%A2%E3%83%B3/poke_vs_digi/feature
512のうちポケモン判定に有意にはたらいたフィルタは40種類。そのうち解釈がしやすかった一部を紹介する。
左の画像がVGGのフィルタを可視化したもので、右の画像は、このフィルタに反応した箇所のうち、上位100枚である。(各番号は私の管理用のもの)
縦の輪郭・
デジモン分類貢献フィルタ
デジモン分類に有意に貢献したフィルタは43種類。
ポケモン分類貢献フィルタに比べ解釈のしやすいフィルタが多かったように思う。
ポケモンとデジモンの特徴の違いのまとめ
爪・キバ・毛のトゲトゲ表現
基本的にポケモンの爪・キバ・毛のトゲトゲ表現の表現は荒いジグザグで表現されることが多い。
一方、デジモンは鋭い・密集・影が濃いなどの特徴がある。
AIにとって初代・金銀のポケモンは比較的爪・キバ・毛のトゲトゲ表現が控えめに見えたということだろうか。たしかに初代のポケモンでもトゲトゲが鋭い鳥の爪やくちばし。毛並みが緻密に描かれているポケモンほどデジモンと誤分類されやすかった。
目の表現
ハイライトのある目は高確率でデジモン判定を喰らっている。
目の描き方は4世代から特に変化したようなので、4世代のポケモンの誤分類率が高いのはそのせいかもしれない。
一方、ポケモン判定を受けやすい目は小さな点か線で表現されることが多いようだ。
下図は海外で 「ポケモンの目のデザイン。今昔」 としてredditで度々貼られる、ポケモンの目の描かれ方である。
「最近のポケモンは三角目じゃなくなってポケモンらしくなくなった!!!」という意見がアンケートにも見られた。たしかに三角目もポケモンの特徴と一部認識されているようだが、多くのGrad-CAM画像を見た結果、AI的には丸い目はデジモンっぽいらしいが、三角目の方はそこまでポケモンの判断基準にはならない印象。
テカテカはデジモン。ゴツゴツはポケモン。
デジモンは金属的な質感が多く、グラデーションの仕方に特徴がある。
一方、ポケモンには岩タイプというのがあるためか、ゴツゴツした質感や構造はポケモン判定を受けやすい。
小顔はデジモン判定
顔は特に線や影が集中しやすい場所のためか、小顔はデジモン判定を受けていた。
この小顔表現は最近の世代になるほど多くなっている印象。
色が違う
色についてはフィルターを目視するだけではわからないところが大きかったので、opencvなどを使って各画像の色を集計してみた。
彩度が違う
下のグラフは各ポケモン&デジモンの画像で最も高い彩度を集計したもの。
デジモンのみ明らかに違う彩度が使われているのがわかる。
色の散らばり具合が違う
下のグラフは画像で使用されている色の散らばり具合である。デジモンの色が分散しがちであるのと同時に、世代を重ねるごとにポケモンも多くの色が使用されているのがわかる。
色の散らばり方の算出方法:
RGBをLabに変換し、DBSCANで近い色をクラスタリング。
算出したabからarctanでラジアンに変換したものを重み付き合成ベクトルを作成し、
合成ベクトルの長さが大きいほど色が集中し、小さいほど色が分散していると定義。
実験:グラエナをポケモンらしくしてみよう!
この子は2000回中1997回デジモンに間違われたポケモン。グラエナである。
グラエナを知っている方々は 「グラエナがデジモンっぽい????何言ってんだ???エースバーンのほうがデジモンだろ???」 と思うかもしれないが、AI的にはめちゃくちゃデジモンっぽいらしく、エースバーンの4倍以上デジモンに間違われている。
検索ワード | ヒット数 | AIによる 誤分類回数 |
画像 |
---|---|---|---|
「グラエナ デジモンっぽい」 | 8 件 | 1997 | |
「エースバーン デジモンっぽい」 | 約 277,000 件 | 445 |
このグラエナのデジモンっぽいらしい部分を少しずつ改変した画像を嫁に22枚作成してもらい、ランダムに学習した分類器に1000回分類させ、どの部位がポケモンらしさに寄与しているのかを計測した。
実験に使用したグラエナ画像は以下のgithubにアップしました
https://github.com/mrok273/Qiita/tree/master/%E3%83%9D%E3%82%B1%E3%83%A2%E3%83%B3/poke_vs_digi/graena_change
結果は以下のようになった。
最もデジモンらしいグラエナ (本家) |
最もポケモンらしいグラエナ (毛まとめ丸+三角目+ ハイライト+足先) |
---|---|
ポケモンらしさ 1.3% | ポケモンらしさ 94.0% |
多くのポケモンファンは 「三角目こそがポケモンらしい特徴として至高!!」 などと考えるだろう。しかし、AIにとっては寄与率7.3%と些細な特徴である。
それよりも毛のギザギザの影響が大きく、毛先をまとめてあげるだけでポケモンらしさに65.7%も貢献した。
グラエナがデジモンだとAIに認識されたのは毛先のギザギザの影響が大きかったようだ。
全ポケモンの画像を確認してみたが、たしかにここまで毛がフサフサに描かれているポケモンは他にはいなかった。
「嘘だ!他にももっといるはずだ!」と思うかもしれないが、
毛がフサフサそうなポケモンの多くは上の実験で言うところの
「毛先まとめ丸」のように大きめの束が丸く描かれている。
全身から長い毛が生えまくっているというのが特徴のポケモン、オーロンゲの毛ですら、
毛先がまとめられ、丸みを帯びたような表現となっている
人間とAIにとっての「デジモンっぽさ」は違う仮説
先ほど、「デジモン」について言及のある回答155件の中で、私の数え方で34件(ポケモンたかさおじさんの数え方で22件)が「いつからデジモンっぽい」「○世代がデジモンっぽい」への言及があった。(データがたった34件なので特にここからは話半分で読んでほしい)
http://pkmnheight.blogspot.com/2020/07/7.html#itu
深層学習分類器によるとデジモンっぽいデザインのポケモンは 「4,7,8」世代だった。
一方、アンケートで言及が多かったのは、「5,7,8」世代であった。
これは一体どういうことなのか?
やはり人間とAIは分かりあえないのだろうか?
この人間とAIの違いは、ポケモンたかさおじさんの以前の記事にヒントがあった。
ポケモンらしさ-5_ヒトガタ増えた?
http://pkmnheight.blogspot.com/2020/05/5.html
5世代の直立ポケモンが多いのである。
全種 | 直立数 | 直立率 | 増加率 | |
---|---|---|---|---|
1世代 | 151 | 36 | 23.8% | |
2世代 | 100 | 28 | 28.0% | 117.4% |
3世代 | 135 | 33 | 24.4% | 87.3% |
4世代 | 107 | 27 | 25.2% | 103.2% |
5世代 | 156 | 51 | 32.7% | 129.6% |
6世代 | 72 | 20 | 27.8% | 85.0% |
7世代 | 86 | 27 | 31.4% | 113.0% |
8世代 | 89 | 33 | 37.1% | 118.1% |
直立ポケモンの割合が前の世代からの増加率と、
アンケートで「デジモンっぽい」と言及されていた世代を比較してみると、第2世代を除いて「5世代が高い」「6世代で落ち着き」「7,8世代が高い」と増減がほぼ一致した。
おそらく、人間の認識でのポケモンにおけるデジモンっぽさとは、二本足で直立しているかどうかが大きく効いているのかもしれない。
何故ならデジモンは進化すると直立する(もっと言えば人間・スーパーロボットっぽくなる)のはデジモンに詳しくない者でも知っているような話だ。(実際にデジモンの直立率を名前がア行の者だけ確認してみたら 50%ものデジモンが直立していた )
つまり、人間が感じる「最近のポケモンはデジモンっぽい」には
1. デジモンは進化すると二本足で立つ
2. 最近のポケモンは二本足で立つ
3. よって、最近のポケモンはデジモンっぽい
という三段論法が成り立っているかもしれない。
まとめ
- 初代・金銀時代の昔のポケモン画像と、ランダムなデジモン画像を学習させた分類器を作成し、新しいポケモンと残りのデジモンを分類させる。これを2000回繰り返し、誤分類率を集計した。
- その結果、「4,7,8世代」のポケモンがデジモンへの誤分類率が高かった。つまり、たしかに最近のポケモンほどデジモンっぽいと言えなくもない。
- デザインが複雑なポケモンほどデジモンと分類されやすいが、他にも彩度・丸い目・小さく描かれた顔などがAIにとっての「デジモンっぽい」に影響しているようだが、把握できたのはごく一部の特徴かもしれない。
- 同じくらいの「ポケモンらしさ」を持つポケモンとデジモンのペアを作り、Grad-CAMにかける方法と、中間層の出力をフィルターのチャンネルごとで確認する方法を組み合わせることで、爪・塗り・目・金属的なテカりなど、いくつかの特徴を基にAIは分類しているということが、ある程度は把握できた。
- ディープラーニングが思う「デジモンっぽい」と人間が思う「デジモンっぽい」は異なり、人間は直立二足歩行という文脈からデジモンらしさをより強く感じとるのかもしれない。
反省点
- デジモンに詳しい方の意見を聞きたかった。ポケモンは古いのと新しいのを区別して学習を行ったが、デジモンは調べても全然よくわからなかったため、完全にランダムで行ってしまった。
- 「ポケモンがデジモンと間違われる条件」 をいくつか上げたが、解釈できたのはごくわずか。
- AIによる分類と人間の直感を近づけるには、各画像からどのくらい直立しているかの情報を抽出できる必要がある。生身の人間の画像ではpose estimation,posture recognitionなどの技術が発展している。イラストの、ましてやそれぞれ手の位置や数すら異なるポケモンで行うのは難しく、顔認識すら困難だった。