Analytic Diffusion Studio — 项目总览
系列 - Analytic Diffusion Studio系列
目录
1.1 项目背景
Analytic Diffusion Studio 是一个面向"无训练 (training-free) 解析扩散模型"的统一实验框架。传统扩散模型(如 DDPM、DDIM)需要训练一个神经网络(通常是 UNet)来学习去噪函数;而本项目实现的方法直接利用数据集的统计量(均值、协方差、最近邻等)构造解析形式的去噪器,无需任何梯度优化。
核心论文:
- PCA Locality: Locality in Image Diffusion Models Emerges from Data Statistics
- SCFDM: Score-based Generative Models with Closed-Form Denoisers
1.2 整体架构
┌─────────────────────────────────────────────────────────┐
│ generate.py (入口) │
│ 解析 CLI → 加载配置 → 构建数据集 → 创建模型 → 采样 → 评估 │
└────────┬──────────┬──────────┬──────────┬───────────────┘
│ │ │ │
▼ ▼ ▼ ▼
configuration data/ models/ metrics
(配置系统) (数据加载) (去噪模型) (评估指标)
│
┌───────────┼───────────┐
▼ ▼ ▼
BaseDenoiser utils/ baseline_unet
(抽象基类) (Wiener/UNet) (对比基线)
│
┌───────┬───┴────┬──────────┬──────────┐
▼ ▼ ▼ ▼ ▼
Wiener Optimal SCFDM PCA Locality Nearest1.3 模块职责
| 模块 | 路径 | 职责 |
|---|---|---|
| 配置系统 | configuration.py | YAML 配置加载、合并、路径解析、运行目录创建 |
| 数据模块 | data/ | 数据集注册、加载、预处理(归一化到 [-1,1])、后处理 |
| 模型注册 | models/__init__.py | 全局模型注册表,@register_model 装饰器 |
| 基类 | models/base.py | BaseDenoiser 抽象接口、DDIM 采样循环 |
| 去噪模型 | models/*.py | 5 种去噪方法的具体实现 |
| 工具 | utils/ | Wiener 滤波计算/存储、UNet 网络定义 |
| 评估 | metrics.py | R²、MSE、L2 距离计算 |
| 入口 | generate.py | 实验编排:采样、评估、日志、WandB |
1.4 五种去噪方法对比
| 方法 | 类名 | 核心思想 | 预计算 | 推理复杂度 | 适用场景 |
|---|---|---|---|---|---|
| Wiener | DenoisingWiener | 线性最优滤波(基于协方差矩阵) | 协方差 SVD | O(n²) 矩阵乘法 | 快速基线,低分辨率 |
| Optimal | OptimalDenoiser | 贝叶斯最优估计(softmax 加权平均) | FAISS 索引 | O(N·k) 近邻搜索 | 理论上界参考 |
| SCFDM | SmoothedCFDM | 对 Optimal 做高斯平滑 | FAISS 索引 | O(M·N·k) | 平滑生成效果 |
| PCA Locality | PCALocalityDenoiser | 局部性掩码 + 流式 softmax | 协方差 SVD | O(N·n²) 流式 | 核心创新方法 |
| Nearest | NearestDatasetDenoiser | 最近邻检索 | 数据集加载到内存 | O(N·n) 距离计算 | 最简单基线 |
其中 N = 数据集大小,n = 像素维度,k = 近邻数,M = 噪声采样数。
1.5 方法优缺点
Wiener 滤波器
- ✅ 推理极快(单次矩阵乘法)
- ✅ 有闭式解,理论清晰
- ❌ 假设数据为高斯分布,生成图像模糊
Optimal 去噪器
- ✅ 理论上是贝叶斯最优估计
- ❌ 需要遍历大量近邻,计算量大
- ❌ 生成图像趋向数据集均值
SCFDM
- ✅ 通过高斯平滑改善 Optimal 的锐度
- ❌ 计算量是 Optimal 的 M 倍
PCA Locality
- ✅ 核心创新:发现扩散模型的局部性来自数据统计
- ✅ 通过掩码实现像素级局部去噪
- ❌ 需要流式遍历整个数据集,推理较慢
Nearest Dataset
- ✅ 实现最简单,便于理解
- ❌ 只能"复制"训练集图像,无法生成新图像
1.6 执行流程
一次完整实验的执行流程:
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 日志1.7 技术栈
| 依赖 | 用途 |
|---|---|
| PyTorch | 张量计算、模型定义 |
| torchvision | 数据集加载、图像变换 |
| diffusers (HuggingFace) | DDIMScheduler 调度器 |
| OmegaConf | 配置文件管理 |
| FAISS | 高效近邻搜索(Optimal/SCFDM) |
| WandB | 实验追踪与可视化 |
| NumPy | 数值计算辅助 |
| Pillow | 图像 I/O |
| tqdm | 进度条 |
