news 2026/2/22 5:40:47

深度学习框架如何训练纸箱堆叠计数检测数据集 构建基于深度学习框架YOLOV8纸箱检测系统 高精度智能仓储纸箱计数系统

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
深度学习框架如何训练纸箱堆叠计数检测数据集 构建基于深度学习框架YOLOV8纸箱检测系统 高精度智能仓储纸箱计数系统

1


📦 纸箱堆叠计数检测数据集概览表

项目内容
数据集名称纸箱堆叠计数检测数据集(Cardboard Carton Counting Dataset)
总图像数量21,199 张
目标类别数1 类
类别名称(英文)cardboard-carton
类别名称(中文)纸箱 / 瓦楞纸箱
标注工具LabelImg(生成 PASCAL VOC 格式,后转为 YOLO 格式)
标注格式YOLO 格式.txt文件,每行:class_id x_center y_center width height,坐标归一化)
应用场景- 仓储物流自动化盘点- 智能叉车/AGV 货物识别- 电商仓库纸箱堆叠高度与数量统计

📊 数据划分详情表

数据集类型图像数量占比说明
训练集(train)16,959 张80%用于模型参数学习
验证集(val)2,119 张10%用于超参数调优与早停
测试集(test)2,121 张10%用于最终性能评估(不参与训练)
总计21,199 张100%

✅ 划分比例严格遵循8:1:1,符合工业级数据集标准。


📁 推荐目录结构(YOLO 格式)

cardboard_carton_dataset/ ├── images/ │ ├── train/ # 16,959 张 │ ├── val/ # 2,119 张 │ └── test/ # 2,121 张 ├── labels/ │ ├── train/ # 对应 .txt 标签 │ ├── val/ │ └── test/ └── data.yaml # 配置文件

📄data.yaml配置文件示例

# cardboard_carton_dataset/data.yamltrain:./images/trainval:./images/valtest:./images/testnc:1names:['cardboard-carton']

💡 补充说明

  • 单类检测优势:模型专注学习纸箱的尺度、遮挡、堆叠形态,收敛更快、精度更高。
  • 计数实现方式
    • 直接通过检测框数量 = 纸箱数量(适用于可分辨单个纸箱)
    • 若严重堆叠不可分,可结合实例分割(如 YOLOv8-seg)回归头预测堆叠层数
  • 典型挑战
    • 纸箱颜色/尺寸多样
    • 高度堆叠导致遮挡
    • 光照变化与反光(尤其在仓库环境)

该数据集规模大(>21k)、划分规范、标注统一,非常适合用于工业仓储自动化、智能物流机器人、AI 盘点系统等场景的模型训练与部署。


✅ 一、数据集目录结构(确认无误)

cardboard_carton_dataset/ ├── images/ │ ├── train/ # 16,959 张 │ ├── val/ # 2,119 张 │ └── test/ # 2,121 张 ├── labels/ │ ├── train/ │ ├── val/ │ └── test/ └── data.yaml

data.yaml内容:

train:./images/trainval:./images/valtest:./images/testnc:1names:['cardboard-carton']

✅ 二、YOLOv8 完整训练代码

保存为train_cardboard.py

# -*- coding: utf-8 -*-""" 纸箱堆叠计数检测 - YOLOv8 训练脚本 类别:1 类(cardboard-carton) 图像数:21,199 张(8:1:1 划分) 作者:AI助手 """importosfromultralyticsimportYOLOimporttorch# -----------------------------# 1. 配置路径与设备# -----------------------------DATASET_PATH="cardboard_carton_dataset"ifnotos.path.exists(DATASET_PATH):raiseFileNotFoundError(f"❌ 数据集路径 '{DATASET_PATH}' 不存在!")device='cuda'iftorch.cuda.is_available()else'cpu'print(f"🚀 使用设备:{device}")# -----------------------------# 2. 加载预训练模型# -----------------------------# 推荐 yolov8s(平衡速度与精度)# 若部署到边缘设备(如 Jetson),可用 yolov8nmodel=YOLO('yolov8s.pt')# -----------------------------# 3. 启动训练(针对纸箱堆叠优化)# -----------------------------results=model.train(data=os.path.join(DATASET_PATH,'data.yaml'),# ⏱️ 训练参数epochs=100,imgsz=1280,# 关键!提升密集小纸箱检出率batch=16,# 根据 GPU 调整(RTX 3060 可设 16~32)name='cardboard_yolov8s_1280',device=device,# 🎨 数据增强(仓库场景定制)hsv_h=0.015,# 色调扰动(应对不同纸箱颜色)hsv_s=0.7,# 饱和度hsv_v=0.5,# 亮度(应对仓库光照不均)degrees=10.0,# 旋转(模拟叉车视角)translate=0.2,scale=0.5,mosaic=1.0,# ✅ 必开!将小纸箱拼接到新背景,提升召回mixup=0.1,flipud=0.0,fliplr=0.5,# 🧠 训练策略patience=25,# 早停save_period=10,workers=8,cache=False# 若内存充足可设 True)print("✅ 训练完成!")print(f"📌 最佳模型路径: runs/detect/cardboard_yolov8s_1280/weights/best.pt")

