轮胎质检这个场景,我前后折腾了差不多三个月。最初只是想在产线上挂个摄像头,用目标检测把缺陷框出来,结果发现框这个东西在质检场景里很不顶用——轮胎表面的气泡、裂纹、杂质,没有一个是规规矩矩的矩形,框出来之后工人还得对着图看半天。后来把方案切到实例分割,也就是标题里说的yolov8-seg这条路,配合C2f-RFAConv、aux分支这些改进点,才算真正把缺陷的轮廓给抠出来。这篇文章就把整个项目从数据准备、模型选型、训练调参到Web前端展示的完整过程捋一遍,包括我踩过的坑和后来验证有效的改进组合,给准备做工业视觉分割项目或者写论文需要创新点的朋友一个参考。
1. 项目背景与需求拆解
1.1 轮胎缺陷检测到底难在哪
轮胎表面缺陷检测这事,比一般的外观质检要麻烦不少。首先是缺陷形态差异极大:气泡是局部鼓包,边缘有渐变过渡;裂纹是细长线条,可能贯穿几个厘米;缺胶是局部凹陷,轮廓不规则;杂质则是嵌入胎面内部的异物,在普通光源下对比度低,很容易漏检。其次是轮胎表面本身有复杂的纹理和胎号压印,这些正常特征很容易被模型当成缺陷,产生大量误检。最后是产线节奏要求高,一条胎检测时间不能超过几百毫秒,传统视觉方案靠人工设计特征根本应付不过来。
用深度学习做分割检测,核心诉求是能把每个缺陷的像素区域标出来,方便后续做面积统计、严重程度分级。这就不是目标检测能解决的事了——检测给的是xyxy框,无法表达“气泡在胎肩位置,面积约2平方厘米”这种信息。分割模型输出的是逐像素的分类掩码,缺陷在哪、多大、什么形状,一目了然。
1.2 为什么选实例分割而不是语义分割
可能有朋友会问:语义分割也能把缺陷像素标出来,为什么非要实例分割?这里有个关键区别。语义分割输出的是一张像素分类图,同一类别的多个缺陷区域是连在一起的,没法区分“这是两个独立气泡还是一个大气泡”。而胎坯质检中,同一个区域可能同时存在多个独立缺陷,需要单独计数和定位。实例分割输出的是每个缺陷个体的独立掩码,一个缺陷一个实例,方便统计数量、逐个评估。
另外,从工程落地角度看,实例分割的结果可以直接转换成检测框、轮廓坐标、面积占比等多种下游数据形式,信息量更丰富。yolov8-seg作为单阶段实例分割方案,兼顾速度和精度,在产线场景下用起来比较合适。不像两阶段的分割框架,虽然精度上限高,但推理耗时很难压到实时水平。
1.3 这套方案适合谁来参考
如果你正在做以下事情,这个项目的思路可以直接抄作业:
- 工业外观缺陷检测,尤其是轮胎、橡胶、注塑件这类表面缺陷形态复杂的场景;
- 算法岗或工程岗需要把分割模型部署到Web端或本地服务中,给业务方做演示验证;
- 毕业设计或小论文需要实例分割方向的创新点,想快速搭建一套可对比的改进基线;
- 想系统理解yolov8-seg从数据标注、训练到推理上线的完整链路。
这套方案选的基线是yolov8-seg,改进点聚焦在特征提取和辅助监督两个方向。工程上不追求堆一堆花里胡哨的模块,而是每一步都有明确的目的:要么涨点,要么提速,要么稳定收敛。
2. 整体方案设计与技术选型
2.1 模型路线:为什么直接在yolov8-seg上改进
整个项目最初对比过三条路线,这里先说结论,再解释理由。
| 路线 | 方案 | 优点 | 缺点 |
|---|---|---|---|
| A | 检测模型yolov8 + 后处理抠图 | 实现简单,检测成熟 | 无法精确表达缺陷边缘,掩码质量差 |
| B | 通用分割模型Micro/手机端分割方案 | 分割精度高 | 速度慢,部署体积大,小模型精度不够 |
| C | yolov8-seg单阶段实例分割 | 速度与精度平衡,工程生态成熟 | 小目标与边缘细节弱于两阶段方案 |
最终选定C路线。yolov8-seg本质上是在yolov8检测头的基础上并联了一个分割头,共享Backbone和Neck特征。检测分支负责框选缺陷实例,分割分支负责在框内细化掩码。两个分支的损失函数联合优化,训练时相互促进——检测分支让分割分支知道“在哪里分割”,分割分支让检测分支的特征更具语义性。
直接基于yolov8-seg改动的好处是:不用从零设计网络结构,分割头、损失函数、数据加载这些成熟模块都直接复用,精力集中在Backbone和Neck层面的特征增强上。结合我自己的测试结果,yolov8-seg在中等规模数据集上的掩码质量已经够用,改进空间主要在复杂背景、小目标和低对比度缺陷上。
2.2 改进模块怎么选:aux分支和C2f-RFAConv的价值
标题里提到的两个改进点,这里分别展开说说。先强调一点:改进点不是越多越好,而是要看它解决什么问题。通用实验室可能在CIFAR上有效,到了工业缺陷数据集上不一定有用。我最终保留下来并写进实验对比表的组合是:yolov8-seg-aux + yolov8-seg-C2f-RFAConv。
aux分支,也就是辅助分割头,做的事是在训练阶段额外增加一个浅层的分割监督信号。网络主分割头一般接在高层特征上,感受野大但细节不足;辅助头接在较浅层特征上,分辨率高,更容易感知细小缺陷的边缘。训练时主头输出主要用于最终评估,辅助头只在反向传播时对浅层特征施加约束,帮Backbone学到更细粒度的表示。这就像练字的时候先用描红本固定笔画结构,再在空白纸上自由书写,辅助监督负责前期“把结构稳住”。
C2f-RFAConv模块,全称是Receptive-Field Attention Convolution。普通的C2f模块在融合多分支特征时,每个位置的卷积核权重是固定的,不会根据输入内容的局部感受野特征做调整。RFAConv的思路是在卷积操作前先计算一个感受野注意力图,对不同空间位置的重要程度加权,然后再做卷积。对轮胎表面这种低对比度、非均匀纹理的缺陷来说,模型需要自适应地判断“这个区域纹理不连续,很可能是裂纹”,而不是用固定权重盲目扫过。RFAConv让特征提取更聚焦在缺陷出现的区域,减少背景纹理干扰。
除了这两个核心改进,我另外还验证过一批可插拔的模块,比如轻量化的注意力机制ECA、坐标注意力CoordAtt、改进的检测头结构等。这些没有全部塞进最终模型,一是考虑到显存和推理速度,二是为了保留清晰的消融实验逻辑。做论文的话,改进点需要能逐个说清楚“加了什么、为什么加、涨了多少”,而不是黑盒堆叠。
2.3 系统前后端架构:一键训练与Web展示怎么协同
整个系统在工程上分成三条链路:训练链路、推理链路、展示链路。训练链路用一键脚本串联数据划分、环境检查、模型加载、训练、评估;推理链路接收待测图片,完成预处理、模型推理、后处理,输出掩码和JSON结果;展示链路用Web前端展示上传图片时的实时分割效果,并提供批量测试入口。
后端我用的是FastAPI,轻量、异步性能好,Python生态和模型推理库天然兼容。前端是纯HTML + JavaScript + 简单的CSS框架,不依赖Node构建链,开箱即用。前后端通过HTTP接口交互,前端上传图片,后端返回分割掩码的可视化图片和缺陷统计数据。为了让所有环节可复现,每个训练轮次结束都会自动导出最佳权重,同时把参数配置、训练日志、评估曲线保存下来,方便回溯。
这套逻辑本质上是在模仿工业项目的最小MVP:数据入口(图片上传)、算法核心(模型推理)、结果出口(可视化统计)。业务方不需要理解模型原理,只要能看到上传一张胎面照片、系统秒级返回缺陷位置和面积,就能判断方案是否可行。
3. 数据集准备与预处理
3.1 数据从哪里来:采集、标注与容量规划
轮胎缺陷分割项目的数据来源一般就两条路:一是从合作工厂的产线上采集,二是从公开工业缺陷数据集里筛选。我这次用的是某项目模拟的胎面缺陷数据集,图片分辨率为1280×1280,覆盖四类缺陷:气泡、裂纹、杂质、缺胶。总共采集了2000多张原始图片,其中包含缺陷的约1500张,其余为无缺陷的正常样本,用来做负样本抑制误检。
采集阶段有三个容易被忽视的问题,这里重点提示:
- 光照条件必须覆盖实际产线的明暗变化,只拍“好看”的图,模型到现场会严重退化;
- 缺陷样本要多样化,同一类缺陷要有大小、位置、旋转角度、严重程度的变化,不能都是“标准样本”;
- 正常样本同样关键,最好包含纹理不均、指纹印、轻微色差这些“伪缺陷”,帮模型学会区分。
标注工具推荐用常见的多边形标注工具,标注格式以JSON保存。对分割任务来说,标注质量直接影响模型上限。气泡类缺陷的边缘要尽量贴合真实轮廓,裂纹类缺陷的线宽虽然只有几个像素,但必须连续标出来,中断的标注会让模型学到断断续续的预测。我踩过的坑是:初期标注太粗放,边界画得随意,模型在测试集上mAP看着还行,但可视化出来掩码边缘锯齿感很强,最后只能重新返工部分数据。
3.2 格式转换与数据集划分
标注完成后的JSON文件需要转换成模型训练能直接使用的格式。yolov8-seg支持两种主流格式,一是YOLO style分割格式,每个实例一行:class_id x1 y1 x2 y2 ...(多边形归一化坐标);二是COCO格式。我这里选择的是YOLO格式,因为与训练框架集成最顺滑。
转换脚本的核心逻辑是:遍历JSON文件中的所有标注对象,提取类别ID和多边形顶点坐标,归一化到[0,1]区间,写入对应的txt文件。需要特别注意的是:多边形坐标的顺序要保持一致(顺时针或逆时针),模型在计算掩码损失时不要求顺序特定,但统一的方向能减少不必要的歧义;分母要小心处理,图片宽度和高度不一致时,x坐标除以原图宽,y坐标除以原图高,顺序不能反。
数据集划分我采用7:2:1的策略,训练集占70%,验证集占20%,测试集占10%。划分时按图片的所在产品批次分组,而不是纯随机划分。因为同一批次拍摄的图片光照相近,随机划分会导致验证集和训练集高度相似,评估结果虚高。这一点做工业项目的朋友一定要重视,否则模型上线后性能直接打折。
3.3 数据增强策略:怎么加才不把缺陷增强没了
数据增强在工业缺陷分割里是个双刃剑。增强幅度太小,模型泛化不行;增强幅度太大,会把细小的裂纹、低对比度的气泡弄丢。我最终保留的增强组合如下:
- Mosaic:4张图拼接训练,增强背景多样性。但对分割任务来说,Mosaic要做好边界处理,不能让缺陷被拼接到图像边界处截断,否则模型会学到残缺缺陷;
- 随机旋转:±10度,小角度旋转对胎面缺陷合理,过度旋转会让模型误以为纹理方向变了;
- HSV扰动:色调不动,饱和度和明度小幅扰动,模拟不同光照;
- 随机平移与缩放:缩放范围0.5~1.5,模拟拍摄距离的变化。
不使用的增强包括:大幅度的随机裁剪(缺陷区域很小,裁剪容易去掉目标)、高斯模糊(把裂纹细节糊了反而降低标注可信度)、Cutout(随机遮挡缺陷会让模型学到错误关联)。每个增强项都需要在验证集上单独评估,我是通过控制变量测试,发现mAP50-95的浮动范围大概在±1.5个百分点之间,最终保留的都是正向增益的组合。
4. 训练实操与改进点组合
4.1 环境准备:一张卡能跑起来的最低配置
先介绍我这里的运行环境,方便你对照:
- 操作系统:Ubuntu 22.04
- GPU:一张RTX 3090 24GB显存(其实yolov8-seg这种量级的模型,12GB显存也够跑)
- CUDA:11.8 + cuDNN 8.9
- Python:3.10
- 深度学习框架:PyTorch 2.0以上
依赖安装主要是克隆项目仓库后,用pip批量安装依赖。这里有一个经验教训:不要用最新版PyTorch直接跑旧版代码,yolov8的某些API在不同版本间有改动,最好严格按照项目附带的requirements.txt版本安装。另外,如果机器上有多张卡,训练脚本里要指定设备编号,否则默认从0号卡启动,容易撞显存。
数据集和配置文件的组织方式如下:
datasets/ tire_defect/ images/ train/ val/ test/ labels/ train/ val/ test/ data.yamldata.yaml内容很简单,指定路径、类别数量和类别名称即可。值得注意的一个细节是:路径要写绝对路径,否则切换目录执行脚本时容易找不到数据,白跑一趟。
4.2 一键训练脚本的核心参数详解
项目里的一键训练脚本,本质上是对ultralytics框架的二次封装。脚本内部完成的动作包括:读取配置文件、检查数据集完整性、设置随机种子、加载预训练权重、启动训练、保存最优模型、输出评估指标。命令行用法大致如下:
python train.py \ --model configs/yolov8-seg-C2f-RFAConv.yaml \ --data datasets/tire_defect/data.yaml \ --epochs 200 \ --batch-size 16 \ --imgsz 640 \ --device 0 \ --project runs/tire_seg \ --name exp_c2f_rfaconv关键参数的含义和选值逻辑:
--imgsz 640:训练分辨率。原始图片是1280,直接缩放到640训练速度更快,但细小的裂纹可能被缩小后丢失。我实际测试下来,640和800之间有约2个点的mAP50差异,但训练时间差了接近一倍。最终选640,配合更高分辨率的推理,兼顾两者的优势;--batch-size 16:取决于显存。24GB显存跑16没问题,如果降到12GB就改成8;--epochs 200:分割任务的收敛速度比检测慢,前80轮loss下降明显,120轮以后进入平台期,200轮能够充分收敛且不会严重过拟合;--patience 30:早停机制,验证集指标连续30轮不提升就自动停止,可以节省时间。
训练时建议开启AMP混合精度训练,在3090上能把单轮时间从50秒压到30秒左右,精度损失几乎可以忽略。
4.3 改进点怎么搭配才有效:从消融实验说起
标题里提到“50+全套改进创新点”,这里把我在项目里的实际使用逻辑讲清楚。面对几十个改进模块,千万别一把梭全塞进去。模块堆多了,训练不稳、显存爆炸,最后分析不出哪些改进真正有效,写论文也没法交代。
我的做法是采用金字塔式渐进策略,分三个阶段逐步加入模块:
第一阶段使用baseline模型settle基线,记录初始mAP和速度指标。第二阶段逐一加入单个模块,比如只加入C2f-RFAConv、只加入aux分支,分别训练,记录各自的涨点幅度。这样做的好处是每个模块的独立贡献都是透明的。第三阶段将增益为正且互不冲突的模块组合起来,形成最终模型,再跑一轮完整训练。
从消融结果来看,C2f-RFAConv主要提升了mAP50-95,说明它对掩码边缘质量和分类精度的帮助更明显;aux分支对mAP50有显著提升,但对mAP50-95增益有限,分析原因可能是辅助监督让浅层特征更关注“找到缺陷”,而深层特征对“精细分割”的贡献还需要主监督来训练。二者结合后,mAP50和mAP50-95都有正向提升,且推理速度没有额外开销,因为aux分支只在训练阶段存在,推理时被移除。
另外注意改进模块在yaml文件里的写法。以yolov8-seg-C2f-RFAConv为例,需要在模型的Backbone或Neck层,把原有的C2f模块替换为RFAConv版本的C2f,同时确保输出通道数不变。这一步最容易出错的是通道数匹配,写错一个字模型直接加载失败,而且报错信息不一定直观,要耐心检查。
4.4 训练过程监控:Loss曲线和指标怎么看
训练时我习惯同时开着两个监控:显存占用loss曲线和验证集指标。Loss下降的形态能暴露很多问题,比如学习率太大时,前几个epoch loss会出现尖峰;检测分支和分割分支的loss幅度差异较大时,需要调整对应的损失权重。
对分割任务来说,重点看三个指标:box mAP、mask mAP、mask mAP50-95。mask mAP是分割任务的独特指标,计算的是预测掩码和真实掩码的IoU。如果box mAP正常但mask mAP很低,说明检测分支找到了缺陷位置,但分割头没把轮廓画准,可以优化分割分支的损失权重或增强浅层特征监督;如果两者都低,大概率是特征提取能力不足,优先考虑Backbone层面的改进,比如加注意力模块。
验证集上还要单独查看每类缺陷的AP值。我遇到过的情况是:气泡和缺胶的AP都比较高,但裂纹AP明显偏低,原因是裂纹细长、像素占比小、且与胎面纹理难以区分。针对这类单类别短板,常规手段有三:一是补充该类的样本数量;二是给该类更高的损失权重;三是采用小目标增强策略。这些都验证过,组合使用后的提升最明显。
5. 模型评估与Web端部署
5.1 评估指标解读:mask mAP之外还要看什么
模型训练完成后,需要做一轮系统的评估,不能只看一个mAP数字就草率收工。我在项目里固定输出以下四类信息:
| 指标类别 | 具体指标 | 关注点 |
|---|---|---|
| 检测精度 | box mAP50、mAP50-95 | 缺陷定位框的准确性 |
| 分割精度 | mask mAP50、mAP50-95 | 掩码轮廓与真实缺陷的贴合度 |
| 类别均衡 | 每类缺陷的AP50 | 是否存在被模型忽略的弱类别 |
| 推理性能 | 单图推理耗时、GPU内存占用 | 能否满足产线实时要求 |
从实测结果看,最终模型在测试集上的mask mAP50约为87%,mask mAP50-95约为62%,单张640×640图像推理耗时约为35ms,在RTX 3090上。这个精度对缺陷筛选来说已经够用,但要达到95%以上的稳定检出率,还需要结合产线数据做针对性调优。
这里要提醒一句:测试集上如果包含大量与训练集同批次的图片,评估结果会偏高。严谨的做法是把同一生产线不同时间段采集的图片单独留出测试,模拟跨时间漂移场景,这样得出的指标才有参考价值。
5.2 模型导出:从PyTorch权重到服务端可加载格式
训练完成后,权重文件是PyTorch格式的.pt文件,在推理服务中直接使用是可行的,但更推荐先做一步模型简化。因为服务端推理时不需要梯度、不需要辅助头,导出成TorchScript或ONNX格式后,加载速度更快,结构更清晰,也不容易受训练代码改动的干扰。
导出命令参考:
yolo export model=runs/tire_seg/exp/best.pt format=onnx opset=12 imgsz=640导出时需要注意:如果模型定义文件中包含自定义模块如RFAConv,ONNX导出时可能会遇到不兼容的算子,此时需要确认模块是否可以用标准卷积和注意力组合来表达,或者在导出脚本里手动替换。这一点算是自定义改进模块落地时最常见的一个坎。导出后用ONNX Runtime做一轮推理对比,确认输出与PyTorch结果基本一致。
如果不想引入ONNX依赖,直接用.pt权重部署也完全可以,FastAPI加载起来一样方便。工程上最忌讳的是为了炫耀技术栈引入一堆中间格式,部署链路越简单,出问题的时候越容易排查。
5.3 Web前端展示:上传图片、实时分割、结果统计
Web端展示是整个项目的“门面”,也是最容易让业务方直观感受算法效果的环节。后端接口我设计了两个:
- 单图检测接口:接收图片文件,返回分割可视化的base64编码图片和缺陷统计数据JSON;
- 批量状态查询接口:返回当前系统的健康状态、最近检测结果等,方便演示时展示。
前端页面的核心逻辑是:在页面上放置一个文件上传区域,用户选择或拖入图片后,JavaScript通过fetch向后端发送POST请求,等待后端返回结果后,把检测图片显示在画布上,同时在表格中展示每个缺陷的类别、置信度、面积占比和位置坐标。
接口返回的JSON结构大致如下:
{ "defect_count": 3, "defects": [ {"class": "bubble", "confidence": 0.92, "area": 321.5}, {"class": "crack", "confidence": 0.87, "area": 98.2} ], "image_base64": "/9j/4AAQ..." }前端拿到JSON后,直接解析渲染。这里有两个细节值得提:一是图片传输使用base64编码虽然方便,但体积增大三分之一左右,演示环境内网传输没问题,公网部署则需要改用图片压缩或文件流模式;二是分割掩码的原始输出是张量,转化成可视化掩码时要选择合适的颜色和透明度,否则缺陷轮廓被颜色盖得太厚反而看不清。
6. 常见问题与排查技巧实录
6.1 训练问题速查表
| 问题现象 | 可能原因 | 解决方法 |
|---|---|---|
| 训练时loss不下降 | 学习率过大或过小 | 检查初始学习率,调整为0.001或更低;用warmup处理 |
| mask mAP低但box mAP正常 | 分割头监督不足 | 增大分割分支损失权重或增加aux辅助监督 |
| 某些类AP明显偏低 | 该类样本少或难度大 | 补充样本、增加该类损失权重、针对性增强 |
| 推理时显存溢出 | 输入分辨率过大或模型过大 | 降低推理imgsz、改用半精度推理、清理GPU缓存 |
| 加载模型时报错 | 配置文件通道数不一致 | 逐层检查改进模块的输入输出通道数 |
6.2 推理结果常见的“脏数据”问题
模型训练完成后,我拿了一批产线真实图片做推理,发现两个典型问题,值得单独说说。
第一个问题是掩码粘连。同一张图上两个相邻的气泡,模型倾向输出连接在一起的掩码,而不是两个独立实例。原因是两个缺陷距离太近,特征层面无法区分边界。解决办法是在后处理阶段加一个连通域分析,结合置信度和距离阈值,将大掩码切分为独立实例。虽然这个方法不优雅,但工程上非常管用。
第二个问题是纹理误检。轮胎表面的模具印字、条纹,在某些光照角度下看起来像裂纹。这类误检在高分辨率图片上更明显。解决思路是收集这些“伪缺陷”作为负样本,加入训练集。我补充了约200张伪缺陷图片后,误检率显著下降。这说明负样本在工业质检任务里的重要性,很多时候比盲目增加正样本更有效。
6.3 一键训练脚本常见的运行问题
一键训练脚本虽然做了很多自动检查,但实际运行中还是会遇到一些环境层面的问题。最常见的是依赖库版本冲突,特别是numpy和opencv的版本组合,经常出现编译错误或不兼容API。建议根据项目文档安装指定版本,不要贸然升级。
另一个容易出问题的是路径中含中文或空格。Windows环境下,数据路径或输出路径如果包含中文,PyTorch的数据加载有时会报奇怪的文件错误。经验是把项目和数据放在纯英文路径下运行,能省不少排查时间。
还有一点是预训练权重的选择。yolov8-seg训练时如果不加载预训练权重,收敛会很慢且精度上限偏低。项目提供多种预训练权重,务必下载与模型配置文件匹配的权重,比如改进模型直接加载官方权重时,某些新增模块的层没有初始化参数,此时需要设置pretrained=False,只加载基础层的权重,或者采用“部分加载”的方式,把能匹配的层参数复制过来。
7. 个人经验总结与项目扩展建议
7.1 实际跑通整个项目后,我最想说的三件事
第一件事:不要迷信改进模块的数量,要迷信涨点实验的透明度。我见过太多实验室项目塞了七八个模块,mAP涨了,但响应时间暴增50%,产线根本没法用。修行是选两三个有效的改进点,把消融实验做扎实,在说明每个改进点的贡献的同时,也要给出速度指标。这套打法无论对发论文还是工业交付,都是加分项。
第二件事:数据集的质量决定了模型的天花板。yolov8-seg本身是一个很成熟的baseline,你用改进模块再怎么折腾,都不如把数据标注重做一遍来得有效。我在项目中期重新标注了一批“边缘不清晰”的缺陷图片之后,mAP50-95一次性涨了3个多点。这个涨幅比任何注意力机制都大。
第三件事:部署端永远比训练端更“忙”。训练只要跑完看结果,部署要考虑推理速度、异常处理、接口稳定性、并发压力。Web前端展示看似简单,实际上是最容易暴露问题的地方。这套系统在演示时踩过图片上传卡死的坑,最后通过限制上传大小和增加前端loading状态解决了。
7.2 后续可以扩展的方向
这套轮胎缺陷分割系统虽然已经完整跑通,但离一个真正的产线产品还有距离。我后续打算在三个方向上继续做扩展:
一是引入多视角融合。目前模型只处理单张胎面图像,实际产线往往需要多角度相机采集同一胎的多个部位。如果能把多视角信息拼接或融合起来,对跨视角大幅度的缺陷(比如胎侧到胎肩的裂纹)检测效果会更好。
二是开展边缘端部署。yolov8-seg模型量化和TensorRT加速后,在边缘设备上跑实时推理是完全可行的。目前单张推理35ms主要集中在显卡后处理上,换成TensorRT以后有望压到15ms以内,真正做到跟随产线节拍。
三是构建持续学习闭环。产线运行一段时间后,会出现新形态的缺陷,模型需要增量更新。可以在后端加一个人工标注界面,业务方把模型漏检的图片标注后自动补充到训练集,形成数据回流闭环。这算是工业视觉项目的终态目标。
这套项目给我最大的感受是:从算法到系统,中间隔着几十个细节问题。每个细节单独拎出来都不难,但谁先跑通这条全链路,谁就能在业务里抢得先机。希望这篇分享能帮你少走一些弯路。