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

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

项目简介

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

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

项目目标

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

项目技术栈

类别

技术/工具

说明

深度学习框架

YOLOv8 / Ultralytics

用于目标检测模型训练、验证与推理

模型基础

yolov8n.pt

采用预训练 nano 级模型作为训练起点

编程语言

Python

项目核心开发语言

图像/视频处理

OpenCV

用于视频读取、摄像头采集、结果保存

数值计算

NumPy

用于图像与推理数据处理

数据分析

Pandas

用于读取训练日志 results.csv

可视化

Matplotlib

用于训练曲线和指标图绘制

桌面界面

PyQt6

用于构建检测系统 UI

数据存储

SQLite

用于保存检测历史记录

数据集介绍

1. 数据集来源

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

2. 数据集基本信息

项目

内容

数据集名称

NEU-DET

应用场景

钢材表面缺陷检测

图像类型

灰度图像

图像格式

JPG

图像分辨率

200 x 200

标注格式

YOLO 目标检测格式

缺陷类别数

6

总图像数量

1800

标注文件数量

1800

3. 缺陷类别

类别ID

英文名称

中文名称

每类总数

0

crazing

龟裂

300

1

inclusion

夹杂

300

2

patches

斑块

300

3

pitted_surface

点蚀表面

300

4

rolled-in_scale

压入氧化皮

300

5

scratches

划痕

300

4. 数据划分

项目中的数据划分如下:

数据集划分

图像数量

标注数量

说明

训练集 train/images

1770

1770

每类 295 张

验证集 valid/images

30

30

每类 5 张

总计

1800

1800

6 类均衡分布

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']

模型训练流程

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

轻量级预训练检测模型

epochs

100

训练轮数

batch

16

批大小

imgsz

640

输入图像尺寸

seed

42

随机种子

workers

0

Windows 环境下避免页面文件不足问题

project

train_result

训练结果输出目录

name

exp

当前实验名称

save

True

保存训练结果

plots

True

保存训练曲线图

val

True

每轮执行验证

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

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

参数

optimizer

auto

pretrained

true

patience

100

iou

0.7

lr0

0.01

lrf

0.01

momentum

0.937

weight_decay

0.0005

warmup_epochs

3.0

mosaic

1.0

fliplr

0.5

translate

0.1

scale

0.5

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

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

4. 模型训练与调优思路

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

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

训练结果与指标分析

1. 当前训练记录结果

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

指标

数值

Precision

0.74897

Recall

0.88631

mAP@0.5

0.84935

mAP@0.5:0.95

0.47914

Train Box Loss

1.04576

Train Cls Loss

1.00979

Train DFL Loss

1.24859

Val Box Loss

1.40737

Val Cls Loss

1.10456

Val DFL Loss

1.44337

2. 指标含义说明

指标

含义

Precision

预测为缺陷的目标中,有多少是真正正确的,反映误检控制能力

Recall

实际存在的缺陷中,有多少被模型检测出来,反映漏检控制能力

mAP@0.5

在 IoU=0.5 条件下的平均精度,常用于衡量整体检测效果

mAP@0.5:0.95

在多个 IoU 阈值下综合计算的平均精度,对定位质量要求更高

Box Loss

边界框回归损失,反映定位学习效果

Cls Loss

分类损失,反映类别判别能力

DFL Loss

Distribution 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.png

PrecisionRecallmAP50mAP50-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 哈希保存

2. 图片识别

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

3. 视频识别

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

4. 摄像头实时识别

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

5. 检测历史管理

  • 使用 SQLite 保存图片、视频、摄像头检测记录
  • 支持按类型筛选、按关键词搜索
  • 支持查看详细记录
  • 支持导出历史 CSV
  • 支持清空历史记录

6. 模型管理

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

7. 指标展示

  • 自动扫描 train_result/ 下的训练记录
  • 可切换不同训练实验查看指标
  • 展示训练损失曲线、mAP 曲线、Precision/Recall 曲线
  • 汇总显示最终轮关键指标

