Files
RoRD-Layout-Recognation/README.md
2025-07-20 20:42:53 +08:00

201 lines
6.0 KiB
Markdown
Raw 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: 基于 AI 的集成电路版图识别
[//]: # (徽章占位符:您可以根据需要添加构建状态、版本号等徽章)
![Python Version](https://img.shields.io/badge/Python-3.8%2B-blue)
![License](https://img.shields.io/badge/License-Apache%202.0-orange.svg)
## 📖 描述
本项目实现了 **RoRD (Rotation-Robust Descriptors)** 模型这是一种先进的局部特征匹配方法专用于集成电路IC版图的识别。
IC 版图在匹配时可能出现多种方向0°、90°、180°、270° 及其镜像RoRD 模型通过其旋转鲁棒性设计,能够有效应对这一挑战。 项目采用自监督学习和随机旋转的数据增强策略,旨在解决 IC 版图识别中常见的数据稀缺性、几何多变性、动态扩展性和结构复杂性等问题。
### ✨ 主要功能
* **模型实现**:基于 D2-Net 架构,使用 PyTorch 实现了适用于 IC 版图的 RoRD 模型。
* **数据加载**:提供了自定义的 `ICLayoutDataset` 类,用于加载光栅化的 IC 版图图像。
* **训练脚本**:通过随机旋转生成训练对,以自监督的方式训练模型,确保其旋转鲁棒性。
* **评估脚本**:可在验证集上评估模型性能,计算精确率、召回率和 F1 分数。
* **匹配工具**:使用训练好的模型进行模板匹配,支持多实例检测和匹配结果的可视化。
## 🛠️ 安装
### 环境要求
* Python 3.8 或更高版本
* CUDA (可选, 推荐用于 GPU 加速)
### 依赖安装
**使用 uv推荐**
```bash
# 安装 uv如果尚未安装
pip install uv
# 安装项目依赖
uv sync
```
**使用 pip**
```bash
pip install -e .
```
## 🚀 使用方法
### 📁 项目结构
```
ic_layout_recognition/
├── data/
│ └── ic_dataset.py
├── models/
│ └── rord.py
├── utils/
│ └── transforms.py
├── train.py
├── evaluate.py
├── match.py
├── LICENSE.txt
└── README.md
```
## 🚀 使用方法
### 📋 训练准备清单
在开始训练前,请确保完成以下准备:
#### 1. 数据准备
- **训练数据**准备PNG格式的布局图像如电路板布局、建筑平面图等
- **数据目录结构**
```
your_data_directory/
├── image1.png
├── image2.png
└── ...
```
#### 2. 配置文件修改
编辑 `config.py` 文件,修改以下路径:
```python
# 必需修改的路径
LAYOUT_DIR = '你的布局图像目录路径' # 训练数据目录
SAVE_DIR = '你的模型和日志保存路径' # 输出目录
```
#### 3. 环境检查
确保已正确安装所有依赖:
```bash
python -c "import torch; print('PyTorch version:', torch.__version__)"
python -c "import cv2; print('OpenCV version:', cv2.__version__)"
```
### 🎯 开始训练
#### 基础训练
```bash
python train.py --data_dir /path/to/your/layouts --save_dir /path/to/your/models
```
#### 自定义训练参数
```bash
python train.py \
--data_dir /path/to/your/layouts \
--save_dir /path/to/your/models \
--epochs 50 \
--batch_size 8 \
--lr 5e-5
```
#### 查看所有可用参数
```bash
python train.py --help
```
### 📊 训练监控
训练过程中会在 `SAVE_DIR` 目录下生成:
- 日志文件:`training_YYYYMMDD_HHMMSS.log`
- 最佳模型:`rord_model_best.pth`
- 最终模型:`rord_model_final.pth`
### 🚀 快速开始示例
```bash
# 1. 安装依赖
uv sync
# 2. 修改配置文件
# 编辑 config.py 中的 LAYOUT_DIR 和 SAVE_DIR
# 3. 开始训练
python train.py --data_dir ./data/layouts --save_dir ./output
# 4. 使用训练好的模型进行匹配
python match.py --model_path ./output/rord_model_final.pth \
--layout ./test/layout.png \
--template ./test/template.png \
--output ./result.png
```
### 4. 模板匹配
```bash
python match.py --model_path /path/to/your/models/rord_model_final.pth \
--layout /path/to/layout.png \
--template /path/to/template.png \
--output /path/to/result.png
```
### 5. 评估模型
```bash
python evaluate.py --model_path /path/to/your/models/rord_model_final.pth \
--val_dir /path/to/val/images \
--annotations_dir /path/to/val/annotations \
--templates_dir /path/to/templates
```
## 📦 数据准备
### 训练数据
* **格式**: PNG 格式的 IC 版图图像,可从 GDSII 或 OASIS 文件光栅化得到。
* **要求**: 数据集应包含多个版图图像,建议分辨率适中(例如 1024x1024
* **存储**: 将所有训练图像存放在一个目录中(例如 `path/to/layouts`)。
### 验证数据
* **图像**: PNG 格式的验证集图像,存储在指定目录(例如 `path/to/val/images`)。
* **模板**: 所有模板图像存储在单独的目录中(例如 `path/to/templates`)。
* **标注**: 真实标注信息以 JSON 格式提供,文件名需与对应的验证图像一致,并存储在指定目录(例如 `path/to/val/annotations`)。
JSON 标注文件示例:
```json
{
"boxes": [
{"template": "template1.png", "x": 100, "y": 200, "width": 50, "height": 50},
{"template": "template2.png", "x": 300, "y": 400, "width": 60, "height": 60}
]
}
```
## 🧠 模型架构
RoRD 模型基于 D2-Net 架构,并使用 VGG-16 作为其骨干网络。
* **检测头**: 用于检测关键点,输出一个概率图。
* **描述子头**: 生成 128 维的旋转鲁棒描述子,专门为 IC 版图的 8 个离散旋转方向进行了适配。
模型通过自监督学习进行训练,利用 0° 到 360° 的随机旋转生成训练对,以同时优化关键点的检测重复性和描述子的相似性。
## 📊 结果
[待补充:请在此处添加预训练模型的链接或基准测试结果。]
* **预训练模型**: [链接待补充]
* **验证集评估指标**:
* 精确率: X
* 召回率: Y
* F1 分数: Z
## 📄 许可协议
本项目根据 [Apache License 2.0](LICENSE.txt) 授权。