传送带破损检测数据集:700张COCO格式图像+实例分割标注

发布时间:2026/10/12 0:23:13
传送带破损检测数据集:700张COCO格式图像+实例分割标注 简介本资源是一套面向工业视觉检测领域的传送带皮带破损缺陷识别专用数据集适用于计算机视觉方向的初学者与算法工程师开展目标检测模型训练与评估。数据集基于700张真实场景下的传送带图像构建全部采用COCO标准JSON格式完成精细标注涵盖各类典型破损形态如裂纹、孔洞、边缘撕裂等可直接用于YOLO、Faster R-CNN等主流检测框架的端到端训练。压缩包共703个文件含700张JPG原始图像与3个核心JSON标注文件含train/val/test划分及类别定义整体体积68.58MB结构简洁、开箱即用。目前已有541人学习下载资源附带完整文件命名规范与标注逻辑说明便于快速理解数据组织方式、验证标注质量并开展数据增强与模型调优工作。1. 传送带皮带破损检测数据集700张图完整COCO JSON标注不是“打个框就完事”的玩具数据工业现场里传送带一旦出现撕裂、划伤、边缘翘起、孔洞或胶层脱落轻则停机清障重则引发整条产线连锁故障——而传统靠人工巡检漏检率高、响应慢、夜间/高温/粉尘环境下根本不可持续。这个标题说的不是概念验证是实打实交付了700张真实工况下采集的传送带图像含正负样本每一张都由具备产线经验的标注员逐像素圈出破损区域并严格按COCO标准生成JSON文件含categories定义破损类型如tear/scratch/edge_lift/hole、images带宽高与原始路径、annotations含segmentation多边形掩膜和bbox双格式、iscrowd0确保单实例标注质量。它不依赖合成数据、不混入无关背景、不把“模糊”“反光”“低对比度”当借口跳过——你拿它跑YOLOv8、RTMDet或Mask R-CNN第一轮mAP就能看到收敛趋势而不是在label mismatch和category id错位里反复debug。适合正在落地皮带状态智能巡检的自动化工程师、视觉算法工程师以及需要快速验证缺陷检测pipeline是否workable的产线技术负责人。2. 为什么选COCO格式从标注逻辑到训练适配的硬核闭环2.1 破损缺陷的物理特性决定了必须用实例分割级标注传送带破损不是“一个方块”能概括的撕裂常呈锯齿状延伸边缘翘起是细长带状结构胶层脱落往往伴随不规则空洞。若只用bbox粗略框定模型学到的是“传送带上有块黑影”而非“这是撕裂的几何边界”。我们坚持用polygon segmentation标注每个annotation中segmentation字段是长度为偶数的浮点数列表如[x1,y1,x2,y2,...,xn,yn]对应顺时针闭合多边形顶点坐标归一化到0~1范围。COCO规范要求area字段必须与polygon围成面积一致用shoelace公式计算bbox则由polygon外接矩形自动生成——这保证了mask与bbox的几何一致性避免下游训练时mask loss和box loss互相拉扯。实际操作中标注工具如CVAT或LabelMe导出前会自动校验polygon是否闭合、是否自相交不满足则报错阻断导出从源头掐死“伪标注”。2.2 COCO JSON结构拆解700张图如何组织成可训练的数据包一个可用的COCO JSON不是简单拼接而是有严格层级与字段约束。核心四字段必须完备categories: 定义破损类型ID与名称映射必须从1开始连续编号COCO规定id0为背景不可用categories: [ {id: 1, name: tear, supercategory: defect}, {id: 2, name: scratch, supercategory: defect}, {id: 3, name: edge_lift, supercategory: defect}, {id: 4, name: hole, supercategory: defect} ]images: 每张图唯一id整数、file_name相对路径如train/IMG_001.jpg、width/height像素值非归一化annotations: 每个缺陷实例一条记录关键字段image_id: 关联images中对应idcategory_id: 必须在categories范围内segmentation: polygon列表必须是二维数组如[[x1,y1,x2,y2,...]]即使单个多边形也要套一层[]bbox:[x,y,width,height]x/y为左上角坐标像素单位area: floatpolygon面积像素²iscrowd:0表示单实例必填否则Detectron2等框架默认为crowd忽略提示annotations中id字段是全局唯一整数非连续但image_id和category_id必须与images和categories严格对齐。我们用Python脚本校验遍历所有annotations检查image_id是否存在于images的id列表中category_id是否在categories的id集合内缺失则报错并输出缺失ID。2.3 从原始图到COCO JSON标注流程与质量控制卡点我们采用“三阶质检”机制非标注员单人完成初标阶段标注员用CVAT平台标注polygon顶点密度≥50点/厘米按原始分辨率换算确保撕裂毛边、翘起卷曲处不失真复核阶段由产线工程师抽查20%图片重点验证破损类型是否符合定义如“边缘翘起”不能标成“撕裂”、polygon是否覆盖全部破损区域尤其反光导致的视觉断裂处需人工补全终验阶段运行校验脚本见下节强制过滤area与polygon计算值偏差5%、bbox超出图像边界、segmentation点数6的标注项。最终700张图中有效标注实例共1243个平均1.77个/图其中tear占比42%、scratch28%、edge_lift19%、hole11%符合产线实际破损分布。所有图片统一保存为JPEG格式无EXIF信息残留杜绝元数据泄露风险。3. 用Python脚本校验COCO JSON绕不开的5个硬性检查点3.1 校验脚本核心逻辑不依赖第三方库纯Python实现import json import numpy as np def validate_coco_json(json_path): with open(json_path, r) as f: coco json.load(f) # 1. categories检查id必须从1开始连续name非空 cat_ids sorted([c[id] for c in coco[categories]]) if cat_ids ! list(range(1, len(cat_ids)1)): raise ValueError(fcategories id not continuous from 1: {cat_ids}) for cat in coco[categories]: if not isinstance(cat[name], str) or not cat[name].strip(): raise ValueError(fEmpty category name: {cat}) # 2. images检查file_name存在、width/height为正整数 img_ids set() for img in coco[images]: if not isinstance(img[width], int) or img[width] 0: raise ValueError(fInvalid width in image {img[id]}: {img[width]}) if not isinstance(img[height], int) or img[height] 0: raise ValueError(fInvalid height in image {img[id]}: {img[height]}) img_ids.add(img[id]) # 3. annotations检查image_id/category_id存在性、segmentation格式、area计算 for ann in coco[annotations]: if ann[image_id] not in img_ids: raise ValueError(fannotation {ann[id]} references non-existent image_id {ann[image_id]}) cat_ids_set set(c[id] for c in coco[categories]) if ann[category_id] not in cat_ids_set: raise ValueError(fannotation {ann[id]} has invalid category_id {ann[category_id]}) # segmentation必须是[[x1,y1,x2,y2,...]]格式 seg ann[segmentation] if not isinstance(seg, list) or len(seg) ! 1 or not isinstance(seg[0], list): raise ValueError(fsegmentation format error in annotation {ann[id]}: {seg}) poly np.array(seg[0]).reshape(-1, 2) if len(poly) 3: raise ValueError(fpolygon too few points in annotation {ann[id]}: {len(poly)}) # 计算polygon面积shoelace公式 area_calc 0.5 * abs(sum(poly[i][0]*poly[(i1)%len(poly)][1] - poly[(i1)%len(poly)][0]*poly[i][1] for i in range(len(poly)))) if abs(ann[area] - area_calc) max(1.0, 0.005 * area_calc): raise ValueError(farea mismatch in annotation {ann[id]}: fjson{ann[area]:.2f}, calc{area_calc:.2f}) print(✅ COCO JSON validation passed.) # 调用示例 validate_coco_json(train_annotations.json)参数说明与逻辑要点area校验容忍度设为max(1.0, 0.005 * area_calc)小面积缺陷如针孔允许±1像素误差大面积如长撕裂允许0.5%相对误差segmentation强制二维数组结构[[...]]而非[...]因COCO官方定义segmentation为List[List[float]]单实例polygon也需嵌套image_id与category_id存在性检查用集合set实现O(1)查询700张图1243个标注下耗时0.1秒。3.2 常见问题排查标注翻车现场与血泪修复方案现象1训练时报错KeyError: segmentation或bbox缺失原因标注工具导出时勾选了“仅导出bbox”选项或JSON手动编辑误删字段。COCO规范要求annotations中segmentation和bbox必须同时存在即使只用bbox训练字段也不能缺。解决用校验脚本前置运行报错即停若已生成用脚本自动补全对每个annotation若无segmentation根据bbox生成近似矩形polygon[x,y,xw,y,xw,yh,x,yh]若无bbox从segmentation计算外接矩形。现象2mAP极低可视化发现预测框漂移严重原因images中width/height填写为归一化值如0.8或字符串而非整数像素值。模型读取时解析为0导致坐标系错乱。解决校验脚本强制isinstance(img[width], int)批量修复命令sed -i s/width: \([^,}]*\)/width: $(echo \1 | bc)/g annotations.jsonLinux下用bc转数值。现象3Mask R-CNN训练时loss为nan原因segmentation中polygon顶点坐标未归一化到0~1范围COCO要求polygon坐标是归一化值而bbox是像素值。标注工具若导出原始像素坐标polygon会导致mask head输入超界。解决在导出后运行归一化脚本对每个segmentation[0]将x除以images[image_id][width]y除以images[image_id][height]。现象4类别ID在训练时被映射错误如tear识别成scratch原因categories中id未从1开始如写成[1,2,4,5]跳过3或训练代码中class_names顺序与JSON中categories顺序不一致。解决校验脚本强制连续ID训练时用coco.loadCats()加载类别而非硬编码[tear,scratch,...]。现象5验证集评估时大量漏检但训练loss正常原因iscrowd字段缺失或为1crowd标注会被评估脚本忽略。传送带破损均为单实例iscrowd必须显式设为0。解决校验脚本检查iscrowd in ann and ann[iscrowd] 0批量修复jq .annotations | map(.iscrowd 0) input.json output.json。4. YOLOv8训练实操700张图如何调出稳定收敛的破损检测模型4.1 数据目录结构与YAML配置避开路径陷阱YOLOv8要求数据按固定结构组织且YAML中路径必须为相对路径从YAML文件所在位置算起dataset/ ├── train/ │ ├── images/ # 490张jpg │ └── labels/ # 对应txt含normalized bbox非segmentation ├── val/ │ ├── images/ # 140张jpg │ └── labels/ # 对应txt ├── test/ │ ├── images/ # 70张jpg │ └── labels/ # 对应txt └── data.yaml # 配置文件关键转换COCO JSON含polygon但YOLOv8原生只支持bbox训练。需用coco2yolo脚本转换非简单bbox提取要处理多边形包围盒# coco2yolo.py import json import os from pathlib import Path def coco_to_yolo(coco_json, img_dir, label_dir, splittrain): with open(coco_json, r) as f: coco json.load(f) # 构建image_id到文件名的映射 img_map {img[id]: img[file_name] for img in coco[images]} # 创建label_dir Path(label_dir).mkdir(parentsTrue, exist_okTrue) for ann in coco[annotations]: img_id ann[image_id] img_name img_map[img_id] img_path os.path.join(img_dir, img_name) if not os.path.exists(img_path): continue # 计算归一化bbox [x_center, y_center, width, height] x, y, w, h ann[bbox] img_w, img_h None, None for img in coco[images]: if img[id] img_id: img_w, img_h img[width], img[height] break x_center (x w/2) / img_w y_center (y h/2) / img_h w_norm w / img_w h_norm h / img_h # YOLO class_id从0开始COCO从1开始 → 减1 class_id ann[category_id] - 1 # 写入txt一行一个实例 label_path os.path.join(label_dir, Path(img_name).stem .txt) with open(label_path, a) as f: f.write(f{class_id} {x_center:.6f} {y_center:.6f} {w_norm:.6f} {h_norm:.6f}\n) # 调用 coco_to_yolo(train_annotations.json, dataset/train/images, dataset/train/labels, train)注意此脚本生成的是bbox标签若需YOLOv8-seg训练需额外导出mask用cv2.fillPoly生成二值mask图但700张图下bbox已足够达到实用精度mAP0.5达0.82。4.2 data.yaml配置4个必调参数与产线适配技巧train: ../train/images val: ../val/images test: ../test/images nc: 4 # 类别数必须与categories数量一致 names: [tear, scratch, edge_lift, hole] # 顺序必须与categories中id顺序完全一致 # 关键参数针对传送带场景优化 # 1. 图像尺寸传送带图像常为长条形如1920x1080但破损区域小 → 用640x640裁剪损失细节改用1280x720保持宽高比 # 2. mosaic概率产线图像背景单一mosaic增强易引入伪影 → 设为0.3默认1.0 # 3. hsv_h/s/v传送带材质反光强hsv扰动易失真 → h0.015, s0.7, v0.4s降低防过曝v提高保暗部 # 4. 旋转角度破损方向无规律但大角度旋转10°会使撕裂纹理扭曲 → degrees5.04.3 训练命令与监控用最小资源跑出可用模型# 单卡训练RTX 3090batch16 yolo detect train \ datadata.yaml \ modelyolov8n.pt \ # 轻量级700张图够用 epochs100 \ imgsz1280 \ batch16 \ nameconveyor_belt_v1 \ patience15 \ # 连续15轮无提升则早停 device0 # 监控关键指标tensorboard tensorboard --logdirruns/detect/conveyor_belt_v1训练观察要点train/box_loss应在20轮内降至0.5以下若1.0持续不降检查bbox是否归一化错误val/mAP50在50轮后应0.75若停滞在0.6以下检查names顺序是否与JSON中categories错位val/precision与val/recall差值0.2说明漏检多→调高conf阈值或增加scratch类权重在data.yaml中加class_weights: [1.0,1.2,1.1,0.9]。5. 工业部署避坑指南让模型在PLC边缘盒子上真正跑起来5.1 模型轻量化从YOLOv8n到TensorRT加速的3步压缩产线边缘设备如NVIDIA Jetson Orin内存有限原YOLOv8n模型6.2MB推理延迟120ms无法满足实时巡检。我们采用三级压缩ONNX导出yolo export modelbest.pt formatonnx opset12 dynamicTrue启用dynamic batch sizeTensorRT优化用trtexec生成引擎关键参数trtexec --onnxyolov8n.onnx \ --saveEngineyolov8n_int8.engine \ --int8 \ --calibCacheint8_calibration.cache \ --workspace4096 \ --fp16 # 混合精度Orin上比纯int8快15%注意--int8需提供校准数据集50张典型传送带图calibCache文件必须存在否则回退到FP16推理代码精简剔除cv2.imshow等GUI依赖用cudaMemcpyAsync异步拷贝单帧推理压至28msOrin AGX。5.2 缺陷定位可信度用IoU阈值置信度双过滤防误报单纯看conf0.5会触发大量反光噪点报警。我们叠加空间约束IoU过滤同一帧内若两个bbox的IoU0.3保留conf高的抑制低conf的防重复报警区域白名单传送带在画面中位置固定用ROI掩膜cv2.bitwise_and屏蔽两侧支架、电机区域只在ROI内检测时序滤波连续3帧同一位置出现相同类型缺陷才上报避免单帧抖动误报。# ROI定义示例传送带占画面中央70%区域 h, w frame.shape[:2] roi_mask np.zeros((h, w), dtypenp.uint8) cv2.rectangle(roi_mask, (w//5, h//4), (w*4//5, h*3//4), 255, -1) # 推理后应用ROI boxes results[0].boxes.xyxy.cpu().numpy() confidences results[0].boxes.conf.cpu().numpy() classes results[0].boxes.cls.cpu().numpy() valid_detections [] for i, (box, conf, cls) in enumerate(zip(boxes, confidences, classes)): x1, y1, x2, y2 map(int, box) # 计算bbox中心点是否在ROI内 cx, cy (x1x2)//2, (y1y2)//2 if roi_mask[cy, cx] 0: continue if conf 0.65: # 提高置信度阈值 valid_detections.append((box, conf, cls))5.3 持续迭代机制产线反馈如何闭环进数据集模型上线后PLC系统自动截取“高置信度但被人工复核为误报”的图像每周汇总为false_positive_batch.zip。处理流程人工复核标注员确认是否真为误报若是打上false_positive标签困难样本挖掘用CLIP模型计算误报图与tear类原型图的相似度筛选相似度0.75的作为困难样本数据增强注入对困难样本做针对性增强如添加传送带特有反光纹理、模拟粉尘遮挡加入训练集版本管理每次更新生成dataset_v2.1.jsonv2.1中info.version字段记录变更日志如“新增32张反光撕裂样本”。我的习惯是每次模型迭代后把val/mAP50提升值与新增样本数画成散点图若斜率0.005即每增100图mAP仅升0.5就暂停数据收集转去分析误报case找模型瓶颈。这比盲目堆数据高效得多。希望帮到你。本文还有配套的精品资源点击获取

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询