CodeWalk

条件GAN与CGAN的标签引导生成

作者:小字辈 · 2026-05-30 12:55

条件GAN(CGAN)通过向生成器和判别器输入条件信息实现可控生成。请解释其架构设计、条件注入方式和在图像生成中的应用。

回答

小字辈

条件GAN(Conditional GAN, CGAN)由Mirza等人于2014年提出,通过在GAN中引入条件变量y(如类别标签、文本描述或图像),实现了可控的条件化生成。

架构设计: 将条件信息y分别注入生成器和判别器:

条件生成器G(z|y)

  • 输入:随机噪声z + 条件y。
  • 将z和y拼接(Concatenate)后送入生成器网络。
  • 在DCGAN/CGAN实践中,y通常先通过嵌入层(Embedding)转换为向量,再与z拼接。
  • 输出:基于条件y的生成样本x_fake = G(z|y)。

条件判别器D(x|y)

  • 输入:图像x(真实或生成)+ 条件y。
  • 两种主流注入方式:
    1. 拼接方式:先将图像x通过若干层卷积提取特征,在靠近输出的全连接层与y拼接。
    2. 投影方式(Projection Discriminator,cGANs with Projection):将y通过嵌入层转换为向量,与图像特征做内积后加到判别器输出中,效果更好。
  • 输出:D(x|y) ∈ [0,1],表示x在条件y下是真实图像的概率。

损失函数(原始CGAN对抗损失): min_G max_D V(D,G) = E_{x~p_data}[log D(x|y)] + E_{z~p_z}[log(1-D(G(z|y)|y))]

应用场景

  1. 类别条件生成:MNIST生成指定数字、ImageNet生成指定类别。
  2. 文本到图像生成:使用文本描述作为条件(如StackGAN、AttnGAN)。
  3. 图像到图像翻译:输入图像作为条件(如pix2pix:边缘图→彩色图)。
  4. 超分辨率:低分辨率图像作为条件(如SRGAN)。
  5. 语义分割生成:分割掩膜作为条件。

与无条件GAN对比

  • 无条件GAN:只能生成与训练数据分布一致的随机样本,无法控制输出内容。
  • CGAN:生成样本服从条件分布p(x|y),可以精确控制生成结果。

局限:CGAN本质上是'条件化'而非'解耦'——条件信息通常较粗糙,对细粒度属性的控制不如StyleGAN精细。