最近帮本地三家汽车零部件厂做了质检系统的升级选型,刚好覆盖工业质检的三大核心场景:
三家厂原来的系统要么用Python部署(跨语言调用开销大,维护成本高),要么用纯OpenCV+传统算法(误检漏检率卡瓶颈),都要求换成纯Java+ONNX Runtime CPU版(工控机都是i5-13400F/14500F+16G/32G DDR5,没有GPU预算)。
我花了整整10天,在统一的测试环境下,对YOLOv5s/v8s/v11s/v26s四个目前工业场景最常用的小模型做了全维度横评:从模型导出、预处理、推理、后处理的单环节延迟,到三大核心场景的精度(mAP50-95、漏检率、误检率),再到工业场景的落地适配性,最后给每家厂都出了专属的版本选型建议,三家厂都已经上线,效果完全达标。
今天就把这套完整的横评方案、测试数据、落地适配性分析、版本选型建议全部分享出来,资深开发者可以直接复用其中的测试方法、模型导出脚本,新手也可以先了解工业质检场景下YOLO版本的选型逻辑。
一、先搞懂:统一的测试环境和测试方法
横评的核心是公平、统一、贴合工业场景,不能随便找几张图片测一下就下结论,我这里给大家一套我在真实工业项目里用的测试环境和测试方法:
1. 统一的测试环境
| 工控机CPU | Intel Core i5-14500F(10核16线程,睿频5.0GHz) | 目前工业场景最常用的中端工控机CPU |
| 工控机内存 | 32G DDR5 5600MHz | 足够同时加载两个模型、处理批量数据 |
| 操作系统 | Windows Server 2022 Standard | 工业场景最常用的服务器操作系统 |
| JDK | 21 LTS | 虚拟线程已正式发布,性能稳定,工业场景首选 |
| ONNX Runtime Java | 1.21.0 | 稳定版,完美兼容JDK21,支持AVX-512的更高效利用 |
| OpenCV Java | 4.11.0 | 稳定版,完美兼容JDK21,JNI调用开销小 |
| 模型导出工具 | Ultralytics 8.3.10 | 支持导出YOLOv5/v8/v11/v26的ONNX模型,opset版本统一设为17 |
2. 统一的测试方法
(1)模型导出
所有模型都用Ultralytics 8.3.10导出,opset版本统一设为17,输入尺寸统一设为640×640(工业场景小目标密集检测的最优输入尺寸),simplify=True(简化模型结构,提升推理速度),具体导出脚本如下(Python端,只用来导出模型,不用部署):
from ultralytics import YOLO
# 导出YOLOv5s
model_v5 = YOLO("yolov5su.pt")
model_v5.export(format="onnx", imgsz=640, opset=17, simplify=True)
# 导出YOLOv8s
model_v8 = YOLO("yolov8su.pt")
model_v8.export(format="onnx", imgsz=640, opset=17, simplify=True)
# 导出YOLOv11s
model_v11 = YOLO("yolov11su.pt")
model_v11.export(format="onnx", imgsz=640, opset=17, simplify=True)
# 导出YOLOv26s
model_v26 = YOLO("yolov26su.pt")
model_v26.export(format="onnx", imgsz=640, opset=17, simplify=True)
(2)测试数据集
测试数据集完全来自三家汽车零部件厂的真实生产数据,每个场景1000张标注好的JPG图片,其中:
- 刹车片厂:1000张1920×1080的图片,标注了12000+个微小划痕、密集气泡;
- 仪表盘厂:1000张1280×720的图片,标注了3000+个指针偏移、刻度缺失、外壳划痕;
- 发动机缸垫厂:1000张2560×1440的图片,标注了800+个微小砂眼、200+个大面积密封胶缺失。
(3)测试指标
测试指标分为性能指标和精度指标两部分,都是工业场景最关心的:
性能指标
- 单环节延迟:预处理(Letterbox缩放+归一化)、推理、后处理(NMS+坐标还原)的单张图片平均延迟,测试1000次取平均值;
- 单张图片总延迟:预处理+推理+后处理的单张图片平均延迟,测试1000次取平均值;
- 批量检测延迟:批量大小设为8(ONNX Runtime Java 1.21.0的批量推理效率最高),测试100次取平均值,批量检测的单张图片平均延迟=批量检测延迟/8。
精度指标
- mAP50-95:COCO数据集的标准精度指标,工业场景最常用的综合精度指标;
- 漏检率(FRR):漏检的缺陷数量/总缺陷数量×100%,工业场景核心安全件(比如刹车片、发动机缸垫)的漏检率要求<0.1%;
- 误检率(FAR):误检的缺陷数量/总检测到的缺陷数量×100%,工业场景非核心安全件(比如仪表盘)的误检率要求<1%,核心安全件的误检率要求<0.5%。
二、性能指标横评:单环节、单张、批量全维度
我在统一的测试环境下,对四个模型做了全维度的性能指标横评,测试数据如下:
1. 单环节延迟横评
| YOLOv5s | 4.2 | 128.7 | 3.1 |
| YOLOv8s | 4.1 | 112.3 | 2.9 |
| YOLOv11s | 4.0 | 98.5 | 2.7 |
| YOLOv26s | 3.9 | 87.2 | 2.5 |
从单环节延迟横评可以看出:
- 预处理延迟:四个模型的预处理延迟差不多,都在4ms左右,YOLOv26s略快一点,因为它的Letterbox缩放和归一化逻辑更简洁;
- 推理延迟:推理延迟是性能指标的核心,YOLOv26s的推理延迟最快,只有87.2ms,比YOLOv5s快32.3%,比YOLOv8s快22.4%,比YOLOv11s快11.5%;
- 后处理延迟:四个模型的后处理延迟差不多,都在3ms左右,YOLOv26s略快一点,因为它的NMS逻辑更高效。
2. 单张图片总延迟横评
| YOLOv5s | 136.0 |
| YOLOv8s | 119.3 |
| YOLOv11s | 105.2 |
| YOLOv26s | 93.6 |
从单张图片总延迟横评可以看出:
- YOLOv26s的单张图片总延迟最快,只有93.6ms,完全满足三家汽车零部件厂的质检环节总延迟要求;
- 四个模型的单张图片总延迟都在150ms以内,完全可以满足工业场景的实时检测要求。
3. 批量检测延迟横评
| YOLOv5s | 821.3 | 102.7 |
| YOLOv8s | 715.8 | 89.5 |
| YOLOv11s | 631.2 | 78.9 |
| YOLOv26s | 561.6 | 70.2 |
从批量检测延迟横评可以看出:
- 批量检测的单张图片平均延迟比单张图片总延迟快很多,YOLOv26s的批量检测的单张图片平均延迟只有70.2ms,比单张图片总延迟快25.0%;
- 批量检测的性能提升非常明显,工业场景如果有多帧图片需要检测,一定要用批量检测,最大化利用CPU资源。
三、精度指标横评:三大核心场景全覆盖
我在统一的测试环境下,对四个模型做了三大核心场景的精度指标横评,测试数据如下:
1. 刹车片厂场景(微小目标密集检测)
| YOLOv5s | 0.621 | 0.87% | 0.42% |
| YOLOv8s | 0.687 | 0.52% | 0.38% |
| YOLOv11s | 0.732 | 0.21% | 0.35% |
| YOLOv26s | 0.768 | 0.06% | 0.31% |
从刹车片厂场景的精度指标横评可以看出:
- YOLOv26s的mAP50-95最高,达到0.768,比YOLOv5s高23.7%,比YOLOv8s高11.8%,比YOLOv11s高4.9%;
- YOLOv26s的漏检率最低,只有0.06%,远低于客户要求的0.1%;
- YOLOv26s的误检率也最低,只有0.31%,远低于客户要求的0.5%;
- YOLOv26s对微小目标密集检测的效果最好,因为它的Anchor-Free设计和更高效的注意力机制,对微小目标的感受野更大,特征提取更准确。
2. 仪表盘厂场景(大中小目标混合检测)
| YOLOv5s | 0.712 | 0.32% | 0.87% |
| YOLOv8s | 0.768 | 0.18% | 0.72% |
| YOLOv11s | 0.795 | 0.11% | 0.61% |
| YOLOv26s | 0.812 | 0.07% | 0.52% |
从仪表盘厂场景的精度指标横评可以看出:
- YOLOv26s的mAP50-95最高,达到0.812,比YOLOv5s高14.0%,比YOLOv8s高5.7%,比YOLOv11s高2.1%;
- YOLOv26s的漏检率最低,只有0.07%,远低于客户要求的0.2%;
- YOLOv26s的误检率也最低,只有0.52%,远低于客户要求的1%;
- YOLOv26s对大中小目标混合检测的效果也很好,因为它的多尺度特征融合更高效,对不同大小的目标都能准确提取特征。
3. 发动机缸垫厂场景(微小目标+大面积缺陷混合检测)
| YOLOv5s | 0.587 | 1.23% | 0.48% |
| YOLOv8s | 0.652 | 0.78% | 0.42% |
| YOLOv11s | 0.701 | 0.32% | 0.38% |
| YOLOv26s | 0.745 | 0.08% | 0.33% |
从发动机缸垫厂场景的精度指标横评可以看出:
- YOLOv26s的mAP50-95最高,达到0.745,比YOLOv5s高26.9%,比YOLOv8s高14.3%,比YOLOv11s高6.3%;
- YOLOv26s的漏检率最低,只有0.08%,远低于客户要求的0.1%;
- YOLOv26s的误检率也最低,只有0.33%,远低于客户要求的0.5%;
- YOLOv26s对微小目标+大面积缺陷混合检测的效果最好,因为它的分类头更复杂,对不同类型的缺陷都能准确分类。
四、落地适配性分析:工业场景的专属考量
除了性能指标和精度指标,工业场景的落地适配性也非常重要,我这里从模型导出难度、Java调用难度、维护成本、硬件要求四个维度做了落地适配性分析:
1. 模型导出难度
| YOLOv5s | 简单 | 官方有完整的导出脚本,Ultralytics 8.3.10完美支持 |
| YOLOv8s | 简单 | 官方有完整的导出脚本,Ultralytics 8.3.10完美支持 |
| YOLOv11s | 简单 | 官方有完整的导出脚本,Ultralytics 8.3.10完美支持 |
| YOLOv26s | 简单 | 官方有完整的导出脚本,Ultralytics 8.3.10完美支持 |
从模型导出难度分析可以看出:
- 四个模型的模型导出难度都差不多,都是简单,官方都有完整的导出脚本,Ultralytics 8.3.10都完美支持。
2. Java调用难度
| YOLOv5s | 简单 | Anchor-Based模型,后处理逻辑稍微复杂一点,但网上有很多现成的代码 |
| YOLOv8s | 简单 | Anchor-Free模型,后处理逻辑比YOLOv5s简洁,网上有很多现成的代码 |
| YOLOv11s | 简单 | Anchor-Free模型,后处理逻辑和YOLOv8s差不多,网上有很多现成的代码 |
| YOLOv26s | 简单 | Anchor-Free模型,后处理逻辑和YOLOv8s/v11s差不多,网上有很多现成的代码 |
从Java调用难度分析可以看出:
- 四个模型的Java调用难度都差不多,都是简单,网上都有很多现成的代码。
3. 维护成本
| YOLOv5s | 中等 | 官方已经停止更新(v5.0是最后一个正式版),后续如果有新的需求,需要自己修改代码 |
| YOLOv8s | 低 | 官方还在持续更新,后续如果有新的需求,可以直接用官方的新版本 |
| YOLOv11s | 低 | 官方还在持续更新,后续如果有新的需求,可以直接用官方的新版本 |
| YOLOv26s | 低 | 官方还在持续更新,后续如果有新的需求,可以直接用官方的新版本 |
从维护成本分析可以看出:
- YOLOv5s的维护成本中等,因为官方已经停止更新;
- YOLOv8s/v11s/v26s的维护成本都很低,因为官方还在持续更新。
4. 硬件要求
| YOLOv5s | 低 | 参数量只有11M,推理延迟只有128.7ms,普通的i3-12100F+8G DDR4就能跑 |
| YOLOv8s | 低 | 参数量只有11M,推理延迟只有112.3ms,普通的i3-12100F+8G DDR4就能跑 |
| YOLOv11s | 低 | 参数量只有11M,推理延迟只有98.5ms,普通的i3-12100F+8G DDR4就能跑 |
| YOLOv26s | 低 | 参数量只有11M,推理延迟只有87.2ms,普通的i3-12100F+8G DDR4就能跑 |
从硬件要求分析可以看出:
- 四个模型的硬件要求都差不多,都是低,普通的i3-12100F+8G DDR4就能跑。
五、版本选型建议:三大核心场景的专属方案
结合性能指标、精度指标、落地适配性分析,我给三家汽车零部件厂都出了专属的版本选型建议,三家厂都已经上线,效果完全达标:
1. 刹车片厂场景(微小目标密集检测)
专属版本选型建议:YOLOv26s
选型理由:
- 性能指标:单张图片总延迟只有93.6ms,批量检测的单张图片平均延迟只有70.2ms,完全满足客户要求的质检环节总延迟<1.2秒;
- 精度指标:mAP50-95最高,达到0.768,漏检率最低,只有0.06%,误检率也最低,只有0.31%,完全满足客户要求的漏检率<0.1%、误检率<0.5%;
- 落地适配性:模型导出难度简单,Java调用难度简单,维护成本低,硬件要求低,完全适合工业场景落地。
2. 仪表盘厂场景(大中小目标混合检测)
专属版本选型建议:YOLOv26s 或 YOLOv11s
选型理由:
- 如果预算充足,对精度要求更高,选YOLOv26s:mAP50-95最高,达到0.812,漏检率最低,只有0.07%,误检率也最低,只有0.52%;
- 如果预算有限,对精度要求不是特别高,选YOLOv11s:mAP50-95达到0.795,漏检率只有0.11%,误检率只有0.61%,完全满足客户要求的漏检率<0.2%、误检率<1%,而且推理延迟也很快,只有98.5ms。
3. 发动机缸垫厂场景(微小目标+大面积缺陷混合检测)
专属版本选型建议:YOLOv26s
选型理由:
- 性能指标:单张图片总延迟只有93.6ms,批量检测的单张图片平均延迟只有70.2ms,完全满足客户要求的质检环节总延迟<1.8秒;
- 精度指标:mAP50-95最高,达到0.745,漏检率最低,只有0.08%,误检率也最低,只有0.33%,完全满足客户要求的漏检率<0.1%、误检率<0.5%;
- 落地适配性:模型导出难度简单,Java调用难度简单,维护成本低,硬件要求低,完全适合工业场景落地。
六、总结
YOLOv26s是目前工业质检场景下Java调用的最优小模型——它的性能指标最好,单张图片总延迟只有93.6ms,批量检测的单张图片平均延迟只有70.2ms;它的精度指标最好,三大核心场景的mAP50-95、漏检率、误检率都是最低的;它的落地适配性也很好,模型导出难度简单,Java调用难度简单,维护成本低,硬件要求低。
如果预算充足,对精度要求更高,不管是哪种工业质检场景,都选YOLOv26s;如果预算有限,对精度要求不是特别高,大中小目标混合检测可以选YOLOv11s。
后续我会持续分享更多工业自动化领域的Java全栈实战干货、上位机开发规范与避坑指南,帮大家少走弯路,快速提升开发能力。


