CycleGAN

GitHub
12.9k 2k 较难 1 次阅读 2天前NOASSERTION图像开发框架
AI 解读 由 AI 自动生成,仅供参考

CycleGAN 是一款强大的图像转换工具,能够无需成对训练数据即可实现不同风格图像间的相互转化。它能将照片变成莫奈风格的画作,把马匹转换为斑马,甚至完成季节变换或照片增强等任务。

传统图像转换方法通常依赖大量“输入 - 输出”配对数据(如某地的夏天照片和对应冬天照片),这在现实中很难获取。CycleGAN 巧妙解决了这一难题,它利用“循环一致性损失”机制,仅凭两组无关联的图片集合(如一堆马的照片和一堆斑马的照片)就能学习两者间的映射关系,大大降低了数据准备门槛。

这款工具特别适合计算机视觉研究人员、AI 开发者以及数字艺术家使用。研究人员可借此探索无监督学习的前沿算法;开发者能将其集成到图像处理应用中;设计师和艺术家则能快速创作出风格独特的视觉作品。虽然普通用户也可通过封装好的应用体验其功能,但直接使用源码仍需一定的编程基础。

CycleGAN 的核心亮点在于其创新的“循环一致对抗网络”架构。它通过两个生成器和两个判别器的博弈,确保图像在转换后还能还原回原始状态,从而保证转换结果的真实性和合理性。作为 2017 年 ICCV 会议的杰出成果,它不仅开源了代码,还推动了后续众多改进模型(如 CUT)的发展,是图像风格迁移领域里程碑式的存在。

使用场景

一家独立游戏开发团队正在为一款奇幻题材的游戏制作资产,需要将大量现实世界的风景照片快速转化为统一的手绘油画风格,以匹配游戏的美术设定。

没有 CycleGAN 时

  • 数据配对成本极高:传统风格迁移模型需要成对的“原图 - 目标图”进行训练,美术团队必须手动绘制每张照片对应的油画版,耗时数月且人力成本巨大。
  • 风格一致性难保证:不同画师手工转绘的照片在笔触、色调和光影处理上存在差异,导致游戏场景视觉风格割裂,后期需花费大量时间统一调整。
  • 迭代效率低下:一旦策划决定微调美术风格(如从印象派转为厚涂风),所有已处理的图片需重新人工绘制,无法快速响应需求变更。
  • 复杂场景处理受限:对于包含动态元素(如流水、云层)或复杂结构的场景,手动转绘难以保留原始构图逻辑,容易丢失关键细节。

使用 CycleGAN 后

  • 无需成对数据训练:CycleGAN 直接利用未配对的“实景照片集”和“油画作品集”即可学习映射关系,团队仅需收集素材,省去了繁琐的手工配对环节。
  • 自动化风格统一:模型能自动提取油画的笔触纹理与色彩分布,将数百张风景照批量转化为风格高度一致的遊戲資產,确保视觉体验流畅自然。
  • 敏捷风格切换:只需更换训练数据集(如替换为水彩画集),即可在短时间内重新生成全新风格的场景图,极大提升了美术迭代的灵活性。
  • 智能内容保持:凭借循环一致性损失机制,CycleGAN 在转换风格的同时完美保留了原图的物体结构与空间布局,流水依然流动,建筑轮廓清晰可见。

CycleGAN 通过突破成对数据的限制,让游戏团队以极低的成本实现了大规模、高质量且可灵活迭代的美术风格迁移。

运行环境要求

操作系统
  • Linux
  • macOS
GPU

需要 NVIDIA GPU + CUDA CuDNN(CPU 模式可能可用但未测试),未指定具体显存大小和 CUDA 版本

内存

未说明

依赖
notes该工具基于 Lua 语言的 Torch 框架(非 PyTorch 或 Python)。Mac 用户需通过 brew 安装 GNU 命令工具 `gfind` 和 `gwc`。官方强烈建议查看其新的 PyTorch 实现版本,因为当前 Lua 版本已不再积极开发。
python未说明 (基于 Torch/Lua 框架,非 Python)
Torch (Lua)
nngraph
class
display
CUDA
CuDNN
CycleGAN hero image

