GANの入門

PyTorch で学ぶ画像向け Deep Learning

Michal Oleszak

Machine Learning Engineer

敵対的生成ネットワーク(GAN)

生成されたネコ画像。

PyTorch で学ぶ画像向け Deep Learning

Pokemon Sprites データセット

Pokemon Sprites データセットのサンプル画像

  • PokeAPI の Pokemon Sprites データセット
  • ポケモンゲームの生物風キャラ約1300枚のスプライト
  • 目標: 新しいポケモンを生成!
PyTorch で学ぶ画像向け Deep Learning

GANのアーキテクチャ

GANのワークフロー図。

PyTorch で学ぶ画像向け Deep Learning

GANのアーキテクチャ

GANのワークフロー図。

PyTorch で学ぶ画像向け Deep Learning

GANのアーキテクチャ

GANのワークフロー図。

PyTorch で学ぶ画像向け Deep Learning

GANのアーキテクチャ

GANのワークフロー図。

PyTorch で学ぶ画像向け Deep Learning

GANの学習プロセス

 

 

GANのワークフロー図。

  • 生成器: 本物らしい画像を生成するよう学習
  • 識別器: 偽と本物を見分けるよう学習
  • 相反する目的で双方が上達
  • 最終的に生成器はリアルな画像を生成
PyTorch で学ぶ画像向け Deep Learning

基本的な生成器

class Generator(nn.Module):
    def __init__(self, in_dim, out_dim):
        super(Generator, self).__init__()

self.generator = nn.Sequential( gen_block(in_dim, 256), gen_block(256, 512), gen_block(512, 1024), nn.Linear(1024, out_dim), nn.Sigmoid(), )
def forward(self, x): return self.generator(x)
  • Generator クラスを定義
  • 生成ブロックの列、全結合層、Sigmoid 活性化
    def gen_block(in_dim, out_dim):
      return nn.Sequential(
          nn.Linear(in_dim, out_dim),
          nn.BatchNorm1d(out_dim),
          nn.ReLU(inplace=True)
      )
    
  • 入力を全層に通す
  • 入力: サイズ in_dim のノイズ
  • 出力: サイズ out_dim の画像
PyTorch で学ぶ画像向け Deep Learning

基本的な識別器

class Discriminator(nn.Module):
    def __init__(self, im_dim):
        super(Discriminator, self).__init__()

self.disc = nn.Sequential( disc_block(im_dim, 1024), disc_block(1024, 512), disc_block(512, 256), nn.Linear(256, 1), )
def forward(self, x): return self.disc(x)
  • Discriminator クラスを定義
  • 識別ブロックの列と全結合層
    def disc_block(in_dim, out_dim):
      return nn.Sequential(
          nn.Linear(in_dim, out_dim),
          nn.LeakyReLU(0.2)
      )
    
  • 入力を全層に通す
  • 入力: サイズ in_dim の画像
  • 出力: サイズ 1 の判定
PyTorch で学ぶ画像向け Deep Learning

練習しましょう!

PyTorch で学ぶ画像向け Deep Learning

Preparing Video For Download...