news 2026/3/18 21:12:17

深度学习框架如何训练纸箱堆叠计数检测数据集 构建基于深度学习框架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/3/15 11:25:28

AI教材编写新趋势!低查重AI写教材工具,轻松搞定专业教材创作

选择 AI 教材编写工具的困扰与解决方案 在开始编写教材之前,选择合适的工具真是一个令人头疼的问题!如果用常规办公软件,功能总是显得不够全面,很多框架、格式的调整都得自己手动操心;而如果选择那些专业的 AI 教材编…

作者头像 李华
网站建设 2026/3/17 0:37:48

脑波分析工具:测试AR眼镜的认知负荷极限

AR眼镜的认知负荷挑战与测试需求 随着增强现实(AR)技术在消费电子、医疗和工业领域的广泛应用,AR眼镜的用户体验优化成为关键。然而,AR界面固有的信息过载问题可能导致用户认知负荷过高,影响任务效率和安全性。认知负…

作者头像 李华
网站建设 2026/3/17 17:16:58

嵌入式C++教程——引用计数的实现与性能

嵌入式C教程——引用计数的实现与性能 写引用计数的文章就像在讲“谁送快递给谁付钱”——每多一个人拿着快递,你的账本上就多记一笔;最后那个人把快递丢在门口,账本清零,快递就可以销毁。区别是:在嵌入式世界里&…

作者头像 李华
网站建设 2026/3/15 8:16:43

Claude开发进阶 04,Claude 一键生成技术文档:解放开发者的“文档枷锁”

对于每一位开发者而言,编码实现功能是充满创造力的乐趣,而撰写技术文档却常常成为耗时耗力的“负担”。祖传代码无文档、接口更新文档滞后、跨团队协作因文档歧义踩坑……这些场景几乎是研发流程中的常态。好在 Anthropic 推出的 Claude 系列模型&#x…

作者头像 李华
网站建设 2026/3/15 8:12:00

AI历史学家偏见:算法重构事件的客观性质质疑——软件测试从业者的技术应对与伦理责任

一、算法重构历史的偏见生成机制 数据层面的结构性偏差 AI历史模型依赖的训练数据常包含隐性偏见。如殖民史料的种族视角缺失、女性历史记录的系统性忽略等,导致算法将历史人物事件进行片面化建模。2025年NJU研究表明,未清洗的史料库中78%存在地域与性别…

作者头像 李华