快速开始




CycleGAN

PyTorch | 项目页面 | 论文

基于 Torch 的实现,用于学习图像到图像的转换(即 pix2pix),无需输入输出配对数据,例如:

新增: 请查看 contrastive-unpaired-translation (CUT),这是我们全新的无配对图像到图像转换模型,支持快速且内存高效的训练。

使用循环一致性对抗网络进行无配对图像到图像转换
朱俊彦*, 朴泰成*, 菲利普·伊索拉, 阿列克谢·A·埃夫罗斯
伯克利人工智能研究实验室,加州大学伯克利分校
在 ICCV 2017 上发表。(* 共同第一作者)

本包包含 CycleGAN、pix2pix,以及其他方法,如 BiGAN/ALI 和苹果公司的论文 S+U 学习
代码由 朱俊彦朴泰成 编写。
更新: 请查看 CycleGAN 和 pix2pix 的 PyTorch 实现
PyTorch 版本正在积极开发中,其结果可与或优于当前的 Torch 版本。

其他实现:

[TensorFlow] (由 Harry Yang), [TensorFlow] (由 Archit Rathore), [TensorFlow] (由 Van Huy), [TensorFlow] (由 Xiaowei Hu), [TensorFlow-简单] (由 Zhenliang He), [TensorLayer] (由 luoxier), [Chainer] (由 Yanghua Jin), [极简 PyTorch] (由 yunjey), [Mxnet] (由 Ldpe2G), [lasagne/Keras] (由 tjwei), [Keras] (由 Simon Karlsson)

应用

莫奈画作转照片

收藏级风格迁移

物体变形

季节转换

照片增强:浅景深效果

前提条件

  • Linux 或 OSX
  • NVIDIA GPU + CUDA CuDNN(CPU 模式和不带 CuDNN 的 CUDA 可能稍作修改后也能运行,但未经测试)
  • 对于 MAC 用户,需要安装 Linux/GNU 命令 gfindgwc,可通过 brew install findutils coreutils 进行安装。

快速开始

安装

luarocks install nngraph
luarocks install class
luarocks install https://raw.githubusercontent.com/szym/display/master/display-scm-0.rockspec
  • 克隆此仓库:
git clone https://github.com/junyanz/CycleGAN
cd CycleGAN

应用预训练模型

bash ./datasets/download_dataset.sh ae_photos
  • 下载预训练模型 style_cezanne(对于 CPU 模型,请使用 style_cezanne_cpu):
bash ./pretrained_models/download_model.sh style_cezanne
  • 现在,让我们生成保罗·塞尚风格的图像:
DATA_ROOT=./datasets/ae_photos name=style_cezanne_pretrained model=one_direction_test phase=test loadSize=256 fineSize=256 resize_or_crop="scale_width" th test.lua

测试结果将保存到 ./results/style_cezanne_pretrained/latest_test/index.html
更多预训练模型请参阅 模型库
./examples/test_vangogh_style_on_ae_photos.sh 是一个示例脚本,用于下载梵高风格的预训练网络,并在埃夫罗斯的照片上运行它。

训练

  • 下载数据集(例如来自 ImageNet 的斑马和马的图片):
bash ./datasets/download_dataset.sh horse2zebra
  • 训练模型:
DATA_ROOT=./datasets/horse2zebra name=horse2zebra_model th train.lua
  • (仅限 CPU)相同的训练命令,但不使用 GPU 或 CUDNN。通过设置环境变量 gpu=0 cudnn=0 强制仅使用 CPU:
DATA_ROOT=./datasets/horse2zebra name=horse2zebra_model gpu=0 cudnn=0 th train.lua
  • (可选)启动显示服务器,以便在模型训练时查看结果。(有关详细信息,请参阅 显示界面):
th -ldisplay.start 8000 0.0.0.0

测试

  • 最后,测试模型:
DATA_ROOT=./datasets/horse2zebra name=horse2zebra_model phase=test th test.lua