💡命令行替代方案

yolo detect traindata=cardboard_carton_dataset/data.yamlmodel=yolov8s.ptepochs=100imgsz=1280batch=16

✅ 三、纸箱计数系统核心代码

保存为carton_counter.py

# -*- coding: utf-8 -*-""" 纸箱堆叠计数系统 支持:单图 / 视频 / 摄像头 实时计数 输出:带计数结果的图像 + JSON 作者:AI助手 """importcv2importosfromultralyticsimportYOLOfromcollectionsimportdequeimporttimeclassCartonCounter:def__init__(self,model_path='best.pt',conf_thres=0.4):""" 初始化计数器 :param model_path: YOLOv8 模型路径 :param conf_thres: 置信度阈值 """self.model=YOLO(model_path)self.conf_thres=conf_thres self.font=cv2.FONT_HERSHEY_SIMPLEXdefcount_from_image(self,image_path,save_result=True):"""单图计数"""img=cv2.imread(image_path)results=self.model(img,conf=self.conf_thres)forrinresults:boxes=r.boxes count=len(boxes)# 每个检测框 = 1 个纸箱# 绘制检测框annotated_img=r.plot()# 添加计数文本cv2.putText(annotated_img,f'Cartons:{count}',(20,50),self.font,1.5,(0,255,0),3)ifsave_result:output_path=f"counted_{os.path.basename(image_path)}"cv2.imwrite(output_path,annotated_img)print(f"✅ 计数完成:{output_path}| 数量:{count}")returncount,annotated_imgreturn0,imgdefcount_from_video(self,video_path,output_path="counted_output.mp4"):"""视频流计数"""cap=cv2.VideoCapture(video_path)fps=int(cap.get(cv2.CAP_PROP_FPS))width=int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))height=int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))# 视频写入器fourcc=cv2.VideoWriter_fourcc(*'mp4v')out=cv2.VideoWriter(output_path,fourcc,fps,(width,height))frame_count=0whilecap.isOpened():ret,frame=cap.read()ifnotret:breakresults=self.model(frame,conf=self.conf_thres)forrinresults:count=len(r.boxes)annotated_frame=r.plot()cv2.putText(annotated_frame,f'Cartons:{count}',(20,50),self.font,1.5,(0,255,0),3)out.write(annotated_frame)ifframe_count%30==0:# 每秒打印一次print(f"🕒 视频帧{frame_count}: 纸箱数量 ={count}")frame_count+=1cap.release()out.release()print(f"✅ 视频处理完成:{output_path}")defcount_from_camera(self,camera_id=0):"""实时摄像头计数"""cap=cv2.VideoCapture(camera_id)print("📷 按 'q' 退出摄像头")whileTrue:ret,frame=cap.read()ifnotret:breakresults=self.model(frame,conf=self.conf_thres)forrinresults:count=len(r.boxes)annotated_frame=r.plot()cv2.putText(annotated_frame,f'Cartons:{count}',(20,50),self.font,1.5,(0,255,0),3)cv2.imshow('Carton Counter',annotated_frame)ifcv2.waitKey(1)&0xFF==ord('q'):breakcap.release()cv2.destroyAllWindows()# -----------------------------# 使用示例# -----------------------------if__name__=="__main__":counter=CartonCounter(model_path='runs/detect/cardboard_yolov8s_1280/weights/best.pt')# 1. 单图计数count,img=counter.count_from_image("warehouse.jpg")# 2. 视频计数# counter.count_from_video("warehouse_video.mp4")# 3. 摄像头实时计数# counter.count_from_camera()

