
媒体生成计算机视觉深度学习人工智能大模型【免费下载链接】mmagicOpenMMLab Multimodal Advanced, Generative, and Intelligent Creation Toolbox. Unlock the magic : Generative-AI (AIGC), easy-to-use APIs, awsome model zoo, diffusion models, for text-to-image generation, image/video restoration/enhancement, etc.项目地址https://gitcode.com/gh_mirrors/mm/mmagic点击查看免费下载本文以 OpenMMLab mmagic 仓库中 configs/cyclegan/README.md 为主体结合仓库内 CycleGAN 的实现源码、基础配置与模型库配置系统讲解非配对Unpaired图像翻译任务中 CycleGAN 的算法原理、mmagic 中的模块化实现、完整配置文件解析以及从数据准备、训练、评估到模型复现的端到端实操流程。读完本文你将掌握如何在 mmagic 中直接复现 CycleGAN 在 facades、summer2winter、horse2zebra 等经典数据集上的官方结果并能独立修改配置以适配自己的非配对图像翻译任务。一、算法背景与核心思想CycleGAN 出自论文Unpaired Image-to-Image Translation Using Cycle-Consistent Adversarial NetworksICCV 2017属于 mmagic 模型库中的Image2Image任务类别。图像翻译Image-to-Image Translation是一类视觉与图形学问题目标是在输入图像与输出图像之间学习映射关系传统做法依赖成对的训练数据aligned image pairs。然而在大量真实任务中配对数据并不存在。CycleGAN 正是为解决无配对样本下的跨域图像翻译而提出的经典方案。1.1 从对抗损失到循环一致性CycleGAN 的核心设定是在缺少配对示例的情况下学习从源域 X 到目标域 Y 的映射 G使得 G(X) 的图像分布与 Y 的分布不可区分通过对抗损失实现。由于该映射高度欠约束under-constrained论文引入逆映射 F: Y → X并设计**循环一致性损失Cycle Consistency Loss**来约束 F(G(X)) ≈ X反之亦然。这一约束保证了翻译过程能保留输入图像的语义结构避免生成结果随意漂移。mmagic 在 mmagic/models/editors/cyclegan/cyclegan.py 中完整实现了上述训练范式每个可到达域reachable domain各配备一个生成器和一个判别器双生成器 G、F 双判别器 D_X、D_Y对抗损失采用LSGAN 的 MSE 形式F.mse_loss判别器对真实图像回归 1、对伪造图像回归 0生成器则让伪造图像尽量回归 1循环一致性损失与身份损失均采用L1 损失权重通过loss_config配置。从源码实现看cyclegan.py生成器损失_get_gen_loss由三部分构成GAN 损失loss_gan_g_{domain}判别器对fake_{domain}的预测与全 1 向量的 MSE循环一致性损失cycle_lossloss_weight * L1(cycle_{domain}, real_{domain})默认权重cycle_loss_weight10.身份损失id_lossloss_weight * L1(identity_{domain}, real_{domain})默认权重id_loss_weight0.5当权重为 0 时跳过计算即下文提到的id0变体。判别器损失_get_disc_losscyclegan.py则对两个域分别计算真实 vs 伪造的 MSE 损失并乘以 0.5。此外为缓解模型振荡model oscillationCycleGAN 实现中引入了GANImageBuffercyclegan_modules.py以 50% 的概率从历史生成图像缓存中取图喂给判别器buffer_size默认为 50可通过buffer_size参数调整。1.2 典型应用场景CycleGAN 适用于没有配对数据的翻译任务论文与 mmagic 模型库覆盖的典型场景包括集合风格迁移collection style transfer、物体变形object transfiguration如马↔斑马、季节迁移season transfer如夏↔冬、照片增强photo enhancement如 facades 建筑立面照片→线稿标注等。mmagic 的模型库中提供了 facades、summer2winter、horse2zebra 三个数据集的官方复现配置与指标。二、mmagic 中的 CycleGAN 模块化实现mmagic 将 CycleGAN 拆解为可复用的基础模块模型配置通过组合这些模块完成组装。核心组件与源码路径对应关系如下组件类名源码位置职责顶层模型CycleGANmmagic/models/editors/cyclegan/cyclegan.py训练/测试流程编排、损失计算、图像缓冲生成器ResnetGeneratormmagic/models/editors/cyclegan/cyclegan_generator.py9 层残差块的 ResNet 式编解码生成器判别器PatchDiscriminatormmagic/models/archs/patch_disc.py70×70 PatchGAN 判别器残差块ResidualBlockWithDropoutmmagic/models/editors/cyclegan/cyclegan_modules.py带可选 Dropout 的残差卷积块图像缓冲GANImageBuffer同上历史生成图像缓存稳定判别器训练基类BaseTranslationModelmmagic/models/base_models/base_translation_model.py多域生成器/判别器注册、域管理、翻译前向2.1 ResnetGenerator残差式编解码生成器从 cyclegan_generator.py 的构造逻辑看生成器网络结构为输入卷积层7×7 卷积reflect padding输出base_channels64通道两次下采样3×3、stride2 卷积通道数逐级翻倍至 2569 个残差块num_blocks9每个残差块由两个 3×3 卷积组成use_dropoutFalse时不含 Dropout采用恒等跳跃连接out x block(x)见 cyclegan_modules.py两次上采样使用conv_cfgdict(typedeconv, output_padding1)的反卷积通道数逐级减半输出卷积层7×7 卷积 Tanh 激活输出 3 通道图像。值得注意的实现细节当归一化层为 InstanceNormIN时卷积层使用 bias以对齐 CycleGAN 原始实现权重初始化采用init_cfgdict(typenormal, gain0.02)的正态初始化见 cyclegan_generator.py。2.2 多域管理与翻译前向BaseTranslationModel定义了三个关键的域配置参数base_translation_model.pydefault_domain默认输出域reachable_domains模型可生成的域集合每个域都会构建独立的生成器与判别器nn.ModuleDictrelated_domains训练与测试涉及的域集合必须包含reachable_domains。训练时cyclegan.pytrain_step对每个目标域执行翻译 → 循环重建两个前向translation(img, target_domain)生成fake_{target_domain}再用反方向生成器将其重建回源域得到cycle_{source_domain}从而计算循环一致性损失。测试/验证阶段forward_test遵循原始官方实现的一个技巧先调用self.train()再执行翻译以保证与训练时相同的统计量行为cyclegan.py。三、模型库配置详解从基类到具体数据集mmagic 的 CycleGAN 配置采用三级继承结构_base_基类 → 具体数据集配置 → 用户自定义覆盖。本文以 facades 配置 configs/cyclegan/cyclegan_lsgan-resnet-in_1xb1-80kiters_facades.py 为完整示例进行逐段解析。3.1 完整配置示例facades_base_ [ ../_base_/models/base_cyclegan.py, ../_base_/datasets/unpaired_imgs_256x256.py, ../_base_/gen_default_runtime.py ] train_cfg dict(max_iters80000) domain_a photo domain_b mask model dict( loss_configdict(cycle_loss_weight10., id_loss_weight0.5), default_domaindomain_a, reachable_domains[domain_a, domain_b], related_domains[domain_a, domain_b], data_preprocessordict(data_keys[fimg_{domain_a}, fimg_{domain_b}])) param_scheduler dict( typeLinearLrInterval, interval400, by_epochFalse, start_factor0.0002, end_factor0, begin40000, end80000) dataroot ./data/cyclegan/facades train_pipeline _base_.train_dataloader.dataset.pipeline val_pipeline _base_.val_dataloader.dataset.pipeline test_pipeline _base_.test_dataloader.dataset.pipeline key_mapping dict( typeKeyMapper, mapping{ fimg_{domain_a}: img_A, fimg_{domain_b}: img_B }, remapping{ fimg_{domain_a}: fimg_{domain_a}, fimg_{domain_b}: fimg_{domain_b} }) pack_input dict( typePackInputs, keys[fimg_{domain_a}, fimg_{domain_b}], data_keys[fimg_{domain_a}, fimg_{domain_b}]) train_pipeline [key_mapping, pack_input] val_pipeline [key_mapping, pack_input] test_pipeline [key_mapping, pack_input] train_dataloader dict(datasetdict(data_rootdataroot)) val_dataloader dict(datasetdict(data_rootdataroot, test_modeTrue)) test_dataloader val_dataloader optim_wrapper dict( generatorsdict( optimizerdict(typeAdam, lr0.0002, betas(0.5, 0.999))), discriminatorsdict( optimizerdict(typeAdam, lr0.0002, betas(0.5, 0.999)))) custom_hooks [ dict( typeVisualizationHook, interval5000, fixed_inputTrue, vis_kwargs_list[ dict(typeTranslation, nametrans), dict(typeTranslationVal, nametrans_val) ]) ] num_images 106 metrics [ dict( typeTransIS, prefixIS-Full, fake_numsnum_images, fake_keyffake_{domain_a}, use_pillow_resizeFalse, resize_methodbilinear, inception_stylePyTorch), dict( typeTransFID, prefixFID-Full, fake_numsnum_images, inception_stylePyTorch, real_keyfimg_{domain_a}, fake_keyffake_{domain_a}) ] val_evaluator dict(metricsmetrics) test_evaluator dict(metricsmetrics)3.2 基类模型配置解析上述配置首先继承自 mmagic/configs/base/models/base_cyclegan.py其中定义了 CycleGAN 的默认网络结构model dict( typeCycleGAN, data_preprocessordict(typeDataPreprocessor), generatordict( typeResnetGenerator, in_channels3, out_channels3, base_channels64, norm_cfgdict(typeIN), use_dropoutFalse, num_blocks9, padding_modereflect, init_cfgdict(typenormal, gain0.02)), discriminatordict( typePatchDiscriminator, in_channels3, base_channels64, num_conv3, norm_cfgdict(typeIN), init_cfgdict(typenormal, gain0.02)), default_domainNone, # set by user reachable_domainsNone, # set by user related_domainsNone # set by user )关键参数含义与建议取值generator.num_blocks残差块数量。128×128 以下分辨率常用 6256×256 及以上分辨率常用 9mmagic 模型库在 256×256 数据集上统一采用 9generator.use_dropout是否在残差块中插入 Dropout(0.5)官方 256×256 设置关闭generator.padding_mode卷积 padding 模式reflect | replicate | zerosCycleGAN 原始实现使用reflect以减少边界伪影discriminator.num_convPatchGAN 的卷积层数3 层对应 70×70 的感受野判别器norm_cfg统一使用 InstanceNormdict(typeIN)这也是 CycleGAN 论文推荐的归一化方式init_cfg权重初始化为均值 0、标准差 0.02 的正态分布。3.3 域配置与数据键约定facades 配置将domain_a设为photo、domain_b设为mask并在model中声明default_domaindomain_a默认输出域为 photoreachable_domains[domain_a, domain_b]两个域均可生成因此会构建 2 个生成器与 2 个判别器data_preprocessordict(data_keys[img_photo, img_mask])数据预处理器的输入键与数据管道中的键名严格对应。由于BaseTranslationModel要求default_domain必须在reachable_domains中、且reachable_domains必须是related_domains的子集见 base_translation_model.py自定义域时需保证这三组配置的一致性。3.4 数据管道KeyMapper 与 PackInputs数据集基类 mmagic/configs/base/datasets/unpaired_imgs_256x256.py 使用UnpairedImageDataset实现见 mmagic/datasets/unpaired_image_dataset.py该数据集约定目录结构为{data_root}/trainA、trainB与testA、testBunpaired_image_dataset.py。基类管道负责分别加载img_A、img_B两个域的图像通过TransformBroadcaster对两域图像共享随机参数地执行 Resize 到 286×286、再随机裁剪到 256×256训练阶段或直接 Resize 到 256×256测试阶段对两域图像分别做水平随机翻转。由于基类管道中的键名是通用的img_A/img_B具体数据集配置通过KeyMapper将它们映射为带域名的键img_photo/img_maskmapping字段并用remapping保留原名最后通过PackInputs将两域图像打包进 data sample数据键data_keys[img_photo, img_mask]与模型data_preprocessor的data_keys必须一致。这就是配置中train_pipeline [key_mapping, pack_input]的原因——基类管道注释中也明确提示用户需自行实现 KeyMapper 与 Pack 操作。3.5 优化器、学习率调度与训练钩子优化器生成器与判别器分别使用 Adam学习率 0.0002betas(0.5, 0.999)CycleGAN 论文标准设置beta1 取 0.5 有利于对抗训练稳定性学习率调度LinearLrInterval实现前 40000 次迭代保持初始学习率、后 40000 次迭代线性衰减到 0的经典 schedulestart_factor0.0002, end_factor0, begin40000, end80000interval400表示每 400 次迭代更新一次调度器可视化钩子VisualizationHook每 5000 次迭代输出Translation训练翻译结果与TranslationVal验证翻译结果两类可视化fixed_inputTrue保证始终用固定输入图像对比翻译效果。3.6 评估指标TransFID 与 TransISmmagic 使用FID与IS两个指标评估 CycleGAN 的生成质量对应实现位于 mmagic/evaluation/metrics/fid.py 与 mmagic/evaluation/metrics/inception_score.pyTransIS翻译任务的 Inception Score配置中fake_nums106与 facades 测试集图像数量一致fake_keyfake_photo指定参与评估的生成图像键inception_stylePyTorch使用 PyTorch 版 InceptionV3TransFID翻译任务的 FIDreal_keyimg_photo指定真实图像键fake_keyfake_photo指定生成图像键计算真实分布与生成分布的 Frechet 距离两者在验证与测试阶段val_evaluator/test_evaluator同时启用通过prefix区分日志前缀。四、模型库结果与官方对比mmagic 在 configs/cyclegan/README.md 中公布了 CycleGAN 在 facades、summer2winter、horse2zebra 三个数据集含id0变体共 10 个设定上的训练结果全部模型配置位于 configs/cyclegan 目录。同时提供FID/IS与官方实现的对比。4.1 各数据集模型与指标总表下表汇总了 mmagic 复现的 CycleGAN 各配置的 FID 与 IS 指标模型权重与训练日志可通过各配置行对应下载地址获取模型配置数据集FIDIScyclegan_lsgan-resnet-in_1xb1-80kiters_facades.pyfacades124.80331.792cyclegan_lsgan-id0-resnet-in_1xb1-80kiters_facades.pyfacades-id0125.16941.905cyclegan_lsgan-resnet-in_1xb1-250kiters_summer2winter.pysummer2winter83.71772.771cyclegan_lsgan-id0-resnet-in_1xb1-250kiters_summer2winter.pysummer2winter-id083.14182.720cyclegan_lsgan-resnet-in_1xb1-250kiters_summer2winter.pywinter2summer72.80253.129cyclegan_lsgan-id0-resnet-in_1xb1-250kiters_summer2winter.pywinter2summer-id073.50013.107cyclegan_lsgan-resnet-in_1xb1-270kiters_horse2zebra.pyhorse2zebra64.52251.418cyclegan_lsgan-id0-resnet-in_1xb1-270kiters_horse2zebra.pyhorse2zebra-id074.77701.542cyclegan_lsgan-resnet-in_1xb1-270kiters_horse2zebra.pyzebra2horse141.15173.154cyclegan_lsgan-id0-resnet-in_1xb1-270kiters_horse2zebra.pyzebra2horse-id0134.37283.091说明上表中每个配置行对应的模型权重.pth与训练日志.log.json下载链接见 configs/cyclegan/README.md 结果表格的 Download 列模型-权重对应关系也已登记在 configs/cyclegan/metafile.yml 中便于工具链自动解析。4.2 FID 与官方实现对比数据集facadesfacades-id0summer2wintersummer2winter-id0winter2summerwinter2summer-id0horse2zebrahorse2zebra-id0zebra2horsezebra2horse-id0平均official123.626119.72677.34276.77372.63174.23962.11177.202138.646137.05095.935ours124.8033125.169483.717783.141872.802573.500164.522574.7770141.1571134.372897.794.3 IS 与官方实现对比数据集facadesfacades-id0summer2wintersummer2winter-id0winter2summerwinter2summer-id0horse2zebrahorse2zebra-id0zebra2horsezebra2horse-id0平均official1.6381.6972.7622.7503.2933.1101.3751.5843.1863.0472.444ours1.7921.9052.7712.7203.1293.1071.4181.5423.1543.0912.4624.4 关于 id0 变体与实验设计说明README 中的两条重要注释需要理解身份损失权重的影响身份损失权重越大图像翻译越保守对输入图像改动越少。由于原始论文作者并未给出身份损失的最佳权重mmagic 在默认设置之外额外将身份损失权重设为 0以id0后缀标识对应配置中的loss_configdict(cycle_loss_weight10., id_loss_weight0.)以进行更全面的对比——这也解释了为何同一数据集上id0变体使用独立的配置文件和权重文件日志版本上表中部分条目对应的是 refactor重构之前的训练日志README 注明更新后的日志将陆续发布因此复现指标时建议以各模型最新的下载链接为准。五、从零开始训练、测试与评估实操5.1 数据集准备CycleGAN 需要非配对数据集目录结构要求如下与 unpaired_image_dataset.py 的phase A/B约定一致./data/cyclegan/facades/ ├── trainA/ # 域 Aphoto训练图像 ├── trainB/ # 域 Bmask训练图像 ├── testA/ # 域 A 测试图像 └── testB/ # 域 B 测试图像训练集与测试集分别按trainA/trainB、testA/testB组织data_root由各配置中的dataroot字段指定如./data/cyclegan/facades。summer2winter、horse2zebra 数据集结构相同仅需替换dataroot与配置中的domain_a/domain_b语义如 horse2zebra 对应horse/zebra。5.2 训练单卡训练使用 tools/train.py以 facades 为例python tools/train.py configs/cyclegan/cyclegan_lsgan-resnet-in_1xb1-80kiters_facades.py多卡分布式训练使用 tools/dist_train.sh或 tools/slurm_train.shbash tools/dist_train.sh configs/cyclegan/cyclegan_lsgan-resnet-in_1xb1-80kiters_facades.py 8训练要点train_cfg dict(max_iters80000)控制总迭代数facades 配置为 8 万次迭代summer2winter/horse2zebra 为 25 万/27 万次迭代对应配置文件名中的250kiters/270kiters学习率在迭代 40000总迭代的一半时开始线性衰减至 0见param_scheduler训练过程中VisualizationHook每 5000 次迭代自动保存翻译结果可视化便于实时观察训练质量。5.3 测试与评估使用 tools/test.py 加载训练好的权重并计算 FID/ISpython tools/test.py configs/cyclegan/cyclegan_lsgan-resnet-in_1xb1-80kiters_facades.py /path/to/checkpoint.pth多卡测试使用 tools/dist_test.shbash tools/dist_test.sh configs/cyclegan/cyclegan_lsgan-resnet-in_1xb1-80kiters_facades.py /path/to/checkpoint.pth 8评估流程由配置中的test_evaluator即val_evaluator驱动TransFID计算真实图像img_photo与生成图像fake_photo的分布距离TransIS评估生成图像的多样性与清晰度两者共同构成 CycleGAN 生成质量的量化标准。测试阶段test_dataloader直接复用val_dataloader设置test_modeTrue因此评估用的正是testA/testB数据。5.4 自定义数据集适配指南将 CycleGAN 迁移到自己的非配对数据集时只需基于现有配置做四处修改修改dataroot指向新数据根目录并保证trainA/trainB、testA/testB目录结构完整按语义修改domain_a/domain_b的取值如cat/dog确保model中的default_domain、reachable_domains、related_domains、data_preprocessor.data_keys与pack_input的keys/data_keys全部同步更新根据测试集图像数量更新num_imagesfake_nums应等于参与评估的生成图像总数按任务复杂度调整train_cfg.max_iters与param_scheduler的begin/end保持后半程线性衰减的节奏即可。六、引用与进一步阅读CycleGAN 论文 BibTeX 引用如下inproceedings{zhu2017unpaired, title{Unpaired image-to-image translation using cycle-consistent adversarial networks}, author{Zhu, Jun-Yan and Park, Taesung and Isola, Phillip and Efros, Alexei A}, booktitle{Proceedings of the IEEE international conference on computer vision}, pages{2223--2232}, year{2017}, }如需深入理解实现细节建议按以下路径继续阅读仓库源码顶层训练/测试逻辑mmagic/models/editors/cyclegan/cyclegan.pytrain_step、_get_disc_loss、_get_gen_loss、forward_test生成器与残差块mmagic/models/editors/cyclegan/cyclegan_generator.py、mmagic/models/editors/cyclegan/cyclegan_modules.py多域翻译基类mmagic/models/base_models/base_translation_model.py非配对数据集mmagic/datasets/unpaired_image_dataset.py全部官方配置与权重登记configs/cyclegan 目录及 configs/cyclegan/metafile.yml。赞分享媒体生成计算机视觉深度学习人工智能大模型【免费下载链接】mmagicOpenMMLab Multimodal Advanced, Generative, and Intelligent Creation Toolbox. Unlock the magic : Generative-AI (AIGC), easy-to-use APIs, awsome model zoo, diffusion models, for text-to-image generation, image/video restoration/enhancement, etc.项目地址https://gitcode.com/gh_mirrors/mm/mmagic点击查看免费下载相关推荐PaddleGAN 图像翻译实战指南Pix2Pix 与 CycleGAN 的配对/非配对训练全解析PaddleGAN 图像翻译实战指南Pix2Pix 与 CycleGAN 的配对/非配对训练全解析 PaddleGAN 内置了两种经典的图像到图像翻译Ima人工智能深度学习计算机视觉媒体生成视频处理图像处理ExplorerPatcher终极指南5分钟让Windows 11找回熟悉的工作界面ExplorerPatcher终极指南5分钟让Windows 11找回熟悉的工作界面 你是否在Windows 11上工作时感到一丝不适应那个居中的任务栏图标媒体生成计算机视觉深度学习人工智能大模型PaddleGAN 人像卡通化Photo2Cartoon实战指南基于 U-GAT-IT 与 Soft-AdaLIN 的非成对图像翻译PaddleGAN 人像卡通化Photo2Cartoon实战指南基于 U GAT IT 与 Soft AdaLIN 的非成对图像翻译 人像卡通风格渲染是人工智能深度学习计算机视觉媒体生成视频处理图像处理上一篇DanmakuFlameMaster控制器模块详解弹幕生命周期的管理者下一篇Akira 为什么值得 Linux 设计师关注一款原生开源的 UI/UX 设计工具从零上手指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考