测试结果将保存到此处的 HTML 文件中:./results/horse2zebra_model/latest_test/index.html

模型 zoo

使用以下脚本下载预训练模型。模型将保存到 ./checkpoints/model_name/latest_net_G.t7

bash ./pretrained_models/download_model.sh model_name
  • orange2apple(橙子 → 苹果)和 apple2orange:在 ImageNet 的 appleorange 类别上训练。
  • horse2zebra(马 → 斑马)和 zebra2horse(斑马 → 马):在 ImageNet 的 horsezebra 类别上训练。
  • style_monet(风景照片 → 莫奈风格画作)、style_vangogh(风景照片 → 梵高风格画作)、style_ukiyoe(风景照片 → 浮世绘风格画作)、style_cezanne(风景照片 → 塞尚风格画作):在绘画作品和 Flickr 风景照片上训练。
  • monet2photo(莫奈画作 → 真实风景):在绘画作品和 Flickr 风景照片上训练。
  • cityscapes_photo2label(街景 → 标签)和 cityscapes_label2photo(标签 → 街景):在 Cityscapes 数据集上训练。
  • map2sat(地图 → 航拍图)和 sat2map(航拍图 → 地图):在 Google 地图上训练。
  • iphone2dslr_flower(iPhone 花卉照片 → 单反花卉照片):在 Flickr 照片上训练。

CPU 版本的模型可以通过以下命令下载:

bash pretrained_models/download_model.sh <name>_cpu

其中 <name> 可以是 horse2zebrastyle_monet 等。只需在目标模型名称后加上 _cpu 即可。

训练与测试细节

要训练一个模型,可以运行:

DATA_ROOT=/path/to/data/ name=expt_name th train.lua

模型将保存到 ./checkpoints/expt_name 目录下(可通过在 train.lua 中传递 checkpoint_dir=your_dir 参数来更改)。更多训练选项请参阅 options.lua 中的 opt_train

要测试模型,可以运行:

DATA_ROOT=/path/to/data/ name=expt_name phase=test th test.lua

这将在 /path/to/data/testA/path/to/data/testB 中的所有图像上以双向方式运行名为 expt_name 的模型。结果图像的网页将保存到 ./results/expt_name 目录下(可通过在 test.lua 中传递 results_dir=your_dir 参数来更改)。更多测试选项请参阅 options.lua 中的 opt_test。如果仅希望生成训练网络在一个方向上的输出,请使用 model=one_direction_test,并指定 which_direction=AtoBwhich_direction=BtoA 来设置方向。

此外,还有其他可选参数。例如,可以指定 resize_or_crop=crop 选项来避免将图像调整为正方形。我们在项目 webpageCycada 模型中正是这样做的。我们准备了分辨率为 1024px 的图像,并使用 resize_or_crop=crop fineSize=360 来处理裁剪后的 360x360 大小的图像。我们还使用了 lambda_identity=1.0

数据集

使用以下脚本下载数据集。许多数据集由其他研究人员收集。如果您使用这些数据,请引用他们的论文。

bash ./datasets/download_dataset.sh dataset_name
  • facades:来自 CMP Facades 数据集 的 400 张图像。[引用]
  • cityscapes:来自 Cityscapes 训练集 的 2975 张图像。[引用] 注意:由于许可问题,我们未将该数据集托管在我们的仓库中。请直接从 Cityscapes 官网下载数据集。更多信息请参阅 ./datasets/prepare_cityscapes_dataset.py
  • maps:从 Google 地图抓取的 1096 张训练图像。
  • horse2zebra:从 ImageNet 下载的 939 张马图像和 1177 张斑马图像,关键词分别为 wild horsezebra
  • apple2orange:从 ImageNet 下载的 996 张苹果图像和 1020 张橙子图像,关键词分别为 applenavel orange
  • summer2winter_yosemite:通过 Flickr API 下载的 1273 张优胜美地夏季图像和 854 张冬季图像。更多详情请参阅我们的论文。
  • monet2photovangogh2photoukiyoe2photocezanne2photo:艺术图像来自 Wikiart。真实照片则通过 Flickr 上 landscapelandscapephotography 标签组合下载。各类别训练集规模为:莫奈 1074 张,塞尚 584 张,梵高 401 张,浮世绘 1433 张,照片 6853 张。
  • iphone2dslr_flower:两类图像均来自 Flickr。训练集规模为 iPhone 1813 张,单反 3316 张。更多详情请参阅我们的论文。

