chore: 初始化四个子项目骨架目录结构

- 新增 mingxi-capture(PyQt5桌面程序)目录骨架
- 新增 mingxi-vision(FastAPI推理服务)目录骨架
- 新增 mingxi-backend(Django业务后端)目录骨架
- 新增 mingxi-frontend(Vue3管理后台)目录骨架
- 迁入 docs/(技术设计文档和PCB调研资料)
- 补充 .gitignore(模型文件、Node.js依赖、运行时数据库)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
ila
2026-05-24 17:21:17 +08:00
co-authored by Claude Sonnet 4.6
parent bdd275054b
commit 37a4c13799
66 changed files with 2377 additions and 178 deletions
@@ -0,0 +1,143 @@
# PCB 与 HRIPCB 数据集差异分析
> 分析时间:2026-05-07
> 分析对象:`pcb/`(TCC PCB Dataset)与 `HRIPCB/`(HRIPCB Dataset)
---
## 1. 核心差异一览
| 维度 | PCB (TCC) | HRIPCB |
|------|-----------|--------|
| **来源** | Roboflow `tcc-r4j2r/pcb-la0tj` | Roboflow `ma007/hripcb` |
| **发布时间** | 2025-12-11 | 2023-04-16 |
| **规模** | 7,971 张 | 1,386 张 |
| **导出预处理** | **Resize to 240×240 (Fit within)** | **Resize to 640×640 (Stretch)** |
| **缺陷密度** | **~2.0 框/张图** | **~4.2 框/张图** |
| **同图变体数** | 每张原始图 **3~6 个变体** | 每张原始图 **2 个变体** |
| **License** | CC BY 4.0 | CC BY 4.0 |
---
## 2. 关键差异详解
### 2.1 图像分辨率与预处理策略不同
这是两个数据集最本质的区别。
- **PCB**:被 Roboflow 预处理为 **240×240(Fit within,保持比例 + 填充)**。文件名中虽带有 `_600` 字样(暗示原始采集分辨率为 600×600),但实际导出图已缩放至 240×240。
- **HRIPCB**:被预处理为 **640×640(Stretch,直接拉伸)**。原始图被强制拉成 640×640,可能存在轻微形变。
**训练影响**:YOLOv8 训练时会统一 `imgsz=640`,两者标签均为归一化坐标(0~1),可直接混用。但 PCB 从 240 放大到 640 时细节损失会比 HRIPCB 更明显,小目标特征可能更模糊。
### 2.2 缺陷密度不同
| 数据集 | Split | 图片数 | 缺陷框数 | 平均框/图 |
|--------|-------|--------|----------|-----------|
| PCB | train | 6,346 | 12,964 | **2.04** |
| PCB | valid | 798 | 1,588 | **1.99** |
| PCB | test | 827 | 1,660 | **2.01** |
| HRIPCB | train | 1,108 | 4,667 | **4.21** |
| HRIPCB | valid | 139 | 583 | **4.19** |
| HRIPCB | test | 139 | 576 | **4.14** |
- **PCB**:平均每张图约 **2.0 个缺陷框**,整体相对稀疏。
- **HRIPCB**:平均每张图约 **4.2 个缺陷框**,缺陷更密集,有些图可能包含同一类型的多个缺陷实例。
**结论**:HRIPCB 的缺陷密度约为 PCB 的 **2 倍**。这在训练时意味着 HRIPCB 样本对模型学习"密集小目标共存"场景的贡献更大。
### 2.3 数据构成方式不同
**PCB 文件名特征**:
```
l_light_01_missing_hole_01_1_600_jpg.rf.xxx.jpg
l_light_01_missing_hole_01_2_600_jpg.rf.xxx.jpg
l_light_01_missing_hole_01_3_600_jpg.rf.xxx.jpg
```
- 前缀 `l_light_` 表明采集时控制了光照条件(left light / 左侧光源)。
- `_1_`、`_2_`、`_3_` 后缀表明**同一张缺陷样本有多个变体**(可能是不同光照、角度或采集参数)。
- 数据冗余度更高,同类缺陷的重复样本多。
**HRIPCB 文件名特征**:
```
01_missing_hole_01_jpg.rf.xxx.jpg
01_missing_hole_01_jpg.rf.yyy.jpg
```
- 命名更简洁,每张原始图仅有 **2 个 Roboflow 自动变体**(后缀 hash 不同)。
- 样本独立性更强,重复度低。
### 2.4 总标注实例数
| 数据集 | 图片数 | 总缺陷实例数 |
|--------|--------|-------------|
| PCB | 7,971 | ~16,212 |
| HRIPCB | 1,386 | ~4,826 |
| **合并后** | **9,357** | **~21,038** |
---
## 3. 对模型训练的影响
| 影响项 | 说明 |
|--------|------|
| **分辨率差距** | PCB 从 240 上采样到 640 会丢失细节,小目标检测可能受一定影响;HRIPCB 原生 640,细节保留更完整 |
| **密度差异** | HRIPCB 更密集的标注有助于模型学习"多缺陷共存"场景,对实际产线更有价值 |
| **重复样本** | PCB 中同一缺陷的多个变体相当于轻度数据增强,有助于提升光照/角度鲁棒性 |
| **来源互补** | PCB 偏"受控光照实验"风格,HRIPCB 偏"标准工业样本"风格,合并后泛化能力更强 |
| **类别分布** | 两者类别定义完全一致(6 类缺陷),标签格式均为标准 YOLOv8 归一化坐标,可直接合并 |
---
## 4. 使用建议
### 4.1 基础用法
直接使用 `dataset.py` 合并后训练:
```bash
python dataset.py merge --src pcb HRIPCB --dst merged
```
合并后共 **9,357 张图、约 21,038 个缺陷实例**,数据量足够支撑 YOLOv8n/s 的训练。
### 4.2 进阶用法:重新划分
如果担心 PCB 占比过高(85%)导致模型过度偏向 PCB 的数据风格,可以打乱后重新按 8:1:1 划分:
```bash
python dataset.py merge --src pcb HRIPCB --dst merged --rebalance --train 0.8 --val 0.1 --test 0.1
```
### 4.3 训练参数建议
针对两个数据集的分辨率差异,建议:
```yaml
# train.yaml
model: yolov8n.pt
data: D:/github2026/pcb-defect-detection/merged/data.yaml
imgsz: 640 # 统一统一到 640,补偿 PCB 的 240 上采样损失
batch: 16 # RTX 4060 8GB 安全值
epochs: 100
amp: True # 混合精度必开
patience: 20 # 早停
```
### 4.4 如果精度不够
可考虑以下策略:
1. **分阶段训练**:先用 PCB 预训练,再用 HRIPCB fine-tune(HRIPCB 密度高、标注更"干净")。
2. **调整样本权重**:在 Ultralytics 中通过 `sample_weights` 或自定义 dataloader 提升 HRIPCB 样本的采样概率。
3. **数据清洗**:检查 PCB 中 240×240 上采样后是否出现模糊/不可辨认的样本,必要时剔除低质量数据。
---
## 5. 附:数据来源链接
- **PCB (TCC)**:`https://universe.roboflow.com/tcc-r4j2r/pcb-la0tj/dataset/1`
- **HRIPCB**:`https://universe.roboflow.com/ma007/hripcb/dataset/1`