pix2pix
pix2pix 是一款基于深度学习的图像转换工具,核心功能是将一种类型的输入图像自动翻译成对应的输出图像。它主要解决了传统方法难以处理的复杂图像映射问题,例如将语义标签图还原为真实街景、把黑白照片上色、将草线稿渲染为逼真建筑立面,或是把卫星地图转换为普通地图等。
该工具的独特技术亮点在于采用了“条件生成对抗网络”(Conditional GANs)。与普通的生成模型不同,pix2pix 在训练过程中不仅让生成器学习创造图像,还引入判别器来评估生成结果与真实图像的匹配度,同时利用输入图像作为条件约束,从而确保生成的图像既逼真又严格符合输入内容的结构特征。官方数据显示,即使是只有几百张图片的小型数据集,也能在较短时间内训练出效果不错的模型。
pix2pix 非常适合人工智能研究人员、计算机视觉开发者以及需要定制化图像生成方案的技术团队使用。由于项目主要提供基于 Torch 和 PyTorch 的代码实现,使用者需要具备一定的编程基础和深度学习环境配置能力。虽然普通用户无法直接通过图形界面操作,但设计师可以利用其训练好的模型或衍生应用,高效完成从概念草图到成品图的转化工作,极大地提升创作效率。
使用场景
某城市规划院的设计师需要将大量手绘的建筑立面草图快速转化为逼真的实景效果图,以向客户展示改造方案。
没有 pix2pix 时
- 人工绘制耗时极长:设计师需手动为每张草图上色、添加光影和材质纹理,单张图纸处理往往需要数小时甚至数天。
- 风格难以统一:不同设计师或同一设计师在不同时间绘制的效果图,在光照角度、色彩饱和度和细节表现上存在明显差异,导致方案集显得杂乱。
- 修改成本高昂:一旦客户提出调整建筑窗户样式或墙面材质,几乎需要重新绘制整张效果图,无法快速响应反馈。
- 依赖高端渲染农场:若使用传统 3D 建模渲染流程,需要构建精细模型并消耗大量算力资源,小团队难以承担硬件成本。
使用 pix2pix 后
- 秒级自动转化:只需训练一次模型(如使用 400 张立面图数据训练约 2 小时),即可将新的手绘草图在几秒钟内自动转换为高保真实景图。
- 输出风格高度一致:模型学习到的映射关系确保了所有生成图像拥有统一的光照逻辑和材质质感,大幅提升方案书的专业度。
- 即时迭代修改:设计师仅需修改输入端的草图线条(如改变窗户位置),pix2pix 便能立即生成对应的更新版效果图,实现“所画即所得”。
- 降低硬件门槛:基于条件对抗生成网络,该工具在单块消费级显卡上即可高效运行,无需昂贵的渲染集群支持。
pix2pix 通过将繁琐的图像翻译过程自动化,让建筑师能从重复的绘图工作中解放出来,专注于创意设计与方案优化。
运行环境要求
- Linux
- macOS
- 需要 NVIDIA GPU + CUDA CuDNN(官方未测试纯 CPU 模式或无 CuDNN 的 CUDA 模式,虽提及可微调运行但不保证)
- 具体显存大小和 CUDA 版本未说明,但示例提到在 Pascal Titan X GPU 上训练
未说明

