条件GAN与CGAN的标签引导生成
条件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。
- 两种主流注入方式:
- 拼接方式:先将图像x通过若干层卷积提取特征,在靠近输出的全连接层与y拼接。
- 投影方式(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))]
应用场景:
- 类别条件生成:MNIST生成指定数字、ImageNet生成指定类别。
- 文本到图像生成:使用文本描述作为条件(如StackGAN、AttnGAN)。
- 图像到图像翻译:输入图像作为条件(如pix2pix:边缘图→彩色图)。
- 超分辨率:低分辨率图像作为条件(如SRGAN)。
- 语义分割生成:分割掩膜作为条件。
与无条件GAN对比:
- 无条件GAN:只能生成与训练数据分布一致的随机样本,无法控制输出内容。
- CGAN:生成样本服从条件分布p(x|y),可以精确控制生成结果。
局限:CGAN本质上是'条件化'而非'解耦'——条件信息通常较粗糙,对细粒度属性的控制不如StyleGAN精细。