基于 YOLOv8 的轴承缺陷检测(Web 版)

一、项目简介

本项目是轴承表面缺陷检测模型的 Web 端实现。围绕 YOLOv8 在轴承表面缺陷数据集上完成四类缺陷的检测模型训练后,使用 FastAPI 把模型能力封装为可直接登录使用的 Web 检测平台。

平台覆盖从数据准备、模型训练、指标评估,到推理服务、历史沉淀、统计分析的完整链路。除了常规的图片、批量、视频、摄像头检测,还把模型训练搬到了网页上:可以在浏览器里配置超参数发起真实训练,训练中在线调整学习率、查看实时曲线与日志,训练完成后把权重一键应用到检测服务,形成「训练 → 评估 → 检测」的闭环。

图片识别页载入数据集样本后由模型真实推理,输出标注框、类别、置信度、坐标与处置建议。

二、数据说明

1. 数据集来源

数据集为轴承表面缺陷图像,采用 YOLO 检测格式标注,图像为 2000 × 2000 的灰度图,记录轴承套圈表面的凹槽、凹线、擦伤、划痕四类典型缺陷。项目在 datasets/data.yaml 中统一描述数据路径与类别,训练、推理、统计与界面展示共用同一套类别映射。

2. 四类缺陷样本

下图为数据集中四类缺陷的真实样本,直接取自训练集原图:

类别编号 英文名称 中文名称 典型成因
0 aocao 凹槽 装配压伤、异物压入或搬运磕碰
1 aoxian 凹线 磨削工序磨粒划入或砂轮修整不良
2 cashang 擦伤 工序间摩擦、包装硬点或运输振动
3 huahen 划痕 硬质异物划擦或工装、量具接触

3. 数据规模与标注分布

训练集共 1085 张图像、1085 份标注文件,标注框合计 7818 个:其中凹槽 2760 个、凹线 1294 个、擦伤 2327 个、划痕 1437 个。单张图像的目标数量从 1 个到 21 个不等,类别分布并不均衡,凹槽与擦伤数量明显多于凹线。

训练产物 labels.jpg:类别数量、标注框尺寸、中心点位置与宽高分布。

4. 标注格式与数据划分

标注文件与图像同名,每行描述一个目标:

bash 复制代码
class_id center_x center_y width height

中心点坐标与宽高均为相对图像尺寸的归一化值(0 ~ 1)。当前数据集只包含训练划分,valid 与 test 目录为空,因此 Web 端在训练页会明确提示「验证集为空」;发起训练时程序按实际存在的目录生成任务级 data.yaml,并在日志中记录该限制,不伪造验证指标。

5. 训练时的数据增强

训练阶段启用 mosaic 等增强策略。下图为训练批次的实际输入,多个样本被拼接为一张图参与训练,并保留数据集自带的真实标注框:

训练产物 train_batch0.jpg:训练批次输入与真实标注,可见 mosaic 拼接与多尺度缩放。

6. 验证集标注与预测对照

训练过程同一批次同时输出标注图与预测图,可直接对照模型在验证集上的定位与分类表现:

训练产物 val_batch0_labels.jpg:验证批次的数据集原始标注。

训练产物 val_batch0_pred.jpg:同一批次模型的预测结果与置信度。

平台内的数据集浏览页按原图比例绘制数据集自带标注框,并给出各类别标注框数量分布。

三、数据处理与分析

1. 数据处理流程

原始标注以归一化坐标保存,训练前由 YOLO 框架统一完成图像缩放、标注转换与批次组装。平台侧则在读取标注时按图像实际宽高还原像素坐标,用于数据集浏览页的可视化,两边共用同一份 data.yaml 类别映射,避免类别错位。

2. 标注质量核验

