共计 3784 个字符,预计需要花费 10 分钟才能阅读完成。
图像生成与风格迁移是计算机视觉中极具创造力与应用价值的方向,涵盖从 真实感图像合成 到艺术风格转换 的多种技术。本课将系统讲解三大核心技术:生成对抗网络(GAN)、StyleGAN 和 神经风格迁移(Neural Style Transfer)。
5.1 生成对抗网络(GAN, Generative Adversarial Networks)
5.1.1 基本原理
GAN 由 Goodfellow 等人在 2014 年提出,通过 对抗训练 实现高质量图像生成。
核心思想:
- 生成器(Generator, G):从随机噪声 $$z \sim p_z$$ 生成假图像 $$G(z)$$
- 判别器(Discriminator, D):判断输入图像是真实(来自数据集)还是伪造(来自 G)
- 对抗博弈:
- G 试图“欺骗”D,使其误判假图为真
- D 试图准确区分真假图像
损失函数(原始 GAN):
$$
\min_G \max_D V(D, G) = E_{x~p_data}[\log D(x)] + E_{z~p_z}[\log(1 – D(G(z)))]
$$
训练目标:达到纳什均衡,此时 $$p_g = p_{data}$$,D 无法区分真假。
5.1.2 GAN 的挑战与改进
| 问题 | 解决方案 |
|---|---|
| 模式崩溃(Mode Collapse) | 使用 Wasserstein GAN(WGAN)、谱归一化(Spectral Norm) |
| 训练不稳定 | 引入梯度惩罚(WGAN-GP)、LSGAN(最小二乘损失) |
| 生成质量低 | 引入卷积结构(DCGAN)、注意力机制(SAGAN) |
DCGAN(Deep Convolutional GAN):
- 首次将 CNN 成功应用于 GAN
- 使用转置卷积(ConvTranspose)上采样
- 批归一化(BatchNorm)稳定训练
5.2 StyleGAN:高质量可控人脸生成
StyleGAN(NVIDIA, 2019)是 GAN 在 高分辨率、高保真图像生成 上的里程碑。
5.2.1 核心创新
1. 风格调制(Style-based Generator)
- 不再直接从噪声生成图像,而是通过 中间潜在空间(W 空间) 控制不同层级的“风格”
- 每一层卷积的 仿射变换参数(scale & bias) 由 W 空间向量动态调制
2. 自适应实例归一化(AdaIN)
$$
\text{AdaIN}(x, y) = \frac{x – \mu(x)}{\sigma(x)} \cdot \sigma(y) + \mu(y)
$$
- 将内容特征 $x$ 的统计量替换为风格向量 $y$ 的统计量
- 实现细粒度风格控制
3. 渐进式增长(Progressive Growing)
- 从 4×4 开始训练,逐步增加分辨率至 1024×1024
- 提高训练稳定性与细节质量
4. 噪声注入
- 在每层加入随机噪声,控制高频细节(如发丝、皮肤纹理)
5.2.2 StyleGAN2/3 改进
- 消除“水滴伪影”(blob artifacts)
- 引入路径正则化(Path Length Regularization)
- 提升生成图像的连续性与一致性
5.2.3 应用场景
- 虚拟人脸生成(影视、游戏)
- 数据增强(隐私保护下的合成数据)
- 风格编辑(年龄、表情、发型控制)
5.3 神经风格迁移(Neural Style Transfer, NST)
NST 由 Gatys 等人在 2015 年提出,将 一幅图像的内容 与另一幅图像的风格 融合。
5.3.1 基本原理
利用预训练 CNN(如 VGG19)提取:
- 内容特征:高层特征(如 conv4_2)——保留结构
- 风格特征:多层 Gram 矩阵(如 conv1_1, conv2_1, …, conv5_1)——捕捉纹理、颜色、笔触
Gram 矩阵定义:
$$
G^l_{ij} = \sum_k F^l_{ik} F^l_{jk}
$$
其中 $F^l$ 是第 $l$ 层的特征图,$G^l$ 衡量不同通道间的相关性,代表“风格”。
5.3.2 损失函数
$$
L = \alpha \cdot L_{content} + \beta \cdot L_{style}
$$
$$
L_{content} = \frac{1}{2} | F^L – P^L |_F^2
$$
$$
L_{style} = \sum_{l \in \text{layers}} w_l \cdot \frac{1}{4N_l^2 M_l^2} | G^l – A^l |_F^2
$$
其中:
- $F$:生成图像特征
- $P$:内容图像特征
- $A$:风格图像 Gram 矩阵
5.3.3 快速风格迁移(Fast NST)
原始 NST 需对每张图像迭代优化,速度慢。
Johnson 等人(2016)提出前馈网络方案:
- 训练一个 图像变换网络(Image Transform Net)
- 输入内容图像,直接输出风格化结果
- 可实时处理视频(>30 FPS)
5.4 方法对比与应用场景
| 方法 | 输入 | 输出 | 是否可训练 | 典型应用 |
|---|---|---|---|---|
| GAN | 随机噪声 | 新图像 | 是 | 图像合成、数据增强 |
| StyleGAN | 隐向量(z/w) | 高清人脸 | 是 | 虚拟人、数字艺术 |
| NST | 内容图 + 风格图 | 风格化图像 | 否(或预训练) | 艺术创作、滤镜 APP |
5.5 实战代码示例
5.5.1 使用 PyTorch 实现简单 GAN(DCGAN 风格)
import torch
import torch.nn as nn
class Generator(nn.Module):
def __init__(self, nz=100, ngf=64, nc=3):
super().__init__()
self.main = nn.Sequential(# 输入: (nz, 1, 1)
nn.ConvTranspose2d(nz, ngf*8, 4, 1, 0, bias=False),
nn.BatchNorm2d(ngf*8),
nn.ReLU(True),
# (ngf*8, 4, 4)
nn.ConvTranspose2d(ngf*8, ngf*4, 4, 2, 1, bias=False),
nn.BatchNorm2d(ngf*4),
nn.ReLU(True),
# ... 继续上采样 ...
nn.ConvTranspose2d(ngf*2, nc, 4, 2, 1, bias=False),
nn.Tanh() # 输出 [-1, 1]
)
def forward(self, x):
return self.main(x)
class Discriminator(nn.Module):
def __init__(self, nc=3, ndf=64):
super().__init__()
self.main = nn.Sequential(nn.Conv2d(nc, ndf, 4, 2, 1, bias=False),
nn.LeakyReLU(0.2, inplace=True),
# ... 下采样 ...
nn.Conv2d(ndf*8, 1, 4, 1, 0, bias=False),
nn.Sigmoid())
def forward(self, x):
return self.main(x).view(-1, 1).squeeze(1)
5.5.2 使用 torchvision 实现神经风格迁移
from torchvision.models import vgg19
import torch
# 加载预训练 VGG(去掉分类头)cnn = vgg19(pretrained=True).features.eval()
# 提取内容 / 风格层
content_layers = ['conv_4']
style_layers = ['conv_1', 'conv_2', 'conv_3', 'conv_4', 'conv_5']
def get_features(image, model, layers):
features = {}
x = image
for name, layer in model._modules.items():
x = layer(x)
if f"conv_{name.split('_')[1]}" in layers:
features[f"conv_{name.split('_')[1]}"] = x
return features
# 计算 Gram 矩阵
def gram_matrix(tensor):
b, c, h, w = tensor.size()
tensor = tensor.view(b * c, h * w)
gram = torch.mm(tensor, tensor.t())
return gram.div(b * c * h * w)
5.6 评估与挑战
5.6.1 生成质量评估指标
| 指标 | 说明 |
|---|---|
| Inception Score (IS) | 衡量生成多样性与清晰度(越高越好) |
| FID(Fréchet Inception Distance) | 比较生成图像与真实图像在 Inception 特征空间的分布距离(越低越好) |
| 用户研究(Human Evaluation) | 主观质量评估(如真实感、美感) |
5.6.2 当前挑战
- 可控生成:如何精确控制生成内容(如“戴眼镜的金发女性”)
- 训练稳定性:GAN 仍难训练,需大量调参
- 伦理风险:深度伪造(Deepfake)滥用
- 计算成本:StyleGAN 训练需多卡 GPU 数天
5.7 本课小结
- GAN:通过对抗学习生成逼真图像,是图像生成的基石
- StyleGAN:实现高分辨率、高可控性的人脸生成,代表 GAN 的巅峰
- 神经风格迁移:将艺术风格与内容分离,开启 AI 艺术创作
- 趋势:
- 扩散模型(Diffusion Models)正在取代 GAN 成为主流(如 DALL·E 2、Stable Diffusion)
- GAN 与 Transformer 结合(如 GANformer)
- 更强的语义控制与编辑能力
建议实践:
- 使用 StyleGAN2-ADA 生成人脸
- 用 fast-neural-style 实现视频风格迁移
- 尝试用 GAN 生成 MNIST 或 CelebA 数据集图像

