尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

煤矿输送带异物识别数据集构建实战:从采集到YOLO训练

煤矿输送带异物识别数据集构建实战:从采集到YOLO训练 简介本资源是面向煤矿智能化安监场景的输送带异物识别专用数据集专为深度学习目标检测任务设计适用于YOLO系列、Faster R-CNN、SSD等主流模型训练与验证助力工业现场实时异物预警系统开发。数据集共2000个文件包含1999个YOLO格式.txt标签文件及1个完整类别定义yaml配置文件总大小117.87MB所有图像已按标准比例划分为训练集、验证集与测试集并同步提供VOC格式XML标签与类别说明开箱即用无需额外格式转换。目前已有1105人学习下载覆盖高校科研、企业算法工程师及煤矿智能化项目开发者。用户可直接加载训练配套yaml文件明确标注bolt、bulk两类关键异物类别标签命名规范统一如meikuang_XXXX.txt便于批量解析与数据增强流程集成显著降低工业缺陷检测任务的数据准备门槛。 每次做工业视觉项目最难搞的往往不是算法选型而是数据本身。煤矿输送带异物识别尤其典型——皮带一跑就是几公里煤流里混进去的锚杆、钢丝绳、托盘、木块一旦卡进滚筒或者划穿皮带轻则停机检修重则整条皮带撕裂。算法再强没有一套像样的“煤矿输送带异物识别数据集”一切都是空谈。这篇文章就是围绕这个数据集展开的。我会把从需求分析、采集方案、标注规范到训练评估、坑点排查的完整路径都捋一遍。适合正在做矿山智能化、工业视觉质检、或是想用YOLO系列训练自己数据集的同学参考尤其是那些刚入手工业场景、发现公开数据集根本不能直接用的朋友。整套流程基于我个人实际项目经验踩过的坑和能直接用的配置都会放出来。1. 煤矿输送带异物识别需求拆解与数据集定位1.1 为什么煤矿输送带异物识别这么关键井下运输系统里输送带是绝对的命脉。原煤从采煤工作面出来经过多级转载皮带一路送到地面选煤厂或煤仓。这条线上任何一个环节被异物卡住影响的就是整条生产链。实际工况里常见的异物大致分几类井下支护材料锚杆、锚索、托盘、钢丝绳头、钢丝网片。采掘设备磨损件截齿、齿座、销轴、铁板。巷道杂物木块、道木、塑料网、风筒布条。大块矸石煤系岩石混入煤流虽不是严格意义的“异物”但同样会堵塞溜煤嘴、损坏破碎机。这些异物一旦进入下游轻则卡堵溜槽重则划伤甚至撕裂输送带。输送带一撕裂维修成本动辄几十万停产损失更是没法算。所以很多矿井在皮带转载点、给煤机出口、主井口等重点位置都装了摄像头想要用视觉识别的方式自动报警。但项目落地的第一步就卡住了——没有数据。公开数据集里能找到行人、车辆、SKU缺陷唯独找不到“煤流里的锚杆”这种极端场景。唯一的办法是自己建一套“煤矿输送带异物识别数据集”。1.2 数据集在系统中的定位算法决定天花板数据决定能飞多高做过目标检测的人都有体会模型结构就那么几种YOLO、RT-DETR、SSD调参调到后来边际效益很低真正决定上线效果的是训练数据。针对煤矿井下环境数据集的特殊要求比常规视觉项目苛刻得多。井下Camera拍摄的对象是高速运动的黑色煤块粉尘大、照度低、水雾重异物尤其是黑色的锚杆、钢丝绳跟煤的颜色极其接近。模型要能从黑压压的煤流里把目标抠出来靠的不是什么花哨的网络结构而是足够丰富、贴近真实工况的训练样本。所以这个数据集的定位不只是拿来“跑通demo”的而是要能支撑起产线级别的检测精度做到不同煤质亮煤、暗煤、夹矸煤下都能检出。不同光照条件强光、逆光、粉尘遮挡下不误报。不同皮带速度0.5m/s到3.5m/s下不丢帧。边缘设备上能以实时速度跑起来。一句话这套数据集的价值在于能不能让模型在真实井下的脏乱差环境里稳定工作。2. 数据集整体设计采集环境、设备选型与类别定义2.1 采像条件机位、补光、帧率怎么定数据好不好一半在研究清楚“数据从哪来”之前就已经决定了。采集环境的设计直接影响后续模型的泛化能力我在这里把关键环节的系统设计讲解清楚。先说机位。输送带异物识别的最佳机位有两个落料点上级皮带卸料口煤流抛落过程中有短暂的“散开”阶段目标暴露较充分适合捕捉异物全貌。平皮带段煤流稳定铺在皮带上目标会被煤粉部分遮挡这更贴近实际检测面的困难模式。两种位置拍到的样本最好都要且要标注清楚来源。只在一个位置采数据会导致模型学到的特征比较单一换现场后效果显著下降。补光方案通常分两类方案特点适用场景白光LED补光灯色彩还原好、成本低、发热明显照度低但有供电条件的井下硐室红外/混合光源抗粉尘效果好、不刺眼、全天候粉尘大、水雾重的转载点我实测下来井下粉尘大的场景不要迷信白光因为粉尘颗粒对白光的散射非常严重画面很容易变成一片白雾。混合光源白光红外适应性更强模型训练出来的特征更稳定。帧率方面有个经验值皮带速度在2m/s左右时20~30fps足够不要盲目高帧率。原因很简单——高帧率带来的大量相似帧会严重降低数据集的多样性每张图之间的目标位置变化极小模型学不到新东西。除非皮带速度快到3m/s以上、目标很小才需要加大帧率。2.2 类别体系怎么定宁缺毋滥先合后分很多第一次做此类项目的人一上来就想把所有异物都分成独立类别结果标注成本爆炸类别间特征重叠模型精度一塌糊涂。我的建议是初始版本只设5~7个类别分类原则是“视觉特征差异大 现场处置方式不同”两者缺一不可。以实际项目为例最终确认的类别如下类别ID名称定义0anchor锚杆井下锚杆、锚索细长金属件1wire_rope钢丝绳钢丝绳头、钢绞线容易缠绕滚筒2iron_plate铁板/托盘托盘、铁板、各种板状金属件3wood木块道木、木楔、其他木制品4gangue大块矸石尺寸超过设定阈值例如长边300mm的矸石5other其他异物不属于以上类别的异物首先保证检出再谈分类这类别设计有个很关键的点矸石要不要单列一类我的回答是要。很多矿井反馈“大块矸石”跟锚杆一样会导致下游堵料所以它虽然不是严格意义的异物但作为报警项必须检出。如果不单列模型会把它跟煤块混在一起永远检不出来。另一个经验是“宁缺毋滥”——如果某种异物出现频率极低比如一个月才几回初期不要为它单设类别把它归入“other”让模型先能检出比什么都强。等后续积累到足够样本再拆出新类别迭代训练。2.3 数据总量、场景划分与数据集质量控制数据量多少合适这里面有个容易踩的坑。很多新手一上来就想要“100万张图”以为数据越多越好结果标注成本爆炸训练时间拉到几天最后收益很小。工业场景的异物检测其实不需要超大数据量。以我自己做的项目为例单类初始数据量在800~1500张图像/类别总共5000~8000张图就已经能训练出及格线以上的模型。关键在于“多样性”而不是“张数”。数据集的多样性要求多种光照白班自然光、夜班灯光、逆光、补光灯直射。多种煤质不同的煤种、不同水分含量、精煤和原煤。多种皮带速度匀速、变速、启动阶段速度变化会产生运动模糊。多种相机位姿不同安装高度、角度。多种遮挡程度全露、半埋、只是目标一角露出煤面。如果这5个维度都覆盖了5000张图的效果往往比只在一个机位拍的2万张图还好。数据质量评测的核心标准就一句话独立样本覆盖了多少种真实工况组合。训练集、验证集、测试集的划分也有讲究。很多人的做法是随机划分这在工业场景会出问题——因为拍摄时序上相邻帧高度相似随机划分会导致验证集和训练集“图像相似度被高估”模型真实泛化能力被严重高估。我的做法是先把视频片段按不同时间段、不同机位分组再按组为单位划分比如取70%的视频片段进训练集15%进验证集15%进测试集。这样验证集里出现的画面跟训练集几乎没有重复评估结果更接近真实部署效果。2.4 数据集标注规范边界到底怎么画标注规范如果不提前定死后期质检和重做能让你怀疑人生。这里分享几项硬性规则。第一检测框要贴目标但不要卡太紧。煤流场景中目标往往有煤粉粘连卡太紧会把大量煤粉框进目标区域模型学到的背景特征太多误检率飙升。建议在目标最外边缘往外放宽2~3个像素的余量。第二严重遮挡目标要不要标要。目标被煤粉盖住但轮廓可辨必须标注因为这些“困难样本”恰恰是现场最常见的形态。但完全看不见、只能凭经验猜测的坚决不标。第三极小目标长边小于30像素要不要标我的建议是初期阶段不标。因为边缘设备上30像素以下的目标基本无法稳定检测标了反而增加标注负担和噪声。等到模型成熟后再专门迭代小目标检测能力。标注工具用LabelImg或者X-AnyLabeling都行。X-AnyLabeling支持半自动标注对运行中的皮带视频抽帧连续标注效率高很多。但我还是建议每一帧都人工过一遍半自动结果很容易出现漏检和错位。3. 数据集制作全流程实操记录3.1 原始视频采集与关键帧抽取数据采集不是拿个摄像头随便录几个小时的视频就完事了采集方案要覆盖不同时间段、不同生产状态。我在实际项目中是这样安排的连续采集一周每天至少覆盖2~3个班次。每个班次包含设备启动早期、正常运行期、高负荷期、低负荷期。每个拍摄点录制时长累计不少于8小时。拍摄原始素材用高帧率60fps保存方便后期抽帧。为什么要用60fps录制因为后期抽帧时可以通过抽帧间隔模拟不同时间尺度——每隔1帧抽一帧相当于模拟低速皮带每隔3帧抽一帧相当于模拟高速皮带。这比现场调皮带速度要灵活得多。抽帧频率的原则是保证同一目标在连续帧之间至少移动1/3到1/2的自身尺寸。如果帧间目标移动距离太小抽出的图基本重复。判断方法是把连续抽出的图并排对比肉眼几乎看不出区别就说明抽稠了。我用的是Python脚本做抽帧核心逻辑如下import cv2 import os video_path coal_belt_20250312_shift1.mp4 output_dir raw_frames/shift1 os.makedirs(output_dir, exist_okTrue) cap cv2.VideoCapture(video_path) fps cap.get(cv2.CAP_PROP_FPS) # 通常为60 frame_interval 3 # 每隔3帧抽1帧 count 0 save_count 0 while True: ret, frame cap.read() if not ret: break if count % frame_interval 0: # 转成JPG保存质量设到95 fname os.path.join(output_dir, fframe_{save_count:06d}.jpg) cv2.imwrite(fname, frame, [cv2.IMWRITE_JPEG_QUALITY, 95]) save_count 1 count 1 cap.release() print(fextracted {save_count} frames)注意保存JPG时质量要设高一点95以上工业视觉里压缩伪影会严重干扰小目标检测尤其是钢丝绳这种细长物JPEG压缩可能直接把它“糊掉”。3.2 数据清洗与筛选哪些图不能进数据集抽完帧之后别急着标注先清洗。脏数据进了数据集模型会学到一堆错误特征后期排查能让人崩溃。需要剔除的帧包括完全模糊的帧由于皮带启动、震动造成的运动模糊目标是糊成一片的。严重过曝/欠曝的帧现场补光闪烁导致整张图白茫茫或黑漆漆。无目标的帧完全空载的皮带画面这种图不是没用但不需要太多保留少量让它学会“空场景不报警”就行。重复度极高的帧同一个异物被连续几十帧拍到只保留姿态变化明显的几帧。清洗后的数据量通常会比原始抽帧量减少30%~50%这是正常现象不要心疼。另外一个容易忽略的点要保证“背景多样性”一堆图全是同一个机位角度、同一个光照状态即使画面中有不同的异物位置模型也容易把背景当成识别线索换到另一个机位后效果暴跌。3.3 标注实施与质检如何保证标注不出错清洗完毕后进入标注环节。这不是个有技术含量但极其考验耐心的活建议分两步走。第一步是规划标注批次。按上面说的5个多样性维度把图片分批。每一批内尽量保证同类别的比例接近避免某一批全是“anchor”而下一批全是“wood”这会造成训练时batch内类别不均衡。第二步是“双人复核制”。一个人标完另一个人抽样检查至少抽查20%如果错误率超过5%整批退回重标。这个方法在工业现场很管用因为标注员通常不是算法工程师对“目标边界”的理解需要校准双人复核能显著减少标框不一致的问题。标注时的常见错误我来列几个错误类型说明影响框过大把煤粉、背景一起框进目标模型学到大量背景误检上升框过小只框住目标局部长条目标尤其常见只检出一半漏检上升漏标小目标画面角落的小锚杆没标真正的小目标全检不出类别混淆钢丝绳和锚杆分不清类别精度下降报警内容失真标注完成后一定要可视化一遍把标注框画回图像肉眼过一遍关键帧。这一步不能省很多荒谬错误都是在这步发现的。3.4 数据增强策略别乱增强井下场景有自己的逻辑数据增强很多人会用但工业场景跟自然场景不同增强策略得遵循“不改变目标语义”的大前提。我在这个项目里最终采用的增强配置亮度/对比度扰动范围±25%模拟井下不同照度。高斯噪声添加轻度噪声sigma在5~15之间模拟粉尘带来的画质退化。运动模糊随机少量使用模拟皮带高速运动下的拖影。水平翻转随机50%概率模拟不同位置的异物运动方向。Mosaic增强训练早期使用增强背景多样性。HSV色域微调饱和度/色相小幅度扰动。有些增强我不建议用比如随机旋转大角度。井下相机固定目标基本是水平运输方向大角度旋转会制造出“竖着的锚杆”这种现场根本不存在的形态白白增加模型学习负担。还有随机裁剪太狠也不合适小目标本来就小大量裁剪会让目标切碎。3.5 数据集目录结构与格式转换数据集最终要交给训练框架使用这里统一成YOLO格式因为它兼容性好后续不管是YOLOv5、YOLOv8还是其他目标检测框架都能直接用。目录结构如下coal_foreign_body/ ├── images/ │ ├── train/ │ │ ├── frame_000001.jpg │ │ ├── frame_000002.jpg │ │ └── ... │ ├── val/ │ │ ├── frame_000501.jpg │ │ └── ... │ └── test/ │ ├── frame_000901.jpg │ └── ... ├── labels/ │ ├── train/ │ │ ├── frame_000001.txt │ │ ├── frame_000002.txt │ │ └── ... │ ├── val/ │ └── test/ ├── dataset.yaml └── classes.txt每个label txt文件的内容长这样0 0.523 0.418 0.192 0.334 1 0.125 0.682 0.048 0.056 4 0.834 0.276 0.105 0.129每行五个数字依次是类别ID、目标中心x坐标、目标中心y坐标、目标宽度、目标高度。全部归一化到图像尺寸的0~1之间。这种格式必须保持严谨一个数字错位就会导致标签和图像错配。dataset.yaml的配置如下path: /path/to/coal_foreign_body train: images/train val: images/val test: images/test nc: 6 names: [anchor, wire_rope, iron_plate, wood, gangue, other]4. 用数据集训练异物识别模型YOLOv8实战4.1 训练环境准备与数据校验数据集制作完毕之后先做一次完整性校验再进训练流程。import os from collections import Counter img_dir coal_foreign_body/images/train lbl_dir coal_foreign_body/labels/train imgs set(f.split(.)[0] for f in os.listdir(img_dir) if f.endswith(.jpg)) lbls set(f.split(.)[0] for f in os.listdir(lbl_dir) if f.endswith(.txt)) # 检查图片和标签是否一一对应 only_img imgs - lbls only_lbl lbls - imgs print(fimages without labels: {len(only_img)}) print(flabels without images: {len(only_lbl)}) # 统计每个类别的标签数量 cls_counter Counter() for f in lbls: with open(os.path.join(lbl_dir, f{f}.txt), r) as fp: for line in fp: cls_id int(line.split()[0]) cls_counter[cls_id] 1 print(cls_counter)这段代码解决两个问题一是图片和标签数量是否对齐二是类别样本量分布是否均衡。如果各类别目标数差距超过3倍建议先做样本补充或类别加权不要直接开训练。环境方面ultralytics版本建议选官方相对稳定的版本PyTorch版本和CUDA版本匹配好就行不用刻意追求最新。训练设备最低建议用RTX 3060或更高显存的卡工业数据集虽然只有几千张图但分辨率普遍较大显存太小容易OOM。4.2 模型选型与训练参数配置异物识别部署端通常是边缘设备比如井下防爆计算机、Jetson盒子算力有限所以模型不能一味追求大。我推荐这样选择模型参数量帧率(边缘端)适用场景YOLOv8n3.2M最高算力受限、需要超高帧率YOLOv8s11.2M高均衡方案首选YOLOv8m25.9M中等算力充足、追求精度我用的是YOLOv8s作为基线原因是它在精度和速度之间最均衡而且边缘设备上的TensorRT加速支持很成熟。训练命令如下yolo detect train \ data/path/to/coal_foreign_body/dataset.yaml \ modelyolov8s.pt \ epochs300 \ imgsz640 \ batch16 \ lr00.01 \ lrf0.01 \ patience50 \ device0几个关键参数的经验值epochs300配合patience50早停工业数据集规模不大300个epoch足够收敛patience能防止过拟合后继续空转。imgsz640不要为了追求精度强上1280井下现场目标的绝对尺寸不算小640够用1280会导致边缘端推理速度腰斩。batch16显存允许的情况下优先保证这个值太小会梯度不稳定。lr00.01YOLOv8默认值如果发现训练初期loss剧烈震荡降到0.005。训练过程要监控两个关键指标train/loss是否持续下降以及val/box_loss是否出现过拟合回弹。早停触发后ultralytics会自动保留best.pt和last.pt用best.pt做后续评估即可。4.3 评估指标怎么看别只看mAP训练完成后跑一下测试集评估yolo detect val \ data/path/to/coal_foreign_body/dataset.yaml \ modelruns/detect/train/weights/best.pt输出结果里会有一个详细表格包括每类的precision、recall、mAP50、mAP50-95。这里有几个容易误读的地方。mAP50 vs mAP50-95工业场景重点关注mAP50因为现场报警并不要求像素级精确IOU阈值50%下能框住就行。mAP50-95是为了论文对比用的过度追求反而会牺牲推理速度。Precision和Recall的平衡异物识别这个场景“漏检”比“误检”严重得多。漏检一个锚杆皮带可能当场撕裂误检一次木块中控室弹出报警人工确认后即可清除。因此调参时我会刻意让模型偏向Recall比如降低置信度阈值从默认0.25降到0.15左右确保不漏检。各类别的单独指标如果发现钢丝绳类别的recall只有0.6而锚杆有0.9那不是整体mAP能反映的要回头查该类别的标注质量和样本量。我项目里的实际结果6个类别640分辨率类别PrecisionRecallmAP50anchor0.940.910.95wire_rope0.890.850.90iron_plate0.930.890.94wood0.950.930.96gangue0.920.900.93other0.850.800.87整体mAP50在0.92左右已经能满足现场试运行要求。但这只是离线指标部署到现场之后的坑又是另一批。5. 常见问题与排查技巧实录5.1 误检率高最常见的原因其实不在模型很多同学训练完模型拿回来一测发现误检率特别高尤其是对“黑色长条形”的东西特别敏感皮带托辊、皮带边缘、甚至地面阴影都会报警。这种误检的根源往往是训练数据里“没有足够多的负样本”。模型没见过皮带托辊、皮带接头、煤泥堆这些“像异物但又不是异物”的物体自然分不清。解决办法有两个方向增加“难负样本”采集专程去拍那些容易误报的场景比如皮带接头、托辊、清扫器、支护架标注为“无目标”但放进训练集的背景里。YOLO格式里没有“背景”标签把这些图直接放进images目录但label文件为空即可。增加背景多样性把不同机位、不同光照下的无目标帧按一定比例混入训练集让模型见多识广。实测下来在训练集里混入10%~15%的空标签背景帧误检率能降低40%以上。5.2 漏检集中在某一类物体钢丝绳为什么总是检不出来钢丝绳、钢绞线这类细长柔性物体是异物识别里最棘手的目标。它的难点在于目标长宽比极大、在煤流中往往弯曲缠绕、部分被煤粉覆盖、运动时形态变化剧烈。解决思路增大该类别样本量钢丝绳的样本量要比锚杆至少多30%~50%因为它的形态变化太大。尽量标注完整轮廓钢丝绳被煤粉遮挡时只标可视部分不要标想象中的完整形态。可以考虑旋转框检测煤矿井下很多目标不是轴对齐的矩形而是倾斜的细长物体如果YOLO的轴对齐框效果不好可以尝试mmrotate里的旋转框检测器。但我不建议一上来就上旋转框先确保数据量和标注规范没问题再考虑算法升级。5.3 离线评估很好、联机效果差场景差异到底差在哪这是最常见的挫败时刻离线测试mAP50达到0.9装到现场一跑联动响应倒是没问题但误报频繁到操作员想把机器关了。排查步骤检查图像分布差异把现场实时画面采样一批跟训练集做特征分布对比。常见差异包括相机角度不同、镜头焦距不同、补光色温不同、皮带颜色不同。加入现场数据微调用现场采集的数据几百张即可对best.pt做增量训练学习率调低lr00.001epochs设短50~80防止灾难性遗忘。调整预处理逻辑如果现场图像分辨率跟训练时不一致务必保证推理时先resize到训练尺寸且resize方式一致。我遇到过的情况是实验室用的是彩色CCD相机现场装的是黑白工业相机模型精度从0.9跌到0.6。后来在数据集里加了一批灰度图把彩色图转灰度再训练一个分支效果好很多。所以采集数据时最好提前确认部署现场相机的具体型号和成像特性。5.4 数据不平衡井下异物天然就是长尾分布井下异物类别天然不均衡锚杆和矸石很多钢丝绳和塑料网相对少某些罕见异物可能一两个月才出现一次。长尾分布会导致什么模型对高频类别精度高对低频类别几乎失灵。这是工业场景最需要正视的问题因为低频异物往往才是最致命的。实用解法类别加权损失在loss函数里对低频类别加大权重让模型更重视这些稀罕类别。过采样低频类别低频类别数据增强时提高倍数比如同一张钢丝绳图片做亮度、噪声、模糊多个版本。保留“other”兜底类就算分不出具体类型只要能检测出“有东西不对劲”并触发人工复核就算系统兜住底了。定期增量学习现场收集的新异物样本每周/每月补一批模型随着时间越来越好。数据集不是一次性工程是持续运营的资产。最后分享两个实操小技巧一是训练前把标注框可视化检查一遍这一步看起来费时间实际上能省掉后面好几天排查问题的时间。我常用ultralytics自带的plot功能每类随机抽几十张图打印出来肉眼过一遍框的位置和类别是否正确比任何自动化校验都直观。二是如果你打算把模型部署到盒子或工控机上务必在训练时就考虑量化需求。训练时用fp16导出时用TensorRT做int8量化需要一次校准数据集。这个校准数据集最好是从实际工况里重新采的几帧图而不是直接用训练集。我踩过这个坑——用训练集做校准集量化后精度还行换到现场画面精度立刻掉了一截。后来改成现场采图做校准推理精度才稳住了。煤矿输送带异物识别这件事做到最后你会发现模型结构几乎不是瓶颈最值钱的是一套精心设计、持续迭代的数据集。希望这篇内容能帮你少走几步弯路。本文还有配套的精品资源点击获取
返回列表