PaddleGAN 图像翻译实战指南:Pix2Pix 与 CycleGAN 的配对/非配对训练全解析

发布时间:2026/9/27 6:04:52
PaddleGAN 图像翻译实战指南:Pix2Pix 与 CycleGAN 的配对/非配对训练全解析 人工智能深度学习计算机视觉媒体生成视频处理图像处理【免费下载链接】PaddleGANPaddlePaddle GAN library, including lots of interesting applications like First-Order motion transfer, Wav2Lip, picture repair, image editing, photo2cartoon, image style transfer, GPEN, and so on.项目地址https://gitcode.com/gh_mirrors/pa/PaddleGAN点击查看免费下载PaddleGAN 内置了两种经典的图像到图像翻译Image-to-Image Translation模型基于配对数据的 Pix2Pix 与基于非配对数据的 CycleGAN。本文以 docs/en_US/tutorials/pix2pix_cyclegan.md 为骨架结合仓库内的模型实现、数据集与配置文件源码完整讲解两大模型的原理、数据集准备、配置参数、训练/测试命令与权重下载帮助你直接用 PaddleGAN 完成风格迁移、街景标注生成、素描上色等实战任务。1 Pix2Pix基于配对数据的条件生成1.1 原理Pix2Pix 使用配对图像paired images进行图像翻译输入同一内容的两种不同风格如语义分割图与真实街景照片即可完成风格迁移。它由条件生成对抗网络cGAN思想启发而来——cGAN 将一张噪声图与一个条件作为监督信息输入生成网络Pix2Pix 则将另一种风格的图像作为监督信息输入生成网络使生成图与该监督图像建立关联从而实现图像翻译。从源码看PaddleGAN 的 Pix2Pix 模型位于 ppgan/models/pix2pix_model.py关键训练流程如下forward()仅执行fake_B netG(real_A)即由 U-Net 生成器把 A 域图像翻译成 B 域pix2pix_model.pybackward_D()判别器输入为concat(real_A, fake_B)与concat(real_A, real_B)即条件 GAN——判别器同时看到输入图与输出图pix2pix_model.pybackward_G()生成器损失 GAN 对抗损失 像素级 L1 损失pix2pix_model.py。其中real_A与real_B的具体取值由配置中的direction字段决定a2b表示输入 A 输出 Bb2a则交换方向pix2pix_model.py。1.2 使用方式1.2.1 准备数据集Pix2Pix 的配对数据集可从 Berkeley 官方数据集页面下载efrosgans.eecs.berkeley.edu/pix2pix/datasets/支持 cityscapes、night2day、edges2handbags、edges2shoes、facades、maps 等经典数据集。以 facades 为例其目录结构为facades ├── test ├── train └── val使用 wget 下载wget http://efrosgans.eecs.berkeley.edu/pix2pix/datasets/facades.tar.gz --no-check-certificate仓库还提供了脚本化下载方式data/download_pix2pix_data.py 支持以--name参数下载指定数据集并自动在data/下建立软链接python data/download_pix2pix_data.py --name facades1.2.2 训练 / 测试示例数据集为 facades你可以在配置文件中将其替换为自己的配对数据集。训练模型python -u tools/main.py --config-file configs/pix2pix_facades.yaml测试模型--evaluate-only跳过训练、--load指定权重路径python tools/main.py --config-file configs/pix2pix_facades.yaml --evaluate-only --load ${PATH_OF_WEIGHT}从 tools/main.py 可以看到完整执行链路parse_args解析命令行 →get_config加载 YAML →Trainer构建模型与数据 → 若带--load则加载权重若带--evaluate-only则直接进入trainer.test()。1.3 结果展示Pix2Pix 与 CycleGAN 的生成效果对比如下图该图来自仓库 docs/imgs/horse2zebra.png上半部分为 Pix2Pix 在配对数据上的输出下半部分为 CycleGAN 在非配对数据上的输出1.4 预训练权重下载模型数据集下载地址Pix2Pix_cityscapescityscapesPix2Pix_cityscapesPix2Pix_facadesfacadesPix2Pix_facades注意原文档中 Pix2Pix_facedes 为笔误正确命名应为 facades 数据集即上述第二行模型。1.5 配置文件逐项解读cityscapes 示例以 configs/pix2pix_cityscapes.yaml 为例核心配置如下配置项取值含义epochs200总训练轮数output_diroutput_dir输出目录权重与日志model.namePix2PixModel对应 pix2pix_model.py 中的模型类model.generatorUnetGenerator,num_downs: 8unet256,ngf: 64,norm_type: batchU-Net 生成器8 次下采样适配 256×256 输入model.discriminatorNLayerDiscriminator,ndf: 64,n_layers: 3,input_nc: 63 层 PatchGAN 判别器输入 6 通道是因为要拼接 real_A 与 real_Bmodel.directionb2a翻译方向model.pixel_criterionL1Loss,loss_weight: 100L1 像素损失权重 100 是 pix2pix 论文的关键超参λmodel.gan_criterionGANLoss,gan_mode: vanilla标准二分类交叉熵对抗损失dataset.train.preprocessResize→PairedRandomCrop→PairedRandomHorizontalFlip→Transpose→Normalize配对数据增强流水线先 resize 到 286×286再随机裁剪 256×2560.5 概率水平翻转最后归一化到 [-1,1]lr_schedulerLinearDecay, lr0.0002, start_epoch100, decay_epochs100前 100 轮固定学习率后 100 轮线性衰减至 0optimizerAdam,beta1: 0.5生成器与判别器分别使用 Adam 优化validate.metrics.fidFID, batch_size: 8验证阶段计算 FID 指标几点值得注意配对裁剪/翻转数据增强使用PairedRandomCrop与PairedRandomHorizontalFlip保证 A、B 两张配对图同步变换不破坏对齐关系configs/pix2pix_cityscapes.yaml。判别器输入通道cGAN 判别器必须同时接收输入图与输出图因此input_nc: 63 通道 A 3 通道 B与源码中paddle.concat((real_A, fake_B), 1)的逻辑一致。L1 损失权重loss_weight: 100对应论文中的 λ100在源码中体现为loss_G loss_G_GAN loss_G_L1的加权求和。2 CycleGAN基于非配对数据的循环一致性生成2.1 原理CycleGAN 使用非配对图片unpaired images进行图像翻译输入两张风格不同但内容无需对齐的图像自动完成风格迁移。网络由两个生成器和两个判别器组成生成器 A输入 A 风格图像输出 B 风格图像生成器 B输入 B 风格图像输出 A 风格图像。CycleGAN 与 Pix2Pix 最大的区别在于无需在源域与目标域之间建立一一对应关系而是通过循环一致性损失Cycle-Consistency Loss约束G_B(G_A(A)) ≈ A、G_A(G_B(B)) ≈ B从而在无配对监督的情况下学到可逆的跨域映射。PaddleGAN 的实现位于 ppgan/models/cycle_gan_model.py关键逻辑网络命名对应代码中G_A论文中的 G、G_B论文中的 F、D_A论文中的 D_Y、D_B论文中的 D_Xcycle_gan_model.py前向传播同时计算fake_B G_A(A)、rec_A G_B(fake_B)以及反向fake_A G_B(B)、rec_B G_A(fake_A)cycle_gan_model.py生成器总损失 两个方向的对抗损失 前向/后向循环一致性损失 可选的恒等映射Identity损失cycle_gan_model.py训练采用**图像池ImagePool**技巧判别器更新时从缓存的历史生成图池中取图而非最新生成图以稳定训练cycle_gan_model.py 与 ppgan/utils/image_pool.py。2.2 使用方式2.2.1 准备数据集CycleGAN 的非配对数据集可从 Berkeley 官方页面下载people.eecs.berkeley.edu/~taesung_park/CycleGAN/datasets/支持 apple2orange、summer2winter_yosemite、horse2zebra、monet2photo、cezanne2photo、ukiyoe2photo、vangogh2photo、maps、cityscapes、facades、iphone2dslr_flower 等。以 cityscapes 为例目录结构为cityscapes ├── test ├── testA ├── testB ├── train ├── trainA └── trainB使用 wget 下载wget https://people.eecs.berkeley.edu/~taesung_park/CycleGAN/datasets/facades.zip --no-check-certificate仓库同样提供脚本化下载data/download_cyclegan_data.py。注意其中 cityscapes 数据集的下载源已切换为 PaddleGAN 官方镜像地址python data/download_cyclegan_data.py --name horse2zebra2.2.2 训练 / 测试示例数据集为 cityscapes你可以在配置文件中将其替换为自己的非配对数据集。训练模型python -u tools/main.py --config-file configs/cyclegan_cityscapes.yaml测试模型python tools/main.py --config-file configs/cyclegan_cityscapes.yaml --evaluate-only --load ${PATH_OF_WEIGHT}2.3 结果展示2.4 预训练权重下载模型数据集下载地址CycleGAN_cityscapescityscapesCycleGAN_cityscapesCycleGAN_horse2zebrahorse2zebraCycleGAN_horse2zebra2.5 配置文件逐项解读cityscapes 示例以 configs/cyclegan_cityscapes.yaml 为例核心配置如下配置项取值含义epochs200总训练轮数output_diroutput_dir输出目录find_unused_parametersTrue允许模型中存在未参与反向传播的参数DDP 训练需要model.nameCycleGANModel对应 cycle_gan_model.py 中的模型类model.generatorResnetGenerator,n_blocks: 9,ngf: 64,norm_type: instance9 个残差块的 ResNet 生成器256×256 输入model.discriminatorNLayerDiscriminator,ndf: 64,n_layers: 3,input_nc: 33 层 PatchGAN 判别器单图输入无需拼接model.cycle_criterionL1Loss循环一致性损失无额外权重默认为 1model.idt_criterionL1Loss,loss_weight: 0.5恒等映射损失权重 0.5model.gan_criterionGANLoss,gan_mode: lsgan最小二乘 GAN 损失训练更稳定dataset.trainUnpairedDataset,dataroot_a/dataroot_b、max_size: inf、is_train: True从两个独立目录分别加载 A、B 域图像dataset.train.preprocessResize→RandomCrop→RandomHorizontalFlip→Transpose→Normalize与 Pix2Pix 不同A、B 使用独立的随机裁剪与翻转lr_schedulerLinearDecay, lr0.0002, start_epoch100, decay_epochs100与 Pix2Pix 相同的两段式学习率策略optimizer.optimG.net_namesnetG_A, netG_B两个生成器共享一个 Adam 优化器optimizer.optimD.net_namesnetD_A, netD_B两个判别器共享一个 Adam 优化器几个值得深入的点非配对数据的加载方式从 ppgan/datasets/unpaired_dataset.py 的__getitem__可以看到训练时 A 域图按序取、B 域图随机取idx_b random.randint(0, self.size_b - 1)因此每一轮配对都是临时随机组合这正是非配对语义的源码实现unpaired_dataset.py。归一化规范统一两个模型的数据流水线都使用mean: [127.5,127.5,127.5]、std: [127.5,127.5,127.5]将像素归一化到 [-1,1]与生成器输出层 Tanh 激活匹配。恒等映射损失的来源配置中的idt_criterion在源码中体现为idt_A G_A(real_B)要求生成器对目标域图像尽量保持原样用于保留颜色与纹理cycle_gan_model.py。循环权重 λ源码中lambda_a、lambda_b默认均为 10.0作为循环一致性损失的乘子配置中未显式指定时使用默认值。3 从配对到非配对两种方案的选型对照维度Pix2PixCycleGAN数据要求配对数据同内容双风格非配对数据两个独立风格域网络结构1 个 U-Net 生成器 1 个 PatchGAN 判别器2 个 ResNet 生成器 2 个 PatchGAN 判别器核心损失对抗损失 L1 像素损失λ100对抗损失 循环一致性损失λ10 恒等损失λ0.5生成器配置UnetGenerator, num_downs8, batch normResnetGenerator, n_blocks9, instance norm判别器输入拼接 A 与 B6 通道单图3 通道判别器 GAN 模式vanillalsgan典型数据集cityscapes、facades、edges2shoeshorse2zebra、monet2photo、cityscapes典型应用街景分割图→真实图、线稿上色风格迁移、季节转换、物体纹理迁移选型建议当你有同一场景的双风格配对数据时优先使用 Pix2Pix生成质量更可控当只有两个彼此独立的风格图像集时使用 CycleGAN借助循环一致性约束实现无监督翻译。4 常见问题与排查--load与--evaluate-only的区别--load仅加载生成器权重用于测试或微调--resume则恢复完整训练状态含 epoch 与优化器信息详见 tools/main.py。num_workers 差异Pix2Pix 配置中 train/test 均用num_workers: 4CycleGAN 配置中为 0可按机器 CPU 核数自行调整。FID 指标Pix2Pix 配置启用了validate.metrics.fidbatch_size 8CycleGAN 配置未配置指标如需量化评估生成质量可参考 ppgan/metrics/fid.py。下载数据集失败官方 Berkeley 服务器可能不稳定可改用仓库内置下载脚本会走 PaddleGAN 镜像或从 docs/en_US/tutorials/pix2pix_cyclegan.md 中的官方地址重试。ReferencesImage-to-Image Translation with Conditional Adversarial Networkspix2pix 论文对应上述 Pix2Pix 全部原理与配置inproceedings{isola2017image, title{Image-to-Image Translation with Conditional Adversarial Networks}, author{Isola, Phillip and Zhu, Jun-Yan and Zhou, Tinghui and Efros, Alexei A}, booktitle{Computer Vision and Pattern Recognition (CVPR), 2017 IEEE Conference on}, year{2017} }Unpaired Image-to-Image Translation using Cycle-Consistent Adversarial NetworksCycleGAN 论文对应上述 CycleGAN 全部原理与配置inproceedings{CycleGAN2017, title{Unpaired Image-to-Image Translation using Cycle-Consistent Adversarial Networkss}, author{Zhu, Jun-Yan and Park, Taesung and Isola, Phillip and Efros, Alexei A}, booktitle{Computer Vision (ICCV), 2017 IEEE International Conference on}, year{2017} }说明PaddleGAN 中 Pix2Pix 与 CycleGAN 的源码实现参考了 junyanz 的 pytorch-CycleGAN-and-pix2pix 项目结构见 ppgan/models/generators/unet.py 文件头注释本文所有配置与命令均以当前仓库configs/ 与 ppgan/ 下实际内容为准。赞分享人工智能深度学习计算机视觉媒体生成视频处理图像处理【免费下载链接】PaddleGANPaddlePaddle GAN library, including lots of interesting applications like First-Order motion transfer, Wav2Lip, picture repair, image editing, photo2cartoon, image style transfer, GPEN, and so on.项目地址https://gitcode.com/gh_mirrors/pa/PaddleGAN点击查看免费下载相关推荐pytorch-CycleGAN-and-pix2pix 实战指南CycleGAN 与 pix2pix 图像到图像翻译的安装、训练与推理pytorch CycleGAN and pix2pix 实战指南CycleGAN 与 pix2pix 图像到图像翻译的安装、训练与推理 本文围绕开源仓库 p人工智能深度学习计算机视觉媒体生成基于 PyTorch 的 CycleGAN 与 pix2pix 图像到图像翻译实战指南安装、训练、测试与预训练模型应用基于 PyTorch 的 CycleGAN 与 pix2pix 图像到图像翻译实战指南安装、训练、测试与预训练模型应用 本指南以 pytorch CycleG人工智能深度学习计算机视觉媒体生成PaddleGAN 人像卡通化Photo2Cartoon实战指南基于 U-GAT-IT 与 Soft-AdaLIN 的非成对图像翻译PaddleGAN 人像卡通化Photo2Cartoon实战指南基于 U GAT IT 与 Soft AdaLIN 的非成对图像翻译 人像卡通风格渲染是人工智能深度学习计算机视觉媒体生成视频处理图像处理创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考