显示界面

可选地,在训练和测试过程中显示图像时,可以使用 display 包

  • 安装方法:luarocks install https://raw.githubusercontent.com/szym/display/master/display-scm-0.rockspec
  • 启动服务器:th -ldisplay.start
  • 在浏览器中打开此网址:http://localhost:8000

默认情况下,服务器监听本地回环地址。若需允许任何接口的外部连接,可传递 0.0.0.0

th -ldisplay.start 8000 0.0.0.0

然后在浏览器中打开 http://(hostname):(port)/ 即可加载远程桌面。

准备训练与测试数据

要在您自己的数据集上训练 CycleGAN 模型,需要创建一个包含两个子目录 trainAtrainB 的数据文件夹,分别存放来自域 A 和 B 的图像。您可以通过在 test.lua 中设置 phase='train' 来在训练集上测试模型。如果有测试数据,也可以创建 testAtestB 子目录。

请注意,不要期望我们的方法适用于任意随机的输入输出数据集组合(例如 cats<->keyboards)。根据我们的实验,当两个数据集具有相似的视觉内容时,效果会更好。例如,landscape painting<->landscape photographs 的效果远优于 portrait painting <-> landscape photographszebras<->horses 能取得令人信服的结果,而 cats<->dogs 则完全失败。更多讨论请参见下文。

失败案例

当测试图像与模型训练数据集中的图像差异较大时,我们的模型表现不佳。例如左图所示的情况(我们在没有骑手的马和斑马上进行训练,但在测试时却使用了一匹有骑手的马)。更多典型的失败案例请参见这里。对于涉及颜色和纹理变化的翻译任务,如上文提到的许多例子,该方法通常能够取得成功。然而,我们也尝试过需要几何变换的任务,但收效甚微。例如,在“狗↔猫”转换任务中,学习到的翻译结果往往只是对输入图像做出极小的改动。此外,我们还观察到,使用成对训练数据所能达到的效果与我们无配对数据方法所取得的效果之间仍存在差距。在某些情况下,这种差距可能非常难以弥补,甚至根本无法弥合:比如,在城市景观照片→标签的任务中,我们的方法有时会将输出中的“树”和“建筑物”的标签互换。

引用

如果您在研究中使用了本代码,请引用我们的论文

@inproceedings{CycleGAN2017,
  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={Computer Vision (ICCV), 2017 IEEE International Conference on},
  year={2017}
}

相关项目:

contrastive-unpaired-translation (CUT)
pix2pix-Torch | pix2pixHD | BicycleGAN | vid2vid | SPADE/GauGAN
iGAN | GAN Dissection | GAN Paint

猫主题论文集

如果您喜爱猫咪,并且喜欢阅读有关图形学、视觉和机器学习的精彩论文,请查看猫主题论文

致谢

代码借鉴了pix2pixDCGAN。数据加载器则基于DCGANContext-Encoder进行了修改。生成网络采用了neural-style的架构,并结合了Instance Normalization技术。

常见问题

相似工具推荐

stable-diffusion-webui

stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。

162.1k|★★★☆☆|今天
开发框架图像Agent

everything-claude-code

everything-claude-code 是一套专为 AI 编程助手(如 Claude Code、Codex、Cursor 等)打造的高性能优化系统。它不仅仅是一组配置文件,而是一个经过长期实战打磨的完整框架,旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。 通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能,everything-claude-code 能显著提升 AI 在复杂任务中的表现,帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略,使得模型响应更快、成本更低,同时有效防御潜在的攻击向量。 这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库,还是需要 AI 协助进行安全审计与自动化测试,everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目,它融合了多语言支持与丰富的实战钩子(hooks),让 AI 真正成长为懂上

