guided-diffusion
OpenAI开源的分类器引导扩散模型,首次在ImageNet上超越GAN的里程碑研究代码
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
OpenAI开源的分类器引导扩散模型,首次在ImageNet上超越GAN的里程碑研究代码
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
想象一下,你让一位画家只看文字描述就画出"一只橙色的猫坐在红色沙发上"——这对人类画家来说已是挑战,但对2021年前的AI来说,更是一道几乎无解的难题。彼时的AI绘图系统要么生成模糊的色块,要么图片失真到面目全非。2021年,OpenAI发表论文《Diffusion Models Beat GANs on Image Synthesis》,并开源了这套代码,首次在ImageNet 128×128分辨率上让扩散模型的FID得分(越低越好)超越了GAN,引发了整个AI图像生成领域的震动。
本项目 openai/guided-diffusion 正是这篇论文的官方实现代码。它基于OpenAI更早的 improved-diffusion 改进而来,引入了分类器引导(Classifier Guidance) 机制,让扩散模型在保持生成多样性的同时,大幅提升了图像质量与细节表现。
扩散模型(Diffusion Model)的原理,可以用一个通俗的比喻来理解:想象你把一张清晰的猫照片放进洗衣机里,洗了1000次,得到了完全随机的噪点图——这个过程叫"前向扩散"。而训练AI做的事情,是教会它逆向操作:给AI一张随机噪点图,AI要学会把它"洗回"那只猫。
在 Guided Diffusion 之前,扩散模型生成质量虽好,但速度极慢(需要迭代上千步),且在ImageNet等高分辨率数据集上,FID得分始终落后于GAN。OpenAI团队的核心贡献在于:引入了一个辅助分类器——在扩散过程中给图像加入少量噪声后,用这个noised classifier来引导生成方向。这样做的好处是,既能保持扩散模型的生成多样性(不像GAN那样容易模式崩溃),又能借助分类器的语义信息提升质量。
项目发布于2021年5月(arXiv:2105.05233),作者团队包括 Rewon Child、Prafulla Dhariwal、Mark Chen 等多位在生成模型领域有深厚积累的研究者。他们选择开源而非闭源,正是为了让整个研究社区在此基础上进一步探索。
本代码库提供了完整的推理(采样)和训练能力:
推理脚本(采样):
image_sample.py — 基础扩散模型采样classifier_sample.py — 带分类器引导的采样(核心功能)super_res_sample.py — 超分辨率采样(64→256、128→512上采样)训练脚本:
image_train.py — 扩散模型训练classifier_train.py — 分类器训练super_res_train.py — 超分辨率扩散模型训练以最常用的 classifier_sample.py 为例,用户只需指定模型路径、图像分辨率和引导强度(--classifier_scale),即可生成指定类别的高质量图像。classifier_scale=0 时退化为无条件生成,classifier_scale 越大则分类引导越强。
预训练模型覆盖了从64×64到512×512的多个分辨率层级,以及ImageNet和LSUN(卧室、猫、马)数据集,下载链接直接托管在OpenAI Azure Blob Storage上。
项目采用典型的扩散模型架构:
核心模块(guided_diffusion/):
unet.py — U-Net 架构实现,这是扩散模型的"主干网络"。包含 AttentionPool2d、QKVAttention、ResBlock、AttentionBlock 等组件,支持自注意力机制和时间步嵌入(timestep embedding),是生成图像质量的关键。gaussian_diffusion.py — 扩散过程的数学实现,包括噪声调度(线性/余弦)、重参数化采样等核心逻辑。respace.py — 时间步重参数化(timestep respacing),允许用更少的采样步数(如250步 vs 原生1000步)生成图像,大幅加速推理。fp16_util.py — FP16 混合精度训练支持,在保证质量的同时显著减少显存占用和训练时间。losses.py — KL散度损失和离散化高斯对数似然计算。训练数据:ImageNet 1K(1000类)和 LSUN 数据集(卧室、猫、马),总计百万级图像。模型卡中特别注明了LSUN数据集中约90%的标签准确率,以及可能包含人类面孔的问题。
这个项目不是面向普通用户的应用,而是为AI研究者和工程师设计的实验框架:
models/ 目录。guided-diffusion 的发布是扩散模型发展史上的标志性事件。在它之前,GAN 几乎垄断了高质量图像生成领域;在它之后,扩散模型的潜力被彻底释放。OpenAI 选择开源代码而非封闭,让全球研究者得以站在这个基础上继续前行——后续的 DiT (Diffusion Transformer)、Stable Diffusion、Imagen 等工作,都在某种程度上受到了这套代码的启发。
从技术演进角度看,这个项目展示了"分类器引导"这一技巧的巨大威力:仅通过在采样过程中引入一个额外的分类器信号,就能在不增加训练成本的情况下显著提升生成质量。这一思想后来演化为 Classifier-Free Guidance(CFG)技术,成为几乎所有现代扩散模型的标配。
| 维度 | 评估 |
|---|---|
| 项目类型 | 研究论文官方代码库 |
| 核心功能 | 分类器引导的扩散模型采样与训练 |
| 架构 | U-Net + 时间步嵌入 + 辅助分类器 |
| 预训练模型 | 覆盖64/128/256/512分辨率,含上采样器 |
| 硬件需求 | NVIDIA GPU (8GB+ VRAM) |
| 部署难度 | 中等(需手动配置Python环境+下载模型) |
| License | MIT(模型权重仅研究用途) |
| 后续影响 | 极高(奠定了现代扩散模型的基础) |