系统集成与工程实现

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

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

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

项目结构

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

本项目为个人原创,结构清晰,功能完整,适合计算机视觉方向课程设计、毕业设计和项目演示使用。有定制化需求可以评论或私信作者。

目录
相关文章
|
3天前
|
人工智能 JSON 安全
|
3天前
|
云安全 人工智能 安全
|
3天前
|
人工智能 自然语言处理 数据挖掘
Qwen3.8-Max-Preview深度全解析:2.4万亿参数旗舰MoE模型+Token Plan限时优惠完整落地指南
2026年7月,全新旗舰级混合专家大模型Qwen3.8-Max-Preview正式开放抢先体验,作为通义千问Qwen3系列规格最高、综合推理能力顶尖的新一代模型,该模型总参数量达到2.4万亿(2.4T),是当前线上可调用的原生多模态旗舰模型,综合推理水准对标海外顶级Fable 5模型,在复杂工程开发、长文档深度分析、多步骤智能体自治、跨境多语言创作、海量数据挖掘五大高难度业务场景实现跨越式性能提升。
717 0
|
3天前
|
人工智能 自然语言处理 数据挖掘
最新版通义千问(Qwen3.8-Max-Preview)功能介绍
2026年,通义千问正式推出全新旗舰级大模型 **Qwen3.8-Max-Preview 预览版**,作为首款突破万亿参数规格的新一代基座模型,该模型总参数量达到**2.4万亿**,采用全新迭代的MoE混合专家架构,综合推理性能、长文本处理、多模态理解、复杂任务规划能力全面超越前代Qwen3.7-Max版本,整体实力跻身全球第一梯队,可对标海外顶级旗舰模型,是当前面向复杂工程开发、多智能体协同、超长文档解析、专业办公自动化场景的最优国产基座模型。
740 0
|
5天前
|
人工智能
Qwen3.8抢先体验!正式版即将发布并开源!
千问Qwen3.8即将开源,参数达2.4T,进化速度以“天”计,实力媲美Fable 5。预览版Qwen3.8-Max已上线阿里Token Plan等平台,限时优惠:日间Credits低至1折,夜间更优,个人/团队版月付仅35元起!
665 26
|
4天前
|
人工智能 测试技术 语音技术
Qwen-Audio-3.0-TTS 正式发布!AI 语音从 “能说话” 升级到 “会带情绪表达”
阿里云发布Qwen-Audio-3.0-TTS语音合成大模型,支持细粒度标签控制(如[gasp][angry])、freestyle自由风格、16种语言及20种方言,声学鲁棒性强。含Flash(首包延时300ms)和Plus(全球榜单冠军)双版本,已在百炼平台开放调用。在阿里云百炼官网:https://t.aliyun.com/U/fPVHqY 免费领取千万Tokens
596 1
|
5天前
|
人工智能 自然语言处理 数据挖掘
Qwen3.8-Max 预览版全解析:2.4 万亿参数旗舰模型,Token Plan 限时优惠指南
Qwen3.8-Max-Preview是通义千问Qwen3系列旗舰MoE大模型,参数达2.4万亿,综合推理能力居行业第一梯队。支持思考/快速双模式,擅长大模型五大高难场景。现于阿里云百炼Token Plan、Qoder及QoderWork上线体验,个人版低至39元/月。在阿里云百炼官网:https://t.aliyun.com/U/fPVHqY 免费领取千万Tokens
529 1
Qwen3.8-Max 预览版全解析:2.4 万亿参数旗舰模型,Token Plan 限时优惠指南
|
11天前
|
缓存 UED 开发者
Codex109天重置23次,明天还要再送一次
Codex近109天完成23次额度重置,7月14日将迎来第24次。Tibo高频响应用户反馈:优化GPT-5.6高消耗问题、补发失效福利、调整重置时间——形成“反馈→回应→修复→补偿”正向闭环,彰显以用户为中心的产品哲学。(239字)
943 12