新歓ブログリレー2020
ぱいてょんを使ってランダム部員の推しの特徴を可視化してみる
公開日:
2020/04/16
ぱいてょんを使ってランダム部員の推しの特徴を可視化してみる

情報オタク工学, 始めませんか ?

1. はじめに

近年, 人工知能の基盤である深層学習をはじめとする機械学習手法が大きく発展してきている. また, その発展を受けて人工知能を用いた創作物理解が注目されているが, 創作は人間による高度な知的活動であるため, 未だに難しいタスクであると考えられている.

本稿では, 堅苦しいことは抜きにしてなんちゃって機械学習を用いた遊びを紹介する. 人工知能の研究に興味があるオタクの皆には読んでほしい.

ぱいてょんへの興味の第一歩となれば幸いです.

2. 要素技術

ぱいてょん (Python)

データ解析や AI の分野で広く使われていることから, 今後も需要が大きくなると予想されている言語. 競プロで使うと計算時間を考えるのが苦痛らしい.

ちゃんとインストールする時は Python 3 を入れましょう.

機械学習

機械で学習すること. ちゃんと線形代数を勉強しておこうね...

Chainer

Python で深層学習のプログラムを実装する際に使用するフレームワークの 1 つ. 日本製. そんでもって開発終了. 本稿を書くために導入した. 他には PyTorch や TensorFlow, Keras などがある. 個人的には PyTorch がオススメ.

illustration2vec

illustration2vec とは, Masaki Saito & Yusuke Matsui (2015) らが提案した画像のベクトル化手法で, DanbooruSafebooru から 100 万枚の画像を用いて学習した事前学習済みモデルが公開されている. Chainer で動く. (もちろん他のフレームワーク用に書き換えれば使えるが, めんどくさい...) Chainer で動くと言ったが, 今の Chainer のバージョンではエラーを吐くので issue を色々見て訂正する必要がある. 詳しくは元論文を読もう.

Danbooru のリンクを踏むときは注意 !!

適応事例

illustration2vec は, DanbooruSafebooru でよく使われているタグを正解ラベルとしているので, 簡単に二次元イラストの特徴を検出できるため, 大量の画像に対して類似画像を検索出来たり, 画像の意味における画像変換や応用例としてタグの特徴を満たす画像の生成などが可能となっている.

1. タグの抽出

[{
'general': [('1girl', 0.979851484298706), ('brown hair', 0.9298213720321655), 
('red eyes', 0.8501648902893066), ('hat', 0.8394175171852112), 
('solo', 0.664661169052124), ('long hair', 0.5601401329040527), 
('blush', 0.5127583146095276), ('looking at viewer', 0.4400078058242798), 
('brown eyes', 0.32889047265052795), ('gloves', 0.2941744327545166)], 
'character': [('minase iori', 0.9728094339370728)], 
'copyright': [('idolmaster', 0.9921579360961914)]
}]

戻り値は辞書のリストで値は probability となっている. キャラクタの見た目も十分に理解していて, 水瀬伊織ちゃんをドンピシャで当てているのが分かる.

[{
'general': [('1girl', 0.9855268001556396), ('blue eyes', 0.9412274360656738), 
('blue hair', 0.9281067848205566), ('solo', 0.8681237697601318), 
('animal ears', 0.7891942262649536), ('white background', 0.5850913524627686), 
('simple background', 0.48277929425239563), ('blush', 0.46952560544013977), 
('long hair', 0.4305582642555237), ('face', 0.39329931139945984), 
('looking at viewer', 0.38631632924079895), ('cat ears', 0.3147481083869934)], 
'character': [], 
'copyright': [('original', 0.4210817217826843), ('touhou', 0.26882970333099365)]
}]

ちゃんとケモ耳であることや, どちらかと言えばオリジナルキャラクターであることを当てている.

当たり前だけど, 学習時に使っていないタグのキャラクタを当てるのは不可能.

[{
'general': [('1girl', 0.9704602956771851), ('brown hair', 0.9501469731330872), 
('solo', 0.9093031287193298), ('long hair', 0.7882393598556519), 
('red eyes', 0.7473381161689758), ('open mouth', 0.6213598847389221), 
('smile', 0.5815153121948242), ('blush', 0.4819558262825012), 
('jewelry', 0.38118976354599), ('looking at viewer', 0.3717324435710907), 
('bow', 0.3690112829208374), ('face', 0.34078890085220337), 
('hair bow', 0.28263092041015625), ('earrings', 0.2521438002586365)], 
'character': [], 
'copyright': [('idolmaster', 0.46120685338974)]
}]

と思いきや, 超最近の辻野あかりちゃんはキャラクタの特定はできていないンゴながらも, 恐らく画風からアイマスであるンゴと予想しており, 感動したンゴ.

[{
'general': [('solo', 0.5309839248657227), ('no humans', 0.5140414834022522), 
('1girl', 0.4384467899799347)], 
'character': [], 
'copyright': [('touhou', 0.7172183990478516)]
}]

no humans (一応, 女の子扱いされてる). 東方キャラと予想されてるのはおさげのせいかな...

2. 特徴ベクトルの抽出

shape: (1, 4096), dtype: float32
[[ 7.47459459  3.68610668  0.5379501  ..., -0.14564702  7.31408596]]

1 x 4096 次元のリストが返ってくる.

3. 動画にも適応可能

フレームごとに解析すればこんなこともできるらしい... 凄い (KONAMI 感)

主成分分析

機械学習において私たちは画像や文章をベクトル化して解析しますが, 一般にこれらのベクトルは高次元です. 私たちが目で見て理解できるのは2, 3次元までなので要するに, 高次元のデータを上手に表現する上で大事な所を探し, 次元を圧縮することでデータの識別や特徴が分かりやすくなります.

本稿では次元削減アルゴリズムの 1 つである, t-SNE を用いて, 上で述べたように illustration2vec の出力として得た 4096 次元をデータを 2 次元上にマッピングすることを目的とします.

3. データセット

Twitter で募集をした結果集まった部員の推しキャラクタ, 及びランダム部員との関わりを通じて主観で決めたキャラクタの顔画像を 1 キャラクタにつき 3 枚ずつ用意した.

画像総枚数は 75 枚, サイズは 256 x 256 に統一している. (データ数少なくね ?)

4. 実験手法

  1. illustration2vec の事前学習済みモデルを用いて, データセットに含まれる画像を 4096 次元の特徴ベクトルで表す.
  2. t-SNE を用いて, 特徴ベクトルを 2 次元にマッピングし, illustration2vec によるベクトル表現化の妥当性について考える.

5. 結果

下図に, t-SNE を用いて特徴ベクトルを 2 次元にマッピングした結果を示す. 点の代わりに画像をプロットする方法はコチラの記事を参考にした.

6. 考察

画像全体の色合いよりも, キャラを優先してクラスタを形成し, 分類されていることが分かります. (三密 !!) キャルに至っては アニメ, ゲーム, 3Dモデル (CM) とすべて異なる媒体ですが, 画風に依らずキャラクタの特徴を上手に捉えていることが分かります. ここまで綺麗に分かれたのは, 顔を強調したデータのみを扱ったからだと考えられます.

データ数が断然少ないので断言はできませんが他に見える特徴としては, 男性キャラクタや no humans がそれぞれまとまっていたり, グラフ上部にアイドル関連のキャラクタが固まってプロットされているようにも感じられることから, 物凄く未来を感じます. 夢が広がりますね.

7. 結論

illustration2vec 凄い !! ぱいてょんすごい !! みんなもやろう !!

今後は, illustration2vec を用いた好きな画像の生成にも挑戦したいなと思います.

loading...