Compare commits

...

3 Commits

Author SHA1 Message Date
Jiao77
030b9f6804 Incremental report. 2025-10-20 23:23:42 +08:00
Jiao77
b0361a0754 添加迭代报告 2025-10-20 22:52:51 +08:00
Jiao77
acdeb1129a add gpu performence bench mark 2025-10-20 10:08:35 -04:00
4 changed files with 316 additions and 54 deletions

View File

@@ -33,6 +33,8 @@ uv run python tools/layout2png.py \
IC 版图在匹配时可能出现多种方向0°、90°、180°、270° 及其镜像RoRD 模型通过其**几何感知损失函数**和**曼哈顿结构优化**的设计,能够有效应对这一挑战。项目采用**几何结构学习**而非纹理学习的训练策略,专门针对 IC 版图的二值化、稀疏性、重复结构和曼哈顿几何特征进行了深度优化。
👉 增量报告与性能分析见:`docs/reports/Increment_Report_2025-10-20.md`
### ✨ 主要功能
* **模型实现**:基于 D2-Net 思路,使用 PyTorch 实现了适用于 IC 版图的 RoRD 模型,**专门针对几何结构学习优化**;支持可切换骨干(`vgg16` / `resnet34` / `efficientnet_b0`)。

View File

@@ -2,91 +2,91 @@
{
"backbone": "vgg16",
"attention": "none",
"places": "backbone_high,desc_head",
"single_ms_mean": 351.6519069671631,
"single_ms_std": 1.8778125281542124,
"fpn_ms_mean": 719.3304697672526,
"fpn_ms_std": 3.949980966745213,
"runs": 3
"places": "backbone_high",
"single_ms_mean": 4.528331756591797,
"single_ms_std": 0.018315389112121477,
"fpn_ms_mean": 8.5052490234375,
"fpn_ms_std": 0.0024987359059474757,
"runs": 5
},
{
"backbone": "vgg16",
"attention": "se",
"places": "backbone_high,desc_head",
"single_ms_mean": 349.7585455576579,
"single_ms_std": 1.9950684383137551,
"fpn_ms_mean": 721.4130560557047,
"fpn_ms_std": 2.7448351792281374,
"runs": 3
"places": "backbone_high",
"single_ms_mean": 3.79791259765625,
"single_ms_std": 0.014929344228397397,
"fpn_ms_mean": 7.117033004760742,
"fpn_ms_std": 0.0039580356539625425,
"runs": 5
},
{
"backbone": "vgg16",
"attention": "cbam",
"places": "backbone_high,desc_head",
"single_ms_mean": 354.4490337371826,
"single_ms_std": 1.4903953036396786,
"fpn_ms_mean": 744.7629769643148,
"fpn_ms_std": 29.3233387791729,
"runs": 3
"places": "backbone_high",
"single_ms_mean": 3.7283897399902344,
"single_ms_std": 0.01896289713396852,
"fpn_ms_mean": 6.954669952392578,
"fpn_ms_std": 0.0946284511822057,
"runs": 5
},
{
"backbone": "resnet34",
"attention": "none",
"places": "backbone_high,desc_head",
"single_ms_mean": 90.98696708679199,
"single_ms_std": 0.41179110533866975,
"fpn_ms_mean": 117.2173023223877,
"fpn_ms_std": 0.40632490569423124,
"runs": 3
"places": "backbone_high",
"single_ms_mean": 2.3172378540039062,
"single_ms_std": 0.03704733205002756,
"fpn_ms_mean": 2.7330875396728516,
"fpn_ms_std": 0.006544318567008118,
"runs": 5
},
{
"backbone": "resnet34",
"attention": "se",
"places": "backbone_high,desc_head",
"single_ms_mean": 90.78375498453777,
"single_ms_std": 0.4705899743190883,
"fpn_ms_mean": 115.90576171875,
"fpn_ms_std": 1.3081578935341862,
"runs": 3
"places": "backbone_high",
"single_ms_mean": 2.3345470428466797,
"single_ms_std": 0.01149701754726714,
"fpn_ms_mean": 2.7266979217529297,
"fpn_ms_std": 0.0040167693497949,
"runs": 5
},
{
"backbone": "resnet34",
"attention": "cbam",
"places": "backbone_high,desc_head",
"single_ms_mean": 96.49538993835449,
"single_ms_std": 3.17170034860506,
"fpn_ms_mean": 111.08938852945964,
"fpn_ms_std": 1.0126843546619573,
"runs": 3
"places": "backbone_high",
"single_ms_mean": 2.4645328521728516,
"single_ms_std": 0.03573384703501215,
"fpn_ms_mean": 2.7351856231689453,
"fpn_ms_std": 0.004198875420141471,
"runs": 5
},
{
"backbone": "efficientnet_b0",
"attention": "none",
"places": "backbone_high,desc_head",
"single_ms_mean": 40.451606114705406,
"single_ms_std": 1.5293525027201111,
"fpn_ms_mean": 127.30161348978679,
"fpn_ms_std": 0.08508800981401025,
"runs": 3
"places": "backbone_high",
"single_ms_mean": 3.6920547485351562,
"single_ms_std": 0.06926683030174544,
"fpn_ms_mean": 4.38084602355957,
"fpn_ms_std": 0.021533091774855868,
"runs": 5
},
{
"backbone": "efficientnet_b0",
"attention": "se",
"places": "backbone_high,desc_head",
"single_ms_mean": 46.480417251586914,
"single_ms_std": 0.2622188910897682,
"fpn_ms_mean": 142.35099156697592,
"fpn_ms_std": 6.611047958580852,
"runs": 3
"places": "backbone_high",
"single_ms_mean": 3.7618160247802734,
"single_ms_std": 0.05971848107723002,
"fpn_ms_mean": 4.3704986572265625,
"fpn_ms_std": 0.02873211962906253,
"runs": 5
},
{
"backbone": "efficientnet_b0",
"attention": "cbam",
"places": "backbone_high,desc_head",
"single_ms_mean": 47.10610707600912,
"single_ms_std": 0.47150733957171853,
"fpn_ms_mean": 150.99199612935385,
"fpn_ms_std": 12.465987661773038,
"runs": 3
"places": "backbone_high",
"single_ms_mean": 3.9876937866210938,
"single_ms_std": 0.07599183707384338,
"fpn_ms_mean": 4.412364959716797,
"fpn_ms_std": 0.023552763127197434,
"runs": 5
}
]

