Files
RoRD-Layout-Recognation/docs/diffusion_training.md
2025-11-09 18:02:40 +08:00

299 lines
7.0 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# RoRD 扩散训练流程
本文档介绍如何使用新的扩散模型训练流程,该流程不再使用程序生成的版图图片,而是使用原始数据和扩散模型生成的相似图像进行训练。
## 🔄 新的训练流程
### 原有流程问题
- 依赖程序化生成的IC版图图像
- 程序生成的图像可能缺乏真实数据的复杂性和多样性
- 数据来源比例控制不够灵活
### 新流程优势
- **数据来源**:仅使用原始真实数据 + 扩散模型生成的相似图像
- **可控性**:通过配置文件精确控制两种数据源的比例
- **质量提升**:扩散模型基于真实数据学习,生成更真实的版图图像
- **完整管线**:从训练扩散模型到生成数据再到模型训练的一站式解决方案
## 📁 项目结构
```
RoRD-Layout-Recognation/
├── tools/diffusion/
│ ├── ic_layout_diffusion.py # 扩散模型核心实现
│ ├── generate_diffusion_data.py # 一键生成扩散数据
│ ├── train_layout_diffusion.py # 原有扩散训练接口(兼容)
│ └── sample_layouts.py # 原有扩散采样接口(兼容)
├── tools/setup_diffusion_training.py # 一键设置脚本
├── configs/
│ └── base_config.yaml # 更新的配置文件
└── train.py # 更新的训练脚本
```
## 🚀 快速开始
### 方法1一键设置推荐
```bash
# 一键设置整个训练流程
python tools/setup_diffusion_training.py
```
这个脚本会:
1. 检查运行环境
2. 创建必要的目录
3. 生成示例配置文件
4. 训练扩散模型
5. 生成扩散数据
6. 启动RoRD模型训练
### 方法2分步执行
#### 1. 手动训练扩散模型
```bash
# 训练扩散模型
python tools/diffusion/ic_layout_diffusion.py train \
--data_dir data/layouts \
--output_dir models/diffusion \
--epochs 100 \
--batch_size 8 \
--lr 1e-4 \
--image_size 256 \
--augment
```
#### 2. 生成扩散数据
```bash
# 使用训练好的模型生成图像
python tools/diffusion/ic_layout_diffusion.py generate \
--checkpoint models/diffusion/diffusion_final.pth \
--output_dir data/diffusion_generated \
--num_samples 200 \
--image_size 256
```
#### 3. 更新配置文件
编辑 `configs/base_config.yaml`
```yaml
data_sources:
real:
enabled: true
ratio: 0.7 # 70% 真实数据
diffusion:
enabled: true
png_dir: "data/diffusion_generated"
ratio: 0.3 # 30% 扩散数据
```
#### 4. 开始训练
```bash
python train.py --config configs/base_config.yaml
```
## ⚙️ 配置文件说明
### 新的数据源配置
```yaml
data_sources:
# 真实数据配置
real:
enabled: true # 是否启用真实数据
ratio: 0.7 # 在训练数据中的比例
# 扩散数据配置
diffusion:
enabled: true # 是否启用扩散数据
model_dir: "models/diffusion" # 扩散模型保存目录
png_dir: "data/diffusion_generated" # 生成数据保存目录
ratio: 0.3 # 在训练数据中的比例
# 扩散模型训练参数
training:
epochs: 100
batch_size: 8
lr: 1e-4
image_size: 256
timesteps: 1000
augment: true
# 扩散生成参数
generation:
num_samples: 200
timesteps: 1000
```
### 兼容性配置
为了向后兼容,保留了原有的 `synthetic` 配置节,但建议使用新的 `data_sources` 配置。
## 🔧 高级用法
### 自定义扩散模型训练
```bash
# 自定义训练参数
python tools/diffusion/ic_layout_diffusion.py train \
--data_dir /path/to/your/data \
--output_dir /path/to/save/model \
--epochs 200 \
--batch_size 16 \
--lr 5e-5 \
--timesteps 1000 \
--image_size 512 \
--augment
```
### 批量生成数据
```bash
# 生成大量样本
python tools/diffusion/ic_layout_diffusion.py generate \
--checkpoint models/diffusion/diffusion_final.pth \
--output_dir data/large_diffusion_set \
--num_samples 1000 \
--image_size 256
```
### 使用一键生成脚本
```bash
# 完整的扩散数据生成管线
python tools/diffusion/generate_diffusion_data.py \
--config configs/base_config.yaml \
--data_dir data/layouts \
--num_samples 500 \
--ratio 0.4 \
--epochs 150 \
--batch_size 12
```
## 📊 性能对比
| 指标 | 原流程(程序生成) | 新流程(扩散生成) |
|------|------------------|------------------|
| 数据真实性 | 中等 | 高 |
| 训练稳定性 | 良好 | 优秀 |
| 泛化能力 | 中等 | 良好 |
| 配置灵活性 | 低 | 高 |
| 计算开销 | 低 | 中等 |
## 🛠️ 故障排除
### 常见问题
1. **CUDA内存不足**
```bash
# 减小批次大小
--batch_size 4
```
2. **扩散模型训练太慢**
```bash
# 减少时间步数或epochs
--timesteps 500
--epochs 50
```
3. **生成图像质量不佳**
```bash
# 增加训练轮数
--epochs 200
# 启用数据增强
--augment
```
4. **数据目录不存在**
```bash
# 检查路径并创建目录
mkdir -p data/layouts
# 放置您的原始IC版图图像到 data/layouts/
```
### 环境要求
- Python 3.7+
- PyTorch 1.8+
- torchvision
- numpy
- PIL (Pillow)
- PyYAML
### 可选依赖
- tqdm (用于进度条显示)
- tensorboard (用于训练可视化)
## 📝 API参考
### 扩散模型训练命令
```bash
python tools/diffusion/ic_layout_diffusion.py train [OPTIONS]
```
**选项:**
- `--data_dir`: 训练数据目录
- `--output_dir`: 模型保存目录
- `--image_size`: 图像尺寸 (默认: 256)
- `--batch_size`: 批次大小 (默认: 8)
- `--epochs`: 训练轮数 (默认: 100)
- `--lr`: 学习率 (默认: 1e-4)
- `--timesteps`: 扩散时间步数 (默认: 1000)
- `--augment`: 启用数据增强
### 扩散数据生成命令
```bash
python tools/diffusion/ic_layout_diffusion.py generate [OPTIONS]
```
**选项:**
- `--checkpoint`: 模型检查点路径
- `--output_dir`: 输出目录
- `--num_samples`: 生成样本数量
- `--image_size`: 图像尺寸
- `--timesteps`: 扩散时间步数
## 🔄 迁移指南
如果您之前使用程序生成的版图数据,请按以下步骤迁移:
1. **备份现有配置**
```bash
cp configs/base_config.yaml configs/base_config_backup.yaml
```
2. **更新配置文件**
- 设置 `synthetic.enabled: false`
- 配置 `data_sources.diffusion.enabled: true`
- 调整 `data_sources.diffusion.ratio` 到期望值
3. **生成新的扩散数据**
```bash
python tools/diffusion/generate_diffusion_data.py --config configs/base_config.yaml
```
4. **重新训练模型**
```bash
python train.py --config configs/base_config.yaml
```
## 🤝 贡献
欢迎提交问题报告和功能请求!如果您想贡献代码,请:
1. Fork 这个项目
2. 创建您的功能分支
3. 提交您的更改
4. 推送到分支
5. 创建一个 Pull Request
## 📄 许可证
本项目遵循原始项目的许可证。