diff --git a/README.md b/README.md index c31ac0a..6a9b4ff 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # RoRD: 基于 AI 的集成电路版图识别 [//]: # (徽章占位符:您可以根据需要添加构建状态、版本号等徽章) -![Python Version](https://img.shields.io/badge/Python-3.8%2B-blue) +![Python Version](https://img.shields.io/badge/Python-3.12-blue) ![License](https://img.shields.io/badge/License-Apache%202.0-orange.svg) ## 📖 描述 @@ -12,12 +12,13 @@ IC 版图在匹配时可能出现多种方向(0°、90°、180°、270° 及 ### ✨ 主要功能 -* **模型实现**:基于 D2-Net 架构,使用 PyTorch 实现了适用于 IC 版图的 RoRD 模型,**专门针对几何结构学习优化**。 +* **模型实现**:基于 D2-Net 思路,使用 PyTorch 实现了适用于 IC 版图的 RoRD 模型,**专门针对几何结构学习优化**;支持可切换骨干(`vgg16` / `resnet34` / `efficientnet_b0`)。 * **数据加载**:提供了自定义的 `ICLayoutDataset` 类,用于加载光栅化的 IC 版图图像,支持**曼哈顿几何感知采样**。 * **训练脚本**:通过**几何感知损失函数**训练模型,学习**几何结构描述子**而非纹理特征,确保对二值化、稀疏性、重复结构的鲁棒性。 * **评估脚本**:可在验证集上评估模型性能,**专门针对IC版图特征**计算几何一致性指标。 -* **匹配工具**:使用训练好的模型进行**几何结构匹配**,有效区分重复图形并支持多实例检测。 +* **匹配工具**:支持 FPN 多尺度推理与滑窗两种路径,并提供半径 NMS 去重;可直接输出多实例匹配结果。 * **灵活配置与日志**:引入 OmegaConf 驱动的 YAML 配置 (`configs/*.yaml`),配合 `utils.config_loader` 与 TensorBoard 监控实现参数/路径集中管理。 +* **性能工具**:提供 FPN vs 滑窗的对标脚本与多骨干 A/B 基准脚本,便于快速评估速度/显存与精度。 ## 🛠️ 安装 @@ -58,7 +59,7 @@ RoRD-Layout-Recognation/ │ ├── loss_function.md │ └── NextStep.md ├── models/ -│ └── rord.py # RoRD 模型定义 +│ └── rord.py # RoRD 模型与 FPN,多骨干支持 ├── utils/ │ ├── config_loader.py # YAML 配置加载与路径转换 │ ├── data_utils.py @@ -66,7 +67,10 @@ RoRD-Layout-Recognation/ ├── losses.py # 几何感知损失集合 ├── train.py # 训练脚本(YAML + TensorBoard) ├── evaluate.py # 评估脚本 -├── match.py # 模板匹配脚本 +├── match.py # 模板匹配脚本(FPN / 滑窗 + NMS) +├── tests/ +│ ├── benchmark_fpn.py # FPN vs 滑窗性能对标 +│ └── benchmark_backbones.py # 多骨干 A/B 前向基准 ├── config.py # 兼容旧流程的 YAML 读取 shim ├── pyproject.toml └── README.md @@ -78,6 +82,11 @@ RoRD-Layout-Recognation/ - **旧配置兼容**:`config.py` 现在仅作为兼容层,将 YAML 配置转换成原有的 Python 常量,便于逐步迁移历史代码。 - **损失与数据解耦**:`losses.py` 汇总几何感知损失,`data/ic_dataset.py` 与 `utils/data_utils.py` 分离数据准备逻辑,便于扩展新的采样策略或损失项。 - **日志体系**:`logging` 配置节配合 TensorBoard 集成,`train.py`、`evaluate.py`、`match.py` 可统一写入 `log_dir/子任务/experiment_name`。 + - **模型配置扩展**: + - `model.backbone.name`: `vgg16 | resnet34 | efficientnet_b0` + - `model.backbone.pretrained`: 是否加载 ImageNet 预训练 + - `model.attention`: `enabled/type/places`(默认关闭,可选 `cbam` / `se`) + - `model.fpn`: `enabled/out_channels/levels` ## 🚀 使用方法 @@ -163,7 +172,7 @@ python train.py --help - 最佳模型:`rord_model_best.pth` - 最终模型:`rord_model_final.pth` -### � TensorBoard 实验追踪 +### 📈 TensorBoard 实验追踪 `configs/base_config.yaml` 中新增的 `logging` 区块用于控制 TensorBoard: @@ -195,7 +204,7 @@ TensorBoard 中将展示: - `evaluate.py`:精确率 / 召回率 / F1 分数; - `match.py`(配合 `--tb_log_matches`):每个匹配实例的内点数量、尺度和总检测数量。 -### �🚀 快速开始示例 +### 🚀 快速开始示例 ```bash # 1. 安装依赖 uv sync @@ -287,6 +296,15 @@ model: out_channels: 256 levels: [2, 3, 4] + backbone: + name: "vgg16" # 可选:vgg16 | resnet34 | efficientnet_b0 + pretrained: false + + attention: + enabled: false + type: "none" # 可选:none | cbam | se + places: [] # 插入位置:backbone_high | det_head | desc_head + matching: use_fpn: true nms: @@ -329,14 +347,13 @@ uv run python match.py --config configs/base_config.yaml --no_nms \ **关键区别**: 传统方法学习纹理特征,我们的方法**学习几何结构特征**,完美适应IC版图的二值化、稀疏性、重复结构和曼哈顿几何特征。 ## 📊 结果 +可参考以下文档与脚本复现并查看最新结果: -[待补充:请在此处添加预训练模型的链接或基准测试结果。] +- CPU 多骨干 A/B 基准(512×512,5 次):见 `docs/description/Performance_Benchmark.md` +- FPN vs 滑窗对标脚本:`tests/benchmark_fpn.py` +- 多骨干 A/B 基准脚本:`tests/benchmark_backbones.py` -* **预训练模型**: [链接待补充] -* **验证集评估指标**: - * 精确率: X - * 召回率: Y - * F1 分数: Z +后续将在 GPU 与真实数据集上补充精度与速度的完整对标表格。 ## 📄 许可协议