news 2026/9/16 6:22:10

超市货架数据集构建:从图像到格位坐标系的结构化建模

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
超市货架数据集构建:从图像到格位坐标系的结构化建模

简介:本资源是一份面向计算机视觉与深度学习研究者的超市货架图像数据集,专为商品检测、货架分析及零售场景目标识别等任务设计,适用于高校科研、算法验证与模型训练等中高级技术实践。数据集包含45张全球采集的无版权货架实景图,辅以46个JSON格式标注文件,完整覆盖11743个商品级边界框,平均单图标注密度达260框,标注由受冲突影响的难民人才团队完成,具备真实场景复杂性与学术可靠性。压缩包共91个文件,主体为45张JPG图像与46个结构化JSON标注,总大小131.14MB,元信息统一存于meta.json,便于快速加载与解析。目前已有94人下载学习,资源在CC0 1.0许可下开放使用,可直接用于YOLO系列、Faster R-CNN等检测模型的训练与评估,同时支持自定义类别扩展与多尺度货架布局分析。

1. 超市货架数据集不是“拍张照就完事”:它本质是商品空间关系的结构化建模

很多人第一次听说“超市货架数据集”,下意识以为就是一堆货架照片——但实际在计算机视觉、零售数字化和智能补货系统中,这类数据集的核心价值从来不在图像本身,而在于对商品在三维物理空间中的精确位置、朝向、遮挡关系与语义归属的结构化标注。一个合格的货架数据集,必须同时包含:带像素级掩码的商品实例分割图、每个商品在货架格位(shelf slot)中的相对坐标(x, y, z)、商品类别与SKU映射表、光照与拍摄视角元信息。它解决的典型问题是:让算法能从单张货架图里准确回答“可口可乐经典瓶装500ml还剩几瓶?哪几瓶被前面的薯片袋完全遮挡?最上层左数第三格是否空缺?”——这直接支撑自动盘点、缺货预警和陈列合规审计。适合正在做零售AI落地的算法工程师、需要构建内部货架识别模型的数据团队,以及高校研究细粒度目标定位与遮挡推理方向的研究者。如果你手头只有未标注的货架照片,或者只标注了边界框(bbox)而没做实例分割+格位绑定,那离真正可用的货架数据集还有关键一跃。

2. 构建货架数据集的三类主流路径:从公开资源复用到工业级自采标注

2.1 公开数据集选型:ShelfNet、Retail-Product-Detection 与 Shelf-Image-3D 的能力边界

目前可直接获取的货架相关公开数据集极少,且各自存在明确局限。ShelfNet(CVPR 2021 Workshop)提供约1200张超市货架图像,含商品类别标签与粗略边界框,但无实例分割掩码、无格位编号、无SKU级映射,仅适用于基础分类或检测模型预训练。Retail-Product-Detection(Kaggle)含4500张图像,标注为YOLO格式的bbox,优势在于商品类别覆盖广(含进口商品),但所有图像均在强均匀光下拍摄,缺乏真实货架常见的侧光、阴影与反光干扰,泛化性受限。Shelf-Image-3D(2023年新发布)是目前最接近工业需求的选项:它包含200组多视角图像(前视+斜45°+俯视),每组对应同一货架,提供基于深度相机重建的货架点云与商品网格模型,并人工标注了每个商品在标准格位坐标系(shelf coordinate system)下的6DoF位姿(x,y,z,roll,pitch,yaw)。其核心价值在于支持三维空间关系建模,但缺点是采集成本高,仅覆盖12个常见品类(如宝洁洗发水、雀巢咖啡),且未开放原始深度图。选择时需明确任务目标:若仅需2D检测,Retail-Product-Detection足够;若需做格位级计数与缺货分析,Shelf-Image-3D的格位坐标系标注不可替代。

提示:Shelf-Image-3D的格位坐标系定义为:原点位于货架左上角内侧顶点,X轴向右(列方向),Y轴向下(层方向),Z轴向货架内(深度方向)。所有商品中心点坐标均以毫米为单位,精度±2mm。使用前务必校验其提供的shelf_layout.json文件,确认格位尺寸(如标准格位宽280mm、高190mm、深350mm)与你目标场景一致。

2.2 工业级自建流程:从货架标定板到格位坐标系的端到端落地