统计时逐份读取 labels/*.txt,核对图像与标注文件一一对应(1085 张图像对 1085 份标注,无缺失),并统计每个类别的标注框数量与实际图像中的目标分布。类别不均衡是这份数据的客观情况,凹槽与擦伤合计占总标注框的 65%,因此评估时同时关注精确率与召回率,而不只看总体 mAP。

3. 训练与评估

以预训练权重为起点,采用迁移学习减少训练成本;训练过程中逐轮执行验证,记录损失、精确率、召回率、mAP 与学习率,并保存逐轮日志 results.csv、参数快照 args.yaml 与权重文件。

第 50 轮的最终指标:

指标 数值 含义
mAP@0.5 0.9926 IoU = 0.5 时的平均精度,衡量整体检测效果
mAP@0.5:0.95 0.7274 多 IoU 阈值下综合平均精度,对定位质量要求更高
Precision 0.9915 判为缺陷的目标中真实缺陷的占比,反映误检控制
Recall 0.9864 真实缺陷被检出的比例,反映漏检控制

峰值为 mAP50 0.9927(第 44 轮)、mAP50-95 0.7274(第 50 轮),末轮与峰值基本重合,说明训练后期已稳定收敛。mAP50-95 与 mAP50 的差距主要来自严格定位标准下的边界框质量,凹槽与擦伤这类面积小、边界模糊的缺陷在更高 IoU 阈值下更容易掉点。

训练产物 results.png:各类损失与评估指标随轮次的变化。

训练产物 PR_curve.png:四类缺陷的精确率--召回率曲线。

训练产物 F1_curve.png:不同置信度阈值下的 F1 值。

训练产物 confusion_matrix.png:类别间的混淆情况。

四、系统功能设计

平台把检测、数据、模型三块能力组织成十个页面,功能入口统一放在左侧分组导航,窄屏折叠为左侧抽屉。

1. 登录与注册

页面中心单栏卡片,登录与注册共用同一张 3 : 4 比例的卡片,标题使用楷体。密码以 PBKDF2 哈希保存,会话通过 Cookie 维持,不同账号分别保存自己的检测记录与模型参数。

2. 图片识别

上传单张轴承表面图片进行检测,输出标注结果图、目标总数、类别数、平均置信度与推理耗时。右侧给出类别分布与目标明细表(类别、置信度、坐标),并按检出缺陷类型给出面向产线的排查建议,支持导出明细 CSV。

3. 批量检测

一次上传多张图片批量推理,逐张汇总目标数与类别分布,并提供整批的类别统计,结果图可单独查看。

4. 视频识别

上传视频后由后台任务逐帧处理,页面实时回显处理进度、帧数与累计统计,完成后可直接播放或下载标注结果视频,也可中途取消任务。

5. 摄像头识别

调用浏览器摄像头实时采集画面,按设定节奏抽帧提交后端推理并回传标注图,累计统计当前会话的目标数与处理帧数,可保存当前画面。

6. 检测历史

检测记录按账号独立保存,支持按类型筛选、按文件名或类别搜索、分页浏览。点击记录可查看结果图、目标明细与当次推理参数,支持导出单条明细与整表 CSV。

7. 统计分析

汇总检测记录数、累计目标数、涉及类别与统计天数,并绘制检测趋势、缺陷类别构成、检测类型构成与每日目标数。所有统计都来自真实检测记录;当记录只覆盖一天时,趋势与每日目标数自动改用柱状呈现,避免折线只有一个点看不出趋势。

8. 模型管理

列出训练产物、上传权重与训练任务产出的权重,显示来源与体积,可一键加载并验证。置信度阈值、IoU 阈值与最大检测数按账号保存,加载失败时保留原可用模型。

9. 模型训练

在网页上配置基线权重、训练轮次、批大小、输入尺寸、学习率与优化器后发起训练。训练以独立子进程真实执行,页面实时显示当前轮次、进度、学习率与 mAP,并绘制实时指标曲线与训练日志。训练中可在线调整初始学习率、安全停止,完成后可下载权重或一键应用到检测服务。

10. 指标展示

读取训练日志中的真实数值,按当前界面主题动态绘制损失、mAP、精确率/召回率与学习率曲线,并提供逐轮指标明细表与记录切换,峰值所在轮次在明细表中单独标记。图表颜色取自主题变量,不直接使用训练框架导出的静态图片。

五、技术栈

类别 技术 用途
编程语言 Python、JavaScript 后端服务与前端页面
模型与框架 YOLOv8 / PyTorch 目标检测训练与推理
Web 服务 FastAPI、Uvicorn 接口服务与静态资源托管
Web 前端 原生模块化 JS、CSS 页面与交互,无需构建工具
图像处理 OpenCV、NumPy 图像读取、绘制标注、视频逐帧处理
数据存储 SQLite 账号、会话、检测记录与训练任务
图表 ECharts 按主题动态绘制统计与指标图表
任务调度 子进程 + 状态文件 训练任务隔离执行与状态回写

六、项目结构

目录 说明
config/ 桌面端全局配置:路径、类别、检测参数
core/ 桌面端推理封装与本地存储
ui/ PyQt6 桌面端(独立保留)
datasets/ 数据集:train 划分与 data.yaml
轴承缺陷检测训练文件/ 训练产物:权重、results.csv 与曲线图
train.py 训练入口
web/ Web 检测平台
web/一键启动.bat Windows 启动入口
web/run.py 环境检查与 Uvicorn 启动
web/main.py 服务装配与静态资源
web/app/ 配置、数据层、账号会话、接口与后台服务
web/static/ 主题样式、页面脚本、图表与本地资源
web/templates/ 登录页与主界面模板

七、运行说明

1. 安装依赖

bash 复制代码
pip install -r web/requirements.txt

2. 启动 Web 平台

bash 复制代码
双击 web/一键启动.bat
# 或在 web 目录执行
python run.py

服务默认监听 http://127.0.0.1:8089,使用初始化管理员账号登录。重复启动会提示服务已在运行,端口被其他程序占用时只提示、不结束进程。

3. 重新训练(可选)

bash 复制代码
python train.py

也可直接在网页的「模型训练」页配置参数发起训练,无需命令行。

相关推荐
jay神21 分钟前
基于 YOLOv8 的森林火灾检测系统(Web 版)
前端·yolo
叼烟扛炮22 分钟前
[LangChain] 学习笔记(08):工具调用底层闭环与第三方搜索(Tavily)实战
人工智能·笔记·学习·langchain
code2cat26 分钟前
HTML基础篇之第一张网页:从index.html到浏览器里的任务清单
前端·html
DQQzero31 分钟前
0.16 元/秒的短剧流水线:即梦短剧工作室把 AI 视频生产改成了什么样
人工智能·ai·aigc·视频生成
@追求卓越39 分钟前
深度学习记录
人工智能·深度学习
miss1 小时前
AI 改完不敢上线?OpenSpec 规约驱动开发实战
前端·代码规范·前端工程化
武子康1 小时前
H3-World 为何在加载 LoRA 前,先检查导入的代码?
人工智能·深度学习·算法
装不满的克莱因瓶2 小时前
【SpringAI Alibaba】ReactAgent结构化输出OutputType与OutputSchema实战
java·人工智能·ai·springai·springaialibaba
AiMan2 小时前
腾讯ima还是不可以导出左侧所有对话,只能单条导出,方法不对吗
前端