边缘端商品识别系统构建实战:基于YOLO系列的货架缺货检测方案从训练到部署完整记录
边缘端商品识别系统构建实战基于YOLO系列的货架缺货检测方案从训练到部署完整记录一、项目背景与需求定义零售门店的货架缺货检测是库存管理中的核心痛点。传统方案依赖人工巡检平均每店每日耗费2.5小时巡检工时漏检率高达18%。将视觉检测能力部署至边缘设备可在摄像头端实时判定缺货状态并上报云端将巡检响应周期从小时级缩短至秒级。本项目目标参数如下指标目标值缺货检测准确率≥95%mAP0.5单帧推理延迟≤120msARM Cortex-A72平台模型参数量≤8MBINT8量化后连续运行功耗≤5W日均上报频率每15分钟一次状态快照硬件选型为瑞芯微RK35684×A722.0GHz NPU 0.8TOPS配合2MP宽动态摄像头模组。NPU支持INT8卷积加速但后处理算子需在CPU侧完成这是后续部署调优的关键约束点。二、数据采集与模型训练数据集构建流程实际采集覆盖6家门店、42个货架位共标注12,800帧图像。缺货样本占比约22%在架56%遮挡22%。数据增强策略模拟了货架灯光闪烁亮度±30%、顾客遮挡随机矩形掩码以及排列不齐水平平移±5%等真实场景干扰。训练配置选用YOLOv8s11.2M参数输入分辨率640×640batch32学习率cosine衰减从0.01至0.001共300 epoch。验证集mAP0.5达到0.963测试集0.951满足部署指标。# 训练启动脚本关键配置 import ultralytics model ultralytics.YOLO(yolov8s.pt) result model.train( datashelf_empty.yaml, # 数据集描述文件 epochs300, imgsz640, batch32, lr00.01, lrf0.001, augmentTrue, device0, # GPU训练 workers8, projectshelf_detect, nameyolov8s_v1, ) if result is None: raise RuntimeError(训练过程异常终止请检查数据集路径与GPU状态)三、模型量化与边缘部署ONNX模型经onnxruntime验证无误后通过RKNN-Toolkit2完成INT8量化。量化校准数据取验证集的200帧覆盖不同光照条件。量化后模型体积从28.3MB压缩至7.8MBmAP0.5从0.951降至0.931下降2.1%仍在可接受范围内。板端单帧推理耗时98ms满足≤120ms指标。// RKNN模型加载与推理核心代码 #include rknn_api.h int run_shelf_detect(const char *model_path, const uint8_t *frame_buf, int width, int height, rknn_output *outputs) { rknn_context ctx 0; int ret rknn_init(ctx, model_path, NULL, 0, NULL); if (ret ! RKNN_SUCC) { fprintf(stderr, rknn_init 失败, 错误码: %d\n, ret); return -1; } rknn_input input { .index 0, .buf frame_buf, .size width * height * 3, .pass_through 0, .type RKNN_TENSOR_UINT8, .fmt RKNN_TENSOR_NHWC, }; ret rknn_inputs_set(ctx, 1, input); if (ret ! RKNN_SUCC) { fprintf(stderr, rknn_inputs_set 失败, 错误码: %d\n, ret); rknn_destroy(ctx); return -2; } ret rknn_run(ctx, NULL); if (ret ! RKNN_SUCC) { fprintf(stderr, rknn_run 失败, 错误码: %d\n, ret); rknn_destroy(ctx); return -3; } ret rknn_outputs_get(ctx, 3, outputs, NULL); if (ret ! RKNN_SUCC) { fprintf(stderr, rknn_outputs_get 失败\n); rknn_destroy(ctx); return -4; } rknn_destroy(ctx); return 0; }四、后处理优化与系统集成NPU输出的原始检测结果需经NMS非极大值抑制过滤后方可用。原始NMS在A72单核耗时约15ms通过以下优化降至4ms预设置信度阈值0.45直接剔除低分候选框减少排序量采用单类NMS货架缺货为单类检测场景避免多类并行计算将IoU计算改为整数近似牺牲0.5%精度换取2倍加速// 单类NMS快速实现整数IoU近似 static int fast_nms(box_t *boxes, int num, float iou_thresh, box_t *out, int max_out) { if (num 0 || boxes NULL || out NULL) { fprintf(stderr, fast_nms 输入参数异常\n); return 0; } // 按置信度降序排序部分排序取前max_out个即可 int effective (num max_out) ? num : max_out; for (int i 0; i effective; i) { int best i; for (int j i 1; j num; j) { if (boxes[j].score boxes[best].score) best j; } box_t tmp boxes[i]; boxes[i] boxes[best]; boxes[best] tmp; } int keep 0; uint8_t suppressed[256] {0}; // 标记被抑制的候选框 for (int i 0; i effective; i) { if (suppressed[i]) continue; out[keep] boxes[i]; for (int j i 1; j effective; j) { // 整数IoU近似: (交集面积 * 256) / (并集面积) int inter box_intersection_q8(boxes[i], boxes[j]); int union_ box_area_q8(boxes[i]) box_area_q8(boxes[j]) - inter; if (union_ 0) continue; int iou_q8 (inter 8) / union_; int thresh_q8 (int)(iou_thresh * 256); if (iou_q8 thresh_q8) suppressed[j] 1; } } return keep; }系统整体集成采用进程间MQ通信架构推理进程每15分钟提取一帧执行检测后将缺货层数写入共享内存上报进程读取后通过MQTT发布至云端。设备端平均功耗4.2WCPU降频至1.5GHz时满足≤5W约束。五、总结本方案从数据标注、模型训练、INT8量化到板端部署完整覆盖了边缘端货架缺货检测系统的构建流程。关键数据汇总环节核心指标实测值训练mAP0.50.951量化精度损失2.1%模型体积INT8后7.8MB板端推理单帧延迟98msNMS后处理耗时4ms系统功耗日均4.2W量化精度损失控制在2%以内推理延迟优于120ms目标说明YOLOv8s RK3568 NPU的组合在零售货架场景具备工程可行性。后续改进方向包括引入时序帧融合以降低遮挡误判率以及尝试YOLOv8n进一步压缩模型体积以适配更低算力平台。