快速开始
pix2pix
用于学习从输入图像到输出图像映射的 Torch 实现,例如:
条件对抗网络下的图像到图像转换
Phillip Isola、Jun-Yan Zhu、Tinghui Zhou、Alexei A. Efros
CVPR, 2017。
在某些任务上,使用较小的数据集即可较快地获得不错的效果。例如,要学习生成建筑立面(如上例所示),我们仅用400张图片训练了约2小时(在单个 Pascal Titan X GPU 上)。然而,对于更难的问题,可能需要使用更大的数据集,并且训练时间长达数小时甚至数天。
注:请查看我们的 PyTorch 实现,其中包含了 pix2pix 和 CycleGAN。PyTorch 版本目前仍在积极开发中,其效果可与或优于本 Torch 版本。
设置
前提条件
- Linux 或 OSX
- NVIDIA GPU + CUDA CuDNN(CPU 模式及无 CuDNN 的 CUDA 环境可能稍作修改后也能运行,但未经测试)
开始使用
- 从 https://github.com/torch/distro 安装 torch 及其依赖项
- 安装 torch 包
nngraph和display
luarocks install nngraph
luarocks install https://raw.githubusercontent.com/szym/display/master/display-scm-0.rockspec
- 克隆此仓库:
git clone git@github.com:phillipi/pix2pix.git
cd pix2pix
- 下载数据集(例如 CMP Facades):
bash ./datasets/download_dataset.sh facades
- 训练模型
DATA_ROOT=./datasets/facades name=facades_generation which_direction=BtoA th train.lua
- (仅限 CPU)不使用 GPU 或 CuDNN 的相同训练命令。设置环境变量
gpu=0 cudnn=0强制仅使用 CPU
DATA_ROOT=./datasets/facades name=facades_generation which_direction=BtoA gpu=0 cudnn=0 batchSize=10 save_epoch_freq=5 th train.lua
- (可选)启动显示服务器以在模型训练时查看结果。(有关详细信息,请参阅 Display UI):
th -ldisplay.start 8000 0.0.0.0
- 最后,测试模型:
DATA_ROOT=./datasets/facades name=facades_generation which_direction=BtoA phase=val th test.lua
测试结果将保存到此处的 HTML 文件中:./results/facades_generation/latest_net_G_val/index.html。
训练
DATA_ROOT=/path/to/data/ name=expt_name which_direction=AtoB th train.lua
将 AtoB 改为 BtoA 即可反向训练。
模型将保存到 ./checkpoints/expt_name 目录下(可通过在 train.lua 中传递 checkpoint_dir=your_dir 来更改)。
更多训练选项请参阅 train.lua 中的 opt 部分。
测试
DATA_ROOT=/path/to/data/ name=expt_name which_direction=AtoB phase=val th test.lua
这将在 /path/to/data/val 中的所有图像上运行名为 expt_name 的模型,方向为 AtoB。
结果图像以及用于查看它们的网页将保存到 ./results/expt_name 目录下(可通过在 test.lua 中传递 results_dir=your_dir 来更改)。
更多测试选项请参阅 test.lua 中的 opt 部分。
数据集
使用以下脚本下载数据集。部分数据集由其他研究人员收集,请在使用这些数据时引用他们的论文。
bash ./datasets/download_dataset.sh dataset_name
facades:来自 CMP Facades 数据集 的 400 张图片。[引用]cityscapes:来自 Cityscapes 训练集 的 2975 张图片。[引用]maps:从 Google 地图抓取的 1096 张训练图片edges2shoes:来自 UT Zappos50K 数据集 的 5 万张训练图片。边缘由 HED 边缘检测器结合后处理计算得出。 [引用]edges2handbags:来自 iGAN 项目 的 13.7 万张亚马逊手袋图片。边缘同样由 HED 边缘检测器结合后处理计算得出。[引用]night2day:约 2 万张来自 Transient Attributes 数据集 的自然场景图片 [引用]。若要训练day2night的 pix2pix 模型,需添加which_direction=BtoA。
模型
使用以下脚本下载预训练模型。下载完成后,需重命名模型(例如将 facades_label2image 重命名为 /checkpoints/facades/latest_net_G.t7)。
bash ./models/download_model.sh model_name
facades_label2image(标签 → 建筑立面):基于 CMP Facades 数据集训练cityscapes_label2image(标签 → 街景):基于 Cityscapes 数据集训练cityscapes_image2label(街景 → 标签):基于 Cityscapes 数据集训练edges2shoes(边缘 → 照片):基于 UT Zappos50K 数据集训练edges2handbags(边缘 → 照片):基于亚马逊手袋图片训练day2night(白天场景 → 夜间场景):基于约 100 个 网络摄像头 训练
准备训练和测试数据
生成配对数据
我们提供了一个 Python 脚本,用于生成成对的图像数据 {A,B},其中 A 和 B 是同一场景的不同表现形式。例如,这些可能是 {标签图,照片} 或 {黑白图像,彩色图像} 的配对。然后我们可以学习将 A 转换为 B,或 B 转换为 A:
创建文件夹 /path/to/data,并在其中建立子文件夹 A 和 B。A 和 B 应分别包含 train、val、test 等子文件夹。在 /path/to/data/A/train 中放入 A 风格的训练图片,在 /path/to/data/B/train 中放入对应的 B 风格图片。对其他数据划分(val、test 等)重复此操作。
配对中的两张图片 A 和 B 必须具有相同的尺寸和文件名,例如 /path/to/data/A/train/1.jpg 被认为与 /path/to/data/B/train/1.jpg 对应。
数据按上述方式整理好后,运行:
python scripts/combine_A_and_B.py --fold_A /path/to/data/A --fold_B /path/to/data/B --fold_AB /path/to/data
这会将每对图像 (A,B) 合并为一个单独的图像文件,以便进行训练。
关于色彩化的一些说明
进行色彩化时无需运行 combine_A_and_B.py。相反,您需要准备一些自然图像,并在脚本中设置 preprocess=colorization。程序会自动将每张 RGB 图像转换为 Lab 色彩空间,并在训练过程中创建 L → ab 的图像对。同时请设置 input_nc=1 和 output_nc=2。
提取边缘
我们提供了 Python 和 Matlab 脚本,用于从照片中提取粗略的边缘。运行 scripts/edges/batch_hed.py 来计算 HED 边缘。运行 scripts/edges/PostprocessHED.m 以通过额外的后处理步骤简化边缘。更多详情请参阅代码文档。
在 Cityscapes 数据集上评估 Labels2Photos 任务
我们提供了在 Cityscapes 验证 集上运行 Labels2Photos 任务评估的脚本。我们假设您已经在系统中安装了 caffe(以及 pycaffe)。如果没有,请参阅 官方网站 获取安装说明。成功安装 caffe 后,通过运行以下命令下载预训练的 FCN-8s 语义分割模型(512MB):
bash ./scripts/eval_cityscapes/download_fcn8s.sh
然后确保 ./scripts/eval_cityscapes/ 在您的系统 Python 路径中。如果不在,请运行以下命令将其添加:
export PYTHONPATH=${PYTHONPATH}:./scripts/eval_cityscapes/
现在您可以运行以下命令来评估您的预测结果:
python ./scripts/eval_cityscapes/evaluate.py --cityscapes_dir /path/to/original/cityscapes/dataset/ --result_dir /path/to/your/predictions/ --output_dir /path/to/output/directory/
存储在 --result_dir 下的图像应包含您模型在 Cityscapes 验证 分割上的预测结果,并且遵循原始 Cityscapes 的命名规范(例如:frankfurt_000001_038418_leftImg8bit.png)。该脚本将在 --output_dir 下输出一个包含评估指标的文本文件。
进一步说明:我们的预训练 FCN 模型 不 应用于原始分辨率(1024×2048)的 Cityscapes 数据集,因为它是在 256×256 的图像上训练的,这些图像在训练过程中被上采样到 1024×2048。训练时进行尺寸调整的目的在于:1) 保持标签图的原始高分辨率不变;2) 避免为 Cityscapes 数据集修改标准的 FCN 训练代码和网络架构。在测试时,您需要生成 256×256 的结果。我们的测试代码会自动将您的结果上采样到 1024×2048,然后再输入到预训练的 FCN 模型中。输出结果为 1024×2048 分辨率,并与 1024×2048 的真实标签进行比较。您无需对真实标签进行任何尺寸调整。验证一切是否正确的一个好方法是先复现论文中真实图像的评估结果。为此,您需要将原始/真实的 Cityscapes 图像(不是标签)调整为 256×256,然后将其输入到评估代码中。
显示界面
可选地,在训练和测试过程中显示图像时,可以使用 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)/ 即可加载远程桌面。
默认情况下,L1 误差会被绘制到显示界面上。您可以设置环境变量 display_plot 为逗号分隔的值列表 errL1, errG 和 errD,分别可视化 L1 误差、生成器误差和判别器误差。例如,如果您只想在显示界面上绘制生成器和判别器的误差,而不是默认的 L1 误差,可以设置 display_plot="errG,errD"。
引用
如果您在研究中使用了本代码,请引用我们的论文 基于条件对抗网络的图像到图像转换:
@article{pix2pix2017,
title={Image-to-Image Translation with Conditional Adversarial Networks},
author={Isola, Phillip and Zhu, Jun-Yan and Zhou, Tinghui and Efros, Alexei A},
journal={CVPR},
year={2017}
}
猫论文合集
如果您喜欢猫,并且热爱阅读关于图形学、视觉和机器学习的优秀论文,请查看猫论文合集: [Github] [网页]
致谢
本代码大量借鉴了 DCGAN。数据加载器则基于 DCGAN 和 Context-Encoder 进行了修改。
常见问题
相似工具推荐
openclaw
OpenClaw 是一款专为个人打造的本地化 AI 助手,旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚,能够直接接入你日常使用的各类通讯渠道,包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息,OpenClaw 都能即时响应,甚至支持在 macOS、iOS 和 Android 设备上进行语音交互,并提供实时的画布渲染功能供你操控。 这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地,用户无需依赖云端服务即可享受快速、私密的智能辅助,真正实现了“你的数据,你做主”。其独特的技术亮点在于强大的网关架构,将控制平面与核心助手分离,确保跨平台通信的流畅性与扩展性。 OpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者,以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力(支持 macOS、Linux 及 Windows WSL2),即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你
stable-diffusion-webui
stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。
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 真正成长为懂上
ComfyUI
ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。
gemini-cli
gemini-cli 是一款由谷歌推出的开源 AI 命令行工具,它将强大的 Gemini 大模型能力直接集成到用户的终端环境中。对于习惯在命令行工作的开发者而言,它提供了一条从输入提示词到获取模型响应的最短路径,无需切换窗口即可享受智能辅助。 这款工具主要解决了开发过程中频繁上下文切换的痛点,让用户能在熟悉的终端界面内直接完成代码理解、生成、调试以及自动化运维任务。无论是查询大型代码库、根据草图生成应用,还是执行复杂的 Git 操作,gemini-cli 都能通过自然语言指令高效处理。 它特别适合广大软件工程师、DevOps 人员及技术研究人员使用。其核心亮点包括支持高达 100 万 token 的超长上下文窗口,具备出色的逻辑推理能力;内置 Google 搜索、文件操作及 Shell 命令执行等实用工具;更独特的是,它支持 MCP(模型上下文协议),允许用户灵活扩展自定义集成,连接如图像生成等外部能力。此外,个人谷歌账号即可享受免费的额度支持,且项目基于 Apache 2.0 协议完全开源,是提升终端工作效率的理想助手。
markitdown
MarkItDown 是一款由微软 AutoGen 团队打造的轻量级 Python 工具,专为将各类文件高效转换为 Markdown 格式而设计。它支持 PDF、Word、Excel、PPT、图片(含 OCR)、音频(含语音转录)、HTML 乃至 YouTube 链接等多种格式的解析,能够精准提取文档中的标题、列表、表格和链接等关键结构信息。 在人工智能应用日益普及的今天,大语言模型(LLM)虽擅长处理文本,却难以直接读取复杂的二进制办公文档。MarkItDown 恰好解决了这一痛点,它将非结构化或半结构化的文件转化为模型“原生理解”且 Token 效率极高的 Markdown 格式,成为连接本地文件与 AI 分析 pipeline 的理想桥梁。此外,它还提供了 MCP(模型上下文协议)服务器,可无缝集成到 Claude Desktop 等 LLM 应用中。 这款工具特别适合开发者、数据科学家及 AI 研究人员使用,尤其是那些需要构建文档检索增强生成(RAG)系统、进行批量文本分析或希望让 AI 助手直接“阅读”本地文件的用户。虽然生成的内容也具备一定可读性,但其核心优势在于为机器