GANを活用したレシピ紹介

# はじめに

Axrossを運営している藤原です。

**[Axross](https://axross-recipe.com/recipes)** とは、エンジニアの"教育"と"実務"のギャップに着目し、「学んだが活用できない人を減らしたい」という想いのもと、ソフトバンクと社内起業制度にて立ち上げたサービスです。
現役エンジニアによる実践ノウハウを"レシピ"として教材化し、実際にプログラミングで実装を追体験しながら学ぶことができます。AI/機械学習をテーマにした、様々な業務領域やビジネスの課題解決に応用できる実践的な学習教材を160以上揃えています。（2021年8月時点）
Axross：https://axross-recipe.com
公式Twitter：https://twitter.com/Axross_SBiv
![Axrossアイキャッチ.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620853/9f500e0e-a759-20e2-bb8b-480bbcfaaf9b.png)
今回は、GANの概要、仕組み、特徴と代表的なモデルを紹介し、Axrossのサービスで学べる実践的な、**GANを活用した人気レシピ**をご紹介します。

# GANとは
「**敵対的生成ネットワーク**」（*Generative Adversarial Networks*、略称GANs、以下GAN)とは、2014年にイアン・グッドフェローらによって[「Generative Adversarial Nets」](https://arxiv.org/abs/1406.2661)という論文で発表された人工知能アルゴリズムであり、ディープラーニング技術です。

GANは、敵対的ネットワークという、互いに競合する2つのニューラルネットワークモデルを用いて、データから特徴を学習することで、実在しないデータを生成したり、存在するデータの特徴に沿って変換する、画像生成モデルです。

正解データを与えることなくAIが自動で特徴を学習する「教師なし学習」の手法を用いており、その学習精度の高さとアーキテクチャーの柔軟さから、アイデア次第で広範な領域に適用できるため、近年GAN研究は盛り上がり、今後GANを改良した応用研究や実用化が大いに期待されています。

ヤン・ルカンは、GANについて、「機械学習においてこの10年間で最も興味深いアイデア」（"This, and the variations that are now being proposed is the most interesting idea in the last 10 years in ML, in my opinion."）と評価しており、GANはAIの今最も熱い研究分野とも言えます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620853/417e6ed4-f2eb-9075-b953-844555b55dd5.png)

# GANの仕組み
GANの仕組みを解説します。
GANは、**Generator（生成者）**と**Discriminator（判定者）**の2つのモデルを競わせるように学習する技法です。

まず、生成される画像のもととなる潜在変数（z）から、Generatorが、Discriminatorを騙せるように、よりリアルな訓練データに似た画像を生成します。
Generatorが生成した画像に対し、Discriminatorはそれが訓練データ“本物”か、もしくはGeneratorが生成したデータ“偽物”か を判定できるように学習します。
これが繰り返されることでGANの学習が行われます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620853/abaa9fe1-3e4b-4c46-0988-34a6a1097815.png)
GANの学習では前述の通り、Generatorは「Discriminatorを騙せるような精巧な“偽物”を作ることができる」ように、Discriminatorは「用意された“本物”とGeneratorが作り出した“偽物”を区別できる」ように、敵対的に学習していきます。GeneratorとDiscriminatorはそれぞれの目的に従って交互に最適化され、最終的にはどちらも非常に良い性能に到達します。このときにGeneratorが生成する“偽物”が、“本物”と区別できないような特徴を捉えていれば、GANの学習は成功となります。

# GANの特徴
GANは非常に注目されている深層学習モデルですが、それ自体は万能ではなく、求めるタスク・データによって得意・不得意があるため、GANを活用する上でGANの特徴を理解することは重要です。
## 強み
・**高品質な画像の生成**
GANのアーキテクチャーは、オートエンコーダ等他の深層学習モデルに比べ、よりリアルでかつ高精度な画像生成ができます。

・**データの増幅**
GANを活用し、画像データを自動で生成することで、サンプルデータの特徴を含んだ新しいサンプルデータを生成することができます。GANは、不安定な画像データセットであっても膨大な量があれば、画像同士の特徴を抽出し、新しく類似データを生成することができます。

