自动售货机商品识别YOLO模型训练实战:从6万张图片到98%识别率的完整复盘~YH

做AI视觉开门柜,核心就两件事:硬件跑得动,模型认得准。本文不讲理论,只讲数据准备、训练策略、部署优化这些实战细节。

一、数据准备:6万张图是怎么来的

很多人的第一反应是:"直接用公开数据集不就完了?"

公开数据集确实有,但自动售货机场景比较特殊------商品密集摆放、互相遮挡、光照条件差、SKU五花八门。公开数据集根本不适用。

我们的数据来源:

实景采集:在20台测试设备上部署数据采集功能,用户真实购物时自动记录视频和识别结果,持续采集了3个月,积累了约4.5万张真实场景图片。

主动补拍:针对数据不足的SKU和场景(夜间、遮挡、极端角度),专门组织补拍,约1.2万张。

合成数据:用图像合成技术生成了一些数据------把商品抠出来随机贴在背景上,约3000张。合成数据对提升模型泛化能力有一定帮助。

数据标注:找了8个标注人员,标注了全部6万多张图片。每张图标注商品类别和边界框,总共标注了41万个目标。

最终训练集6万张,验证集3000张,测试集3000张。覆盖SKU 300多种------饮料、零食、泡面、文具、日用品都有。

二、模型选型:YOLOv11n为什么是最佳选择

我们对比了YOLOv5s、YOLOv8n、YOLOv11n和轻量级方案。

YOLOv5s:推理速度只有15FPS,在RK3588上跑不太动。淘汰。

YOLOv8n:推理速度20FPS,精度尚可。YOLOv11n发布后性价比更高。淘汰。

YOLOv11n:推理速度23FPS,mAP@0.5约89.7%,模型体积不到45MB。最终选择。

轻量级方案(如MobileNet+SSD):精度只有80%出头,远不够用。淘汰。

三、训练策略:让模型适应售货机场景

训练过程分了四步:

第一步:用COCO预训练权重初始化,冻结主干网络,只训练检测头。这一步很快,1个epoch就能看到效果。

第二步:解冻全部网络,用较小学习率(1e-4)微调整个模型。这一步最耗时,但也是精度提升的关键。

第三步:数据增强训练------Mosaic增强、随机遮挡、随机亮度调整、随机旋转。专门加入遮挡和低光照的数据增强,模拟售货机真实场景。

第四步:用实际测试中表现不佳的图片做hard negative mining,重新训练一个epoch,专门处理难样本。

整个过程在单张RTX 3090上跑了大约5天。

四、夜间识别准确率为什么掉到91%?怎么解决的

白天自然光下准确率96%以上,夜间补光条件下只有91%-93%。这是最头疼的问题。

原因分析:夜间LED补光不均匀,有的区域过亮有的过暗;商品包装的反光材质在补光下产生眩光;模型对低光照条件下的特征提取能力不足。

我们的解决方案:

数据侧:在训练数据中加入大量低光照样本(亮度降低到原始图像的30%-50%),让模型适应低光环境。

硬件侧:调整LED补光灯的安装位置和角度,从顶部直射改为两侧45度照射,减少眩光。同时通过RK ISP的tuning工具调整白平衡和曝光参数。

算法侧:在推理管道中加入图像预处理------自动对比度拉伸,提升暗部细节。

最终结果:夜间准确率从91.3%提升到了95.8%。加上重力辅助校验后,端到端准确率稳定在98%以上。

五、SKU变化怎么处理?新增一种饮料要重新训吗?

零售场景的SKU变化非常频繁。今天上新一款饮料,明天下架一款零食。每次新增SKU都要重新训练模型的话,运维成本太高了。

我们的方案是两步走:

核心模型识别商品的大类(饮料、零食、日用品)和粗略特征(包装颜色、形状、大小)。在大类内再做增量学习,用少量样本(10-20张)训练一个轻量级分类器,区分同一大类的不同SKU。

新增SKU时只需要采集20张图片,用增量学习更新分类器即可,不需要重新训练整个模型。整个过程约30分钟,不需要重新部署。

实测:增量学习的分类准确率约92%,加上核心模型的初筛,整体准确率损失不到1%。

六、模型蒸馏:让轻量级模型学会大模型的本事

RK3588虽然算力够,但同时也跑着视觉推理、Android系统、支付模块、广告播放。YOLOv11n已经是最轻量级的版本,但23FPS的推理速度占用了大部分NPU资源。

我们尝试了模型蒸馏------用YOLOv11m(更大的模型)作为教师模型,蒸馏出更轻量的学生模型。

蒸馏结果是学生模型推理速度从23FPS提升到38FPS,mAP下降约2个百分点。速度换精度,对某些场景(要求更低功耗、更长续航)有价值。

七、总结

核心经验:模型精度不是瓶颈,数据质量和场景适配才是。

YOLOv11n在RK3588上的精度完全够用(白天96%,夜间95.8%),配合重力感应辅助校验后稳定在98%以上。真正需要花时间的是:

数据采集的覆盖率(光照、角度、遮挡、SKU、背景)。硬件ISP调优(曝光、白平衡、降噪、补光均匀性)。边缘端推理的稳定性(降频、延迟、内存泄漏)。

如果你正在做类似项目,建议把80%的精力放在数据、硬件和工程上,模型本身反而是最好解决的问题。

相关推荐
AlanBruce5 小时前
一键设备扫描功能详解
服务器·网络·网络协议·modbus·摩尔信使·设备扫描
苦猿的大模型日记5 小时前
Day51|从0学习Claude Code(一):一个while循环加一个Bash,复刻Claude Code的心脏
人工智能·学习·bash
烬羽5 小时前
一个博客系统,为什么要拆成 6 张表?
数据库·mysql
jump_jump5 小时前
我让本地 Qwen3.8 27B 搭了一个内网穿透服务
人工智能·llm·ai编程
程序员-Benothing5 小时前
MySQL 中的日志类型有哪些?binlog、redo log 和 undo log 的作用和区别是什么?
数据库·mysql
大锅盖15 小时前
HarmonyOS 6.1.1 AI字幕新特性深度解析:从AICaptionComponent四大新增字段到K歌社交舞台黑霓虹紫深色架构全链路实战
人工智能·架构·harmonyos
烟锁池塘柳05 小时前
课程学习(Curriculum Learning, CL):一种模仿人类从易到难学习过程的机器学习训练策略
人工智能·机器学习
XuCoder5 小时前
你写的每条 SQL 都没加过锁,可 MySQL 凭什么不怕两个事务打架?
数据库·后端
mengge.cloud5 小时前
Linux小白入门教程(基础命令篇)
linux·运维·服务器