✅ 四、高级功能扩展(可选)

1. 堆叠高度估算(基于 YOLOv8-seg 实例分割)

# 需先训练分割模型model_seg=YOLO('yolov8s-seg.pt')results=model_seg("image.jpg")forrinresults:masks=r.masks# 获取分割掩码ifmasksisnotNone:# 通过掩码垂直方向像素高度估算层数formaskinmasks.data:height_pixels=mask.sum(dim=2).max().item()estimated_layers=int(height_pixels/avg_carton_height)

2. Web API 接口(FastAPI)

# api.pyfromfastapiimportFastAPI,File,UploadFilefromcarton_counterimportCartonCounterimportcv2importnumpyasnp app=FastAPI()counter=CartonCounter()@app.post("/count")asyncdefcount_cartons(file:UploadFile=File(...)):contents=awaitfile.read()nparr=np.frombuffer(contents,np.uint8)img=cv2.imdecode(nparr,cv2.IMREAD_COLOR)count,_=counter.count_from_image(None)# 修改 count_from_image 支持 numpy 输入return{"carton_count":int(count)}

✅ 五、部署建议

场景方案
仓库固定摄像头NVIDIA Jetson AGX Orin + TensorRT(yolov8s.engine
移动盘点终端Android App(ONNX Runtime + CameraX)
云平台分析AWS/Azure 上部署 Docker 容器(含 FastAPI)
PLC 联动通过 Modbus TCP 发送计数结果到产线控制系统

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

2026毕设ssm+vue美食推荐系统app论文+程序

本系统(程序源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。 系统程序文件列表 开题报告内容 一、选题背景 关于餐饮信息化管理问题的研究,现有研究主要以传统餐厅管理系统的订单处理与库存管理为主,专门…

作者头像 李华
网站建设 2026/2/21 9:50:51

嘉立创EDA:自动升级软件下载下来的安装包存放在什么地方

找到嘉立创EDA客户端右上角的小齿轮:点击小齿轮,进入客户端配置界面,默认是自动检查更新:我今天早上通过自动检查更新,更新到了最新的客户端版本。 更新完成后,可以将自动下载下来的安装包删除。 自动下来的…

作者头像 李华
网站建设 2026/2/17 8:20:55

SOC一级分析师告警分诊失效:企业网络安全的核心级风险

SOC一级分析师作为企业安全运营的第一道防线,其告警分诊的核心价值是从海量安全告警中快速筛选真实威胁、分级处置风险、阻断初期攻击链路,一旦该环节失效,并非单一岗位的操作问题,而是会引发企业安全体系的连锁坍塌,直…

作者头像 李华
网站建设 2026/2/21 7:04:22

Java springboot基于微信小程序的宠物服务预约系统宠物用品(源码+文档+运行视频+讲解视频)

文章目录 系列文章目录目的前言一、详细视频演示二、项目部分实现截图三、技术栈 后端框架springboot前端框架vue持久层框架MyBaitsPlus微信小程序介绍系统测试 四、代码参考 源码获取 目的 基于微信小程序的宠物服务预约系统,专注于宠物用品销售与服务预约&#…

作者头像 李华
网站建设 2026/2/22 4:20:22

AI写论文有妙招,这4款AI论文写作工具,为你的论文质量保驾护航!

四款实测AI论文写作工具推荐 还在为撰写学术期刊论文感到烦恼吗?面对大量的文献资料、复杂的格式要求以及一遍又一遍的修改,低效率几乎成了学术圈的普遍现象。别着急,接下来将为您推荐四款经过实测的AI论文写作工具,这些工具可以…

作者头像 李华
网站建设 2026/2/20 22:05:17

‌AI透明度报告:测试员如何给黑箱模型做X光?‌

当测试遇见黑箱 医疗AI将患者炎症误判为癌症却无法解释原因,金融风控系统因邮政编码特征歧视优质客户——这些因模型不透明引发的危机,正将测试工程师推向人工智能质量保障的前线。本文构建从理论到落地的XAI测试框架,为测试团队提供可复用的…

作者头像 李华