0Pricing
Learn AI with Python · レッスン

条件付きGANとスタイル変換

クラス条件付けを行うcGAN、CycleGANの概念、VGGを使ったニューラルスタイル変換について学習します。

「条件付きGANとスタイル変換」はCoddyKit上の無料Learn AI with Pythonレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはLearn AI with Python学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Learn AI with Pythonコースには全4レッスンが含まれています。

GANの生成内容を制御する

通常のGANはランダムなサンプルを生成するだけで、特定のクラスを指定することはできません。このレッスンでは、条件付き生成(cGAN)、非対応画像変換(CycleGAN)、ニューラルスタイル転送を扱います。

条件付きGAN(cGAN)

cGANは、クラスラベルなどの条件を生成器と識別器の両方に追加します。これで、ラベルをノイズと一緒に与えることで「7を生成する」と指定できるようになります。

生成器への条件付け

生成器は、ラベル(one-hotまたは埋め込み表現)をノイズベクトルと連結します。結合された入力によって、指定されたクラスのサンプルを生成できるようになります。

label_emb = embedding(label)        # e.g. dim 10
z = torch.randn(batch, 100)
gen_input = torch.cat([z, label_emb], dim=1)
fake = generator(gen_input)

識別器への条件付け

識別器もラベルを受け取るため、「これは本物か」だけでなく、「これはこのクラスの本物の例か」も判定します。これにより、生成器は条件に従うよう強制されます。

d_input = torch.cat([image, label_emb], dim=1)
score = discriminator(d_input)

非対応画像変換

同じ馬をシマウマに変換した画像のような、対応するペアがないことはよくあります。CycleGANはペアになっていない画像を使って2つのドメイン間を変換し、対応する例なしに馬からシマウマへ、またその逆へ変換することを学習します。

2つの生成器、2つのドメイン

CycleGANは2つの生成器、G: A to BとF: B to Aを使い、それぞれが専用の識別器を持ちます。これらを組み合わせることで、ドメイン間を両方向に変換します。

# G: photo -> painting
# F: painting -> photo

サイクル一貫性損失

中心となる考え方は、AをBに変換してから再びAに戻すと、元の入力に戻るべきだということです。サイクル一貫性損失によってF(G(a)) == aを強制し、対応するペアがなくても写像を制約します。

cycle_loss = (
    l1(F(G(a)), a) +
    l1(G(F(b)), b)
)

ニューラルスタイル転送

ニューラルスタイル転送は、ある画像のコンテンツと別の画像のスタイルを組み合わせます(例えば、ゴッホ風に描かれた写真です)。事前学習済みCNNの特徴を使い、出力画像そのものを直接最適化します。

コンテンツ損失

コンテンツ損失は、深いCNNの特徴マップを一致させることで、出力の高レベル構造をコンテンツ画像に近づけます。画像に何が含まれているかを保ちます。

content_loss = mse(features_out, features_content)

スタイル損失とグラム行列

スタイルは、特徴チャネル間の相関を表すグラム行列で捉えられます。グラム行列を一致させることで、テクスチャや色を転送します。スタイル損失は、出力画像とスタイル画像のグラム行列を比較します。

def gram(f):
    b, c, h, w = f.size()
    f = f.view(c, h * w)
    return f @ f.t()

style_loss = mse(gram(features_out), gram(features_style))

損失の組み合わせ

全体の損失は重み付き和です。alpha * content_loss + beta * style_lossの重みを調整することで、結果がコンテンツをどれだけ保持するかと、スタイルをどれだけ強く反映するかのバランスを取ります。

total = alpha * content_loss + beta * style_loss
total.backward()  # gradients update the output IMAGE

理解度チェック

条件付き生成についての理解度を確認しましょう。

まとめ:条件付きGANとスタイル転送

cGANでは、制御された生成を行うためにクラスラベルを生成器(および識別器)の入力へ連結します。CycleGANではサイクル一貫性損失を使って非対応画像を変換し、ニューラルスタイル転送ではコンテンツ損失とグラム行列によるスタイル損失を組み合わせて画像を塗り替えます。

よくある質問

「条件付きGANとスタイル変換」レッスンは無料ですか?

はい。「条件付きGANとスタイル変換」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Learn AI with Pythonコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Learn AI with Pythonコースには全4レッスンが含まれています。

「条件付きGANとスタイル変換」で何を学びますか?

クラス条件付けを行うcGAN、CycleGANの概念、VGGを使ったニューラルスタイル変換について学習します。 ブラウザで直接実行するハンズオンコードでLearn AI with Pythonを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Learn AI with Pythonを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのLearn AI with Pythonは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。

「条件付きGANとスタイル変換」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このLearn AI with Pythonレッスンでコードを書いて実行できますか?

はい。すべてのLearn AI with Pythonレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. 表現学習のためのオートエンコーダー
  2. 変分オートエンコーダー(VAE)
  3. GAN:生成器と識別器
  4. 条件付きGANとスタイル変換
← Learn AI with Pythonに戻る