Ultralytics SKU-110K 零售货架密集场景检测数据集:从 YAML 配置到 YOLO 训练全流程解析
Ultralytics SKU-110K 零售货架密集场景检测数据集从 YAML 配置到 YOLO 训练全流程解析【免费下载链接】ultralyticsUltralytics YOLO26, YOLO11, YOLOv8 — object detection, instance segmentation, semantic segmentation, image classification, pose estimation, object tracking项目地址: https://gitcode.com/GitHub_Trending/ul/ultralyticsSKU-110K 是 Ultralytics 官方支持的一个单类、高目标密度的零售货架目标检测数据集常用于训练和评测 YOLO 系列模型在拥挤场景下的检测能力。本文基于仓库中的 SKU-110K 数据集文档 与 SKU-110K.yaml 配置文件 展开讲清该数据集的划分、YAML 配置、自动下载与标注转换机制以及训练 YOLO26 的完整命令与代码写法帮助你把这套13.6 GB 一键下载 自动转 YOLO 格式的数据集真正用起来。一、SKU-110K 数据集概览SKU-110K 是一个由 Eran Goldman 等人CVPR 2019 论文《Precise Detection in Densely Packed Scenes》创建的单类目标检测数据集包含11,743 张密集排列的零售货架图像划分为 8,219 张训练、588 张验证、2,936 张测试图像。理解这个数据集有三个关键数字1 个检测类别所有商品都标注为一个object框names: {0: object}标注中不包含任何逐 SKU 的品类信息11 万个 SKUSKU-110K 的 110K 指的是横跨全部图像的不重复 store-keeping unit商品单元数量超过 11 万而不是11 万个检测类别——这是该数据集最常见的误解170 万个标注框全部图像累计超过 170 万个商品标注框平均每张图像约147 个紧密排列的商品目标。这种同类目标高度相似、彼此紧邻的密集排列使 SKU-110K 成为检验检测器在拥挤零售环境中定位精确性的典型基准。数据集许可为Research-Only仅研究用途实际工程使用前应自行确认授权范围。二、关键特性与适用场景文档归纳了 SKU-110K 的三大关键特性单类检测Single-class detection每个商品一个边界框全部归入唯一类别object模型只需学习哪里有商品而不需要区分具体商品种类极致的目标密度Extreme object density图像来自世界各地的商店货架平均每张约 147 个目标且外观相近甚至相同的商品常常紧贴在一起对 NMS、小目标定位和重叠框区分都是强考验大规模Large scale11 万 唯一 SKU、170 万 标注框、11,743 张图像足以训练并压测最先进的检测器。文档列出的典型应用方向包括零售库存管理与自动化retail inventory management电商平台中的商品识别product recognition陈列图合规校验planogram compliance verification门店自助结账系统self-checkout仓库中的机器人抓取与分拣robotic picking and sorting。如果你的目标恰好是数货架上的商品、检测漏摆/错摆位置这类任务SKU-110K 提供的高密度单类标注形态与实际业务高度吻合。三、数据集划分SKU-110K 的三个子集共享同一个object类别划分图像数用途Train8,219模型训练的图像与标注Validation588训练期间用于 验证 的留出图像Test2,936训练完成后的最终评测图像三个子集各自以图像清单文件train.txt/val.txt/test.txt形式引用这也是理解其 YAML 配置的关键。四、数据集 YAML 配置详解数据集配置由 ultralytics/cfg/datasets/SKU-110K.yaml 定义包含数据集路径、类别名和一段内嵌的下载/转换脚本。完整内容如下# Ultralytics AGPL-3.0 License - https://ultralytics.com/license # SKU-110K retail items dataset by Trax Retail # Example usage: yolo train dataSKU-110K.yaml # parent # ├── ultralytics # └── datasets # └── SKU-110K ← downloads here (13.6 GB) # Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, ...] path: SKU-110K # dataset root dir train: train.txt # train images (relative to path) 8219 images val: val.txt # val images (relative to path) 588 images test: test.txt # test images (optional) 2936 images # Classes names: 0: object # Download script/URL (optional) download: | import shutil from pathlib import Path import numpy as np import polars as pl from ultralytics.utils import TQDM from ultralytics.utils.downloads import download from ultralytics.utils.ops import xyxy2xywh # Download dir Path(yaml[path]) # dataset root dir parent Path(dir.parent) # download dir urls [http://trax-geometry.s3.amazonaws.com/cvpr_challenge/SKU110K_fixed.tar.gz] download(urls, dirparent) # Rename directories if dir.exists(): shutil.rmtree(dir) (parent / SKU110K_fixed).rename(dir) # rename dir (dir / labels).mkdir(parentsTrue, exist_okTrue) # create labels dir # Convert labels names image, x1, y1, x2, y2, class, image_width, image_height # column names for d in annotations_train.csv, annotations_val.csv, annotations_test.csv: x pl.read_csv(dir / annotations / d, has_headerFalse, new_columnsnames, infer_schema_lengthNone).to_numpy() images, unique_images x[:, 0], np.unique(x[:, 0]) with open((dir / d).with_suffix(.txt).__str__().replace(annotations_, ), w, encodingutf-8) as f: f.writelines(f./images/{s}\n for s in unique_images) for im in TQDM(unique_images, descfConverting {dir / d}): cls 0 # single-class dataset with open((dir / labels / im).with_suffix(.txt), a, encodingutf-8) as f: for r in x[images im]: w, h r[6], r[7] # image width, height xywh xyxy2xywh(np.array([[r[1] / w, r[2] / h, r[3] / w, r[4] / h]]))[0] f.write(f{cls} {xywh[0]:.5f} {xywh[1]:.5f} {xywh[2]:.5f} {xywh[3]:.5f}\n) # write label逐项解读配置语义path: SKU-110K数据集根目录相对于数据集下载目录默认datasets/即解压后位于datasets/SKU-110K。注释中的目录树提示了最终落盘位置总大小约13.6 GBtrain/val/test: *.txt这里采用的是 Ultralytics 数据集 YAML 三种引用形式中的图像清单文件形式另一种是直接指向图像目录或目录列表。train.txt、val.txt、test.txt每行一条./images/xxx相对路径由下方下载脚本自动生成names: {0: object}唯一的检测类别。check_det_dataset会据此推导nc 1download: |内嵌 Python 脚本这是理解第一次训练自动下载行为的核心。脚本分三步从 Trax Retail 官方 S3 地址下载SKU110K_fixed.tar.gz并解压将SKU110K_fixed重命名为SKU-110K读取原始的annotations/annotations_{train,val,test}.csv无表头列为image, x1, y1, x2, y2, class, image_width, image_height坐标为像素级 xyxy用polars高效解析为每张图像生成 YOLO 格式标签文件类号固定写0像素坐标除以图像宽高归一化后再经xyxy2xywh转为归一化 xywh每行以 5 位小数写入labels/image名.txt同时把每个子集的去重图像列表写成对应的.txt清单。xyxy2xywh工具函数定义在 ultralytics/utils/ops.py是 YOLO 标签格式的通用坐标转换入口。五、自动下载机制源码层面的调用链文档提示SKU-110K 在第一次训练时自动下载需要约 13.6 GB 磁盘空间且标注转换可能需要几分钟。这个行为的实现入口在 check_det_datasetultralytics/data/utils.py调用链可以概括为解析 YAMLcheck_det_dataset(dataset, autodownloadTrue)被训练流程调用后先加载 YAML校验train/val键存在、names或nc存在、类型合法并把train/val/test路径解析为绝对路径判定是否需要下载解析后的val或指定 split路径若不存在且 YAML 中含有download字段、autodownload为真则触发下载执行内嵌脚本download字段以http开头且以.zip结尾时按 URL 直接下载以bash开头时执行 shell 脚本否则——SKU-110K 正属于这种情况——以exec(s, {yaml: data})执行内嵌 Python 脚本脚本内可以直接引用yaml字典这就是上面脚本能使用yaml[path]的原因。# ultralytics/data/utils.py 中的核心分支节选 if s.startswith(http) and s.endswith(.zip): # URL safe_download(urls, dirDATASETS_DIR, deleteTrue) elif s.startswith(bash ): # bash script subprocess.run(s.split(), checkTrue) else: # python script exec(s, {yaml: data})也就是说你在训练命令中只需写dataSKU-110K.yaml框架会自动完成下载 13.6 GB 压缩包 → 解压改名 → 逐张图像把 CSV 像素标注转换为 YOLO 标签的全过程无需任何手工步骤。下载目录默认是DATASETS_DIRdatasets/若空间不足可通过设置文件调整该路径。六、训练 YOLO26 的完整用法在 训练文档 的参数体系下SKU-110K 的训练示例如下图像尺寸 640、100 个 epoch从预训练权重开始Python APIfrom ultralytics import YOLO # Load a model model YOLO(yolo26n.pt) # load a pretrained model (recommended for training) # Train the model results model.train(dataSKU-110K.yaml, epochs100, imgsz640)CLI# Start training from a pretrained *.pt model yolo detect train dataSKU-110K.yaml modelyolo26n.pt epochs100 imgsz640几个实用要点首次运行耗时构成约 13.6 GB 下载 170 万级标注的 CSV→YOLO 转换文档明确提示可能需要几分钟属于预期行为而非卡死磁盘与网络训练前请确认datasets/所在分区有 ≥ 13.6 GB 空闲空间以及到 Trax S3 源点的稳定网络参数查阅epochs、imgsz之外的完整训练参数批大小、增强开关、早停等参见 Training 文档 与 训练技巧指南评测训练完成后可用dataSKU-110K.yaml, splittest在 2,936 张测试图上做最终评测验证流程见 Validation 文档。对于更小的入门需求检测数据集总览 还列有 coco8、coco128 等体量更小的数据集可用于快速验证管线。七、样本数据与标注形态SKU-110K 的图像真实还原了商店货架数十个外观几乎相同的产品并排陈列同一张图中既有大目标也有大量小目标。文档给出的示例说明图像以密集货架为背景所有商品均用边界框标注在唯一的object类下。从标注转换脚本可以进一步推断其标注形态的细节原始标注 CSV 中每行含像素坐标(x1, y1, x2, y2)及图像宽高转换后每张图像对应一个labels/image名.txt每行格式为cls cx cy w h归一化、5 位小数。高物体密度意味着单张图像平均写出约 147 行标注这也是转换阶段耗时较长的直接原因。这种标注形态对检测器的要求集中在两点密集小目标不遗漏、相邻相似目标不合并。八、引用与致谢在研究或使用该数据集时建议引用原始论文inproceedings{goldman2019dense, author {Eran Goldman and Roei Herzig and Aviv Eisenschtat and Jacob Goldberger and Tal Hassner}, title {Precise Detection in Densely Packed Scenes}, booktitle {Proc. Conf. Comput. Vision Pattern Recognition (CVPR)}, year {2019} }文档同时致谢了 Eran Goldman 等人为计算机视觉研究社区创建并维护 SKU-110K 数据集。九、常见问题FAQSKU-110K 有 11 万个类别吗没有。它是单类数据集所有商品都标注为object类names: {0: object}。110K 指的是图像中出现的唯一 SKU 数量超过 11 万而非检测类别数。数据集具体有多少图像和类别11,743 张图像8,219 训练 / 588 验证 / 2,936 测试1 个检测类别object。详见上文数据集划分一节及 SKU-110K.yaml。下载体积多大需要手动下载吗约 13.6 GB无需手动下载——首次以dataSKU-110K.yaml训练时check_det_dataset会自动触发 YAML 中内嵌的下载与标注转换脚本。如何用它训练 YOLO 模型直接按第六节的 Python 或 CLI 示例执行即可加载yolo26n.pt预训练权重dataSKU-110K.yaml、epochs100、imgsz640首次运行会自动完成数据准备。小结SKU-110K 在 Ultralytics 中的定位非常清晰一个开箱即用的单类、高密度、大规模零售检测基准。它的 YAML 配置展示了 Ultralytics 数据集描述文件声明路径 内嵌下载/转换脚本的完整形态——path/train/val/test声明数据布局names声明类别download脚本负责从 CSV 像素标注一键生成 YOLO 格式标签。理解 check_det_dataset 中的自动下载分支后你就能把同样的机制迁移到自己的工作数据集 YAML 中实现一条训练命令完成数据准备 模型训练。【免费下载链接】ultralyticsUltralytics YOLO26, YOLO11, YOLOv8 — object detection, instance segmentation, semantic segmentation, image classification, pose estimation, object tracking项目地址: https://gitcode.com/GitHub_Trending/ul/ultralytics创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

IOPaint AI修图模型自动下载与本地缓存机制详解

IOPaint AI修图模型自动下载与本地缓存机制详解

IOPaint AI修图模型自动下载与本地缓存机制详解 【免费下载链接】IOPaint Image inpainting tool powered by SOTA AI Model. Remove any unwanted object, defect, people from your pictures or erase and replace(powered by stable diffusion) any thing on your pictures.…

2026/11/9 9:40:17 阅读更多 →
Redisson Bloom Filter 完整指南:并发读写场景的异常处理与容量决策

Redisson Bloom Filter 完整指南:并发读写场景的异常处理与容量决策

Redisson Bloom Filter 完整指南:并发读写场景的异常处理与容量决策 【免费下载链接】redisson Redisson: Valkey & Redis Java Client and Real-Time Data Platform. Sync/Async/RxJava/Reactive API. Over 50 Valkey and Redis based Java objects and servic…

2026/11/9 9:40:17 阅读更多 →
把Win10任务栏和开始菜单装回来:ExplorerPatcher完全上手指南

把Win10任务栏和开始菜单装回来:ExplorerPatcher完全上手指南

把Win10任务栏和开始菜单装回来:ExplorerPatcher完全上手指南 【免费下载链接】ExplorerPatcher This project aims to enhance the working environment on Windows 项目地址: https://gitcode.com/GitHub_Trending/ex/ExplorerPatcher Win11把任务栏钉在了…

