原创项目合集 基于 YOLOv8 的钢材表面缺陷检测系统

基于 YOLOv8 的钢材表面缺陷检测系统

一、项目简介

本项目是一个面向钢材表面缺陷检测场景的深度学习应用系统,围绕 YOLOv8 完成了从数据集组织、模型训练、结果评估,到桌面端检测系统开发与功能集成的完整流程。项目以 NEU-DET 钢材表面缺陷数据集为基础,训练得到钢材缺陷检测模型,并基于 PyQt6 开发了可视化检测系统,支持图片识别、视频识别、摄像头实时识别、检测历史管理、模型参数管理和训练指标展示等功能。

该项目不仅体现了目标检测模型开发的基本过程,也体现了深度学习模型向工程化系统落地的完整思路。

二、项目目标

  • 面向钢材表面质量检测任务,构建可用的缺陷检测模型
  • 基于标准数据集完成目标检测任务的数据组织与训练验证
  • 通过训练损失、精确率、召回率、mAP 等指标评估模型性能
  • 将训练后的模型封装为可交互的桌面应用,实现实际检测功能
  • 形成“数据处理 -> 模型训练 -> 结果分析 -> 系统集成”的完整项目闭环

三、项目技术栈

类别技术/工具说明
深度学习框架YOLOv8 / Ultralytics用于目标检测模型训练、验证与推理
模型基础yolov8n.pt采用预训练 nano 级模型作为训练起点
编程语言Python项目核心开发语言
图像/视频处理OpenCV用于视频读取、摄像头采集、结果保存
数值计算NumPy用于图像与推理数据处理
数据分析Pandas用于读取训练日志 results.csv
可视化Matplotlib用于训练曲线和指标图绘制
桌面界面PyQt6用于构建检测系统 UI
数据存储SQLite用于保存检测历史记录

四、数据集介绍

基于 YOLOv8 的钢材表面缺陷检测系统项目截图1

1. 数据集来源

项目使用 NEU-DET(Northeastern University Surface Defect Detection Dataset)钢材表面缺陷数据集。该数据集是钢材表面缺陷检测领域常用的公开数据集之一,适用于工业视觉检测和目标检测算法研究。

2. 数据集基本信息

项目内容
数据集名称NEU-DET
应用场景钢材表面缺陷检测
图像类型灰度图像
图像格式JPG
图像分辨率200 x 200
标注格式YOLO 目标检测格式
缺陷类别数6
总图像数量1800
标注文件数量1800

3. 缺陷类别

类别ID英文名称中文名称每类总数
0crazing龟裂300
1inclusion夹杂300
2patches斑块300
3pitted_surface点蚀表面300
4rolled-in_scale压入氧化皮300
5scratches划痕300

4. 数据划分

项目中的数据划分如下:

数据集划分图像数量标注数量说明
训练集 train/images17701770每类 295 张
验证集 valid/images3030每类 5 张
总计180018006 类均衡分布

5. 数据集目录结构

NEU-DET/
├── train/
│   ├── images/                # 训练图像
│   └── labels/                # 训练标注
├── valid/
│   ├── images/                # 验证图像
│   └── labels/                # 验证标注
└── 数据集介绍.md              # 数据集说明文档

6. 标注格式说明

每张图片对应一个同名的 .txt 标注文件,采用 YOLO 检测格式:

class_id center_x center_y width height

其中:

  • class_id 表示类别编号
  • center_xcenter_y 表示目标框中心点坐标,已归一化到 0~1
  • widthheight 表示目标框宽高,已归一化到 0~1

7. 数据集构建与处理过程

本项目在数据处理阶段主要完成了以下工作:

  1. NEU-DET 数据集整理为 YOLO 标准目录格式,区分训练集和验证集。
  2. 保持图像文件与标注文件一一对应,便于训练阶段自动索引。
  3. core/data_config.py 中自动生成 neu_det_data.yaml,统一描述数据集路径、类别数量和类别名称。
  4. 采用相对路径组织数据集配置,方便项目迁移与复现。
  5. 基于统一类别映射,将后续训练、推理、统计分析和 UI 展示保持一致。

