
项目简介本项目是一个面向钢材表面缺陷检测场景的深度学习应用系统围绕YOLOv8完成了从数据集组织、模型训练、结果评估到桌面端检测系统开发与功能集成的完整流程。项目以NEU-DET钢材表面缺陷数据集为基础训练得到钢材缺陷检测模型并基于PyQt6开发了可视化检测系统支持图片识别、视频识别、摄像头实时识别、检测历史管理、模型参数管理和训练指标展示等功能。该项目不仅体现了目标检测模型开发的基本过程也体现了深度学习模型向工程化系统落地的完整思路。项目目标面向钢材表面质量检测任务构建可用的缺陷检测模型基于标准数据集完成目标检测任务的数据组织与训练验证通过训练损失、精确率、召回率、mAP 等指标评估模型性能将训练后的模型封装为可交互的桌面应用实现实际检测功能形成“数据处理 - 模型训练 - 结果分析 - 系统集成”的完整项目闭环项目技术栈类别技术/工具说明深度学习框架YOLOv8 / Ultralytics用于目标检测模型训练、验证与推理模型基础yolov8n.pt采用预训练 nano 级模型作为训练起点编程语言Python项目核心开发语言图像/视频处理OpenCV用于视频读取、摄像头采集、结果保存数值计算NumPy用于图像与推理数据处理数据分析Pandas用于读取训练日志results.csv可视化Matplotlib用于训练曲线和指标图绘制桌面界面PyQt6用于构建检测系统 UI数据存储SQLite用于保存检测历史记录数据集介绍1. 数据集来源项目使用NEU-DETNortheastern University Surface Defect Detection Dataset钢材表面缺陷数据集。该数据集是钢材表面缺陷检测领域常用的公开数据集之一适用于工业视觉检测和目标检测算法研究。2. 数据集基本信息项目内容数据集名称NEU-DET应用场景钢材表面缺陷检测图像类型灰度图像图像格式JPG图像分辨率200 x 200标注格式YOLO 目标检测格式缺陷类别数6总图像数量1800标注文件数量18003. 缺陷类别类别ID英文名称中文名称每类总数0crazing龟裂3001inclusion夹杂3002patches斑块3003pitted_surface点蚀表面3004rolled-in_scale压入氧化皮3005scratches划痕3004. 数据划分项目中的数据划分如下数据集划分图像数量标注数量说明训练集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_x、center_y表示目标框中心点坐标已归一化到0~1width、height表示目标框宽高已归一化到0~17. 数据集构建与处理过程本项目在数据处理阶段主要完成了以下工作将NEU-DET数据集整理为YOLO标准目录格式区分训练集和验证集。保持图像文件与标注文件一一对应便于训练阶段自动索引。在core/data_config.py中自动生成neu_det_data.yaml统一描述数据集路径、类别数量和类别名称。采用相对路径组织数据集配置方便项目迁移与复现。基于统一类别映射将后续训练、推理、统计分析和 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. 训练流程说明本项目的训练流程可以概括为读取项目配置和数据集路径自动生成neu_det_data.yaml加载预训练模型yolov8n.pt基于 NEU-DET 数据集进行迁移学习训练在训练过程中同步进行验证并保存训练曲线输出权重文件、训练日志、可视化结果图该流程体现了深度学习目标检测项目中的典型训练范式即以公开预训练权重为起点通过任务数据集进行微调并结合验证集进行持续评估。3. 训练参数代码默认训练参数以下参数定义在core/config.py中参数值说明模型yolov8n.pt轻量级预训练检测模型epochs100训练轮数batch16批大小imgsz640输入图像尺寸seed42随机种子workers0Windows 环境下避免页面文件不足问题projecttrain_result训练结果输出目录nameexp当前实验名称saveTrue保存训练结果plotsTrue保存训练曲线图valTrue每轮执行验证当前训练记录中的主要参数根据train_result/exp/args.yaml本项目现有训练记录包含以下超参数信息参数值optimizerautopretrainedtruepatience100iou0.7lr00.01lrf0.01momentum0.937weight_decay0.0005warmup_epochs3.0mosaic1.0fliplr0.5translate0.1scale0.5这些参数体现了模型训练中的基础调优手段包括使用预训练权重提升收敛速度通过学习率、动量、权重衰减控制优化过程通过数据增强提升模型泛化能力通过验证指标持续监控训练效果4. 模型训练与调优思路本项目在模型训练与调优方面体现了以下几个基本过程选择轻量化模型YOLOv8n作为初始方案兼顾训练速度和部署效率。使用预训练权重开展迁移学习减少从零训练的成本。设定100轮训练观察损失曲线和评估指标变化趋势。结合Precision、Recall、mAP50、mAP50-95综合评估模型检测效果。在系统部署阶段开放conf、iou、max_det等推理参数实现训练后应用层调优。训练结果与指标分析1. 当前训练记录结果根据train_result/exp/results.csv最终轮结果当前模型在第100轮训练结束时的关键指标如下指标数值Precision0.74897Recall0.88631mAP0.50.84935mAP0.5:0.950.47914Train Box Loss1.04576Train Cls Loss1.00979Train DFL Loss1.24859Val Box Loss1.40737Val Cls Loss1.10456Val DFL Loss1.443372. 指标含义说明指标含义Precision预测为缺陷的目标中有多少是真正正确的反映误检控制能力Recall实际存在的缺陷中有多少被模型检测出来反映漏检控制能力mAP0.5在 IoU0.5 条件下的平均精度常用于衡量整体检测效果mAP0.5:0.95在多个 IoU 阈值下综合计算的平均精度对定位质量要求更高Box Loss边界框回归损失反映定位学习效果Cls Loss分类损失反映类别判别能力DFL LossDistribution Focal Loss反映边界框细粒度回归质量3. 结果分析Recall高于Precision说明模型对缺陷目标的召回能力较强漏检相对较少。mAP0.5达到较高水平说明模型在基础检测任务上具备较好的识别能力。mAP0.5:0.95明显低于mAP0.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_loss、cls_loss、dfl_loss变化曲线val_loss.png验证阶段box_loss、cls_loss、dfl_loss变化曲线metrics.pngPrecision、Recall、mAP50、mAP50-95曲线learning_rate.png学习率随 Epoch 变化的曲线loss_summary.png训练损失与验证损失的汇总对比图overview.png总体训练效果总览图包括总损失、mAP、Precision/Recall 等results.csv每轮训练与验证的原始数值日志args.yaml当前训练实验使用的完整参数快照自定义可视化脚本项目额外实现了plot_train_results.py与core/plot_results.py可基于results.csv自定义生成以下训练结果图train_loss.pngval_loss.pngmetrics.pnglearning_rate.pngloss_summary.pngoverview.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置信度阈值iouNMS 的 IoU 阈值max_det单图最大检测目标数展示模型基本信息和类别说明7. 指标展示自动扫描train_result/下的训练记录可切换不同训练实验查看指标展示训练损失曲线、mAP 曲线、Precision/Recall 曲线汇总显示最终轮关键指标系统集成与工程实现本项目并不是单纯的训练脚本而是将模型能力封装成了完整应用系统主要体现在将目标检测模型封装为统一的SteelDefectDetector检测器类。将训练结果与推理参数打通在桌面端可以直接加载模型并调整阈值。将推理输出解析为结构化检测结果进一步用于表格统计、分布分析和历史记录保存。将图片、视频、摄像头三种输入统一集成到一个系统中。将训练阶段的指标分析功能直接集成到 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.txt2. 模型训练python train.py训练完成后结果默认保存在train_result/exp/。3. 训练结果可视化python plot_train_results.py4. 启动检测系统python run_ui.py