相关新闻

HarmonyOS开发实战:小分享-Navigation 导航容器——替代 router 实现现代路由

HarmonyOS开发实战:小分享-Navigation 导航容器——替代 router 实现现代路由

前言 Navigation 组件 是 HarmonyOS 推荐的现代化路由方案,对比 ohos.router 提供了更丰富的导航能力,包括转场动画、路由栈管理、页面参数传递等。小分享 App 当前使用 router 路由,本篇讲解如何用 Navigation 重构。详细 API 可参考 Harmo…

2026/10/11 1:20:23 阅读更多 →
高速DAC电气特性深度解析:从数据手册到硬件设计实战

高速DAC电气特性深度解析:从数据手册到硬件设计实战

1. 从数据手册到设计实战:深度拆解DAC38RFxx系列高速DAC的电气特性在射频和无线通信系统的设计前线摸爬滚打十几年,我经手过的高速数模转换器(DAC)不计其数。每次打开一份新的DAC数据手册,尤其是像TI的DAC38RFxx这种旗…

2026/10/6 16:10:28 阅读更多 →
计算机毕业设计之智能家教平台

计算机毕业设计之智能家教平台

随着网络科技的不断发展以及人们经济水平的逐步提高,网络技术如今已成为人们生活中不可缺少的一部分,而信息管理系统是通过计算机技术,针对用户需求开发与设计,该技术尤其在各行业领域发挥了巨大的作用,相比于以前的传…

2026/10/5 5:22:37 阅读更多 →

最新新闻

找不到D3DCompiler_47.dll?系统修复与免费安全下载指南

找不到D3DCompiler_47.dll?系统修复与免费安全下载指南

我们的系统出现找不到D3DCompiler_47.dll问题 免费下载方法分享——在开发团队和运维群里被问过无数次的一个Windows组件报错,今天系统地把它聊透。先说说这个D3DCompiler_47.dll到底是干什么的:它是DirectX 11编译器的核心动态链接库,专门负…

2026/10/11 14:28:32 阅读更多 →
React Native for OpenHarmony 标签导航完整实现与踩坑实录

React Native for OpenHarmony 标签导航完整实现与踩坑实录

自己折腾了一把在鸿蒙设备上用 React Native 做标签导航,踩完坑之后把整套实现思路和关键细节理顺了。React Native for OpenHarmony 生态还在快速演进中,网上资料不少但大多数停留在“能跑起来”的层面,真正涉及到 TabNavigation 这种高频场…

2026/10/11 14:28:32 阅读更多 →
OSINT开源情报工具全攻略:从基础搜索到自动化情报分析管道搭建

OSINT开源情报工具全攻略:从基础搜索到自动化情报分析管道搭建

1. 想清楚再做:OSINT体系到底在构建什么 做网络安全和威胁分析这行,大家多多少少都听过“开源情报”这个词。这几年它被炒得很热,很多同行一上来就急着装工具,今天跑一下Shodan,明天试一下Maltego,后天又去…

2026/10/11 14:28:32 阅读更多 →
React Native for OpenHarmony 标签导航实现:从环境搭建到避坑指南

React Native for OpenHarmony 标签导航实现:从环境搭建到避坑指南

React Native for OpenHarmony 的标签导航(TabNavigation)是我最近研究的一个重点。说实话,跨端开发这么多年,底部标签页这种最基础的功能,放到新平台上依然能折腾出一堆问题。这篇文章会完整记录我从空工程到 TabNavi…

2026/10/11 14:28:32 阅读更多 →
Windows应用开发避坑指南:C#与XAML控件属性全程详解

Windows应用开发避坑指南:C#与XAML控件属性全程详解

简介:南邮Windows应用开发(双语)个人总结笔记以课程知识点为主线,全面梳理了Windows 10特性(快速流畅用户体验、多交互机制、数据共享、多桌面任务视图)、应用类型(桌面应用、商店应用、UAP、UW…

2026/10/11 14:28:32 阅读更多 →
Q-Learning MATLAB源码复现与调参实战:从网格世界到强化学习入门

Q-Learning MATLAB源码复现与调参实战:从网格世界到强化学习入门

简介:一份基于MATLAB的Q-Learning完整源代码及逐行注释文档,面向想通过具体案例理解经典强化学习算法的初学者。内容以161网格世界中的王子寻公主游戏为背景,涵盖环境可移动矩阵TT、奖赏矩阵R、折扣因子gamma、epsilon-greedy策略以及贝尔曼方…

2026/10/11 14:27:32 阅读更多 →

日新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/11 0:00:27 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/11 0:00:27 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 10:45:37 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 21:32:20 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 10:38:42 阅读更多 →