・**他技術との組み合わせ**
word2vec技術と組み合わせて画像ラベルから演算を行う等自然言語処理と連携したり、CLIPと組み合わせて画像とテキストから特徴ベクトルを抽出したり、画像による異常検知を実現したり、オリジナルGANを他技術と組み合わせることで様々な応用ができます。
## 弱点
・**生成データが評価できない**
GANが生み出した画像データ等に対して、どのような基準で「類似している」または「求める画像である」かを判断するか、判定ロジックが難しく、基準が不透明になりがちです。

・**動作が不安定**
オリジナルなGAN単体では、データの過学習が起きたり、生成画像の判断基準が不透明であったりなど、動作が不安定な部分があり、そのまま実用化することは困難です。

GANの強み、利便性を最大限に活かしつつ、弱点を補うために他技術と組み合わせる等のGANの応用研究が日進月歩で日々進んでいます。

# GANの代表的なモデル
・**DCGAN**
**DC（Deep Convolutional）GAN**は、GANを画像生成として活用するために、画像認識で有名な**畳み込みニューラルネットワーク（CNN）**技術を応用したモデルです。
オリジナルGANが発表された翌年の2015年11月にDCGANが発表され、オリジナルGANと比べてより深いニューラルネットワークで安定した学習が可能になり、より鮮明な画像が生成できるようになりました。

