目录

smalldiffusion 技术文档索引

smalldiffusion 是一个轻量级扩散模型库,用不到 100 行核心代码实现了扩散模型的训练与采样。 本文档对项目进行全面技术解读,从整体架构到每个函数的实现细节。

文件内容
01_overview.md项目总览:架构设计、模块关系、扩散模型数学基础
02_diffusion.md核心模块:噪声调度、训练循环、采样算法 (diffusion.py)
03_data.md数据模块:数据集工具、玩具数据集 (data.py)
04_model_base.md模型基础:ModelMixin、预测模式修饰器、注意力机制、嵌入层 (model.py)
05_model_dit.mdDiffusion Transformer 模型 (model_dit.py)
06_model_unet.mdU-Net 模型 (model_unet.py)
07_examples.md实战示例:从玩具模型到 Stable Diffusion
data.py ──────────┐
                   ├──> diffusion.py (training_loop, samples)
model.py ─────────┤
  ├─ model_dit.py ┤
  └─ model_unet.py┘
from torch.utils.data import DataLoader
from smalldiffusion import Swissroll, TimeInputMLP, ScheduleLogLinear, training_loop, samples
import numpy as np

dataset  = Swissroll(np.pi/2, 5*np.pi, 100)
loader   = DataLoader(dataset, batch_size=2048)
model    = TimeInputMLP(hidden_dims=(16,128,128,128,128,16))
schedule = ScheduleLogLinear(N=200, sigma_min=0.005, sigma_max=10)
trainer  = training_loop(loader, model, schedule, epochs=15000)
losses   = [ns.loss.item() for ns in trainer]
*xt, x0  = samples(model, schedule.sample_sigmas(20), gam=2)

相关内容