当前数据配置文件如下:

path: NEU-DET
train: train/images
val: valid/images

nc: 6
names: ['crazing', 'inclusion', 'patches', 'pitted_surface', 'rolled-in_scale', 'scratches']
基于 YOLOv8 的钢材表面缺陷检测系统项目截图1

五、模型训练流程

1. 训练入口

模型训练入口文件为 train.py。程序会先初始化项目路径与编码配置,然后自动生成数据集配置文件,再加载 YOLOv8 模型并开始训练,训练结果默认输出到 train_result/exp/

2. 训练流程说明

本项目的训练流程可以概括为:

  1. 读取项目配置和数据集路径
  2. 自动生成 neu_det_data.yaml
  3. 加载预训练模型 yolov8n.pt
  4. 基于 NEU-DET 数据集进行迁移学习训练
  5. 在训练过程中同步进行验证并保存训练曲线
  6. 输出权重文件、训练日志、可视化结果图

该流程体现了深度学习目标检测项目中的典型训练范式,即以公开预训练权重为起点,通过任务数据集进行微调,并结合验证集进行持续评估。

3. 训练参数

代码默认训练参数

以下参数定义在 core/config.py 中:

参数说明
模型yolov8n.pt轻量级预训练检测模型
epochs100训练轮数
batch16批大小
imgsz640输入图像尺寸
seed42随机种子
workers0Windows 环境下避免页面文件不足问题
projecttrain_result训练结果输出目录
nameexp当前实验名称
saveTrue保存训练结果
plotsTrue保存训练曲线图
valTrue每轮执行验证

当前训练记录中的主要参数

根据 train_result/exp/args.yaml,本项目现有训练记录包含以下超参数信息:

参数
optimizerauto
pretrainedtrue
patience100
iou0.7
lr00.01
lrf0.01
momentum0.937
weight_decay0.0005
warmup_epochs3.0
mosaic1.0
fliplr0.5
translate0.1
scale0.5

这些参数体现了模型训练中的基础调优手段,包括:

  • 使用预训练权重提升收敛速度
  • 通过学习率、动量、权重衰减控制优化过程
  • 通过数据增强提升模型泛化能力
  • 通过验证指标持续监控训练效果

4. 模型训练与调优思路

本项目在模型训练与调优方面体现了以下几个基本过程:

  1. 选择轻量化模型 YOLOv8n 作为初始方案,兼顾训练速度和部署效率。
  2. 使用预训练权重开展迁移学习,减少从零训练的成本。
  3. 设定 100 轮训练,观察损失曲线和评估指标变化趋势。
  4. 结合 PrecisionRecallmAP50mAP50-95 综合评估模型检测效果。
  5. 在系统部署阶段开放 confioumax_det 等推理参数,实现训练后应用层调优。

六、训练结果与指标分析

基于 YOLOv8 的钢材表面缺陷检测系统项目截图1 基于 YOLOv8 的钢材表面缺陷检测系统项目截图1

1. 当前训练记录结果

根据 train_result/exp/results.csv 最终轮结果,当前模型在第 100 轮训练结束时的关键指标如下:

指标数值
Precision0.74897
Recall0.88631
mAP@0.50.84935
mAP@0.5:0.950.47914
Train Box Loss1.04576
Train Cls Loss1.00979
Train DFL Loss1.24859
Val Box Loss1.40737
Val Cls Loss1.10456
Val DFL Loss1.44337

2. 指标含义说明

