基于 YOLOv10 的汽车机油滤芯缺陷检测系统(训练 + 测试 + 可视化 + 避坑)

摘要:本文基于最新 YOLOv10n 轻量化目标检测算法,实现汽车机油滤芯外观缺陷智能检测,包含数据集制作、模型训练、Windows 避坑、精度分析、结果可视化、曲线图绘制、混淆矩阵展示等全流程,可直接用于毕业设计、课程设计、工业检测项目。

一、项目介绍

1.1 项目背景

汽车机油滤芯是发动机关键部件,其表面缺陷(破损、形变、瑕疵)会直接影响产品质量与安全性。 传统人工检测效率低、易疲劳、漏检率高,难以满足自动化产线需求。 因此,本文基于 YOLOv10 实现高精度、高速度、轻量化的滤芯缺陷自动检测系统。

1.2 检测目标

3 类

  1. Pass ------ 合格滤芯
  2. Outer broken ------ 外圈破损
  3. Fixed plate broken ------ 固定板破损

1.3 环境配置

  • Python 3.9
  • PyTorch ≥ 2.0
  • ultralytics 8.4.42
  • GPU:RTX 3050 Laptop(4G 显存)

安装命令:

复制代码
pip install ultralytics
pip install pandas matplotlib

二、数据集制作(YOLO 格式)

2.1 数据集结构

复制代码
dataset_part/
├── images/
│   ├── train/
│   └── val/
├── labels/
│   ├── train/
│   └── val/
└── mydata.yaml

2.2 mydata.yaml 配置

复制代码
path: D:/software/Pycharm/汽车机油滤芯OCR识别、缺陷检测项目/yolov10/dataset_part
train: images/train
val: images/val

nc: 3
names:
  0: Pass
  1: Outer broken
  2: Fixed plate broken

三、YOLOv10 训练代码(Windows 100% 运行)