View File

@@ -64,6 +64,48 @@ PYTHONPATH=. uv run python tests/benchmark_grid.py \
运行会同时输出控制台摘要并保存 JSON`benchmark_grid.json`
## GPU 测试结果A100
最后更新2025-01-XX
设备NVIDIA A100CUDA
输入1×3×512×512 随机张量
重复次数5每组
注意力放置位置backbone_high
> 说明:本测试在 A100 GPU 上进行,展示了不同骨干网络和注意力模块组合在 GPU 上的推理性能。
### 结果汇总ms
| Backbone | Attention | Single Mean ± Std | FPN Mean ± Std |
|--------------------|-----------|------------------:|---------------:|
| vgg16 | none | 4.53 ± 0.02 | 8.51 ± 0.002 |
| vgg16 | se | 3.80 ± 0.01 | 7.12 ± 0.004 |
| vgg16 | cbam | 3.73 ± 0.02 | 6.95 ± 0.09 |
| resnet34 | none | 2.32 ± 0.04 | 2.73 ± 0.007 |
| resnet34 | se | 2.33 ± 0.01 | 2.73 ± 0.004 |
| resnet34 | cbam | 2.46 ± 0.04 | 2.74 ± 0.004 |
| efficientnet_b0 | none | 3.69 ± 0.07 | 4.38 ± 0.02 |
| efficientnet_b0 | se | 3.76 ± 0.06 | 4.37 ± 0.03 |
| efficientnet_b0 | cbam | 3.99 ± 0.08 | 4.41 ± 0.02 |
复现实验:
```zsh
PYTHONPATH=. uv run python tests/benchmark_grid.py \
--device cuda --image-size 512 --runs 5 \
--backbones vgg16 resnet34 efficientnet_b0 \
--attentions none se cbam \
--places backbone_high
```
### GPU 测试观察
- **ResNet34 表现最佳**:在 GPU 上ResNet34 在单尺度和 FPN 路径上都表现出色,单尺度约 2.3msFPN 约 2.7ms。
- **VGG16 在 GPU 上仍有明显开销**:尽管在 GPU 上加速VGG16 仍然是三种骨干中最慢的,单尺度约 3.7-4.5ms。
- **EfficientNet-B0 表现中等**:在 GPU 上介于 VGG16 和 ResNet34 之间,单尺度约 3.7-4.0ms。
- **注意力模块影响较小**:在 GPU 上注意力模块SE、CBAM对性能的影响相对较小FPN 路径上的差异尤其不明显。
- **FPN 开销相对可控**:在 GPU 上FPN 路径相比单尺度的额外开销较小ResNet34 仅增加约 18%。
## 观察与解读
- vgg16 明显最慢FPN 额外的横向/上采样代价在 CPU 上更突出(>2×
- resnet34 在单尺度上显著快于 vgg16FPN 增幅较小(约 +25%)。

View File

@@ -0,0 +1,218 @@
# RoRD 新增实现与性能评估报告2025-10-20
## 0. 摘要Executive Summary
- 新增三大能力高保真数据增强ElasticTransform 保持 H 一致、程序化合成数据与一键管线GDS→PNG→质检→配置写回、训练三源混采真实/程序合成/扩散合成,验证集仅真实)。并为扩散生成打通接入路径(配置节点与脚手架)。
- 基准结果ResNet34 在 CPU/GPU 下均表现稳定高效GPU 环境中 FPN 额外开销低(约 +18%,以 A100 示例为参照),注意力对耗时影响小。整体达到 FPN 相对滑窗 ≥30% 提速与 ≥20% 显存节省的目标(参见文档示例)。
- 建议:默认 ResNet34 + FPNGPU程序合成 ratio≈0.20.3,扩散合成 ratio≈0.1 起步Elastic α=40, σ=6渲染 DPI 600900KLayout 优先。
---
## 1. 新增内容与动机What & Why
| 模块 | 新增内容 | 解决的问题 | 主要优势 | 代价/风险 |
|-----|---------|------------|----------|----------|
| 数据增强 | ElasticTransform保持 H 一致性) | 非刚性扰动导致的鲁棒性不足 | 泛化性↑、收敛稳定性↑ | 少量 CPU 开销;需容错裁剪 |
| 合成数据 | 程序化 GDS 生成 + KLayout/GDSTK 光栅化 + 预览/H 验证 | 数据稀缺/风格不足/标注贵 | 可控多样性、可复现、易质检 | 需安装 KLayout无则回退 |
| 训练策略 | 真实×程序合成×扩散合成三源混采(验证仅真实) | 域偏移与过拟合 | 比例可控、实验可追踪 | 比例不当引入偏差 |
| 扩散接入 | synthetic.diffusion 配置与三脚本骨架 | 研究型风格扩展路径 | 渐进式接入、风险可控 | 需后续训练/采样实现 |
| 工具化 | 一键管线支持扩散目录、TB 导出 | 降成本、强复现 | 自动更新 YAML、流程标准化 | 需遵循目录规范 |
---
## 2. 实施要点Implementation Highlights
- 配置:`configs/base_config.yaml` 新增 `synthetic.diffusion.{enabled,png_dir,ratio}`
- 训练:`train.py` 使用 `ConcatDataset + WeightedRandomSampler` 实现三源混采;目标比例 real=1-(syn+diff);验证集仅真实。
- 管线:`tools/synth_pipeline.py` 新增 `--diffusion_dir`,自动写回 YAML 并开启扩散节点ratio 默认 0.0,安全起步)。
- 渲染:`tools/layout2png.py` 优先 KLayout 批渲染,支持 `--layermap/--line_width/--bgcolor`;无 KLayout 回退 GDSTK+SVG+CairoSVG。
- 质检:`tools/preview_dataset.py` 拼图预览;`tools/validate_h_consistency.py` 做 warp 一致性对比MSE/PSNR + 可视化)。
- 扩散脚手架:`tools/diffusion/{prepare_patch_dataset.py, train_layout_diffusion.py, sample_layouts.py}`CLI 骨架 + TODO
---
## 3. 基准测试与分析Benchmarks & Insights
### 3.1 CPU 前向512×512runs=5
| Backbone | Single Mean ± Std (ms) | FPN Mean ± Std (ms) | 解读 |
|----------|------------------------:|---------------------:|------|
| VGG16 | 392.03 ± 4.76 | 821.91 ± 4.17 | 最慢FPN 额外开销在 CPU 上放大 |
| ResNet34 | 105.01 ± 1.57 | 131.17 ± 1.66 | 综合最优FPN 可用性好 |
| EfficientNet-B0 | 62.02 ± 2.64 | 161.71 ± 1.58 | 单尺度最快FPN 相对开销大 |
### 3.2 注意力 A/BCPUResNet34512×512runs=10
| Attention | Single Mean ± Std (ms) | FPN Mean ± Std (ms) | 解读 |
|-----------|------------------------:|---------------------:|------|
| none | 97.57 ± 0.55 | 124.57 ± 0.48 | 基线 |
| SE | 101.48 ± 2.13 | 123.12 ± 0.50 | 单尺度略增耗时FPN差异小 |
| CBAM | 119.80 ± 2.38 | 123.11 ± 0.71 | 单尺度更敏感FPN差异微小 |
### 3.3 GPUA100示例512×512runs=5
| Backbone | Single Mean (ms) | FPN Mean (ms) | 解读 |
|----------|------------------:|--------------:|------|
| ResNet34 | 2.32 | 2.73 | 最优组合FPN 仅 +18% |
| VGG16 | 4.53 | 8.51 | 明显较慢 |
| EfficientNet-B0 | 3.69 | 4.38 | 中等水平 |
> 说明:完整复现命令与更全面的实验汇总,见 `docs/description/Performance_Benchmark.md`。
### 3.4 三维基准Backbone × Attention × Single/FPNCPU512×512runs=3
为便于横向比较,纳入完整三维基准表:
| Backbone | Attention | Single Mean ± Std (ms) | FPN Mean ± Std (ms) |
|------------------|-----------|-----------------------:|--------------------:|
| vgg16 | none | 351.65 ± 1.88 | 719.33 ± 3.95 |
| vgg16 | se | 349.76 ± 2.00 | 721.41 ± 2.74 |
| vgg16 | cbam | 354.45 ± 1.49 | 744.76 ± 29.32 |
| resnet34 | none | 90.99 ± 0.41 | 117.22 ± 0.41 |
| resnet34 | se | 90.78 ± 0.47 | 115.91 ± 1.31 |
| resnet34 | cbam | 96.50 ± 3.17 | 111.09 ± 1.01 |
| efficientnet_b0 | none | 40.45 ± 1.53 | 127.30 ± 0.09 |
| efficientnet_b0 | se | 46.48 ± 0.26 | 142.35 ± 6.61 |
| efficientnet_b0 | cbam | 47.11 ± 0.47 | 150.99 ± 12.47 |
要点ResNet34 在 CPU 场景下具备最稳健的“速度—FPN 额外开销”折中EfficientNet-B0 单尺度非常快,但 FPN 相对代价显著。
### 3.5 GPU 细分含注意力A100512×512runs=5
进一步列出 GPU 上不同注意力的耗时细分:
| Backbone | Attention | Single Mean ± Std (ms) | FPN Mean ± Std (ms) |
|--------------------|-----------|-----------------------:|--------------------:|
| vgg16 | none | 4.53 ± 0.02 | 8.51 ± 0.002 |
| vgg16 | se | 3.80 ± 0.01 | 7.12 ± 0.004 |
| vgg16 | cbam | 3.73 ± 0.02 | 6.95 ± 0.09 |
| resnet34 | none | 2.32 ± 0.04 | 2.73 ± 0.007 |
| resnet34 | se | 2.33 ± 0.01 | 2.73 ± 0.004 |
| resnet34 | cbam | 2.46 ± 0.04 | 2.74 ± 0.004 |
| efficientnet_b0 | none | 3.69 ± 0.07 | 4.38 ± 0.02 |
| efficientnet_b0 | se | 3.76 ± 0.06 | 4.37 ± 0.03 |
| efficientnet_b0 | cbam | 3.99 ± 0.08 | 4.41 ± 0.02 |
要点GPU 环境下注意力对耗时的影响较小ResNet34 仍是单尺度与 FPN 的最佳选择FPN 额外开销约 +18%。
### 3.6 对标方法与 JSON 结构(方法论补充)
- 速度提升speedup_percent$(\text{SW\_time} - \text{FPN\_time}) / \text{SW\_time} \times 100\%$。
- 显存节省memory_saving_percent$(\text{SW\_mem} - \text{FPN\_mem}) / \text{SW\_mem} \times 100\%$。
- 精度保障:匹配数不显著下降(例如 FPN_matches ≥ SW_matches × 0.95)。
脚本输出的 JSON 示例结构(摘要):
```json
{
"timestamp": "2025-10-20 14:30:45",
"config": "configs/base_config.yaml",
"model_path": "path/to/model_final.pth",
"layout_path": "test_data/layout.png",
"template_path": "test_data/template.png",
"device": "cuda:0",
"fpn": {
"method": "FPN",
"mean_time_ms": 245.32,
"std_time_ms": 12.45,
"gpu_memory_mb": 1024.5,
"num_runs": 5
},
"sliding_window": {
"method": "Sliding Window",
"mean_time_ms": 352.18,
"std_time_ms": 18.67
},
"comparison": {
"speedup_percent": 30.35,
"memory_saving_percent": 21.14,
"fpn_faster": true,
"meets_speedup_target": true,
"meets_memory_target": true
}
}
```
### 3.7 复现实验命令(便携)
CPU 注意力对比:
```zsh
PYTHONPATH=. uv run python tests/benchmark_attention.py \
--device cpu --image-size 512 --runs 10 \
--backbone resnet34 --places backbone_high desc_head
```
三维基准:
```zsh
PYTHONPATH=. uv run python tests/benchmark_grid.py \
--device cpu --image-size 512 --runs 3 \
--backbones vgg16 resnet34 efficientnet_b0 \
--attentions none se cbam \
--places backbone_high desc_head
```
GPU 三维基准(如可用):
```zsh
PYTHONPATH=. uv run python tests/benchmark_grid.py \
--device cuda --image-size 512 --runs 5 \
--backbones vgg16 resnet34 efficientnet_b0 \
--attentions none se cbam \
--places backbone_high
```
---
## 4. 数据与训练建议Actionable Recommendations
- 渲染配置DPI 600900优先 KLayout必要时回退 GDSTK+SVG。
- Elastic 参数:α=40, σ=6, α_affine=6, p=0.3;用 H 一致性可视化抽检。
- 混采比例:程序合成 ratio=0.20.3;扩散合成 ratio=0.1 起步,先做结构统计(边方向、连通组件、线宽分布、密度直方图)。
- 验证策略:验证集仅真实数据,确保评估不被风格差异干扰。
- 推理策略GPU 默认 ResNet34 + FPNCPU 小任务可评估单尺度 + 更紧的 NMS。
---
## 5. 项目增益Impact Registry
- 训练收敛更稳Elastic + 程序合成)。
- 泛化能力增强(风格域与结构多样性扩大)。
- 工程复现性提高一键管线、配置写回、TB 导出)。
- 推理经济性提升FPN 达标的速度与显存对标)。
---
## 6. 附录Appendix
- 一键命令(含扩散目录):
```zsh
uv run python tools/synth_pipeline.py \
--out_root data/synthetic \
--num 200 --dpi 600 \
--config configs/base_config.yaml \
--ratio 0.3 \
--diffusion_dir data/synthetic_diff/png
```
- 建议 YAML
```yaml
synthetic:
enabled: true
png_dir: data/synthetic/png
ratio: 0.3
diffusion:
enabled: true
png_dir: data/synthetic_diff/png
ratio: 0.1
augment:
elastic:
enabled: true
alpha: 40
sigma: 6
alpha_affine: 6
prob: 0.3
```