指标含义
Precision预测为缺陷的目标中,有多少是真正正确的,反映误检控制能力
Recall实际存在的缺陷中,有多少被模型检测出来,反映漏检控制能力
mAP@0.5在 IoU=0.5 条件下的平均精度,常用于衡量整体检测效果
mAP@0.5:0.95在多个 IoU 阈值下综合计算的平均精度,对定位质量要求更高
Box Loss边界框回归损失,反映定位学习效果
Cls Loss分类损失,反映类别判别能力
DFL LossDistribution Focal Loss,反映边界框细粒度回归质量

3. 结果分析

  • Recall 高于 Precision,说明模型对缺陷目标的召回能力较强,漏检相对较少。
  • mAP@0.5 达到较高水平,说明模型在基础检测任务上具备较好的识别能力。
  • mAP@0.5:0.95 明显低于 mAP@0.5,说明在更严格定位标准下,边界框质量仍有继续提升空间。
  • 验证损失整体高于训练损失,说明模型在小规模验证集上存在一定泛化波动。
  • 由于当前验证集仅 30 张图像,指标更适合作为项目训练结果展示与工程验证参考。

七、可视化结果图说明

项目训练结果保存在 train_result/exp/ 下,当前目录中包含以下结果文件:

train_result/exp/
├── args.yaml
├── labels.jpg
├── train_batch0.jpg
├── train_batch1.jpg
├── train_batch2.jpg
├── train_loss.png
├── val_loss.png
├── metrics.png
├── learning_rate.png
├── loss_summary.png
├── overview.png
└── results.csv

各图像和结果文件的含义如下:

文件名含义说明
labels.jpg展示数据集标签分布、框位置分布等,用于检查标注质量与类别分布
train_batch0.jpg / train_batch1.jpg / train_batch2.jpg训练批次样本可视化,展示训练时输入图像及目标框
train_loss.png训练阶段 box_losscls_lossdfl_loss 变化曲线
val_loss.png验证阶段 box_losscls_lossdfl_loss 变化曲线
metrics.pngPrecisionRecallmAP50mAP50-95 曲线
learning_rate.png学习率随 Epoch 变化的曲线
loss_summary.png训练损失与验证损失的汇总对比图
overview.png总体训练效果总览图,包括总损失、mAP、Precision/Recall 等
results.csv每轮训练与验证的原始数值日志
args.yaml当前训练实验使用的完整参数快照

自定义可视化脚本

项目额外实现了 plot_train_results.pycore/plot_results.py,可基于 results.csv 自定义生成以下训练结果图:

  • train_loss.png
  • val_loss.png
  • metrics.png
  • learning_rate.png
  • loss_summary.png
  • overview.png

这部分体现了项目在训练后分析阶段的工程补充能力,而不只是依赖框架默认输出。

八、系统功能介绍

项目基于 PyQt6 开发了桌面端钢材表面缺陷检测系统,主要包括以下功能模块:

1. 登录与注册

  • 支持用户登录和注册
  • 用户信息保存在本地 users.json
  • 密码使用 SHA-256 哈希保存
基于 YOLOv8 的钢材表面缺陷检测系统项目截图1

2. 图片识别

  • 导入单张图片进行缺陷检测
  • 显示检测后的标注结果图
  • 展示目标总数、类别数、平均置信度、最高置信度
  • 展示类别分布表、目标明细表、置信度分布图
  • 支持导出检测结果图片和 CSV
  • 支持将检测记录写入历史数据库
基于 YOLOv8 的钢材表面缺陷检测系统项目截图1

3. 视频识别

  • 导入本地视频文件进行检测
  • 支持按“每 N 帧检测一次”控制推理频率
  • 展示当前帧检测结果和本次视频累计统计
  • 支持将视频检测结果保存到历史记录

4. 摄像头实时识别

  • 支持选择摄像头编号并启动实时检测
  • 支持检测开关切换
  • 支持按“每 N 帧检测一次”平衡实时性与性能
  • 支持截图保存
  • 支持保存当前会话统计到历史记录