2026/10/25 22:51:54 阅读更多 →

最新新闻

Electron桌面应用开发实战:从环境搭建到打包发布全流程

Electron桌面应用开发实战:从环境搭建到打包发布全流程

做前端这些年,我大部分时间都在跟浏览器标签页打交道,直到第一次把桌面应用跑起来,才发现原来自己一直被限制在地址栏和刷新按钮围起来的框框里。Electron这个词,最开始是在某段时间频繁出现在同事的讨论里,一个用HTML…

2026/11/8 1:19:03 阅读更多 →
滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

简介:亚太天能T109滑盖智能锁产品说明书是一份PDF格式的官方技术文档,主要面向智能锁安装人员、终端用户及售后维护者,帮助快速掌握产品安装、配置与常见故障处理。全包仅1个PDF文件,大小4.37MB,内容结构清晰&#xff…

2026/11/8 14:17:55 阅读更多 →
PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

上个月我在调试一台高速AGV的驱动系统,整车要求空载跑到8m/s,电机转速已经拉到额定点,驱动器的输出电压也顶到了母线电压极限附近。再往上踩速度指令,转速纹丝不动,三相电流反而开始震荡。那会儿我的第一反应就是&…

2026/11/9 1:59:56 阅读更多 →
C++核心知识点:从内存管理到STL的实战指南