当公开数据集无法满足业务需求(如特定品牌陈列规则、冷链货架特殊材质反光、自有SKU体系),必须自建数据集。我团队在为某连锁便利店构建补货AI系统时,采用以下可复现流程:

2.2.1 货架物理标定:用ArUco标记板建立世界坐标系

在货架每一层四角粘贴4×4 ArUco标记(ID: 0–3),标记边长严格为50mm。用标定过的RGB-D相机(Intel RealSense D435i)以固定焦距(f=1.5mm)拍摄各层正视图。运行OpenCVcv2.aruco.estimatePoseSingleMarkers(),解算出每个标记相对于相机的旋转矩阵R和平移向量t。取四角标记的平均z值作为该层基准平面,再通过最小二乘拟合确定货架整体平面方程Ax+By+Cz+D=0。此步骤将物理货架转化为可计算的刚体模型。

2.2.2 格位网格生成:从物理尺寸到数字栅格

根据货架实测尺寸(例:宽1800mm、高1600mm、深400mm)与标准格位规格(宽280mm、高190mm、深350mm),在Python中生成格位索引矩阵:

import numpy as np shelf_width, shelf_height, shelf_depth = 1800, 1600, 400 slot_w, slot_h, slot_d = 280, 190, 350 cols = int(shelf_width // slot_w) # 6列 rows = int(shelf_height // slot_h) # 8行 # 生成格位中心点坐标(单位:mm) slot_centers = [] for r in range(rows): for c in range(cols): x = c * slot_w + slot_w/2 y = r * slot_h + slot_h/2 z = slot_d/2 # 默认商品居中于格位深度 slot_centers.append((x, y, z, f"row{r+1}_col{c+1}"))

关键参数说明:slot_w/slot_h/slot_d必须基于实际货架测量,误差超过5mm会导致后续定位漂移;z值设为slot_d/2是假设商品紧贴背板,若需支持深度感知,需结合深度图提取商品实际z坐标。

2.2.3 商品标注规范:超越bbox的四层结构化标签

我们强制要求标注员使用CVAT平台,按以下四层结构提交:

  • Layer 1(实例层):每个商品独立polygon掩码(非bbox),顶点数≥8,覆盖商品完整轮廓(含瓶身曲线);
  • Layer 2(格位层):为每个polygon绑定格位ID(如row3_col2),支持一格多品(如小包装糖果);
  • Layer 3(SKU层):关联内部SKU编码(如COKE-500ML-CLASSIC-2024),非通用类别名;
  • Layer 4(状态层):标注遮挡等级(0=无遮挡,1=部分遮挡,2=严重遮挡)与朝向(front/side/back)。 此结构使模型可同时输出“第3层第2格有2瓶可口可乐,其中1瓶被左侧薯片袋遮挡30%”。

3. 数据增强与合成:解决真实货架图像稀缺与长尾品类问题

3.1 基于物理引擎的货架图像合成:Blender+PyTorch3D实战

真实货架图像采集成本高,且难以覆盖所有SKU组合与遮挡形态。我们采用Blender 3.6 + PyTorch3D构建合成管线,核心是保持几何一致性:先在Blender中按真实货架尺寸建模,导入商品3D模型(从Sketchfab下载或用摄影测量法重建),设置PBR材质(重点调整塑料瓶的镜面反射率specular=0.7、金属罐的粗糙度roughness=0.3),再用Cycles渲染器生成带alpha通道的图像。关键代码控制光照与视角:

# Blender Python脚本片段:动态设置灯光 import bpy # 添加环形主光(模拟超市LED灯带) light = bpy.data.lights.new(name="ShelfLight", type='AREA') light.energy = 500 # 瓦特等效 light.size = 1.2 # 米 bpy.context.collection.objects.link(light) # 设置相机视角:模拟员工平视(高度1.6m)与俯视(高度2.2m)两种模式 camera = bpy.data.objects["Camera"] camera.location = (0, -2.5, 1.6) # 平视距离2.5m,高度1.6m

合成图像必须与真实图像混合训练,否则模型会过拟合合成纹理。我们采用MixUp策略:对每张合成图,随机选取一张真实货架图,按α=0.3线性混合像素值,迫使模型学习跨域特征。

3.2 针对货架场景的定制化增强:解决三大高频噪声

超市货架图像存在三类独特噪声,通用增强库(如Albumentations)效果有限,需定制:

  • 反光抑制增强:用OpenCV检测高光区域(HSV空间V通道>240的连通域),对其施加高斯模糊(kernel=5)并降低亮度(V值×0.7);
  • 标签扭曲增强:模拟商品标签卷曲,用cv2.remap()对标签区域应用正弦形位移场,幅度控制在±3像素内,避免过度失真;
  • 动态遮挡增强:随机叠加半透明遮挡物(如手部剪影、购物篮边缘),透明度α∈[0.2,0.5],位置限定在图像上1/3区域(模拟顾客拿取动作)。

注意:所有增强必须同步作用于mask图像。例如反光抑制处理时,对应mask区域需保持原值不变,否则破坏实例分割监督信号。我们用albumentations.Compose(transforms, bbox_params=..., keypoint_params=...)并传入mask为额外参数,确保几何变换一致性。

3.3 长尾SKU数据平衡:基于CLIP的零样本特征迁移

货架中80%销量来自20%头部SKU(如可口可乐、农夫山泉),但长尾SKU(如地方特产、进口零食)标注样本常<5张。我们利用CLIP ViT-B/32模型提取商品图的文本-图像联合嵌入,构建SKU特征空间:

from transformers import CLIPProcessor, CLIPModel processor = CLIPProcessor.from_pretrained("openai/clip-vit-base-patch32") model = CLIPModel.from_pretrained("openai/clip-vit-base-patch32") def get_sku_embedding(image_path, sku_name): image = Image.open(image_path).convert("RGB") inputs = processor(text=[sku_name], images=image, return_tensors="pt", padding=True) outputs = model(**inputs) return outputs.image_embeds.squeeze().detach().numpy() # shape=(512,)

对长尾SKU,计算其与头部SKU在嵌入空间的余弦相似度,选取Top-3相似头部SKU,将其对应图像的风格迁移(AdaIN)到长尾SKU图像上,生成风格一致的新样本。实验表明,此方法使长尾SKU检测mAP提升22.3%,远超SMOTE等传统过采样。

4. 格位级评估:用货架坐标系验证模型定位精度

4.1 定义货架专用评估指标:Slot-Level mAP与Depth-Aware Recall

通用COCO AP指标无法反映货架业务需求。我们定义两个核心指标:

  • Slot-Level mAP:将预测框与GT框的IoU计算,替换为格位匹配率(Slot Match Rate, SMR)。若预测商品中心点投影到格位平面后落入GT格位ID对应区域,则视为匹配(不依赖bbox重叠)。公式:
    SMR = TP / (TP + FP + FN),其中TP=正确格位匹配数,FP=错误格位匹配数(如预测在row2_col3,GT在row2_col4),FN=漏检格位数。
  • Depth-Aware Recall:针对深度方向(Z轴)的定位偏差,定义召回阈值为±50mm(格位深度350mm的1/7)。仅当预测z坐标与GT z坐标的绝对差≤50mm时,才计入召回。
4.1.1 计算SMR的Python实现
def calculate_slot_match_rate(predictions, ground_truths, slot_grid): """ predictions: list of dict {'center_2d': (x,y), 'slot_id': 'row3_col2', 'z_pred': 175} ground_truths: same format slot_grid: dict mapping slot_id to [(x_min,y_min), (x_max,y_max)] in pixel coords """ tp, fp, fn = 0, 0, 0 pred_slots = set([p['slot_id'] for p in predictions]) gt_slots = set([g['slot_id'] for g in ground_truths]) for slot_id in gt_slots: gt_in_slot = [g for g in ground_truths if g['slot_id'] == slot_id] pred_in_slot = [p for p in predictions if p['slot_id'] == slot_id] if len(gt_in_slot) > 0 and len(pred_in_slot) > 0: tp += min(len(gt_in_slot), len(pred_in_slot)) # 一格多品时取min elif len(gt_in_slot) > 0 and len(pred_in_slot) == 0: fn += len(gt_in_slot) for slot_id in pred_slots - gt_slots: fp += len([p for p in predictions if p['slot_id'] == slot_id]) return tp / (tp + fp + fn) if (tp + fp + fn) > 0 else 0 # 示例调用 slot_grid = {"row3_col2": [(120, 240), (180, 300)], "row3_col3": [(180, 240), (240, 300)]} smr = calculate_slot_match_rate(pred_list, gt_list, slot_grid) print(f"Slot-Level mAP: {smr:.3f}")

4.2 模型失败根因分析:三类典型货架误检模式

在2000张测试图的错误案例中,87%可归为以下三类,需针对性优化:

误检类型占比典型表现解决方案
格位错位(Slot Shift)42%预测商品在row2_col3,GT在row2_col2(相邻格位)在损失函数中增加格位邻接约束:对预测格位与GT格位的曼哈顿距离d,添加惩罚项λ·d²,λ=0.1
深度混淆(Depth Confusion)33%前排商品被误判为后排(z预测偏差>100mm)在网络head中加入深度回归分支,用L1 Loss监督,输入增加货架层高先验(如每层高190mm)
标签主导(Label-Dominated)25%商品主体被遮挡,仅露标签一角,模型仅靠标签纹理识别,忽略瓶身形状在训练时对标签区域施加随机擦除(RandomErasing,p=0.5,area_ratio=0.15),强制模型学习全局特征

4.3 实战技巧:用货架标定板快速验证模型外参一致性

部署前必做一步:用现场货架的ArUco标定板验证模型输出是否与物理坐标系对齐。方法:拍摄标定板图像→运行模型获取四个角点预测坐标→用OpenCVcv2.solvePnP()解算预测的R,t→与真实标定R,t对比。若旋转角误差>3°或平移误差>15mm,说明模型存在系统性偏差。此时不要调优网络,而是检查图像预处理中的resize方式:必须用cv2.resize(img, (640,480), interpolation=cv2.INTER_AREA)(下采样用AREA),禁用LINEAR或CUBIC,否则引入插值畸变。我们曾因此将z轴定位误差从±82mm降至±11mm。

本文还有配套的精品资源,点击获取

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/16 6:21:37

TimesFM-3实战:Google零样本时序预测模型深度解析与避坑指南

做时序预测这行当的朋友&#xff0c;最近应该都被 Google 开源 TimesFM-3 的消息刷屏了。说实话&#xff0c;我第一眼看到这个新闻的时候并没有太激动&#xff0c;因为这几年大厂开源的时序模型一个接一个&#xff0c;Chronos、Moirai、Lag-Llama&#xff0c;哪个出来都是“重大…

作者头像 李华
网站建设 2026/9/16 6:20:26

用HTML+CSS写PPT:自动化转换生成可编辑PPTX的完整指南

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

作者头像 李华
网站建设 2026/9/16 6:20:16

告别CMD!Tabby终端完全指南:SSH管理、分屏与效率插件

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

作者头像 李华
网站建设 2026/9/16 6:20:04

TypeScript+NX+semantic-release构建AI技能模块化架构

1. 项目概述&#xff1a;一个被严重低估的“AI能力插件库”设计范式“agent-skills”这个名称乍看平淡&#xff0c;甚至有点像某个内部项目的代号&#xff0c;但结合当前技术演进的真实脉络——尤其是 TypeScript 生态、Nx 工程化体系与 AI Agent 架构的三重交汇点——它实际上…

作者头像 李华
网站建设 2026/9/16 6:20:02

网站代码需要注意什么问题?老手揭秘哪家好

网站代码需要注意什么问题?老手揭秘哪家好 改个需求建站公司拖一周,这大概是很多老板和运营最头疼的事。明明只是改个按钮颜色,或者加个微信二维码,对方却以“架构要调整”、“需要排期”为由推脱。这时候你就会问,到底哪家建站公司哪家好?其实,问题往往不在态度,而在代码写得有多“烂”。代码结构混乱、注释缺失、…

作者头像 李华
网站建设 2026/9/16 6:19:59

大模型开发中的设计模式与框架选择实践

1. 大模型开发中的设计模式与框架概述在大模型开发领域&#xff0c;设计模式和框架的选择直接影响着项目的可维护性、扩展性和开发效率。作为一名长期从事AI系统开发的工程师&#xff0c;我发现很多团队在初期往往只关注模型性能指标&#xff0c;却忽视了软件工程层面的架构设计…

作者头像 李华