5. 检测历史管理

  • 使用 SQLite 保存图片、视频、摄像头检测记录
  • 支持按类型筛选、按关键词搜索
  • 支持查看详细记录
  • 支持导出历史 CSV
  • 支持清空历史记录
基于 YOLOv8 的钢材表面缺陷检测系统项目截图1

6. 模型管理

  • 支持浏览并加载本地 .pt 模型权重
  • 默认尝试加载 train_result/exp/weights/best.pt
  • 支持配置推理参数:
  • conf:置信度阈值
  • iou:NMS 的 IoU 阈值
  • max_det:单图最大检测目标数
  • 展示模型基本信息和类别说明
基于 YOLOv8 的钢材表面缺陷检测系统项目截图1

7. 指标展示

  • 自动扫描 train_result/ 下的训练记录
  • 可切换不同训练实验查看指标
  • 展示训练损失曲线、mAP 曲线、Precision/Recall 曲线
  • 汇总显示最终轮关键指标
基于 YOLOv8 的钢材表面缺陷检测系统项目截图1 基于 YOLOv8 的钢材表面缺陷检测系统项目截图1

九、系统集成与工程实现

本项目并不是单纯的训练脚本,而是将模型能力封装成了完整应用系统,主要体现在:

  1. 将目标检测模型封装为统一的 SteelDefectDetector 检测器类。
  2. 将训练结果与推理参数打通,在桌面端可以直接加载模型并调整阈值。
  3. 将推理输出解析为结构化检测结果,进一步用于表格统计、分布分析和历史记录保存。
  4. 将图片、视频、摄像头三种输入统一集成到一个系统中。
  5. 将训练阶段的指标分析功能直接集成到 UI 中,形成训练与应用闭环。

这体现了深度学习项目从“模型开发”走向“系统落地”的完整过程。

十、项目结构

基于 YOLOv8 的钢材表面缺陷检测系统项目截图1
c29/
├── core/
│   ├── config.py                 # 训练配置常量
│   ├── data_config.py            # 自动生成数据集 YAML
│   ├── path_utils.py             # 路径与编码工具
│   └── plot_results.py           # 训练结果绘图
├── NEU-DET/
│   ├── train/
│   │   ├── images/
│   │   └── labels/
│   ├── valid/
│   │   ├── images/
│   │   └── labels/
│   └── 数据集介绍.md
├── train_result/
│   └── exp/                      # 训练输出目录
├── ui/
│   ├── pages/
│   │   ├── image_page.py         # 图片识别页
│   │   ├── video_page.py         # 视频识别页
│   │   ├── camera_page.py        # 摄像头识别页
│   │   ├── history_page.py       # 检测历史页
│   │   ├── model_page.py         # 模型管理页
│   │   └── metrics_page.py       # 指标展示页
│   ├── utils/
│   │   ├── detector.py           # YOLOv8 检测器封装
│   │   ├── db.py                 # SQLite 历史记录工具
│   │   ├── styles.py             # 界面样式
│   │   └── button_helpers.py     # 按钮样式辅助
│   ├── login_window.py           # 登录/注册窗口
│   ├── main_window.py            # 主窗口
│   └── users.json                # 用户数据
├── neu_det_data.yaml             # 数据集配置文件
├── train.py                      # 模型训练入口
├── plot_train_results.py         # 训练结果绘图入口
├── run_ui.py                     # 桌面系统启动入口
├── detection_history.db          # 检测历史数据库
└── requirements.txt              # 项目依赖

十一、项目运行说明

1. 安装依赖

pip install -r requirements.txt

2. 模型训练

python train.py

训练完成后,结果默认保存在 train_result/exp/

3. 训练结果可视化

python plot_train_results.py

4. 启动检测系统

python run_ui.py

本项目为个人原创,结构清晰,功能完整,适合课程设计、毕业设计和个人学习使用。如需购买项目成品或定制化需求可以联系作者。

微信二维码
Jay 微信二维码