下記画像のように、DCGANが実在しない部屋の内装画像を生成しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620853/1f0ba1c4-115a-c36b-51a7-e03892e78f08.png)
[UNSUPERVISED REPRESENTATION LEARNING WITH DEEP CONVOLUTIONAL GENERATIVE ADVERSARIAL NETWORKS](https://arxiv.org/pdf/1511.06434.pdf)

・**CycleGAN**
**CycleGAN**は、無関係な2枚の写真を使い、互いに変換し合う（特徴を似せ合う）ようにサイクル状のネットワークを構成する、2017年3月に発表されたGANモデルです。
名画と風景画像、人物画像とアニメ画像、同一画像の季節入れ替え 等関係ない画像同士を合わせ、それっぽく合成させた画像を生成することができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620853/e8ca45e8-f80c-ca37-ae43-5aba284c0ed9.png)
[FACE AGING WITH CONDITIONAL GENERATIVE ADVERSARIAL NETWORKS](https://arxiv.org/pdf/1702.01983.pdf)

・**Age-cGAN**
**Age-cGAN**は、入力する画像に対し、年齢といった制約を表現し、人の顔画像の若年化や老化を生成できるようになったGANモデルです。
近年スマホアプリ等でも利用されていますが、下図のように入力した人物画像の顔から目標となる年齢の顔に変換することができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620853/4a086293-c006-3fd4-fd68-46cf16940860.png)
出典：[FACE AGING WITH CONDITIONAL GENERATIVE ADVERSARIAL NETWORKS](https://arxiv.org/pdf/1702.01983.pdf)

・**StyleGANとPGGAN**
**StyleGAN**によりスタイル変換技術（**AdaIn**）により画像のノイズを柔軟に調整して、画像の特徴変換ができるようになり、**PGGAN**により**Progressive Growing**という高解像度画像を生成できるようになったことで、生成した画像の大局的な構造から詳細構造まで制御可能になりました。

2018年12月ごろに発表され、当時GANで生成された画像は、人の目ではもはや見分けがつかないレベルにまでリアルな画像を生成できると話題になりました。また、このころからディープフェイクが社会問題になったり、犯罪の写真証拠はもう役に立たないと言われるようになったり、世の中に大きな影響を与えました。

# GANを活用したレシピの紹介
### [PyTorchを使ってGANを実装し画像生成するレシピ](https://axross-recipe.com/recipes/32)
投稿者：@satoshi さん

PyTorchを使ってGANによる画像生成を行う手法を学ぶことができます。GANを実装することで、データから特徴を学習し、実在しないデータを生成します。GANで画像生成の第一歩を踏み出す際におすすめです。

このレシピを応用することで、架空の人物の顔画像や新しいコンテンツを創造させ、自動で生成できます。

https://axross-recipe.com/recipes/32

### [Pytorchを使ってGANによる異常検知を行うレシピ](https://axross-recipe.com/recipes/113)
投稿者：[@WIReg](https://twitter.com/WlReg)さん

GANを画像の異常検知の領域に応用した「**AnoGAN**」と「**EGBAD**」の手法を実装していきます。GANの仕組みについて丁寧に解説されており、GANの理解を深め、GANの異常検知における実務活用例を学ぶことができます。

GANによる画像の異常検知は、工場での外観検査、農作物の品質検査、医療画像からの疾患検査、などが挙げられ、活用分野は非常に広いです。

https://axross-recipe.com/recipes/113

### [Kerasで学ぶ画像生成モデルDCGANレシピ](https://axross-recipe.com/recipes/330)
投稿者：[@kz_onk](https://axross-recipe.com/users/4687) さん

GANモデルの基礎を解説し、GANをベースに作られた**DCGAN(Deep Convolutional GAN)**モデルをKerasによって実装する手法を実践形式で学ぶことができます。

https://axross-recipe.com/recipes/330

### [StartGAN-v2で顔の特徴操作・顔の合成を実現するレシピ](https://axross-recipe.com/recipes/228)
投稿者：@lulu1351 さん

有名人の顔写真データセットを用いて、**StarGAN-v2** による画像に写る人の顔の特徴操作・顔の合成を行う手法を学ぶことができます。

実際に深層学習GANモデルによる顔画像の生成や顔の特徴点・位置の操作を行い、 Google Colaboratory上で手を動かしてその性能を体感しながら、画像処理を学ぶことができます。プライバシー侵害・肖像権侵害・著作権侵害にならないようにご注意の上、実践的なAI学習に活用ください。

https://axross-recipe.com/recipes/228

### [StyleGANで本物と区別がつかない画像を生成するレシピ](https://axross-recipe.com/recipes/316)
投稿者：@shim tom さん

**StyleGAN**は、人の目ではもはや見分けがつかないレベルにまでリアルな画像を生成できると話題になった超高精度な画像生成ができる最新のGANモデルです。

公開されている学習済みのStyle GANとデータセットを用いて、本物と区別がつかない画像を生成する手法を、実際に動かし体験しながら学ぶことができるレシピです.

https://axross-recipe.com/recipes/316



### [StyleGAN＋CLIPモデルで、テキストによる顔画像の編集を行うレシピ](https://axross-recipe.com/recipes/168)
投稿者：[@jun40vn](https://twitter.com/jun40vn)さん

顔画像の編集を行う**StyleGAN**＋**CLIP** モデルを実装し、ランドマークに合わせた顔画像の切り出し、編集したい画像を生成する潜在変数の推定、テキストによる潜在変数の編集の手法、様々な潜在変数の編集例を学ぶことができます。

StyleGANにCLIPモデルを組み合わせることで、編集したい内容をテキストで指示できる汎用性を持たせ、かつ高速処理が可能になります。実務では、顔画像の編集・分析を行う場面に活用できます。

https://axross-recipe.com/recipes/168

関連レシピとして、**[テキストから画像を生成するDALL-Eを実装するレシピ](https://axross-recipe.com/recipes/148)**や、**[１枚の静止画を動画に合わせて動かすレシピ](https://axross-recipe.com/recipes/244)**などもありますので、是非GANモデルを実装しながら性能を体験してみてください。

https://axross-recipe.com/recipes/148

https://axross-recipe.com/recipes/244

# 最後に

今回は、Axrossサービスで学べる実践的な、**GANを活用したレシピ** をご紹介しました。

AIを活用できる人材になるためのコツは、座学勉強よりも、まず実際にAIを実装する体験をしてみる、そして、様々なテーマやデータセットで、異なるAIモデルの実装を繰り返し演習することが近道だと思います。

Axrossのレシピを通して、プログラムの意味を考えながら写経（コードを実際に書き写す行為）し、実際に動くものをつくりながら学ぶことで、新たな知識の習得やスキルアップの一助になれれば幸いです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620853/b48ed75c-2ed0-5598-0ca4-195626c30d70.png)
また、Axrossでは自身のナレッジを学習教材"レシピ"として寄稿いただけるエンジニアの方も募集しています！

見習いエンジニアから募った学びたい内容を**[ウィッシュリスト](https://docs.google.com/spreadsheets/d/1HTL3puxFN6GGt6ReOwEbkuRGty82q_IDkjcQ9WSkD8c/edit#gid=175640870)**として掲載しています。募集中のテーマからご自身で作成いただけるようでしたら、レシピ作成にご協力お願いいたします。