3.5 图像翻译双雄:CycleGAN 与 Pix2Pix


3.5 图像翻译双雄:CycleGAN 与 Pix2Pix

图像翻译指把图像从一个域转换到另一个域(照片→油画、线稿→彩图)。Pix2Pix 用配对数据加像素级 L1 约束做有监督翻译;CycleGAN 用两个反向映射加循环一致性损失,在无配对数据下完成同样的活。 两者的取舍完全由"有没有配对数据"决定。

翻案第五桩:单一罪。到目前为止造假者都只做一件事:从噪声造图。但产业里更常见的委托是"把这张图改成那个风格"——这就是图像翻译。本节审理两位并称的双雄,它们的分歧点只有一个:你手上有没有配对数据。

Pix2Pix:有配对数据的正规合同

Pix2Pix 是条件 GAN(3.3 节)在图像上的直接落地:条件不再是类别标签,而是一张输入图(比如语义线稿),生成器按图造假(输出对应彩图),判别器验的是"这对输入输出匹配得像不像真对"。除了对抗损失,它还加了一条像素级 L1 损失锁住整体结构:

L = L_cGAN + λ·L1,λ 常取 100。

为什么必须加 L1?因为对抗损失只管"像真的",不管"跟输入对齐"——生成器完全可以画一张漂亮但毫不相干的图骗过判别器。L1 把对应像素拉住,对抗项负责让结果有真实纹理(L1 单独用会糊,2.1 节讲过的感知质量老问题)。生成器主体用 U-Net(编码-解码加跳连,跳连把低层细节抄送给输出);判别器用 PatchGAN(只在图像小块上判真假,输出一张"真假热力图",参数少、关注局部纹理)。两者都是被 Pix2Pix 带火的标准件。

配对数据的成本是这个方案的命门:想训"线稿→彩图",得有美术师画线稿;想训"白天→夜景",得同机位同时刻的两张图。这类数据又贵又稀缺。

CycleGAN:没配对数据,绕路走

CycleGAN 的破局思路漂亮:既然只有两堆不成对的图(一堆马、一堆斑马),就同时训两个方向的造假者——G 把马变斑马,F 把斑马变马。核心约束是循环一致性:一张马图经 G 变斑马、再经 F 变回来,应该还是原来那匹马:

L_cyc = E[‖F(G(x)) − x‖₁] + E[‖G(F(y)) − y‖₁]

用数值实验感受这条约束的工作方式(两个带噪声的映射,看看循环误差有多敏感):

import numpy as np rng = np.random.default_rng(5) # 两个"翻译器": 理想互逆, 但各自带 0.05 的随机扰动 def F(v): return 2.0*v + 1.0 + rng.normal(0, 0.05, len(v)) # 马→斑马 def Gk(v): return (v - 1.0)/2.0 + rng.normal(0, 0.05, len(v)) # 斑马→马 x = rng.normal(0, 1, 2000) # 2000 张"马图" cyc = Gk(F(x)) # 去→回 err = np.abs(cyc - x) print(f"往返循环误差 L1: 均值={err.mean():.4f} 最大={err.max():.4f}") # 输出: 往返循环误差 L1: 均值=0.0450 最大=0.1879 # 映射的两端各带 0.05 扰动, 循环误差被压在 0.045 量级—— # 若某方向的映射"偷懒"(比如把所有斑马都映射成同一匹马), # 循环回来误差会暴涨, 惩罚立即生效 y = rng.normal(0, 1, 2000) # 对照: 另一方向同理需要约束 print(f"另一方向循环误差: {np.abs(Gk(F(y))-y).mean():.4f}") # 输出: 另一方向循环误差: 0.0449

读数说明:每端 0.05 的扰动经过"去-回"两跳,误差仍在 0.045 量级——循环一致性对"忠实往返"极其敏感,任何一端偷懒(比如把整个域映射成一张图,那是模式崩溃的翻译版)都会被立刻罚爆。这条约束承担了配对数据的全部职责:没有成对监督,就让"能回去"逼着映射保真

代价同样明确。循环一致性假设"两个域之间存在近似双射",对不存在双射的翻译(比如"照片→梵高画"信息不对称、一对多)它会强行找一条近似路,表现为颜色偏移或细节抹平。此外训练量翻倍(两套生成器两套判别器),显存与时间都双倍开销。

双雄对簿:选型就一条判据

维度 Pix2Pix CycleGAN
数据前提 必须配对 各自成堆即可
对齐精度 高(L1 锁像素) 中(循环锁结构,不锁像素)
训练成本 一套 G/D 两套 G/D,约双倍
典型应用 线稿上色、分割图→照片 风格迁移、域适应、马↔斑马
失败模式 配对噪声被放大 域间无双射时强行映射

选型判据一句话:能配对就 Pix2Pix,不能配对才 CycleGAN。配对数据的对齐精度是循环一致性替代不了的——预算允许时,人工造一批配对数据再走 Pix2Pix,效果通常更好。

💡 关键直觉:把 CycleGAN 看成"用可逆性付账"——它没有监督信号,就用"往返免费"这条假设付了配对数据的账。凡是假设就有边界:可逆性越弱的任务,账还得越亏。

本节要点回顾

  • 图像翻译定义:跨域转换图像内容/风格,条件 GAN 的图像版应用;
  • Pix2Pix 三件套:U-Net 生成器、PatchGAN 判别器、L1 加对抗的复合损失(λ≈100);
  • L1 的职责:锁输入输出对齐,防止生成器"画得漂亮但答非所问";
  • CycleGAN 核心:双向映射 + 循环一致性,数值实验中 0.05 扰动被压出 0.045 往返误差;
  • 选型判据:能配对就 Pix2Pix;CycleGAN 用可逆性假设换掉了配对数据,也继承了假设的边界。

常见问题:翻译进阶

PatchGAN 的输出怎么读? 它输出一张分数图(比如 30 乘 30),每个位置对应输入图像一个小块的真假判分。训练时对所有位置求平均损失。好处:关注局部纹理、参数少;判别不了全局布局——全局交给 L1 或循环一致性去管。

CycleGAN 为什么还要加身份损失? 循环一致性管"去了回得来",但允许映射在域内乱动(比如把所有马的色调都偏移一点)。身份损失(把本域图像喂给生成器要求原样返回)抑制这类多余改动,在色彩敏感的任务(照片与画作互转)里几乎是标配。

两个域差异太大怎么办? 先问一句"真的无双射吗"。风格转换类(色调、笔触)效果好;结构性差异大的(素描到照片)建议补弱配对或引入第三个域中转。硬训不是不行,是浪费——训练量双倍换来的往往是颜色偏移和细节抹平(本节正文列过的失败模式)。

演算自测

某翻译任务 5000 对配对样本、标注成本每对 2 元;无配对方案训练时间翻倍、每次实验多花 4 小时。若预计迭代 20 次实验,配对数据的总成本是多少?答案:一万元;时间成本多花 80 小时。按当地人力时薪折算后对比,选型就有账可算了——工程决策的常态是把定性问题换算成同一单位再比。


作者与出处
原作者: 灏天文库
来源:灏天文库
整理: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 灏天文库 转发
评论区 (0)
U