improve IC Layout Diffussion model 20251120
This commit is contained in:
283
tools/diffusion/README_OPTIMIZED.md
Normal file
283
tools/diffusion/README_OPTIMIZED.md
Normal file
@@ -0,0 +1,283 @@
|
||||
# 优化的IC版图扩散模型
|
||||
|
||||
针对曼哈顿多边形IC版图光栅化图像生成的去噪扩散模型优化版本。
|
||||
|
||||
## 🎯 优化目标
|
||||
|
||||
专门优化以曼哈顿多边形为全部组成元素的IC版图光栅化图像生成,主要特点:
|
||||
|
||||
- **曼哈顿几何感知**:模型架构专门处理水平/垂直线条特征
|
||||
- **边缘锐化**:保持IC版图清晰的边缘特性
|
||||
- **多尺度结构**:保持从微观到宏观的结构一致性
|
||||
- **几何约束**:确保生成结果符合曼哈顿几何规则
|
||||
- **后处理优化**:进一步提升生成质量
|
||||
|
||||
## 📁 文件结构
|
||||
|
||||
```
|
||||
tools/diffusion/
|
||||
├── ic_layout_diffusion_optimized.py # 优化的核心模型实现
|
||||
├── train_optimized.py # 训练脚本
|
||||
├── generate_optimized.py # 生成脚本
|
||||
├── run_optimized_pipeline.py # 一键运行管线
|
||||
├── README_OPTIMIZED.md # 本文档
|
||||
└── original/ # 原始实现(参考用)
|
||||
├── ic_layout_diffusion.py
|
||||
└── ...
|
||||
```
|
||||
|
||||
## 🚀 快速开始
|
||||
|
||||
### 1. 基本使用 - 一键运行
|
||||
|
||||
```bash
|
||||
# 完整管线(训练 + 生成)
|
||||
python tools/diffusion/run_optimized_pipeline.py \
|
||||
--data_dir data/ic_layouts \
|
||||
--output_dir outputs/diffusion_optimized \
|
||||
--epochs 50 \
|
||||
--num_samples 200
|
||||
|
||||
# 仅生成(使用已有模型)
|
||||
python tools/diffusion/run_optimized_pipeline.py \
|
||||
--skip_training \
|
||||
--checkpoint outputs/diffusion_optimized/model/best_model.pth \
|
||||
--data_dir data/ic_layouts \
|
||||
--output_dir outputs/diffusion_generated \
|
||||
--num_samples 500
|
||||
```
|
||||
|
||||
### 2. 分步使用
|
||||
|
||||
#### 训练模型
|
||||
|
||||
```bash
|
||||
python tools/diffusion/train_optimized.py \
|
||||
--data_dir data/ic_layouts \
|
||||
--output_dir models/diffusion_optimized \
|
||||
--image_size 256 \
|
||||
--batch_size 4 \
|
||||
--epochs 100 \
|
||||
--lr 1e-4 \
|
||||
--edge_condition \
|
||||
--augment \
|
||||
--manhattan_weight 0.1
|
||||
```
|
||||
|
||||
#### 生成样本
|
||||
|
||||
```bash
|
||||
python tools/diffusion/generate_optimized.py \
|
||||
--checkpoint models/diffusion_optimized/best_model.pth \
|
||||
--output_dir generated_layouts \
|
||||
--num_samples 200 \
|
||||
--num_steps 50 \
|
||||
--use_ddim \
|
||||
--use_post_process
|
||||
```
|
||||
|
||||
## 🔧 关键优化特性
|
||||
|
||||
### 1. 曼哈顿几何感知U-Net
|
||||
|
||||
```python
|
||||
class ManhattanAwareUNet(nn.Module):
|
||||
"""曼哈顿几何感知的U-Net架构"""
|
||||
|
||||
def __init__(self, use_edge_condition=False):
|
||||
# 专门的方向感知卷积
|
||||
self.horiz_conv = nn.Conv2d(in_channels, 32, (1, 7), padding=(0, 3))
|
||||
self.vert_conv = nn.Conv2d(in_channels, 32, (7, 1), padding=(3, 0))
|
||||
self.standard_conv = nn.Conv2d(in_channels, 32, 3, padding=1)
|
||||
|
||||
# 特征融合
|
||||
self.fusion = nn.Conv2d(96, 64, 3, padding=1)
|
||||
```
|
||||
|
||||
**优势**:
|
||||
- 专门提取水平和垂直特征
|
||||
- 保持曼哈顿几何结构
|
||||
- 增强线条检测能力
|
||||
|
||||
### 2. 多目标损失函数
|
||||
|
||||
```python
|
||||
# 组合损失函数
|
||||
total_loss = mse_loss +
|
||||
0.3 * edge_loss + # 边缘感知损失
|
||||
0.2 * structure_loss + # 多尺度结构损失
|
||||
0.1 * manhattan_loss # 曼哈顿约束损失
|
||||
```
|
||||
|
||||
**优势**:
|
||||
- 保持边缘锐利度
|
||||
- 维持多尺度结构一致性
|
||||
- 强制曼哈顿几何约束
|
||||
|
||||
### 3. 几何保持的数据增强
|
||||
|
||||
```python
|
||||
# 只使用不破坏曼哈顿几何的增强
|
||||
self.aug_transform = transforms.Compose([
|
||||
transforms.RandomHorizontalFlip(p=0.5),
|
||||
transforms.RandomVerticalFlip(p=0.5),
|
||||
# 移除旋转,保持几何约束
|
||||
])
|
||||
```
|
||||
|
||||
### 4. 后处理优化
|
||||
|
||||
```python
|
||||
def manhattan_post_process(image):
|
||||
"""曼哈顿化后处理"""
|
||||
# 形态学操作强化直角特征
|
||||
# 水平和垂直增强
|
||||
# 二值化处理
|
||||
return processed_image
|
||||
```
|
||||
|
||||
## 📊 质量评估指标
|
||||
|
||||
生成样本会自动评估以下指标:
|
||||
|
||||
1. **曼哈顿几何合规性** - 角度偏差损失(越低越好)
|
||||
2. **边缘锐度** - 边缘强度平均值
|
||||
3. **对比度** - 图像标准差
|
||||
4. **稀疏性** - 低像素值比例(IC版图特性)
|
||||
|
||||
## 🎛️ 参数调优指南
|
||||
|
||||
### 训练参数
|
||||
|
||||
| 参数 | 推荐值 | 说明 |
|
||||
|------|--------|------|
|
||||
| `manhattan_weight` | 0.05 - 0.2 | 曼哈顿约束权重 |
|
||||
| `schedule_type` | cosine | 余弦调度通常效果更好 |
|
||||
| `edge_condition` | True | 使用边缘条件提高质量 |
|
||||
| `batch_size` | 4 - 8 | 根据GPU内存调整 |
|
||||
|
||||
### 生成参数
|
||||
|
||||
| 参数 | 推荐值 | 说明 |
|
||||
|------|--------|------|
|
||||
| `num_steps` | 20 - 50 | DDIM采样步数 |
|
||||
| `eta` | 0.0 - 0.3 | 随机性控制(0=确定性) |
|
||||
| `guidance_scale` | 1.0 - 3.0 | 引导强度 |
|
||||
| `post_process_threshold` | 0.4 - 0.6 | 后处理阈值 |
|
||||
|
||||
## 🔍 故障排除
|
||||
|
||||
### 1. 训练问题
|
||||
|
||||
**Q: 损失不下降**
|
||||
- 检查数据质量和格式
|
||||
- 降低学习率
|
||||
- 增加批次大小
|
||||
- 调整曼哈顿权重
|
||||
|
||||
**Q: 生成的图像模糊**
|
||||
- 增加边缘损失权重
|
||||
- 使用边缘条件训练
|
||||
- 调整后处理阈值
|
||||
- 增加训练轮数
|
||||
|
||||
### 2. 生成问题
|
||||
|
||||
**Q: 生成结果不符合曼哈顿几何**
|
||||
- 增加 `manhattan_weight`
|
||||
- 启用后处理
|
||||
- 降低 `eta` 参数
|
||||
|
||||
**Q: 生成速度慢**
|
||||
- 使用DDIM采样
|
||||
- 减少 `num_steps`
|
||||
- 增加 `batch_size`
|
||||
|
||||
### 3. 内存问题
|
||||
|
||||
**Q: GPU内存不足**
|
||||
- 减少批次大小
|
||||
- 减小图像尺寸
|
||||
- 使用梯度累积
|
||||
|
||||
## 📈 性能对比
|
||||
|
||||
| 特性 | 原始模型 | 优化模型 |
|
||||
|------|----------|----------|
|
||||
| 曼哈顿几何合规性 | ❌ | ✅ |
|
||||
| 边缘锐度 | 中等 | 优秀 |
|
||||
| 训练稳定性 | 一般 | 优秀 |
|
||||
| 生成质量 | 基础 | 优秀 |
|
||||
| 后处理 | 无 | 有 |
|
||||
| 质量评估 | 无 | 有 |
|
||||
|
||||
## 🔄 与现有管线集成
|
||||
|
||||
更新配置文件以使用优化的扩散数据:
|
||||
|
||||
```yaml
|
||||
synthetic:
|
||||
enabled: true
|
||||
ratio: 0.0 # 禁用程序化合成
|
||||
|
||||
diffusion:
|
||||
enabled: true
|
||||
png_dir: "outputs/diffusion_optimized/generated"
|
||||
ratio: 0.3 # 扩散数据在训练中的比例
|
||||
model_checkpoint: "outputs/diffusion_optimized/model/best_model.pth"
|
||||
```
|
||||
|
||||
## 📚 技术原理
|
||||
|
||||
### 曼哈顿几何约束
|
||||
|
||||
IC版图具有以下几何特征:
|
||||
- 所有线条都是水平或垂直的
|
||||
- 角度只能是90°
|
||||
- 结构具有高度的规则性
|
||||
|
||||
模型通过以下方式强制这些约束:
|
||||
1. 方向感知卷积核
|
||||
2. 角度偏差损失函数
|
||||
3. 几何保持后处理
|
||||
|
||||
### 多尺度结构损失
|
||||
|
||||
确保生成结果在不同尺度下都保持结构一致性:
|
||||
- 原始分辨率:细节保持
|
||||
- 2x下采样:中层结构
|
||||
- 4x下采样:整体布局
|
||||
|
||||
## 🛠️ 开发者指南
|
||||
|
||||
### 添加新的损失函数
|
||||
|
||||
```python
|
||||
class CustomLoss(nn.Module):
|
||||
def forward(self, pred, target):
|
||||
# 实现自定义损失
|
||||
return loss
|
||||
|
||||
# 在训练器中使用
|
||||
self.custom_loss = CustomLoss()
|
||||
```
|
||||
|
||||
### 自定义后处理
|
||||
|
||||
```python
|
||||
def custom_post_process(image):
|
||||
# 实现自定义后处理逻辑
|
||||
return processed_image
|
||||
```
|
||||
|
||||
## 📄 许可证
|
||||
|
||||
本项目遵循与主项目相同的许可证。
|
||||
|
||||
## 🤝 贡献
|
||||
|
||||
欢迎提交问题报告和改进建议!
|
||||
|
||||
---
|
||||
|
||||
**注意**:这是针对特定IC版图生成任务的优化版本,对于一般的图像生成任务,请使用原始的扩散模型实现。
|
||||
Reference in New Issue
Block a user