score_sde

GitHub
1.8k 229 中等 1 次阅读 4天前Apache-2.0开发框架图像
AI 解读 由 AI 自动生成,仅供参考

score_sde 是谷歌研究团队开源的生成式建模代码库,核心基于“通过随机微分方程进行基于分数的生成建模”这一前沿理论。它旨在解决传统生成模型在样本质量、似然计算精确度以及条件生成能力(如图像修复、上色)上的局限。通过将数据分布到噪声的过程建模为连续的随机微分方程(SDE),score_sde 提供了一个统一框架,不仅涵盖了 NCSN、DDPM 等经典模型,还支持更高效的采样算法和潜在的编码操作。

该项目特别适合人工智能研究人员和深度学习开发者使用。对于希望深入理解扩散模型原理、复现顶级会议(ICLR 2021 Oral)成果或开发新型生成算法的专业人士而言,这是一个极具价值的参考实现。代码库设计模块化,易于扩展新的 SDE 类型、预测器或校正器,并提供了 JAX 和 PyTorch 两个版本以适应不同的硬件资源与速度需求。其技术亮点在于实现了无条件下 CIFAR-10 数据集上 FID 低至 2.20 的卓越生成质量,并支持高分辨率图像生成及精确的似然评估,为探索生成式 AI 的边界提供了坚实的技术底座。

使用场景

某医疗影像实验室的研究团队正致力于开发一套系统,旨在将低分辨率、模糊的早期肺部 CT 扫描图重建为高保真图像,以辅助医生更精准地识别微小病灶。

没有 score_sde 时

  • 生成质量受限:传统生成模型在处理复杂医学纹理时容易产生模糊或伪影,难以还原真实的组织细节,导致 FID(弗雷歇初始距离)指标较高,图像可信度低。
  • 修复功能缺失:面对扫描中常见的遮挡或缺损区域,现有工具缺乏灵活的“图像修复(Inpainting)”能力,无法基于周围健康组织智能补全缺失数据。
  • 理论框架割裂:团队需分别调试 NCSN 和 DDPM 等不同算法的代码库,缺乏统一的随机微分方程(SDE)视角来优化采样过程,研发效率低下且难以复现前沿成果。
  • 似然评估困难:无法精确计算生成图像的似然值,导致难以量化模型对数据分布的学习程度,调优过程主要依赖主观视觉判断。

使用 score_sde 后

  • 高保真重建:利用 score_sde 在 CIFAR-10 上达到 FID 2.20 的顶尖生成能力,团队成功合成了纹理清晰、无伪影的高分辨率肺部影像,显著提升了病灶的可辨识度。
  • 灵活条件生成:借助其强大的条件生成机制,研究人员轻松实现了针对缺损区域的图像修复,模型能依据上下文逻辑自动填补扫描盲区,保持了器官结构的连续性。
  • 统一高效开发:score_sde 将多种主流分数模型整合于同一模块化框架下,团队得以快速切换并测试不同的 SDE 求解器,大幅缩短了从理论验证到模型部署的周期。
  • 精确量化评估:通过内置的精确似然计算功能,团队获得了具体的 bits/dim 数值,能够科学地监控训练收敛情况,确保模型真正掌握了医学影像的深层分布规律。

score_sde 通过统一的随机微分方程框架,不仅突破了医学影像生成的画质瓶颈,更为复杂的临床图像修复任务提供了可量化、高可靠的解决方案。

运行环境要求

操作系统
  • 未说明
GPU
  • 需要 NVIDIA GPU
  • 基准测试使用 4x Nvidia Tesla V100 (32GB)
  • JAX 版本显存需求较高(单模型训练可达 30GB-75GB),PyTorch 版本相对节省显存(约 20GB)
  • CUDA 版本未明确说明,但需匹配安装的 JAX 或 PyTorch 版本
内存

未说明

依赖
notes该项目主要基于 JAX/FLAX 开发,同时也提供了 PyTorch 版本的实现链接。JAX 版本训练速度更快但显存占用极高(可通过调整 n_jitted_steps 权衡速度与显存);PyTorch 版本显存占用较低但运行较慢。部分预训练模型(如 CelebA 原始数据训练的模型)因政策原因未公开,作者提供了在 FFHQ 等数据集上重新训练的替代模型。定量评估需预先下载特定的统计文件(stats files)。
python未说明
jax
flax
torch
ml_collections
tensorflow
tensorflow-gan
scipy
numpy
score_sde hero image

快速开始

基于分数的生成模型:通过随机微分方程

PWC

本仓库包含论文《基于分数的生成模型:通过随机微分方程》的官方实现,该论文由Yang Song、Jascha Sohl-Dickstein、Diederik P. Kingma、Abhishek Kumar、Stefano Ermon和Ben Poole共同撰写。


我们提出了一种统一的框架,通过随机微分方程(SDE)的视角,对先前基于分数的生成模型工作进行了推广和改进。具体而言,我们可以利用由SDE描述的连续时间随机过程,将数据转换为简单的噪声分布。如果已知每个中间时间步长上边缘分布的分数函数,就可以反转这一SDE来生成样本,而这些分数函数则可通过分数匹配方法进行估计。其基本思想如图所示:

示意图

我们的工作不仅有助于更好地理解现有方法,还带来了新的采样算法、精确的似然计算、唯一可识别的编码以及潜在代码操控能力,并为基于分数的生成模型家族增添了新的条件生成能力(包括但不限于类别条件生成、图像修复和彩色化)。综合来看,在CIFAR-10数据集上的无条件生成任务中,我们取得了2.20的FID值和9.89的Inception得分;同时,还能高质量地生成1024像素的Celeba-HQ图像(见下方样本)。此外,在均匀去量化后的CIFAR-10图像上,我们还获得了2.99比特/维度的似然值。

FFHQ样本

该代码的功能是什么?

除了我们论文中的NCSN++和DDPM++模型外,本代码库还在一处重新实现了许多先前的基于分数的模型,包括来自《通过估计数据分布的梯度进行生成建模》一文的NCSN、来自《改进训练基于分数的生成模型的技术》一文的NCSNv2,以及来自《去噪扩散概率模型》一文的DDPM。

该代码支持训练新模型,也支持评估现有模型的样本质量和似然值。我们精心设计了代码结构,使其具有模块化特性,便于扩展到新的SDE、预测器或校正器。

PyTorch版本

请在此处查看PyTorch实现:[https://github.com/yang-song/score_sde_pytorch],该实现支持除使用预训练分类器进行类别条件生成之外的所有功能。

JAX与PyTorch对比

一般来说,PyTorch版本的内存消耗较少,但运行速度比JAX慢。以下是在4块Nvidia Tesla V100 GPU(32GB)硬件上训练NCSN++连续模型时的基准测试结果:

框架 每步耗时(秒) 总内存占用(GB)
PyTorch 0.56 20.6
JAX (n_jitted_steps=1) 0.30 29.7
JAX (n_jitted_steps=5) 0.20 74.8

如何运行代码

依赖项

运行以下命令以安装本代码所需的部分Python包:

pip install -r requirements.txt

定量评估用统计文件

我们提供了CIFAR-10数据集的统计文件。您可以下载cifar10_stats.npz,并将其保存至assets/stats/目录下。有关如何为新数据集计算此类统计文件,请参阅#5

使用方法

通过main.py训练和评估我们的模型。

main.py:
  --config: 训练配置文件。
    (默认值:'None')
  --eval_folder: 存储评估结果的文件夹名称
    (默认值:'eval')
  --mode: <train|eval>:运行模式——训练或评估
  --workdir: 工作目录
  • config是配置文件的路径。我们提供的预设配置文件位于configs/目录中,它们按照ml_collections格式编写,应该相当直观易懂。

    配置文件命名规则:配置文件路径由以下几个维度组合而成:

    • 数据集:可以是cifar10celebacelebahqcelebahq_256ffhq_256celebahqffhq之一。
    • 模型:可以是ncsnncsnv2ncsnppddpmddpmpp之一。
    • 连续性:表示是否使用连续采样的时间步长来训练模型。
  • workdir是用于存储一次实验所有产物的路径,例如检查点、样本和评估结果等。

  • eval_folderworkdir下的一个子文件夹名称,用于存放评估过程中产生的所有成果,比如防止中断的元检查点、图像样本以及定量结果的numpy文件等。

  • mode可以是“train”或“eval”。当设置为“train”时,将开始训练新模型;若workdir/checkpoints-meta目录下存在用于在云环境中恢复运行的元检查点,则会继续之前未完成的训练。当设置为“eval”时,可以执行以下任意组合的操作:

    • 在测试或验证数据集上评估损失函数。
    • 生成固定数量的样本,并计算其Inception得分、FID或KID值。在评估之前,必须先下载或计算好统计文件,并将其存放在assets/stats目录中。
    • 在训练或测试数据集上计算对数似然。

以上功能既可以通过配置文件进行设置,也可以更便捷地通过ml_collections包提供的命令行支持来实现。例如,要生成样本并评估样本质量,只需添加--config.eval.enable_sampling标志;若要计算对数似然,则需添加--config.eval.enable_bpd标志,并指定--config.eval.dataset=train/test以表明是在训练集还是测试集上计算似然值。

如何扩展代码

  • 新的 SDE:继承 sde_lib.SDE 抽象类,并实现所有抽象方法。discretize() 方法是可选的,默认使用欧拉-丸山离散化。现有的采样方法和似然计算将自动适用于这个新的 SDE。
  • 新的预测器:继承 sampling.Predictor 抽象类,实现 update_fn 抽象方法,并使用 @register_predictor 注册其名称。新预测器可以直接用于 sampling.get_pc_sampler 中的预测-校正采样,以及 controllable_generation.py 中的所有其他可控生成方法。
  • 新的校正器:继承 sampling.Corrector 抽象类,实现 update_fn 抽象方法,并使用 @register_corrector 注册其名称。新校正器可以直接用于 sampling.get_pc_sampler,以及 controllable_generation.py 中的所有其他可控生成方法。

预训练检查点

所有检查点都提供在这个 Google Drive 中。

说明:对于某些模型,您可能会找到两个检查点。第一个检查点(编号较小)是我们论文表3中报告 FID 分数的检查点(也对应于下表中的 FID 和 IS 列)。第二个检查点(编号较大)是我们论文表2中报告黑箱 ODE 采样器的似然值和 FID 的检查点(也对应于下表中的 FID(ODE) 和 NNL (bits/dim) 列)。前者对应于训练过程中每 50k 次迭代时达到的最小 FID,后者则是训练结束时的最后一个检查点。

根据 Google 的政策,我们无法发布原始的 CelebA 和 CelebA-HQ 检查点。不过,我已利用个人资源在 FFHQ 1024px、FFHQ 256px 和 CelebA-HQ 256px 数据集上重新训练了模型,这些模型的表现与我们的内部检查点相当。

以下是论文中报告的检查点及其结果的详细列表。FID (ODE) 对应于应用于概率流 ODE 的黑箱 ODE 求解器的样本质量。

检查点路径 FID IS FID (ODE) NNL (bits/dim)
ve/cifar10_ncsnpp/ 2.45 9.73 - -
ve/cifar10_ncsnpp_continuous/ 2.38 9.83 - -
ve/cifar10_ncsnpp_deep_continuous/ 2.20 9.89 - -
vp/cifar10_ddpm/ 3.24 - 3.37 3.28
vp/cifar10_ddpm_continuous - - 3.69 3.21
vp/cifar10_ddpmpp 2.78 9.64 - -
vp/cifar10_ddpmpp_continuous 2.55 9.58 3.93 3.16
vp/cifar10_ddpmpp_deep_continuous 2.41 9.68 3.08 3.13
subvp/cifar10_ddpm_continuous - - 3.56 3.05
subvp/cifar10_ddpmpp_continuous 2.61 9.56 3.16 3.02
subvp/cifar10_ddpmpp_deep_continuous 2.41 9.57 2.92 2.99
检查点路径 样本
ve/bedroom_ncsnpp_continuous bedroom_samples
ve/church_ncsnpp_continuous church_samples
ve/ffhq_1024_ncsnpp_continuous ffhq_1024
ve/ffhq_256_ncsnpp_continuous ffhq_256_samples
ve/celebahq_256_ncsnpp_continuous celebahq_256_samples

演示和教程

链接 描述
Open In Colab 加载我们的预训练检查点,体验采样、似然计算和可控合成(JAX + FLAX)
Open In Colab 加载我们的预训练检查点,体验采样、似然计算和可控合成(PyTorch)
Open In Colab JAX + FLAX 中基于分数的生成模型教程
Open In Colab PyTorch 中基于分数的生成模型教程

小贴士

  • 使用 JAX 代码库时,可以将多个训练步骤一起进行 JIT 编译,以提高训练速度,但会增加内存消耗。这可以通过 config.training.n_jitted_steps 来设置。对于 CIFAR-10 数据集,如果您的 GPU/TPU 内存充足,建议使用 config.training.n_jitted_steps=5;否则建议使用 config.training.n_jitted_steps=1。目前的实现要求 config.training.log_freq 能被 n_jitted_steps 整除,这样才能正常进行日志记录和检查点保存。
  • LangevinCorrectorsnr(信噪比)参数在某种程度上类似于温度参数。较大的 snr 通常会产生更平滑的样本,而较小的 snr 则会产生更多样但质量较低的样本。典型的 snr 值为 0.05 - 0.2,需要通过调优找到最佳平衡点。
  • 对于 VE SDE,建议将 config.model.sigma_max 设置为训练数据集中任意两个样本之间的最大距离。

参考文献

如果您发现该代码对您的研究有帮助,请考虑引用以下文献:

@inproceedings{
  song2021scorebased,
  title={基于分数的生成模型:通过随机微分方程},
  author={杨松、雅沙·索尔-迪克斯坦、迪德里克·P·金格玛、阿比谢克·库马尔、斯特凡诺·埃尔蒙、本·普尔},
  booktitle={国际表示学习大会},
  year={2021},
  url={https://openreview.net/forum?id=PxTIG12RRHS}
}

本工作建立在一些先前的研究基础上,这些研究也可能对您有所启发:

  • 杨松和斯特凡诺·埃尔蒙. “通过估计数据分布的梯度进行生成建模.” 《第33届神经信息处理系统年会论文集》. 2019年.
  • 杨松和斯特凡诺·埃尔蒙. “训练基于分数的生成模型的改进方法.” 《第34届神经信息处理系统年会论文集》. 2020年.
  • 霍, 乔纳森、阿贾伊·贾因和皮特·阿贝尔. “去噪扩散概率模型.” 《第34届神经信息处理系统年会论文集》. 2020年.

常见问题

相似工具推荐

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 真正成长为懂上

139k|★★☆☆☆|今天
开发框架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|★★★☆☆|昨天
Agent图像开发框架