3.1 训练代码(ttrain.py

python 复制代码
from ultralytics import YOLO

# 必须加这一行!!!
if __name__ == '__main__':

    # 加载模型
    model = YOLO("yolov10n.pt")

    # 开始训练(路径我已经帮你改成正确的了)
    results = model.train(
        data=r"D:\software\Pycharm\汽车机油滤芯OCR识别、缺陷检测项目\yolov10\dataset_part\mydata.yaml",
        epochs=50,
        imgsz=640,
        batch=4,
        project=r"D:\software\Pycharm\汽车机油滤芯OCR识别、缺陷检测项目\yolov10\runs",
        name="train_defect",
        device=0,
        workers=0,  # 这个也改一下,更稳定
        exist_ok=True
    )

3.2 Windows 必看避坑

报错:RuntimeError 解决方法:

  1. 必须加 if __name__ == '__main__':
  2. 必须设置 workers=0

四、模型精度指标(最终结果)

bash 复制代码
Class               Images  Instances  P      R      mAP50  mAP50-95
all                 90      182        0.928  0.965  0.975  0.682
Pass                30      30         0.934  1.000  0.994  0.994
Outer broken        30      63         0.960  0.984  0.987  0.537
Fixed plate broken  30      89         0.889  0.910  0.945  0.515

指标解释

  • 精确率 P=0.928:92.8% 检测结果正确
  • 召回率 R=0.965:96.5% 缺陷都能找到
  • mAP50=0.975:综合精度极高,工业级优质
  • 推理速度 4.8ms / 张:实时检测

五、结果可视化代码(曲线图 + 数据打印)

5.1 绘制训练损失 & 精度曲线

python 复制代码
import pandas as pd
import matplotlib.pyplot as plt

plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False

# 你的路径
path = r"D:\software\Pycharm\汽车机油滤芯OCR识别、缺陷检测项目\yolov10\runs\train_defect\results.csv"
df = pd.read_csv(path)
df.columns = df.columns.str.strip()

# 绘图
plt.figure(figsize=(12, 8))

plt.subplot(2, 2, 1)
plt.plot(df['epoch'], df['train/box_loss'], label='box_loss')
plt.title('框损失')
plt.grid(True)

plt.subplot(2, 2, 2)
plt.plot(df['epoch'], df['train/cls_loss'], label='cls_loss', color='r')
plt.title('分类损失')
plt.grid(True)

plt.subplot(2, 2, 3)
plt.plot(df['epoch'], df['metrics/mAP50'], label='mAP50', color='g')
plt.title('mAP50 精度')
plt.grid(True)

plt.subplot(2, 2, 4)
plt.plot(df['epoch'], df['metrics/mAP50-95'], label='mAP50-95', color='orange')
plt.title('严格精度')
plt.grid(True)

plt.tight_layout()
plt.savefig('训练曲线.png', dpi=300)
plt.show()

5.2 打印最终精度(可写报告)

python 复制代码
print("==== 最终 5 轮结果 ====")
print(df[["epoch", "train/box_loss", "train/cls_loss", "metrics/mAP50"]].tail())

best = df["metrics/mAP50"].max()
print(f"\n最佳 mAP50 = {best:.4f}")

六、混淆矩阵 & 预测效果图

6.1 混淆矩阵

训练自动生成: runs/train_defect/confusion_matrix.png

6.2 预测代码

python 复制代码
from ultralytics import YOLO

if __name__ == '__main__':
    model = YOLO(r"D:\software\Pycharm\汽车机油滤芯OCR识别、缺陷检测项目\yolov10\runs\train_defect\weights\best.pt")

    # 单张图预测
    model.predict(
        source="test.jpg",
        save=True,
        conf=0.25,
        line_width=2
    )

七、项目总结

7.1 模型优势

  1. 精度高:mAP50 = 97.5%
  2. 速度快:单图推理 4.8ms
  3. 轻量化:226 万参数,适合部署
  4. 工业可用:不漏检、不误判
  5. Windows 完美运行:无环境报错

7.2 应用场景

  • 汽车零部件自动化检测
  • 流水线视觉检测
  • 嵌入式设备部署
  • 毕业设计 / 课程设计

八、完整项目文件清单

  • 训练代码 ttrain.py
  • 测试代码 predict.py
  • 绘图代码 plot_result.py
  • 数据集配置 mydata.yaml
  • 最优权重 best.pt
  • 训练曲线、混淆矩阵、结果图

result.csv

python 复制代码
epoch	time	train/box_loss	train/cls_loss	train/dfl_loss	metrics/precision(B)	metrics/recall(B)	metrics/mAP50(B)	metrics/mAP50-95(B)	val/box_loss	val/cls_loss	val/dfl_loss	lr/pg0	lr/pg1	lr/pg2
1	33.6354	1.81847	5.82337	1.27249	0.39557	0.44413	0.42799	0.28235	1.39843	3.46518	1.17339	0.000473319	0.000473319	0.000473319
2	64.3422	1.707	4.51003	1.23284	0.44582	0.42104	0.48354	0.23945	1.70178	3.07286	1.29302	0.000930849	0.000930849	0.000930849
3	94.4158	1.71446	3.64938	1.25805	0.86773	0.49225	0.66638	0.43542	1.57038	2.00877	1.33791	0.00136952	0.00136952	0.00136952
4	124.522	1.80836	3.07017	1.26391	0.52271	0.6867	0.65936	0.44248	1.47327	1.63587	1.22102	0.00134412	0.00134412	0.00134412
5	154.038	1.62324	2.55796	1.20794	0.64427	0.72415	0.78735	0.50374	1.36685	1.55956	1.16237	0.00131582	0.00131582	0.00131582
6	184.328	1.64166	2.15689	1.1977	0.70235	0.78213	0.8	0.50606	1.44415	1.15667	1.2411	0.00128753	0.00128753	0.00128753
7	213.706	1.60408	1.91471	1.19898	0.7691	0.74815	0.80752	0.51503	1.35959	1.16569	1.21799	0.00125923	0.00125923	0.00125923
8	248.678	1.5484	1.70481	1.19927	0.6617	0.78032	0.7968	0.50771	1.45168	1.06083	1.21672	0.00123094	0.00123094	0.00123094
9	278.747	1.51789	1.57608	1.17287	0.72202	0.77091	0.8349	0.54926	1.3112	0.98577	1.16743	0.00120265	0.00120265	0.00120265
10	308.792	1.54721	1.49016	1.20211	0.76995	0.78288	0.84113	0.53269	1.37365	0.98971	1.18949	0.00117435	0.00117435	0.00117435
11	337.951	1.53241	1.3848	1.17281	0.77072	0.8493	0.88849	0.5739	1.29592	0.87683	1.14857	0.00114606	0.00114606	0.00114606
12	367.615	1.51518	1.28701	1.1621	0.73142	0.87311	0.87938	0.56966	1.33605	0.90611	1.1665	0.00111776	0.00111776	0.00111776
13	397.184	1.51836	1.26758	1.16843	0.78418	0.90637	0.9055	0.59606	1.32362	0.7722	1.15095	0.00108947	0.00108947	0.00108947
14	426.836	1.47414	1.17088	1.15	0.79124	0.88282	0.8923	0.59067	1.30875	0.76058	1.14416	0.00106118	0.00106118	0.00106118
15	456.418	1.47828	1.15118	1.14112	0.84353	0.86362	0.91764	0.60426	1.31661	0.72594	1.14444	0.00103288	0.00103288	0.00103288
16	485.853	1.48251	1.14796	1.14072	0.70978	0.90328	0.90251	0.58837	1.30568	0.7674	1.1325	0.00100459	0.00100459	0.00100459
17	515.326	1.43529	1.04383	1.1323	0.82862	0.83961	0.90681	0.60305	1.31387	0.68852	1.15991	0.000976293	0.000976293	0.000976293
18	545.054	1.45231	1.04013	1.13598	0.88576	0.88187	0.95424	0.63177	1.29565	0.65389	1.12904	0.000947999	0.000947999	0.000947999
19	575.451	1.46106	0.97741	1.12728	0.88612	0.9206	0.94988	0.61782	1.32789	0.63758	1.16102	0.000919704	0.000919704	0.000919704
20	605.677	1.39671	0.9693	1.12324	0.8984	0.89579	0.93939	0.6294	1.24869	0.58646	1.13033	0.00089141	0.00089141	0.00089141
21	635.505	1.40103	0.92832	1.11833	0.89443	0.92533	0.95147	0.62999	1.26357	0.59306	1.12199	0.000863116	0.000863116	0.000863116
22	665.309	1.37601	0.88511	1.10477	0.83426	0.9308	0.93631	0.60502	1.37112	0.64258	1.16738	0.000834822	0.000834822	0.000834822
23	695.132	1.37752	0.90841	1.1007	0.87201	0.88983	0.94054	0.6217	1.29508	0.61137	1.13346	0.000806528	0.000806528	0.000806528
24	724.826	1.37513	0.8529	1.10527	0.90256	0.92777	0.94047	0.61722	1.31184	0.55068	1.14879	0.000778233	0.000778233	0.000778233
25	755.338	1.36702	0.84636	1.10068	0.88898	0.94477	0.94643	0.63267	1.20963	0.55678	1.10669	0.000749939	0.000749939	0.000749939
26	785.644	1.33658	0.80043	1.09955	0.88539	0.94148	0.95439	0.65001	1.19994	0.52931	1.09833	0.000721645	0.000721645	0.000721645
27	815.609	1.33479	0.80566	1.09279	0.89794	0.94293	0.9677	0.65382	1.22647	0.50014	1.09904	0.000693351	0.000693351	0.000693351
28	845.632	1.28282	0.75466	1.06777	0.90042	0.91652	0.9474	0.64203	1.24132	0.51856	1.11927	0.000665057	0.000665057	0.000665057
29	875.63	1.32981	0.75047	1.09783	0.85619	0.92347	0.94291	0.62739	1.24366	0.569	1.11859	0.000636762	0.000636762	0.000636762
30	905.439	1.29835	0.72016	1.06471	0.87873	0.93038	0.9491	0.64418	1.23388	0.48042	1.10453	0.000608468	0.000608468	0.000608468
31	935.464	1.31725	0.71449	1.07875	0.87639	0.90022	0.94512	0.63967	1.24473	0.50491	1.11116	0.000580174	0.000580174	0.000580174
32	965.313	1.36123	0.72023	1.08145	0.94636	0.94742	0.96706	0.6512	1.21451	0.48863	1.11009	0.00055188	0.00055188	0.00055188
33	995.323	1.28998	0.6914	1.07649	0.94606	0.90477	0.97055	0.65644	1.23708	0.488	1.10351	0.000523586	0.000523586	0.000523586
34	1025.43	1.28887	0.67872	1.05219	0.91033	0.97172	0.96252	0.66271	1.22954	0.44728	1.10769	0.000495291	0.000495291	0.000495291
35	1056.07	1.2395	0.63014	1.052	0.92608	0.93976	0.97146	0.66116	1.2111	0.44432	1.08234	0.000466997	0.000466997	0.000466997
36	1085.83	1.27266	0.66701	1.0659	0.94415	0.9548	0.96992	0.6584	1.18608	0.42443	1.08427	0.000438703	0.000438703	0.000438703
37	1115.61	1.24819	0.63562	1.05842	0.91413	0.93463	0.95806	0.64973	1.21784	0.45394	1.08858	0.000410409	0.000410409	0.000410409
38	1145.47	1.23838	0.62748	1.05995	0.94545	0.91699	0.97051	0.65903	1.19398	0.43065	1.08039	0.000382115	0.000382115	0.000382115
39	1175.37	1.20349	0.61271	1.04089	0.92414	0.94697	0.97276	0.65968	1.20799	0.43335	1.08194	0.00035382	0.00035382	0.00035382
40	1204.97	1.25553	0.60463	1.0496	0.93198	0.92445	0.97315	0.66392	1.20203	0.42142	1.08221	0.000325526	0.000325526	0.000325526
41	1233.97	1.20151	0.48915	1.06362	0.95924	0.93182	0.97678	0.67427	1.21924	0.38767	1.07723	0.000297232	0.000297232	0.000297232
42	1262.44	1.19807	0.48923	1.06833	0.95319	0.96106	0.9752	0.65696	1.23666	0.401	1.08189	0.000268938	0.000268938	0.000268938
43	1291.15	1.21336	0.48619	1.05712	0.94571	0.95196	0.97497	0.66999	1.16609	0.38132	1.07348	0.000240644	0.000240644	0.000240644
44	1319.97	1.1834	0.47501	1.05209	0.95654	0.95068	0.97692	0.67065	1.17145	0.36853	1.07474	0.000212349	0.000212349	0.000212349
45	1348.51	1.16675	0.4521	1.05067	0.93145	0.97624	0.97398	0.66903	1.15388	0.37075	1.07486	0.000184055	0.000184055	0.000184055
46	1377.3	1.17028	0.44267	1.03348	0.94834	0.9369	0.9766	0.67925	1.14156	0.39036	1.06807	0.000155761	0.000155761	0.000155761
47	1406.22	1.1447	0.44656	1.03027	0.93459	0.96051	0.97652	0.67782	1.13462	0.37336	1.05931	0.000127467	0.000127467	0.000127467
48	1435.26	1.15755	0.44314	1.03927	0.93072	0.95992	0.97605	0.68055	1.13306	0.37496	1.06176	9.91726e-05	9.91726e-05	9.91726e-05
49	1463.71	1.13207	0.43191	1.03859	0.91999	0.96369	0.97624	0.68033	1.14306	0.36983	1.06512	7.08784e-05	7.08784e-05	7.08784e-05
50	1493.2	1.15235	0.44551	1.03375	0.92801	0.96314	0.97511	0.68176	1.14054	0.36575	1.06349	4.25842e-05	4.25842e-05	4.25842e-05
相关推荐
AI棒棒牛5 小时前
YOLO26最新创新改进系列:融合 E3AD 认知注意力 Neck:具身认知增强的 FPN/PAN 特征选择机制,高效创新!
人工智能·yolo·计算机视觉·yolo26
hans汉斯6 小时前
数据挖掘|基于BP神经网络的少数民族村寨文化型旅游体验产品潜在游客挖掘
深度学习·神经网络·算法·yolo·软件工程·bp·汉斯出版社
美味虾片1 天前
首搭AI超级智能体迪迪虾,腾势N8L纯电上市29.98万元起
汽车
JAI科研1 天前
YOLO 完全指南(七):YOLO识别工程化 (上)
人工智能·深度学习·神经网络·yolo·目标检测·计算机视觉·transformer
JarmanYuo1 天前
YOLO 涨点研究(十二):具身 CV 进阶篇——Sim2Real 域随机化与真机部署
人工智能·pytorch·python·yolo·计算机视觉
YOLO数据集集合1 天前
无人船视角水面目标检测数据集 |无人船 USV 水面目标检测 自主航行 避障 水域监测 目标检测9076期
深度学习·yolo·目标检测·无人机·无人机视角·无人船·自主航线
YOLO数据集集合1 天前
渔船船只检测数据集 | 船只检测 渔船识别 拖船检测 海事监管 目标检测 YOLO格式 深度学习数据集 计算机视觉9076期
人工智能·深度学习·yolo·目标检测·计算机视觉
ALINX技术博客2 天前
跨越 1819 公里,ALINX 携 AI 异构平台、电子后视镜及 HIL 仿真方案亮相深圳国际电子展
ai·fpga开发·汽车
AI吃大瓜2 天前
人脸检测和行人检测4:Android实现YOLOv8 YOLO11 YOLO26人脸检测和人体检测(含源码,可实时检测)
android·yolo·人脸检测·人体检测·行人检测·yolo26
飞猫的边缘AI2 天前
边缘AI-13:从YOLOv1到YOLO26:目标检测是怎么进化的
人工智能·yolo·目标检测·ai算法·边缘ai·yolo26