Palette-Image-to-Image-Diffusion-Models
PyTorch实现的Palette扩散模型,一套架构搞定图像着色/填充/扩展/JPEG修复四大任务
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
PyTorch实现的Palette扩散模型,一套架构搞定图像着色/填充/扩展/JPEG修复四大任务
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
凌晨两点,某位设计师正对着客户发来的黑白老照片发愁——照片是祖辈留下的珍贵影像,但已经泛黄、破损、局部缺失。传统修图软件需要数小时的精细操作:手动选区、克隆图章、填充内容……每一步都在考验耐心与技巧。而即便如此,最终效果往往仍显生硬——边缘过渡不自然、缺失区域的纹理不合理、色调难以统一。
如果有一款工具,能够"理解"图像缺失部分应该长什么样,自动填补缺失内容,并且结果自然得像是 original 一直如此呢?这正是 Palette 项目想要解决的问题。
Palette 是 Google Research 在 ICCV 2021 发表的论文(Oral)提出的统一图像到图像翻译框架,本仓库是其在 PyTorch 下的非官方实现,目前已在 GitHub 斩获 1,830 Stars,受到 AI 图像处理社区的广泛认可。
图1:Palette 项目封面(来源:GitHub 仓库封面图)
要理解 Palette,首先要理解它背后的技术脉络。扩散模型(Diffusion Models)自 2020 年 DDPM 论文以来,逐渐成为生成式 AI 的核心技术之一。与 GAN 相比,扩散模型训练更稳定、不容易出现模式崩溃(mode collapse),生成样本质量更高——但早期扩散模型的推理速度极慢,一次生成需要数千步迭代。
Palette 的核心创新在于:将条件扩散模型引入图像到图像翻译任务,用一个统一框架同时解决了四大经典任务:
| 任务 | 描述 | 示例场景 |
|---|---|---|
| 着色(Colorization) | 将灰度图像转换为彩色图像 | 老照片修复、历史影像上色 |
| 填充(Inpainting) | 智能填充图像缺失/被遮挡区域 | 物体移除、划痕修复、创意合成 |
| 扩展(Uncropping) | 扩展图像边界,自然延伸画面内容 | 构图调整、画布扩充 |
| JPEG 修复(JPEG Restoration) | 修复压缩伪影和JPEG伪块 | 老旧数码照片降噪 |
Google 团队在论文中证明:Palette 在所有四项任务上均超越了同期最强的 GAN 方法(如 CoModGAN、DeepFillv2),且无需任何任务专属的超参数调优或辅助损失函数。这种"大一统"的架构设计,是 Palette 最令人印象深刻的地方。

图2:Palette 非官方实现仓库(来源:Janspiry GitHub)
可以将扩散模型理解为一个极其耐心且记忆力超群的画家。当你要修复一张破损的老照片时,这位"画家"的思考过程大致如下:
正向扩散(加噪):画家先在脑海中将清晰的参考图像逐步模糊——从清晰到模糊、从模糊到噪点,最终变成纯粹的高斯噪声。这个过程是确定性的、可以数学精确描述的。
逆向去噪(生成):画家从一团纯噪声开始,根据对"这幅画应该如何修复"的理解(即输入的条件图像),一步一步反向推理——从噪声中逐渐还原出应该存在的结构、纹理和色彩。每一步都会参考条件图像的信息,逐步将缺失内容"变"出来。
Palette 的关键之处在于:它的 UNet 去噪网络在每一步都会"看"到条件图像(cond_image)和当前噪声图(noisy image)的拼接结果,从而精准理解"我需要在哪些区域填补什么内容"。
本实现采用了两套 UNet 去噪骨干,由配置文件决定使用哪个模块:
| 骨干模块 | 来源 | 特点 |
|---|---|---|
sr3_modules | SR3(Image Super-Resolution via Iterative Refinement) | 更轻量,适合低分辨率任务 |
guided_diffusion_modules | Guided Diffusion(OpenAI) | 更大容量,生成质量更高,项目默认推荐 |
UNet 架构中集成了 self-attention 机制(在 16×16 低分辨率特征图上),这在论文中被证明是保证高质量生成的关键设计。代码还支持 EMA(指数移动平均) 模型参数平滑,训练稳定性更强。
Palette 对时间步的编码做了特殊设计:不同于原始 DDPM 直接编码时间步 t,Palette 编码的是 γ(即累积噪声水平 α 的乘积),并通过仿射变换(affine transformation)嵌入到网络中。这一细节使得模型对不同噪声水平的拟合更加精准。
仓库中每个任务都有对应的独立配置文件,通过 JSON 定义网络结构、数据路径、训练参数等。以下是核心配置对比:
| 任务 | 数据集 | 默认 batch size | 训练 epochs | mask 策略 |
|---|---|---|---|---|
| Inpainting | CelebaHQ | 3/gpu | 200 | hybrid(中心+随机) |
| Inpainting | Places2 | 3/gpu | 16 | center 128×128 |
| Uncropping | Places2 | 3/gpu | 8 | 边界扩展 |
| Colorization | ImageNet | 3/gpu | 待完成 | 无 |
推理阶段(eval.py)使用 clean-fid 库计算 FID 分数,并调用 inception_score 计算 IS 分数——这些都是图像生成质量的标准评估指标。
优势在于:作者提供了 Google Colab 笔记本,Inpainting 任务可以直接在浏览器中零配置运行,适合快速体验。对于有 PyTorch 经验的开发者,标准的训练流程如下:
pip install torch torchvision numpy pandas tqdm tensorboardX scipy opencv-python clean-fid
python run.py -p train -c config/inpainting_celebahq.json
python run.py -p test -c config/inpainting_celebahq.json
门槛在于:该项目是一个纯命令行工具,不提供 Web 界面,需要开发者具备基本的深度学习环境配置能力和 GPU 资源。此外,数据集(CelebaHQ、Places2)需要自行下载,高质量模型权重也需要从零训练或从 Google Drive 链接获取。
扩散模型的固有缺陷:即便使用 DDPM,单张图像的推理仍需要数百次迭代。CelebaHQ Inpainting 任务跑了 200 epochs(930K iterations),对普通研究者而言硬件门槛较高。
本仓库对原始 Palette 论文做了若干实现细节调整:采用了 Guided Diffusion 的 UNet 架构而非论文原始设计、对时间步 γ 的编码方式有差异。这些调整提升了生成质量,但也意味着与原始论文的具体数值结果可能不完全对齐。
Colorization 和 Uncropping 任务在 README 中标记为"uncertain"状态,意味着这两个功能模块的实际效果未经充分验证。
Palette 的出现代表了扩散模型从"无条件图像生成"向"可控图像编辑"的关键一步。Palette 所展示的统一框架思路,直接影响了后来 ControlNet、InstructPix2Pix 等项目的设计哲学。
从技术演进角度看,Palette 揭示了几个重要趋势:
项目速览:Janspiry/Palette-Image-to-Image-Diffusion-Models | ⭐ 1,830 | Python | MIT License
一句话亮点:PyTorch 非官方实现的 Palette 图到图扩散框架,一个模型搞定着色/填充/扩展/JPEG修复四大任务。
适合人群:有深度学习基础的图像处理研究者、PyTorch 开发者、AI 修图工具爱好者。