铝合金瑕疵识别系统
一、项目概述
本项目是一个基于 YOLOv8 目标检测 的铝合金表面瑕疵识别系统,通过弱监督学习方法(Grad-CAM)生成伪边界框标注,训练出能够同时定位和识别 11 种瑕疵类型的深度学习模型。系统同时提供了基于 PyQt5 的图形用户界面,支持图片检测、训练结果可视化、数据集浏览和模型训练控制等完整功能。
核心特点
- 端到端检测:输入图片 → 自动定位瑕疵位置 → 输出类别和置信度
- 弱监督标注:利用分类模型 + Grad-CAM 自动生成边界框标注,无需人工标注
- 高精度模型:mAP@0.5 达到 92.55%,可部署于工业质检场景
- PyQt5 GUI:提供直观的可视化界面,支持单张/批量检测
- 中文原生支持:所有类别名称、界面标签均为中文
二、技术架构
┌─────────────────────────────────────────────────────────────┐
│ PyQt5 图形界面层 │
│ ┌──────────────┬──────────────┬──────────────┬────────────┐│
│ │ 🔍 瑕疵检测 │ 📈 训练结果 │ 📂 数据集 │ ⚙ 训练控制 ││
│ └──────────────┴──────────────┴──────────────┴────────────┘│
└─────────────────────────────────────────────────────────────┘
│
┌─────────────────────────────────────────────────────────────┐
│ YOLOv8 目标检测模型 │
│ output/yolov8_train/weights/best.pt │
│ mAP@0.5 = 92.55% │
└─────────────────────────────────────────────────────────────┘
│
┌─────────────────────────────────────────────────────────────┐
│ ResNet18 分类模型 + Grad-CAM │
│ 生成伪边界框标注 → YOLO格式数据集 │
└─────────────────────────────────────────────────────────────┘
│
┌─────────────────────────────────────────────────────────────┐
│ 铝合金瑕疵数据集 │
│ Guangdong Round 1 初赛数据集(11个瑕疵类别) │
└─────────────────────────────────────────────────────────────┘
技术栈
层级
技术
深度学习框架
PyTorch 2.5.1 + CUDA 12.1
目标检测
Ultralytics YOLOv8
图像分类
torchvision ResNet18
弱监督标注
pytorch-grad-cam
图形界面
PyQt5
图像处理
OpenCV, Pillow
数据可视化
matplotlib, pandas
三、项目结构
d:\123\铝合金瑕疵识别\ ├── configs/ │ └── config.yaml # 项目配置文件 │ ├── dataset/ │ ├── guangdong_round1_train2_20180916/ # 原始训练数据 │ │ └── 瑕疵样本/ # 按瑕疵类别分类的图片 │ │ ├── 不导电/ # 不导电瑕疵图片 │ │ ├── 凸粉/ │ │ ├── 擦花/ │ │ ├── 桔皮/ │ │ ├── 横条压凹/ │ │ ├── 涂层开裂/ │ │ ├── 漏底/ │ │ ├── 碰伤/ │ │ ├── 脏点/ │ │ └── 起坑/ │ │ │ ├── annotations/ # Grad-CAM 生成的伪标注 │ ├── splits/ # 数据集划分文件 │ │ ├── train.txt │ │ └── val.txt │ │ │ └── yolo/ # YOLO 格式数据集 │ ├── dataset.yaml # YOLO 数据集配置 │ ├── images/train/ │ ├── images/val/ │ ├── labels/train/ │ └── labels/val/ │ ├── output/ │ ├── yolov8_train/ # YOLOv8 训练输出 │ │ ├── weights/ │ │ │ ├── best.pt # 最佳模型权重 │ │ │ └── last.pt # 最新模型权重 │ │ ├── results.csv # 训练指标记录(46轮) │ │ ├── results.png # 训练曲线(如有) │ │ ├── confusion_matrix.png # 混淆矩阵(如有) │ │ ├── PR_curve.png # PR 曲线(如有) │ │ ├── F1_curve.png # F1 曲线(如有) │ │ ├── labels.jpg # 类别分布图 │ │ └── train_batch*.jpg # 训练批次预览 │ │ │ ├── class_to_idx.json # 类别到索引映射 │ ├── ultralytics_config/ # Ultralytics 配置缓存 │ └── train_log.txt # 训练日志 │ ├── src/ │ ├── data/ │ │ ├── classification_dataset.py # 分类数据集加载器 │ │ ├── dataset_utils.py # 数据集工具函数 │ │ └── transforms.py # 数据增强变换 │ │ │ ├── models/ │ │ ├── classifier.py # ResNet18 分类模型 │ │ └── __init__.py │ │ │ └── gui/ # === PyQt5 图形界面 === │ ├── __init__.py │ ├── main_window.py # 主窗口(QMainWindow) │ ├── detector_tab.py # 标签页1:瑕疵检测与可视化 │ ├── training_results_tab.py # 标签页2:训练结果查看 │ ├── dataset_tab.py # 标签页3:数据集浏览与统计 │ ├── training_control_tab.py # 标签页4:模型训练控制 │ ├── detector_worker.py # 检测后台线程(QThread) │ └── utils.py # GUI 工具函数(字体、图像转换等) │ ├── scripts/ │ ├── run_gui.py # GUI 启动入口 │ ├── train_detector.py # YOLOv8 训练脚本 │ ├── train_classifier.py # ResNet18 分类训练脚本 │ ├── generate_pseudo_labels.py # Grad-CAM 伪标注生成 │ ├── prepare_yolo_dataset.py # YOLO 数据集准备 │ ├── split_dataset.py # 数据集划分 │ └── analyze_dataset.py # 数据集分析 │ ├── requirements.txt # Python 依赖列表 ├── verify_gui.py # GUI 模块验证脚本 └── README.md # 本文件