content流行りの画像生成技術GANを調査し、役に立つシナリオがないか考えてみるPython画像処理機械学習MachineLearningDeepLearningはじめに最近、画像分類系のアプリを立て続けに5種類くらい開発しました。いう状況もあって、画像系のAI技術のおもしろさにハマり、いろいろと研究しています。中でも特に興味を持っているのが去年くらいから爆発的に流行っているGAN。ニュースでもたびたび取り上げられ、AIテクノロジーの進歩の象徴のように扱われているような感があります。「写真が証拠になる時代は終わった。」これはGANのすごさが手軽に体験できるスマフォアプリ。一度使ってみると、その未来感におどろきます。FaceAppあと、なんといっても社会的な大問題を引き起こしたDeepFake(アプリ名はFakeApp。公式サイトは消滅している模様)このニュースのリンク張りたくないので、ググってみてください。非倫理的な利用の仕方をしたGANで、現在の「AI倫理ブーム」を加速させる要因となった事件です。「画像判別」の方は普通のエンジニアが利用できるような製品がMicrosoftやGoogleからリリースされたりして普及期に入ってきている感がありますが、それとは違って「画像生成」は、まだ普及段階に入っているようには感じられません。このGAN技術をブログなどに投稿している方たちも研究者っぽい方が多く、投稿内容も「どう使うか」ということより、「どう作るか」がほとんどな気がします。僕は「どう使うか」を考えるのが好きだし、仕事も「広く業務に役に立つ使い方を考える」のがメインタスクなので、とりあえず「どう作るか」はさっと読み流す程度で、ざっくり使ってみて「どう使えるか」を考えてみました。アレコレ言う前に「まず使ってみることが大事!」。いうことで環境作って、試してみました。この記事で書くことGANってどんな種類があるのか?どんなことができるのか?学習データはどんな形式で用意したらいいのか?※これが分かればカスタマイズがどこまでできるかザックリわかる。今後の延長戦上でどういうことができそうか?かなりライトにしか調査していないのと、GANって亜種だらけで混沌としていて複雑で、間違った内容を書いてしまう可能性が大です。間違ってても許してください。指摘して頂けると有難いです。画像系のテクノロジーをざっくりまとめる(サマリー)画像系のAI技術は大雑把に分けるとこんな感じ。GANは亜種が大量にあるので、僕が目についた有名どころのみ書いています。分類Classification写真単位に分類する技術。写真の全体感で分類し、タグ付けしたりして使う。Detection写真の中の対象物を検出する技術。大量の写真の中から、「車」が写っている写真だけ抽出するとか。Segmentation写真に写っているものを範囲別に分ける。上の半分は空で、右側にはビル、下は道路、左には大型トラックとか範囲を判別する。2017/01~線画から画像生成する技術。画質が256x256までで荒い。NVIDIApix2pixの解像度拡張版。2048×1024という高解像度で生成できる。NVIDIApix2pixHDの生成する画像の精度向上版。本物に近い画像が生成できる。2017/11~大量の顔画像を学習し、架空の顔を生成する。性別度合いや若さ度合いをパラメータで切替えられる。2018/09~StarGANの亜種。GANより優れている点があるのかどうかわからない。紹介記事が多く知名度が高い。UIが良かったとかそういう理由で有名になったのだと思われる。確かにjupyterで使えるなどデモ使いやすさはStartGanよりいいかも。NVIDIA高解像度かつ本物と見分けがつかない高品質な顔写真が生成できる。車や動物、ベッドなど物体も生成できる。2つの写真を合成し、特徴を移植することができる。2019/02線画から顔を生成したり、顔をイラストで書き換えて、メガネを消したりアクセサリーをつけたりできる。2017/04~馬を縞馬に変えるなど、特徴を別の似た物体に移すことができる。GANの入れ替えは形状を変化させれないのに対して、こちらは形状を変えられる。いえ正直、まだ精度や解像度が低いかなという印象。2016/11服の着せ替えに特化したファッション業界用のGAN。GANへと解像度および精度を順当に向上させていっています。Segmentationの逆回しのような画像生成です。GAN見たときは「おおっ、すごい綺麗で実用レベルだ」と思ったのですが、よくみてみるとまだ荒く違和感アリアリな精度です。この景色だけ見ると本物と見分けがつかないように感じる。よさげですよね?しかし、その理由は形式が非常に単純だから。なんかぐにゃぐにゃになりました。いうことで、現状は単純な風景では実用レベルですが、少しでも複雑になるとまだ生成精度低いです。以下のように、色がないセグメント分けした図と画像。セグメント分けした図は、画像分類の方の技術で生成できそう。この生成方法なら、大量に作れそう。GANがめちゃくちゃすごい!現状、さまざまなGANの中で最も実用に向かって進んでいるGANだと思う。何がすごいって、自然な顔の生成能力と解像度です。これでもまだMAXの解像度じゃないです。自然と人間として受け入れる精度の顔です。偽物の顔とは疑う余地はありません。歯並びがちょっと悪いところとか、かなり本物っぽい。パラメータで雰囲気を変えれます。以下は雰囲気の変遷をアニメーションGiFにしたもの。以下では2人の顔を混ぜています。最左側4人と最上部3人の顔を混ぜた結果を表しています。それぞれ人の直感的にも、「それらしい」と感じるところがすごい。GANやTL-GANだとカテゴリーで人の顔を弄れます。Maleの+ボタンを5回ずつ押して、男性っぽさを加えていきます。次にAgeの+ボタンを5回ずつ押して、加齢していきます。