C++核心知识点:从内存管理到STL的实战指南

C 这门语言我前前后后折腾了十几年,用它写过嵌入式驱动、做过游戏服务端,也搭过基础组件库。每次看到新人一头扎进"C 核心知识点"这个搜索词,我其实挺感慨的——这门语言的难点从来不是语法多,而是知识点之间的耦合太深…

2026/11/8 1:38:41 阅读更多 →
T109滑盖智能锁怎么装?安装调试与故障排查全攻略

T109滑盖智能锁怎么装?安装调试与故障排查全攻略

简介:亚太天能T109滑盖智能锁产品说明书以PDF格式发布,适合智能锁用户、安装人员与售后维修人员阅读。内容围绕T109系列指纹密码刷卡锁展开,先介绍前面板、后面板、锁体、机械钥匙、电池盒盖等部件名称与功能,再给出完整安装步骤&…

2026/11/9 7:45:06 阅读更多 →
LLM知识降熵:从信息垄断到理解权下放

LLM知识降熵:从信息垄断到理解权下放

你有没有过这种经历:翻开源码注释、论文摘要或者一份专业报告,每个字都认识,连在一起却像天书。想找人聊聊,身边要么没人懂,要么懂的懒得跟你解释。后来我试着把同一段内容丢给一个大语言模型,几秒钟之后&a…

2026/11/8 1:23:14 阅读更多 →

日新闻

周新闻

月新闻