智慧化物流仓储物料检测数据集5097张提供yolovoccoco三种标注方式图像尺寸:416*416类别数量:5类训练集图像数量:3579; 验证集图像数量:1269 测试集图像数量:249类别名称: 每一类图像数 每一类标注数pallet - 托盘4727、120416small_load_carrier - 小型载物架或小型货物搬运器1102、22145pallet_truck - 托盘车1502、2826forklift - 叉车449、598stillage - 料架或储物架1111、5407image num: 509711111基于YOLOv8 (Ultralytics)的全流程训练代码。该数据集涵盖了仓储物流中的核心要素托盘、叉车、料架等类别间存在明显的不平衡托盘数量极多叉车较少代码中已包含针对此情况的优化建议。第一部分仓储物料检测数据集统计表统计维度详细数据数据集名称仓储物料检测数据集 (Warehouse Material Detection)图像总数5,097张图像尺寸416 × 416 (统一尺寸无需额外Resize)标注格式YOLO (.txt), VOC (.xml), COCO (.json)类别数量5类数据集划分训练集: 3,579 张 (70.2%)验证集: 1,269 张 (24.9%)测试集: 249 张 (4.9%)总标注框数151,392个类别详情1️⃣pallet(托盘)️ 图像数: 4,727 ️ 标注数:120,416(占比约 79.5%密度极高)2️⃣small_load_carrier(小型载物架)️ 图像数: 1,102 ️ 标注数: 22,1453️⃣stillage(料架/储物架)️ 图像数: 1,111 ️ 标注数: 5,4074️⃣pallet_truck(托盘车)️ 图像数: 1,502 ️ 标注数: 2,8265️⃣forklift(叉车)️ 图像数: 449 ️ 标注数: 598 (样本最少需重点关注) 数据洞察与训练策略极高密度场景pallet类平均每张图有约 25 个标注框说明场景非常密集对模型的NMS (非极大值抑制)参数和小目标检测能力要求很高。长尾分布forklift(叉车) 样本较少建议在训练时适当增加epochs或使用flipud(上下翻转) 等增强手段防止过拟合大样本类别。尺寸优势原始图片已是 416×416这是 YOLO 的经典输入尺寸训练速度会非常快。第二部分YOLOv8 详细训练代码 (Python)本代码基于ultralytics库自动处理三种标注格式并针对仓储场景进行了参数优化。1. 前置准备pipinstallultralytics pandas matplotlib seaborn opencv-python2. 目录结构建议请将数据集整理为以下标准结构假设根目录为WarehouseDatasetWarehouseDataset/ ├── images/ │ ├── train/ (3579张) │ ├── val/ (1269张) │ └── test/ (249张) ├── labels/ (对应的标注文件格式需统一推荐转为YOLO格式) │ ├── train/ │ ├── val/ │ └── test/ └── data.yaml (代码会自动生成)(注如果你的数据是 VOC 或 COCO 格式Ultralytics 在训练时通常能自动识别但为了稳定性和速度建议先统一转换为 YOLO 格式)3. 完整训练脚本train_warehouse_model.pyimportosimportyamlfromultralyticsimportYOLOfrompathlibimportPath# 1. 配置区域 # 数据集根目录路径 (请修改为你的实际绝对路径)DATASET_ROOTr./WarehouseDataset# 类别名称列表 (顺序必须与标注文件中的 class id 对应)# 0: pallet, 1: small_load_carrier, 2: pallet_truck, 3: forklift, 4: stillageCLASS_NAMES[pallet,small_load_carrier,pallet_truck,forklift,stillage]# 模型选择# 推荐yolov8n.pt (速度快适合部署) 或 yolov8m.pt (精度更高适合密集场景)MODEL_NAMEyolov8n.pt# 训练超参数 (针对密集小目标优化)EPOCHS150# 增加轮数因为样本量适中但类别不平衡BATCH_SIZE32# 416x416 图片较小可以设大一点 batchIMG_SIZE416# 数据集原生尺寸保持即可WORKERS8# 多进程加载数据# 2. 自动生成 data.yaml 配置文件 defcreate_data_yaml(root_path,classes): 生成 YOLO 所需的 data.yaml 配置文件 data{path:os.path.abspath(root_path),train:images/train,val:images/val,test:images/test,nc:len(classes),names:classes}yaml_pathos.path.join(root_path,data.yaml)withopen(yaml_path,w,encodingutf-8)asf:yaml.dump(data,f,allow_unicodeTrue)print(f✅ 配置文件已生成{yaml_path})returnyaml_path# 3. 主训练流程 defmain():print( 开始仓储物料检测模型训练...)print(f 数据集路径{os.path.abspath(DATASET_ROOT)})# 1. 检查并生成配置文件config_pathos.path.join(DATASET_ROOT,data.yaml)ifnotos.path.exists(config_path):create_data_yaml(DATASET_ROOT,CLASS_NAMES)else:print(fℹ️ 检测到已有配置文件{config_path})# 2. 加载模型print(f⏳ 正在加载模型{MODEL_NAME}...)modelYOLO(MODEL_NAME)# 3. 开始训练# 针对密集目标 (pallet数量多) 和 小样本 (forklift数量少) 的调整print( 训练启动 (针对密集仓储场景优化)...)resultsmodel.train(dataconfig_path,epochsEPOCHS,batchBATCH_SIZE,imgszIMG_SIZE,workersWORKERS,device0,# 使用 GPU 0; CPU设为 cpuoptimizerSGD,# 密集场景 SGD 往往比 AdamW 更稳定patience100,# 增加耐心值防止过早停止saveTrue,projectruns/detect,namewarehouse_material_v1,exist_okTrue,pretrainedTrue,verboseTrue,plotsTrue,# 生成混淆矩阵、PR曲线等# 数据增强调整 (可选)augmentTrue,# 开启增强flipud0.5,# 50%概率上下翻转 (叉车和托盘上下对称有效增加样本)fliplr0.5,# 50%概率左右翻转mosaic1.0,# 开启 Mosaic 增强 (对小目标和密集场景非常有效)mixup0.1,# 轻微 Mixupclose_mosaic10,# 最后10轮关闭 Mosaic提升收敛精度# 损失函数权重 (可选若叉车检测效果差可适当提高 cls 权重)# cls0.5,# box7.5,# dfl1.5)# 4. 模型验证 (在测试集上评估)print(\n 开始在测试集上进行验证...)metricsmodel.val(dataconfig_path,splittest,plotsTrue)print(\n*30)print( 最终评估结果 (Test Set))print(*30)print(f mAP50:{metrics.box.map50:.4f})print(f mAP50-95:{metrics.box.map:.4f})print(f 各类别 AP50:)fori,nameinenumerate(CLASS_NAMES):apmetrics.box.maps[i]# 注意maps 对应的是 mAP50-95如需 mAP50 需查看具体日志或单独计算# 这里简单打印 map50-95 每类的贡献精确 mAP50 需看 runs 文件夹下的结果print(f -{name}:{ap:.4f})print(*30)# 5. 推理测试print(\n 进行单次推理演示...)test_diros.path.join(DATASET_ROOT,images,test)ifos.path.exists(test_dir)andos.listdir(test_dir):test_imgos.path.join(test_dir,os.listdir(test_dir)[0])pred_resultsmodel.predict(sourcetest_img,saveTrue,showFalse,conf0.25,iou0.45)print(f✅ 推理完成结果图片保存在{pred_results[0].save_dir})print( 提示由于 pallet 密度大如果检测框重叠严重可尝试调高 iou 阈值。)else:print(⚠️ 未找到测试图片。)print(\n 训练全部完成请查看 runs/detect/warehouse_material_v1 获取详细报告。)if__name____main__:try:main()exceptExceptionase:print(f❌ 发生错误{e})importtraceback traceback.print_exc()第三部分针对该数据集的特别优化建议由于你的数据集中Pallet (托盘)数量极大且密集而Forklift (叉车)数量较少建议在训练后关注以下几点调整 NMS 阈值 (IoU)在推理时默认的 IoU 阈值 (0.45) 可能会导致密集的托盘被过滤掉。建议在model.predict()中尝试降低iou参数 (如iou0.3) 或者使用agnostic_nmsFalse来保留更多重叠框。关注小样本类别 (Forklift)查看生成的confusion_matrix.png。如果forklift经常被漏检或误检为pallet_truck可以考虑在data.yaml中不使用默认权重或者在训练时专门针对forklift进行裁剪增强。Mosaic 增强的作用代码中开启了mosaic1.0。这对于你的数据集至关重要因为它会将4张图拼成1张人为制造出“密集场景”能显著提升模型对大量托盘同时出现的识别能力。部署建议训练完成后可以使用以下命令将模型导出为ONNX或TensorRT格式以便在仓储机器人或边缘设备上高速运行model.export(formatonnx,simplifyTrue)# 或者model.export(formatengine,device0)# TensorRT