铝合金瑕疵识别系统

作品简介

铝合金瑕疵识别系统

一、项目概述

本项目是一个基于 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                          # 本文件






创作时间: