摘要 :钢材表面缺陷的稳定识别与快速定位是保障轧制质量、降低返工成本与实现产线智能化的重要环节。本篇博客围绕"YOLOv5 至 YOLOv12 升级:钢材表面缺陷检测系统的设计与实现"展开,给出从数据集构建到模型训练、再到桌面端部署的完整工程化方案,并提供可复现的完整代码、可交互界面与数据集项目。在算法层面,本文以 YOLO 系列为主线,系统梳理 YOLOv5→YOLOv12 的结构演化思路,并将其落到钢材表面缺陷检测这一高噪声、强纹理、类间差异小且尺度跨度大的场景中,通过统一训练设置对多代模型进行对比实验,综合分析 mAP、F1-Score、速度与参数规模等指标差异,进一步讨论不同版本在小目标缺陷、弱对比缺陷与复杂背景下的误检漏检机理。在工程层面,系统采用 PySide6 构建桌面端可视化界面,支持图片/视频/摄像头等多源输入,提供阈值(Conf/IoU)调节、检测框与类别置信度展示、结果统计与导出、可视化分析(如热力图/混淆矩阵等)等功能,并以 SQLite 设计用户注册登录与结果持久化机制,实现可管理、可追溯的检测流程。本文旨在为"缺陷检测算法升级与工程落地"提供一套清晰、可复现、可扩展的参考范式,便于读者在实际产线或科研环境中快速复用与二次开发。
文章目录
- [1. 前言综述](#1. 前言综述)
- [2. 数据集介绍](#2. 数据集介绍)
- [3. 模型设计与实现](#3. 模型设计与实现)
- [4. 训练策略与模型优化](#4. 训练策略与模型优化)
- [5. 实验与结果分析](#5. 实验与结果分析)
-
- [5.1 实验设置与对比基线](#5.1 实验设置与对比基线)
- [5.2 度量指标与评估协议](#5.2 度量指标与评估协议)
- [5.3 结果对比与讨论](#5.3 结果对比与讨论)
- [6. 系统设计与实现](#6. 系统设计与实现)
-
- [6.1 系统设计思路](#6.1 系统设计思路)
- [6.2 登录与账户管理](#6.2 登录与账户管理)
- [7. 下载链接](#7. 下载链接)
- [8. 参考文献(GB/T 7714)](#8. 参考文献(GB/T 7714))
1. 前言综述
热轧带钢、冷轧板材等钢材在轧制、卷取与运输环节中易出现裂纹、压痕、划伤、氧化皮等表面缺陷,这类缺陷不仅影响外观质量,更会在后续成形与服役过程中诱发疲劳与腐蚀等失效,因此高可靠的在线视觉检测长期被视为钢铁智能制造的关键支撑技术之一1。相比离线抽检与人工目检,生产现场更需要"边采集、边定位、边判别"的端到端检测范式,并在高速运动、强反光、弱对比与复杂纹理背景下保持稳定性与实时性2。近年系统性文献研究表明,工业表面缺陷任务在数据集形态、标注粒度、评价指标与部署约束上高度多样,导致算法的可迁移性与可复现性成为研究与落地共同面临的核心问题[3]。在国内研究语境中,相关综述进一步指出钢铁、铝材等金属表面缺陷的视觉特征呈现明显的尺度不均衡与长尾分布,模型需要同时处理"微小缺陷不漏检"和"伪缺陷不过检"的双重目标[4]。
从方法演进来看,传统机器视觉通常依赖纹理算子与手工特征构造,并结合分类器完成缺陷识别,但其鲁棒性往往受制于光照变化、噪声与表面粗糙度差异1。深度学习方法通过多层特征抽取与表示学习显著提升了复杂场景下的泛化能力,其中面向钢材缺陷的多层级特征融合与端到端训练思路,能够在定位与分类联合优化中获得更稳定的检测性能2。面向工程落地,国内已有工作在YOLO框架下引入多尺度特征与损失项调整以增强钢板缺陷检测能力,体现出"一类任务、多种缺陷形态"条件下对网络结构与训练目标的共同约束[5]。与此同时,轻量化与部署友好性也逐渐成为研究重点,例如通过引入轻量卷积单元与计算图优化来降低参数量与推理延迟,从而适配产线侧边缘设备的算力条件[6]。更进一步的网络改造开始围绕低对比、形态不规则与尺度跨度大等钢材缺陷特性设计特征增强模块,以期在高速检测中减少漏检与误检并兼顾吞吐率[7]。
围绕YOLO系列从v5到v12的迭代升级,研究与工程实践的"主线矛盾"基本落在精度、速度与可部署性之间的权衡上[8]。YOLOv6以工业应用为导向对网络设计与训练策略进行系统化整理,为后续轻量化与工程加速提供了更清晰的实现路径[9]。YOLOv7通过可训练的"bag-of-freebies"等设计在不显著增加推理开销的前提下提升检测精度,进一步强化了实时检测框架的性能上界[10]。Ultralytics在YOLOv8中给出了更工程化的一体化训练与推理接口,并在模型结构与任务头实现上持续优化,使其成为大量工业检测场景的默认起点之一[11]。YOLOv9提出可编程梯度信息等机制以缓解深层网络信息损失问题,并给出新的轻量化架构思路来提升参数利用效率[12]。YOLOv10进一步将端到端部署中的后处理瓶颈作为主要矛盾之一,通过NMS-free训练与效率驱动的组件优化降低延迟并改善部署一致性[13]。Ultralytics发布的YOLO11在统一框架内继续强化速度与精度的折中能力,为多任务与多平台部署提供了更稳定的工程入口[14]。YOLOv12则尝试将注意力机制更深度地引入实时检测框架,在保持实时性目标的同时提升建模能力,为后续"高精度且可实时"的工业检测提供了新的结构方向[15]。(Ultralytics Docs)
表 1 钢材表面缺陷检测相关研究与YOLO系列升级要点对比
| 方法范式 / 代表方法 | 典型数据与任务形态 | 关键思路(抽象层面) | 优势 | 局限 |
|---|---|---|---|---|
| 纹理特征 + 传统分类(CLBP等)1 | 单类/多类缺陷,纹理显著 | 手工特征刻画局部纹理并分类 | 实现简单、可解释性较强 | 对光照与噪声敏感,难覆盖复杂缺陷形态 |
| 端到端检测(多层级特征融合)2 | 多类缺陷,需定位+分类 | 分层特征联合用于检测头学习 | 鲁棒性更好,定位与分类协同 | 对数据与标注质量敏感,训练成本较高 |
| YOLO改进用于钢板缺陷(改进YOLOv3)[5] | 钢板缺陷检测 | 针对尺度与定位误差优化结构与目标函数 | 工程适配性较强 | 版本耦合明显,可迁移性依赖实现细节 |
| 轻量化YOLOv5s改进[6] | 工业缺陷检测与边缘部署 | 轻量算子替换与计算优化 | 延迟低、便于部署 | 极小缺陷与复杂背景下精度仍受限 |
| FPDNet等面向热轧带钢缺陷[7] | 热轧带钢缺陷检测 | 结构轻量化与特征增强模块结合 | 在速度与精度之间更均衡 | 结构较专用,跨产线迁移需再训练 |
| YOLOv7(实时检测强化)[10] | 通用检测基准与迁移 | 训练增益策略与结构细化 | 高效实时、精度提升明显 | 工业场景仍需定制化数据与增强 |
| YOLOv10(端到端部署友好)[13] | 通用检测与低延迟部署 | NMS-free训练与效率驱动优化 | 延迟更低、部署一致性更好 | 工业长尾与小缺陷仍依赖数据与采样策略 |
| YOLOv12(注意力引入实时检测)[15] | 通用检测与实时推理 | 注意力机制提升表征能力 | 精度潜力更高、结构方向新 | 工业落地仍需验证其算力与稳定性边界 |
综上,钢材表面缺陷检测在算法层面仍面临若干共性难点:其一,缺陷尺度跨度大且低对比区域多,导致同一类别在不同工况下呈现显著域偏移;其二,长尾类别与噪声标签会在mAP提升的同时放大误检风险,从而影响产线可用性;其三,部署侧更关注端到端延迟、吞吐与可维护性,要求算法与系统工程协同设计而非单点追求离线指标[3]。因此,在这篇博客中,老思将以"YOLOv5至YOLOv12升级的钢材表面缺陷检测"为主线,围绕同一数据与同一评测协议完成系列模型对比与可复现实验,并将训练、推理、可视化与数据管理集成到PySide6界面与SQLite结果管理中形成可直接落地的检测系统。本文的主要贡献在于:构建并规范化标注钢材表面缺陷数据集与划分方案,系统比较YOLOv5至YOLOv12在同一任务上的精度与速度差异,并给出包含完整代码、可运行界面与资源打包的工程化实现,便于读者复现与二次开发。
主要功能演示:
(1)启动与登录:系统启动后首先进入登录页,用户可选择注册新账号或使用已有账号登录;账号信息与个性化配置写入 SQLite,登录成功后自动加载该用户的历史检测记录与上次使用的模型/阈值配置,保证跨次运行的可追溯与可复用。如图 1 所示。
图 1 启动与登录界面图

(2)多源输入与实时检测(摄像头/视频/图片/文件夹):主界面统一采用"输入源---预处理---推理---后处理---可视化"的流程组织交互,支持摄像头实时流、视频文件逐帧读取、单张图片快速推理以及文件夹批量检测;界面中同步显示检测框、类别与置信度,并提供 Conf/IoU 调节以控制误检与漏检的折中,适合钢材表面弱对比缺陷的现场调参。如图 2 所示。
图 2 多源输入与实时检测演示图

(3)模型选择与对比演示:系统内置 YOLOv5 至 YOLOv12 多版本权重的加载与切换逻辑,用户可在下拉框中选择目标模型并一键热切换,同一输入源下复现实验设置;同时在侧边栏展示推理耗时、FPS 与检测数量统计,便于直观看到不同版本在精度与速度上的差异,并为后续部署选型提供依据。如图 3 所示。
图 3 模型选择与对比演示图

(4)主题修改功能:界面提供主题切换与外观自定义入口,可修改主色调、背景图、图标与关键控件样式,并将主题配置与用户账号绑定写入 SQLite;该机制既满足不同工位的可视化偏好,也降低长时间值守场景下的视觉负担,同时不影响检测链路与结果一致性。如图 4 所示。
图 4 主题修改功能演示图

2. 数据集介绍
本项目面向钢材表面缺陷的在线检测需求,构建了一个包含 3037 张 图像的四类别目标检测数据集,用于支撑 YOLOv5 至 YOLOv12 系列模型在同一任务、同一划分协议下的可复现对比实验。数据集中目标以矩形框形式给出,覆盖 腐蚀缺陷(Cacat_Korosi) 、焊接缺陷(Cacat_Las) 、孔洞缺陷(Cacat_Lubang) 与 裂纹缺陷(Cacat_Retak) 四类典型外观异常。结合你提供的训练批次可视化样例可以看到,缺陷形态具有明显的工业共性:一方面缺陷边界常与钢材纹理、反光条带相互耦合,易出现弱对比与伪边缘;另一方面同类缺陷内部差异较大(例如裂纹既可能呈细长线状,也可能呈分叉扩展),这会对检测器的多尺度表征能力与定位稳定性提出更高要求。为保证评估的可比性,数据集划分遵循固定比例的训练/验证/测试三分方案,并在后续训练阶段仅对训练集启用数据增强,使验证与测试更接近真实分布,从而避免"训练策略泄漏"带来的指标偏乐观。

python
Chinese_name = {'Cacat_Korosi': "腐蚀缺陷", 'Cacat_Las': "焊接缺陷", 'Cacat_Lubang': "孔洞缺陷", 'Cacat_Retak': "裂纹缺陷"}
从统计分布上看,四类缺陷存在一定程度的类别不均衡:焊接缺陷 实例占比最高,其次为腐蚀缺陷 ,孔洞缺陷 与裂纹缺陷 相对更少;同时,标注框的中心位置分布呈现"中部更密集"的趋势,且宽高分布中小尺寸框占比显著,这与钢材表面缺陷往往呈局部区域聚集、尺度跨度大的客观规律一致。该分布特性决定了训练时需要重点关注小目标召回与长尾类别的稳定优化:一方面在输入尺度、特征金字塔与正负样本分配策略上保证对小缺陷的有效学习;另一方面通过合理的数据增强、采样与损失权重设置降低少样本类别的漏检风险,确保系统在产线场景中的鲁棒性与可用性。

📊 数据集规格说明 (Dataset Specification)
| 维度 | 参数项 | 详细数据 |
|---|---|---|
| 基础信息 | 标注软件 | LabelImg |
| 标注格式 | YOLO TXT (Normalized) | |
| 数量统计 | 训练集 (Train) | 1,862 张 |
| 验证集 (Val) | 583 张 | |
| 测试集 (Test) | 592 张 | |
| 总计 (Total) | 3,037 张 | |
| 类别清单 | Class ID: 0 | Cacat_Korosi(腐蚀缺陷) |
| Class ID: 1 | Cacat_Las(焊接缺陷) |
|
| Class ID: 2 | Cacat_Lubang(孔洞缺陷) |
|
| Class ID: 3 | Cacat_Retak(裂纹缺陷) |
|
| 图像规格 | 输入尺寸 | 640 * 640 |
| 数据来源 | 实际钢材表面采集图像(人工清洗与筛除低质样本) |
3. 模型设计与实现
在钢材表面缺陷检测这一任务中,老思更倾向于将"高召回的小缺陷定位能力"作为首要目标,其次才是类别判别的稳定性与端到端推理延迟。若仅从骨干网络选型出发,ResNet 族在特征表达上较为稳健,MobileNet 与 EfficientNet 在轻量化与移动端部署上更有优势,但它们通常需要额外设计检测头与多尺度融合结构,工程实现与性能调参成本较高。基于此,本文以 YOLO 系列作为统一的检测框架:一方面它天然将定位与分类纳入同一端到端目标,另一方面从 YOLOv5 到 YOLOv12 的演进提供了清晰的结构升级路线,便于在同一数据集上进行可复现的横向对比。默认主模型采用 YOLOv12n :其设计目标是在维持实时性约束的同时,引入更强的注意力建模能力;不过需要说明的是,Ultralytics 文档也明确提示 YOLO12 更偏研究与基准用途,可能存在训练不稳定与资源消耗偏高的问题,因此系统层面保留了 YOLOv5/8/11 等版本作为可替换方案,确保部署可控。 (Ultralytics Docs)

从网络结构上看,YOLO 系列在宏观上保持了"Backbone--Neck--Head"的三段式范式:Backbone 负责从输入图像中提取分层语义特征,Neck 负责跨尺度融合以兼顾小缺陷与大缺陷,Head 则将融合后的多尺度特征映射为检测输出。以 YOLOv5 为例,其骨干通常采用 CSPDarknet 风格的跨阶段部分连接以减小冗余计算,Neck 侧常见 SPPF 与 PAN/FPN 的组合以提升感受野并增强多尺度信息传递,最终在多个尺度上输出检测结果。该结构对工业缺陷任务的价值在于:在输入分辨率固定(如 640 × 640 640\times 640 640×640)时,Neck 的多尺度融合能够显著提升对细长裂纹、局部孔洞等小目标的召回,而 SPPF 类模块可以在不显著增加计算的前提下增强对纹理背景与反光区域的鲁棒表征。 (Ultralytics Docs)
网络的整体架构图如下图所示(YOLOv5 Backbone/Neck/Head 示意):
https://cdn.jsdelivr.net/gh/ultralytics/assets@main/docs/yolov5-model-structure.avif
YOLOv12 的核心变化在于将注意力机制更深地纳入实时检测框架,并围绕"速度---精度---稳定性"重新组织特征提取与融合模块。Ultralytics 的 YOLO12 说明中强调了三点:其一是 Area Attention ,通过将特征图划分为若干等大小区域并在区域内计算注意力,试图在扩大有效感受野的同时降低标准自注意力的计算与访存开销;其二是 R-ELAN (Residual Efficient Layer Aggregation Networks),通过引入带缩放的残差连接与更利于优化的聚合结构缓解深层网络训练难点;其三是对注意力实现做"工程化收敛",例如可选用 FlashAttention 降低显存带宽压力、去除显式位置编码,并以 7 × 7 7\times 7 7×7 深度可分离卷积作为"位置感知器"在卷积效率与空间建模之间取得折中。对钢材缺陷而言,这类设计的直观收益在于:当缺陷与背景纹理高度耦合、且缺陷呈弱对比或细长形态时,注意力更容易捕获跨区域的上下文一致性,从而降低"把纹理当缺陷"的误检概率,并提升对断续裂纹的连贯定位能力。 (Ultralytics Docs)
(可选)YOLO12 对比可视化图(热力图示例):
https://cdn.jsdelivr.net/gh/ultralytics/assets@main/docs/yolo12-comparison-visualization.avif
在任务建模层面,目标检测通常将每个候选位置的输出分解为边界框回归与类别判别两部分。对任意一个候选(锚框或无锚点位置)而言,可将模型输出抽象为 b ^ = ( x ^ , y ^ , w ^ , h ^ ) \hat{\mathbf{b}}=(\hat{x},\hat{y},\hat{w},\hat{h}) b^=(x^,y^,w^,h^)、目标存在概率 o ^ \hat{o} o^ 与类别概率向量 p ^ \hat{\mathbf{p}} p^。训练目标一般采用加权多任务损失:
L = λ box L ∗ box + λ ∗ obj L ∗ obj + λ ∗ cls L ∗ cls , \mathcal{L}=\lambda_{\text{box}}\mathcal{L}*{\text{box}}+\lambda*{\text{obj}}\mathcal{L}*{\text{obj}}+\lambda*{\text{cls}}\mathcal{L}*{\text{cls}}, L=λboxL∗box+λ∗objL∗obj+λ∗clsL∗cls,
其中 L ∗ obj \mathcal{L}*{\text{obj}} L∗obj 与 L ∗ cls \mathcal{L}*{\text{cls}} L∗cls 多以二元交叉熵(BCE)或其变体实现; L ∗ box \mathcal{L}*{\text{box}} L∗box 常用 IoU 系列损失以强调定位质量,例如 CIoU 形式可写为
L CIoU = 1 − IoU + ρ 2 ( b , b g t ) c 2 + α v , \mathcal{L}_{\text{CIoU}}=1-\text{IoU}+\frac{\rho^2(\mathbf{b},\mathbf{b}^{gt})}{c^2}+\alpha v, LCIoU=1−IoU+c2ρ2(b,bgt)+αv,
其中 ρ ( ⋅ ) \rho(\cdot) ρ(⋅) 表示预测框与真值框中心点距离, c c c 为最小外接框对角线长度, v v v 约束宽高比一致性, α \alpha α 为相应权重系数。对于 YOLO 系列不同版本在"锚框/无锚框""耦合头/解耦头"等细节上的差异,本文在工程实现中不做硬编码分支,而是通过 Ultralytics 统一接口加载不同权重与配置文件,让框架自动完成标签分配、损失计算与后处理,从而把研究重点放在钢材缺陷数据分布与模型结构差异对性能的影响上。 (Ultralytics Docs)
实现层面,系统将训练与推理封装为独立的 Detector 模块:初始化阶段加载指定版本权重(如 yolo12n.pt 或 yolov5nu.pt),推理阶段对输入源(摄像头/视频/图片/文件夹)逐帧或逐图执行前处理、模型推理与后处理,并将结构化结果(类别、置信度、边界框、统计信息)通过 Qt 信号槽回传界面层。其核心代码逻辑可简化为如下形式(实际工程中会补齐线程、GPU/CPU 切换与异常处理):
python
from ultralytics import YOLO
class Detector:
def __init__(self, weight_path: str, device: str = "0"):
self.model = YOLO(weight_path)
self.device = device
def infer(self, img_bgr, conf=0.25, iou=0.7):
# Ultralytics 内部会完成 resize/letterbox、归一化与后处理
results = self.model.predict(
source=img_bgr,
conf=conf,
iou=iou,
device=self.device,
verbose=False
)
return results[0]
通过上述解耦设计,博客后续在"训练策略与模型优化""实验与结果分析"中对 YOLOv5--YOLOv12 的对比,不会被界面逻辑与数据管理逻辑干扰;而界面层的模型切换、阈值调参、结果统计与导出,则可以在不改动算法代码的前提下完成迭代。 (Ultralytics Docs)
4. 训练策略与模型优化
为了让 YOLOv5 至 YOLOv12 的横向对比具备可复现性,老思在训练阶段尽量采用"统一协议"的思路:同一数据划分(Train/Val/Test)、同一输入分辨率( 640 × 640 640\times 640 640×640)、同一评价指标(以 m A P 50 : 95 mAP_{50:95} mAP50:95 与 F1 为核心),并将差异控制在模型结构本身而非训练技巧上。训练硬件默认使用 RTX 4090,框架采用 Ultralytics YOLO 统一接口,以便不同版本在数据加载、标签分配与损失计算上遵循各自官方实现,避免因手写复刻导致的偏差。考虑到钢材表面缺陷常呈现弱对比、小目标与纹理干扰并存的特点,训练目标被明确为"优先保证召回,再在误检可控范围内压低漏检",因此在阈值选择、增强策略与收敛判据上都更偏向稳定性而非极端追求某一单点指标。
在迁移学习上,所有模型均从公开预训练权重初始化(通常为 COCO),这在工业缺陷数据量有限、类别间共享底层纹理与边缘信息的场景下更容易获得稳定收敛。训练初期可选用"浅层冻结---逐步解冻"的方式抑制过快过拟合:例如先冻结 Backbone 若干轮,仅让 Neck/Head 适配缺陷类别与尺度分布,随后解冻全网进行端到端微调;若发现验证集波动较大,则更建议直接全量微调但降低初始学习率并延长 warmup,以减少参数突变带来的震荡。学习率调度采用余弦退火更符合"先快后稳"的收敛需求,其形式可写为
η ( t ) = η min + 1 2 ( η 0 − η min ) ( 1 + cos π t T ) , \eta(t)=\eta_{\min}+\frac{1}{2}\left(\eta_{0}-\eta_{\min}\right)\left(1+\cos\frac{\pi t}{T}\right), η(t)=ηmin+21(η0−ηmin)(1+cosTπt),
其中 η 0 \eta_0 η0 为初始学习率, η min \eta_{\min} ηmin 为最终学习率下界, T T T 为总训练轮数。对缺陷检测而言,这种策略通常能在前期快速建立可用的定位能力,并在后期以更小步长细化分类边界与框回归精度,降低"训练集拟合提高但验证集不升反降"的风险。
数据增强方面,钢材表面纹理具有强方向性与高频噪声的特点,增强策略需要兼顾"扩充分布"与"不破坏物理一致性"。本文默认启用 Mosaic,并在训练后期关闭(close_mosaic)以减小拼接边界带来的伪纹理,从而让模型在接近真实图像分布的条件下完成最终收敛;对小缺陷尤其明显,后期关闭 Mosaic 往往能改善框回归的稳定性与置信度校准。几何增强以轻量的随机缩放、平移为主,翻转策略需结合产线成像方式谨慎选择(例如部分产线只存在单方向运动纹理,强行随机翻转可能引入不符合真实工况的模式);颜色增强更多用于缓解曝光差异与反光波动,但幅度不宜过大,以免把弱对比缺陷"洗掉"。类别不均衡问题不强行引入复杂的重采样干预,而是优先通过增强与阈值策略提升少样本类别的有效曝光,同时在评估时分别观察每类的 PR/F1 变化,避免总体 mAP 掩盖长尾类别的漏检。
下表给出本文在 4090 上的默认训练超参数(各版本对比时保持一致,除非显存或框架限制需要微调 batch),其核心取舍是:在保证显存可用的前提下用中等 batch 获得更平滑的梯度估计,配合 warmup 与早停(patience)控制训练震荡;同时开启 AMP 混合精度以提升吞吐并降低显存占用,便于在同一硬件条件下比较不同模型的训练效率与最终性能。
| 名称 | 作用(简述) | 默认数值(本文) |
|---|---|---|
| epochs | 最大训练轮数 | 120 |
| patience | 早停耐心(Val 无提升则停止) | 50 |
| batch | 批大小 | 16 |
| imgsz | 输入分辨率 | 640 |
| pretrained | 是否加载预训练权重 | true |
| optimizer | 优化器类型 | auto |
| lr0 | 初始学习率 | 0.01 |
| lrf | 最终学习率占比 | 0.01 |
| momentum | 动量系数 | 0.937 |
| weight_decay | 权重衰减 | 0.0005 |
| warmup_epochs | 预热轮数 | 3.0 |
| mosaic | Mosaic 强度/概率 | 1.0 |
| close_mosaic | 后期关闭 Mosaic 的轮数 | 10 |
最后的模型优化更偏工程侧:训练阶段保留最佳权重(best.pt),推理阶段在系统中暴露 Conf/IoU 作为交互式参数,使得同一模型可在"高召回巡检"和"低误检复核"两种工作模式间切换;部署时优先导出 ONNX 并进一步转换到 TensorRT,以减少 Python 推理开销并提升稳定帧率。对于钢材缺陷这种"漏检代价通常更高"的任务,老思建议在上线前用验证集与现场样本联合做置信度校准与阈值扫描,确保最终选择的工作点能够在真实反光与纹理波动下保持可控的误检率,同时把关键缺陷的漏检压到工程允许范围内。
5. 实验与结果分析
5.1 实验设置与对比基线
本节面向"钢材表面四类缺陷检测"构建统一的对比实验协议,核心目标是让 YOLOv5 至 YOLOv12 的性能差异尽可能来自模型结构本身,而非数据划分或训练细节的偶然性。数据集采用你前文给定的固定划分(Train 1862 / Val 583 / Test 592),输入分辨率统一为 640 × 640 640\times 640 640×640,训练轮数上限为 120,并遵循 Ultralytics 训练流程输出 best.pt 作为最终评估权重。对比基线覆盖两条容量线:其一是 n-type(nano 量级) :YOLOv5nu、YOLOv6n、YOLOv7-tiny、YOLOv8n、YOLOv9t、YOLOv10n、YOLOv11n、YOLOv12n;其二是 s-type(small 量级) :YOLOv5su、YOLOv6s、YOLOv7、YOLOv8s、YOLOv9s、YOLOv10s、YOLOv11s、YOLOv12s。需要特别说明的是:你提供的推理耗时统计来自同一评测设备 NVIDIA GeForce RTX 3070 Laptop GPU(8GB),因此速度结论应理解为"同硬件、同输入尺寸下的相对比较",其绝对值在换到 RTX 4090 后会整体下移,但模型间的排序通常保持一致。
5.2 度量指标与评估协议
检测性能从精度、召回与综合折中三个角度刻画。对任一类别,精确率(Precision)与召回率(Recall)定义为
P = T P T P + F P , R = T P T P + F N , P=\frac{TP}{TP+FP},\qquad R=\frac{TP}{TP+FN}, P=TP+FPTP,R=TP+FNTP,
其中 T P , F P , F N TP,FP,FN TP,FP,FN 分别表示真阳性、假阳性与假阴性计数。为避免单一指标偏置,进一步引入
F 1 = 2 P R P + R , F1=\frac{2PR}{P+R}, F1=P+R2PR,
用于衡量"误检"和"漏检"的平衡。检测任务的阈值敏感性通过 F1--Confidence 曲线 与 PR 曲线 呈现:前者反映置信度阈值变化下的最佳工作点,后者用于计算 AP 与 mAP。本文同时报告 m A P @ 0.5 mAP@0.5 mAP@0.5 与 m A P @ 0.5 : 0.95 mAP@0.5:0.95 mAP@0.5:0.95(即 COCO 风格平均),前者更强调"能否检出",后者更强调"框是否贴合",更适合反映裂纹、孔洞等边界不规则缺陷的定位难度。
图 5-1 F1--Confidence 曲线(验证集示例)

图 5-2 Precision--Recall 曲线与各类 AP(验证集示例)

从图 5-1 可读出全类最佳 F1 出现在置信度约 0.51 附近,这一现象在钢材缺陷上并不罕见:当阈值过低时,纹理与反光伪边缘会推高 FP;阈值过高又会放大细小缺陷的 FN。图 5-2 给出了类别层面的可分性差异,其中腐蚀缺陷 与焊接缺陷 的 AP 明显更高,而孔洞缺陷AP 最低,说明其在现有数据分布下更易受尺度、对比度与背景纹理干扰;这类结论在后续"类别不均衡、难例挖掘与采样策略"优化中具有直接指导意义。
5.3 结果对比与讨论
图 5-3 训练/验证损失与指标随 epoch 变化(单次训练示例)

从图 5-3 可以看到,box/cls/dfl 等训练损失整体单调下降,验证侧在前若干 epoch 快速回落后进入平台期,同时 precision、recall 与 mAP 呈现"前期快速增长、后期缓慢爬升"的典型收敛形态。曲线中存在一定波动,通常与 Mosaic 等增强带来的分布扰动、以及缺陷目标小而稀疏导致的统计不稳定有关,但整体趋势表明训练过程并未出现明显的发散或过早崩溃,这为跨版本对比提供了可靠前提。
接下来分别给出 n-type 与 s-type 的汇总结果。为便于阅读,表格中同时列出模型规模(Params/FLOPs)、推理耗时(InfTime)与核心精度指标(Precision/Recall/F1/mAP)。
表 5-1 n-type(nano 量级)模型在 SteelDefect 数据集上的对比结果(Test 集,640,RTX 3070 Laptop GPU)
| Model | Params(M) | FLOPs(G) | InfTime(ms) | Precision | Recall | F1 Score | mAP50 | mAP50-95 |
|---|---|---|---|---|---|---|---|---|
| YOLOv5nu | 2.6 | 7.7 | 7.73 | 0.351 | 0.409 | 0.378 | 0.337 | 0.206 |
| YOLOv6n | 4.3 | 11.1 | 6.78 | 0.469 | 0.261 | 0.335 | 0.314 | 0.179 |
| YOLOv7-tiny | 6.2 | 13.8 | 14.74 | 0.267 | 0.303 | 0.284 | 0.207 | 0.094 |
| YOLOv8n | 3.2 | 8.7 | 6.83 | 0.433 | 0.356 | 0.390 | 0.327 | 0.203 |
| YOLOv9t | 2.0 | 7.7 | 16.51 | 0.454 | 0.399 | 0.424 | 0.362 | 0.231 |
| YOLOv10n | 2.3 | 6.7 | 11.24 | 0.392 | 0.384 | 0.388 | 0.355 | 0.204 |
| YOLOv11n | 2.6 | 6.5 | 9.44 | 0.500 | 0.347 | 0.410 | 0.365 | 0.233 |
| YOLOv12n | 2.6 | 6.5 | 12.47 | 0.457 | 0.344 | 0.392 | 0.343 | 0.213 |
图 5-4 n-type:F1 与 mAP50 汇总对比

n-type 的结果呈现出较清晰的"精度---速度"分层结构。就精度上限而言,YOLOv11n 的 m A P @ 0.5 = 0.365 mAP@0.5=0.365 mAP@0.5=0.365 与 m A P @ 0.5 : 0.95 = 0.233 mAP@0.5:0.95=0.233 mAP@0.5:0.95=0.233 均为最高 (表 5-1、图 5-4、图 5-6),说明其在不同阈值区间内的整体排序更稳定,尤其对定位质量更敏感的 m A P @ 0.5 : 0.95 mAP@0.5:0.95 mAP@0.5:0.95 也能维持领先;与此同时,它的 Precision 达到 0.500,体现出对纹理伪缺陷的抑制更强,但 Recall 相对偏低,意味着在默认阈值策略下更容易漏掉"弱对比、小面积"的缺陷。
图 5-5 n-type:mAP50 随 epoch 变化

图 5-6 n-type:平均 PR 曲线对比

与之对照,YOLOv9t 的 F1 最高(0.424),其 Recall 更高,体现出"少漏检"的倾向,但推理耗时明显增加(16.51ms),更适合作为"高召回巡检模式"的候选而非极致实时的主力模型。YOLOv6n 与 YOLOv8n 在该硬件上的推理最短(约 6.8ms),但 mAP 与 F1 均低于 v9/v11,这类模型更适合对帧率要求极高、且可接受一定漏检的场景。图 5-5 给出了收敛过程的直观对照:多模型在前 20--30 个 epoch 快速建立可用检测能力,随后进入缓慢爬升阶段,而 v11/v12 在中后期更易维持较高的 mAP 平台,说明其表征能力对钢材缺陷的复杂纹理背景更"吃得住"。
表 5-2 s-type(small 量级)模型在 SteelDefect 数据集上的对比结果(Test 集,640,RTX 3070 Laptop GPU)
| Model | Params(M) | FLOPs(G) | InfTime(ms) | Precision | Recall | F1 Score | mAP50 | mAP50-95 |
|---|---|---|---|---|---|---|---|---|
| YOLOv5su | 9.1 | 24.0 | 8.45 | 0.376 | 0.387 | 0.381 | 0.350 | 0.193 |
| YOLOv6s | 17.2 | 44.2 | 8.59 | 0.392 | 0.304 | 0.342 | 0.319 | 0.189 |
| YOLOv7 | 36.9 | 104.7 | 23.62 | 0.479 | 0.387 | 0.428 | 0.332 | 0.190 |
| YOLOv8s | 11.2 | 28.6 | 7.66 | 0.467 | 0.373 | 0.415 | 0.370 | 0.222 |
| YOLOv9s | 7.2 | 26.7 | 18.66 | 0.434 | 0.384 | 0.407 | 0.344 | 0.222 |
| YOLOv10s | 7.2 | 21.6 | 11.38 | 0.486 | 0.343 | 0.402 | 0.354 | 0.216 |
| YOLOv11s | 9.4 | 21.5 | 9.74 | 0.466 | 0.387 | 0.422 | 0.376 | 0.237 |
| YOLOv12s | 9.3 | 21.4 | 13.23 | 0.492 | 0.354 | 0.412 | 0.361 | 0.220 |
图 5-7 s-type:F1 与 mAP50 汇总对比

在 s-type 上,模型容量上升并未带来线性收益,而是更依赖结构是否能有效处理"弱对比、小目标与纹理干扰"的组合难点。表 5-2 与图 5-7显示,YOLOv11s 在 mAP 上最优( m A P @ 0.5 = 0.376 mAP@0.5=0.376 mAP@0.5=0.376, m A P @ 0.5 : 0.95 = 0.237 mAP@0.5:0.95=0.237 mAP@0.5:0.95=0.237) ,同时推理耗时维持在 9.74ms,体现出较好的工程折中;YOLOv8s 的推理最快(7.66ms)且 mAP50 也较高(0.370),若系统更强调实时性,v8s 是较稳妥的部署起点。一个值得注意的现象是 YOLOv7 的 F1 最高(0.428)但 mAP50 并不突出(0.332) :这通常意味着它在某一阈值附近能形成较好的 P/R 折中(因此 F1 高),但在阈值全区间的 PR 面积上并不占优,同时其推理开销显著更大(23.62ms),对实时产线并不友好。图 5-8 的收敛曲线进一步说明:多模型在中后期的 mAP 平台差距并不大,工程上更应结合图 5-1 的最佳阈值位置进行"可用工作点"选择,而不只盯着单一 epoch 的峰值。
图 5-8 s-type:平均 PR 曲线对比

综合两条容量线的结论,老思更建议在系统默认模型上优先选择 YOLOv11n(轻量、高 mAP、速度可控) 或 YOLOv11s(更高上限、仍具实时性),并在界面侧通过 Conf/IoU 的交互式调参实现"巡检高召回"和"复核低误检"的模式切换;对于类别层面表现最弱的孔洞缺陷,则更应把优化重点放在数据侧(补齐小目标样本与难例、改善标注一致性)与阈值校准侧,而不是盲目增大模型规模。
6. 系统设计与实现
6.1 系统设计思路
钢材表面缺陷检测的工程落地并不只是把权重"跑起来",更关键的是在多输入源、高帧率与强交互的约束下,保证推理链路稳定、界面响应及时、结果可追溯。老思在系统层面采用"界面层---控制层---处理层---数据层"的分层结构,将耗时推理与界面渲染解耦:界面只负责呈现与触发交互,控制层负责状态机与任务调度,处理层聚焦模型加载、推理与后处理,数据层统一管理用户、配置与结果,从而避免功能堆叠导致的耦合失控。

在实现上,Ui_MainWindow 负责控件布局与主题渲染,MainWindow 作为中枢调度器维护输入源状态(摄像头/视频/图片/文件夹)、播放控制、阈值(Conf/IoU)与当前模型等关键变量,并通过 Qt 信号槽驱动跨层通信;Detector 则封装 Ultralytics 推理接口,完成预处理、YOLO 推理与 NMS/阈值过滤等后处理,并将结构化检测结果(框坐标、类别、置信度、统计信息)回传给 MainWindow。为了保证界面不卡顿,推理通常放入独立线程(如 QThread/QRunnable)执行,主线程只做轻量绘制与状态更新,这一组织方式对"摄像头实时检测+随时切换模型/阈值"的交互尤为必要。
数据与体验侧的核心是"可追溯与可个性化":SQLite 用于管理账户体系(注册/登录/修改资料/注销)以及每个用户独立的配置与结果空间,检测结果可按时间、类别、输入源等维度查询与导出;主题修改功能则将颜色、背景与图标等外观参数作为用户配置持久化保存,使系统能在不同工位、不同光照环境下保持一致的可用性与舒适度,同时不干扰检测链路的数值一致性。
图 系统流程图

图注:系统从初始化到多源输入,完成预处理、推理与界面联动,并通过交互形成闭环。
6.2 登录与账户管理

登录与账户管理的设计目标并非"多一步验证",而是为检测业务提供稳定的个性化入口与结果闭环:用户在登录成功后,系统会从 SQLite 自动恢复其主题外观、默认模型版本与 Conf/IoU 等关键偏好,并加载历史检测记录,使同一工位的日常巡检具备连续性与可追溯性;注册流程将新用户信息落库并形成独立空间,避免多工位共享配置造成的误操作;进入主界面后,资料修改(头像、密码、偏好)会即时写回数据库并在 UI 上生效,保证"界面体验---检测参数---结果归档"三者一致;当用户注销或切换账号时,主流程会同步释放推理资源与状态缓存,再回到登录页重新加载新用户配置,从而把账户体系自然地嵌入"多源输入---推理---持久化"的主检测链路中。

7. 下载链接
若您想获得博文中涉及的实现完整全部资源文件 (包括测试图片、视频,py, UI文件,训练数据集、训练代码、界面代码等),这里见可参考博客与视频,已将所有涉及的文件同时打包到里面,点击即可运行,完整文件截图如下:

完整资源中包含数据集及训练代码,环境配置与界面中文字、图片、logo等的修改方法请见视频:➷➷➷
详细介绍文档博客: YOLOv5至YOLOv12升级:钢材表面缺陷检测系统的设计与实现(完整代码+界面+数据集项目)
环境配置博客教程:(1)Pycharm软件安装教程;(2)Anaconda软件安装教程;(3)Python环境配置教程;
或者环境配置视频教程:(1)Pycharm软件安装教程;(2)Anaconda软件安装教程;(3)Python环境依赖配置教程
数据集标注教程(如需自行标注数据):数据标注合集
8. 参考文献(GB/T 7714)
1 SONG K, YAN Y. A noise robust method based on completed local binary patterns for hot-rolled steel strip surface defects[J]. Applied Surface Science, 2013, 285: 858-864.
2 HE Y, SONG K, MENG Q, YAN Y. An End-to-end Steel Surface Defect Detection Approach via Fusing Multiple Hierarchical Features[J]. IEEE Transactions on Instrumentation and Measurement, 2020, 69(4): 1493-1504.
3\] AMERI R, HSU C-C, BAND S S. A systematic review of deep learning approaches for surface defect detection in industrial applications\[J\]. Engineering Applications of Artificial Intelligence, 2024, 130: 107717. DOI:10.1016/j.engappai.2023.107717. \[4\] 李宗祐, 高春艳, 吕晓玲, 张明路. 基于深度学习的金属材料表面缺陷检测综述\[J\]. 制造技术与机床, 2023(6): 61-67. \[5\] 徐镪, 朱洪锦, 樊红辉, 等. 改进的YOLOv3网络在钢板表面缺陷检测研究\[J\]. 计算机工程与应用, 2020, 56(16): 265-272. DOI:10.3778/j.issn.1002-8331.2003-0232. \[6\] 宁安安, 胡安明. 基于改进的Yolov5s钢板表面缺陷检测模型研究\[J\]. 软件导刊, 2025, 24(8): 65-71. DOI:10.11907/rjdk.241216. \[7\] JIANG F, LU K, WANG W, et al. FPDNet: A fast and high-precision detection network for hot-rolled strip surface defects\[J\]. Measurement, 2025, 253: 117309. DOI:10.1016/j.measurement.2025.117309. \[8\] ULTRALYTICS. Ultralytics YOLOv5\[EB/OL\]. (2020-05-??)\[2026-02-18\]. https://github.com/ultralytics/yolov5. \[9\] LI C, LI L, JIANG H, et al. YOLOv6: A Single-Stage Object Detection Framework for Industrial Applications\[EB/OL\]. arXiv:2209.02976, 2022\[2026-02-18\]. https://arxiv.org/abs/2209.02976. \[10\] WANG C-Y, BOCHKOVSKIY A, LIAO H-Y M. YOLOv7: Trainable bag-of-freebies sets new state-of-the-art for real-time object detectors\[C\]//Proceedings of CVPR 2023. (Preprint: arXiv:2207.02696)\[2026-02-18\]. https://openaccess.thecvf.com/content/CVPR2023/papers/Wang_YOLOv7_Trainable_Bag-of-Freebies_Sets_New_State-of-the-Art_for_Real-Time_Object_Detectors_CVPR_2023_paper.pdf. \[11\] ULTRALYTICS. Ultralytics YOLOv8\[EB/OL\]. (2023-01-10)\[2026-02-18\]. https://docs.ultralytics.com/models/yolov8/. \[12\] WANG C-Y, YEH I-H, LIAO H-Y M. YOLOv9: Learning What You Want to Learn Using Programmable Gradient Information\[EB/OL\]. arXiv:2402.13616, 2024\[2026-02-18\]. https://arxiv.org/abs/2402.13616. \[13\] WANG A, CHEN H, LIU L, et al. YOLOv10: Real-Time End-to-End Object Detection\[EB/OL\]. arXiv:2405.14458, 2024\[2026-02-18\]. https://arxiv.org/abs/2405.14458. \[14\] ULTRALYTICS. Ultralytics YOLO11\[EB/OL\]. (2024-09-10)\[2026-02-18\]. https://docs.ultralytics.com/models/yolo11/. \[15\] TIAN Y, YE Q, DOERMANN D. YOLOv12: Attention-Centric Real-Time Object Detectors\[EB/OL\]. arXiv:2502.12524, 2025\[2026-02-18\]. https://arxiv.org/abs/2502.12524.