计算机视觉入门第五课:图像生成与风格迁移

69次阅读
没有评论

共计 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)
  • 更强的语义控制与编辑能力

建议实践

  1. 使用 StyleGAN2-ADA 生成人脸
  2. fast-neural-style 实现视频风格迁移
  3. 尝试用 GAN 生成 MNIST 或 CelebA 数据集图像

正文完
 0
一诺
版权声明:本站原创文章,由 一诺 于2025-09-16发表,共计3784字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(没有评论)
验证码