目录

Analytic Diffusion Studio — 项目总览

Analytic Diffusion Studio 是一个面向"无训练 (training-free) 解析扩散模型"的统一实验框架。传统扩散模型(如 DDPM、DDIM)需要训练一个神经网络(通常是 UNet)来学习去噪函数;而本项目实现的方法直接利用数据集的统计量(均值、协方差、最近邻等)构造解析形式的去噪器,无需任何梯度优化。

核心论文:

┌─────────────────────────────────────────────────────────┐
│                    generate.py (入口)                     │
│  解析 CLI → 加载配置 → 构建数据集 → 创建模型 → 采样 → 评估  │
└────────┬──────────┬──────────┬──────────┬───────────────┘
         │          │          │          │
         ▼          ▼          ▼          ▼
   configuration   data/     models/    metrics
   (配置系统)    (数据加载)  (去噪模型)  (评估指标)
                    ┌───────────┼───────────┐
                    ▼           ▼           ▼
              BaseDenoiser   utils/      baseline_unet
              (抽象基类)   (Wiener/UNet)  (对比基线)
        ┌───────┬───┴────┬──────────┬──────────┐
        ▼       ▼        ▼          ▼          ▼
     Wiener  Optimal   SCFDM   PCA Locality  Nearest
模块路径职责
配置系统configuration.pyYAML 配置加载、合并、路径解析、运行目录创建
数据模块data/数据集注册、加载、预处理(归一化到 [-1,1])、后处理
模型注册models/__init__.py全局模型注册表,@register_model 装饰器
基类models/base.pyBaseDenoiser 抽象接口、DDIM 采样循环
去噪模型models/*.py5 种去噪方法的具体实现
工具utils/Wiener 滤波计算/存储、UNet 网络定义
评估metrics.pyR²、MSE、L2 距离计算
入口generate.py实验编排:采样、评估、日志、WandB
方法类名核心思想预计算推理复杂度适用场景
WienerDenoisingWiener线性最优滤波(基于协方差矩阵)协方差 SVDO(n²) 矩阵乘法快速基线,低分辨率
OptimalOptimalDenoiser贝叶斯最优估计(softmax 加权平均)FAISS 索引O(N·k) 近邻搜索理论上界参考
SCFDMSmoothedCFDM对 Optimal 做高斯平滑FAISS 索引O(M·N·k)平滑生成效果
PCA LocalityPCALocalityDenoiser局部性掩码 + 流式 softmax协方差 SVDO(N·n²) 流式核心创新方法
NearestNearestDatasetDenoiser最近邻检索数据集加载到内存O(N·n) 距离计算最简单基线

其中 N = 数据集大小,n = 像素维度,k = 近邻数,M = 噪声采样数。

Wiener 滤波器

  • ✅ 推理极快(单次矩阵乘法)
  • ✅ 有闭式解,理论清晰
  • ❌ 假设数据为高斯分布,生成图像模糊

Optimal 去噪器

  • ✅ 理论上是贝叶斯最优估计
  • ❌ 需要遍历大量近邻,计算量大
  • ❌ 生成图像趋向数据集均值

SCFDM

  • ✅ 通过高斯平滑改善 Optimal 的锐度
  • ❌ 计算量是 Optimal 的 M 倍

PCA Locality

  • ✅ 核心创新:发现扩散模型的局部性来自数据统计
  • ✅ 通过掩码实现像素级局部去噪
  • ❌ 需要流式遍历整个数据集,推理较慢

Nearest Dataset

  • ✅ 实现最简单,便于理解
  • ❌ 只能"复制"训练集图像,无法生成新图像

一次完整实验的执行流程:

1. parse_args()           解析 --config  CLI 覆盖参数
2. load_config()          加载 YAML,合并 defaults,应用覆盖
3. ensure_run_directory() 创建输出目录结构
4. set_random_seeds()     设置全局随机种子(可复现)
5. build_dataset()        通过注册表构建数据集 + DataLoader
6. create_model()         通过注册表实例化去噪模型
7. model.train()          预计算(加载数据/计算协方差/构建索引)
8. model.sample()         DDIM 采样循环,逐步去噪
9. evaluate_main_model()  保存图像、网格、轨迹
10. evaluate_comparison()  UNet 基线对比(可选)
11. wandb.finish()        关闭 WandB 日志
依赖用途
PyTorch张量计算、模型定义
torchvision数据集加载、图像变换
diffusers (HuggingFace)DDIMScheduler 调度器
OmegaConf配置文件管理
FAISS高效近邻搜索(Optimal/SCFDM)
WandB实验追踪与可视化
NumPy数值计算辅助
Pillow图像 I/O
tqdm进度条

相关内容