Homework 3 · Deep Generative Model
Meteorite DDPM Workflow
本项目使用纯 PyTorch 实现 DDPM 基线,训练 U-Net 噪声预测网络生成陨石图像,并用 InceptionV3 特征计算 FID 作为生成质量指标。
Overview
项目目标
项目目标是使用 meteorite/ 数据集训练生成模型,使其能够生成白底陨石图像。模型不仅需要生成单个陨石主体,还需要学习不规则轮廓、深色石质纹理、颗粒感和整体拍摄风格。
128 × 128baseline image size
1200training epochs
1000generated images
74.2195FID score
博客页面仅展示公开报告;源码、配置、指标和压缩后的代表性图片统一通过上方 GitHub 入口访问。
Workflow
训练与生成流程
- 对原始陨石图片进行等比例缩放和白底补齐,避免直接 resize 拉伸主体形状。
- 使用 U-Net 作为噪声预测网络训练 DDPM,在随机时间步向真实图像加噪。
- 从随机噪声开始反向采样,并优先使用 EMA 权重生成最终图像。
- 使用 InceptionV3 提取真实图像和生成图像特征,计算 FID。
- 在 128 像素基线后尝试 256 像素版本,并复盘其质量下降原因。
python train_meteorite_ddpm.py train --device cuda --amp
python train_meteorite_ddpm.py generate --checkpoint meteorite_ddpm_output/checkpoints/latest.pt --generated-dir generated_pictures --num-images 1000 --batch-size 64 --device cuda --clean-generated
python evaluate_fid.py
Configuration
核心配置与指标
| Item | Value |
|---|---|
| Model | DDPM + TinyUNet |
| Image size | 128 × 128 |
| Batch size | 64 |
| Learning rate | 2e-4 |
| Timesteps | 1000 |
| EMA decay | 0.9999 |
| Real image count | 2682 |
| Generated image count | 1000 |
| FID | 74.21950297875941 |
Results
生成结果
128 像素基线模型已经能够学习到白底背景、单主体构图和基础石质纹理。FID 仍然偏高,说明生成结果与真实分布存在差距,但整体流程稳定可复现。
256 像素实验保留了更多局部纹理,但也放大了背景噪声、主体比例和构图不稳定的问题,因此没有带来整体质量提升。
Review
问题复盘与后续优化
背景问题被放大
256 像素保留了更多细节,但也让暗背景、灰尘和边缘噪声更容易被模型学习。
主体占比不足
当前预处理只做白底 padding,没有检测并裁剪陨石主体,背景像素在损失中占比过大。
全局建模偏弱
TinyUNet 对 256 像素图像的全局构图控制不足,后续可增加下采样深度或加入 self-attention。
后续优化重点应放在主体裁剪、前景加权损失、更深的 U-Net 结构和统一采样策略,而不是单纯增加训练轮数。