140.4k|★★☆☆☆|今天
开发框架Agent语言模型

ComfyUI

ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。

107.7k|★★☆☆☆|2天前
开发框架图像Agent

NextChat

NextChat 是一款轻量且极速的 AI 助手,旨在为用户提供流畅、跨平台的大模型交互体验。它完美解决了用户在多设备间切换时难以保持对话连续性,以及面对众多 AI 模型不知如何统一管理的痛点。无论是日常办公、学习辅助还是创意激发,NextChat 都能让用户随时随地通过网页、iOS、Android、Windows、MacOS 或 Linux 端无缝接入智能服务。 这款工具非常适合普通用户、学生、职场人士以及需要私有化部署的企业团队使用。对于开发者而言,它也提供了便捷的自托管方案,支持一键部署到 Vercel 或 Zeabur 等平台。 NextChat 的核心亮点在于其广泛的模型兼容性,原生支持 Claude、DeepSeek、GPT-4 及 Gemini Pro 等主流大模型,让用户在一个界面即可自由切换不同 AI 能力。此外,它还率先支持 MCP(Model Context Protocol)协议,增强了上下文处理能力。针对企业用户,NextChat 提供专业版解决方案,具备品牌定制、细粒度权限控制、内部知识库整合及安全审计等功能,满足公司对数据隐私和个性化管理的高标准要求。

87.6k|★★☆☆☆|昨天
开发框架语言模型

ML-For-Beginners

ML-For-Beginners 是由微软推出的一套系统化机器学习入门课程,旨在帮助零基础用户轻松掌握经典机器学习知识。这套课程将学习路径规划为 12 周,包含 26 节精炼课程和 52 道配套测验,内容涵盖从基础概念到实际应用的完整流程,有效解决了初学者面对庞大知识体系时无从下手、缺乏结构化指导的痛点。 无论是希望转型的开发者、需要补充算法背景的研究人员,还是对人工智能充满好奇的普通爱好者,都能从中受益。课程不仅提供了清晰的理论讲解,还强调动手实践,让用户在循序渐进中建立扎实的技能基础。其独特的亮点在于强大的多语言支持,通过自动化机制提供了包括简体中文在内的 50 多种语言版本,极大地降低了全球不同背景用户的学习门槛。此外,项目采用开源协作模式,社区活跃且内容持续更新,确保学习者能获取前沿且准确的技术资讯。如果你正寻找一条清晰、友好且专业的机器学习入门之路,ML-For-Beginners 将是理想的起点。

85k|★★☆☆☆|今天
图像数据工具视频

ragflow

RAGFlow 是一款领先的开源检索增强生成(RAG)引擎,旨在为大语言模型构建更精准、可靠的上下文层。它巧妙地将前沿的 RAG 技术与智能体(Agent)能力相结合,不仅支持从各类文档中高效提取知识,还能让模型基于这些知识进行逻辑推理和任务执行。 在大模型应用中,幻觉问题和知识滞后是常见痛点。RAGFlow 通过深度解析复杂文档结构(如表格、图表及混合排版),显著提升了信息检索的准确度,从而有效减少模型“胡编乱造”的现象,确保回答既有据可依又具备时效性。其内置的智能体机制更进一步,使系统不仅能回答问题,还能自主规划步骤解决复杂问题。 这款工具特别适合开发者、企业技术团队以及 AI 研究人员使用。无论是希望快速搭建私有知识库问答系统,还是致力于探索大模型在垂直领域落地的创新者,都能从中受益。RAGFlow 提供了可视化的工作流编排界面和灵活的 API 接口,既降低了非算法背景用户的上手门槛,也满足了专业开发者对系统深度定制的需求。作为基于 Apache 2.0 协议开源的项目,它正成为连接通用大模型与行业专有知识之间的重要桥梁。

77.1k|★★★☆☆|2天前
Agent图像开发框架