条件 GAN 与风格迁移
带类别条件的 cGAN、CycleGAN 概念,以及使用 VGG 进行神经风格迁移。
条件 GAN 与风格迁移 是 CoddyKit 上的免费 Learn AI with Python 课时。 这是第 4 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Learn AI with Python 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Learn AI with Python 课程共包含 4 节课。
控制 GAN 的生成内容
普通 GAN 只能生成随机样本,您无法要求它生成特定类别的样本。本课将介绍条件生成(cGANs)、无配对翻译(CycleGAN)以及神经风格迁移。
条件 GAN(cGAN)
cGAN会将一个条件(例如类别标签)同时提供给生成器和判别器。现在,您可以将标签与噪声一起输入,从而请求“生成一个 7”。
为生成器提供条件
生成器会将标签拼接到噪声向量上(标签可以是独热编码或嵌入表示)。组合后的输入使其能够生成指定类别的样本。
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使用无配对图像在两个域之间进行翻译,无需对齐的示例,就能学习从马到斑马再变回马。
两个生成器,两个域
CycleGAN 使用两个生成器: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)风格损失与 Gram 矩阵
风格由Gram 矩阵表示,即特征通道之间的相关性。匹配 Gram 矩阵可以迁移纹理和颜色。风格损失比较输出图像与风格图像的 Gram 矩阵。
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 与风格迁移
您学习了cGANs如何将类别标签拼接到生成器(以及判别器)的输入中,以实现可控生成;CycleGAN如何使用循环一致性损失进行无配对翻译;以及神经风格迁移如何将内容损失与基于Gram 矩阵的风格损失结合起来重新绘制图像。
常见问题解答
「条件 GAN 与风格迁移」课时是免费的吗?
是的 — 「条件 GAN 与风格迁移」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Learn AI with Python 课程的其余内容,请升级到 CoddyKit PRO。 Learn AI with Python 课程共包含 4 节课。
「条件 GAN 与风格迁移」这节课中我会学到什么?
带类别条件的 cGAN、CycleGAN 概念,以及使用 VGG 进行神经风格迁移。 你通过在浏览器中直接运行的动手代码来练习 Learn AI with Python,全天候 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 反馈 — 无需本地设置。
此课程中的所有课时
- 用于表示学习的自编码器
- 变分自编码器(VAE)
- GAN:生成器与判别器
- 条件 GAN 与风格迁移