新闻详情

新闻详情

首页 / 资讯中心 / 详情

煤矸石识别数据集与目标检测:从选煤厂皮带场景到模型部署全链路

发布时间:2026/10/2 8:21:53来源:尧图网络
煤矸石识别数据集与目标检测:从选煤厂皮带场景到模型部署全链路
简介这份煤矸石识别数据集面向从事目标检测与深度学习实践的开发者、学生及科研人员聚焦煤与矸石分选场景下的图像识别任务可用于YOLO系列、Faster R-CNN、SSD等主流检测模型的训练与验证。资源同时提供YOLO与VOC两种标注格式类别涵盖Coal与Rock两类共3091张图片并已按训练集、验证集、测试集完成划分省去自行切分与格式转换的步骤。压缩包内共2000个文件以1999个txt标签文件和1个yaml配置文件为主txt对应各图像的标注框信息yaml则记录类别名称与数据路径等关键配置整体约166.01MB结构规整、开箱即用。目前已有725人学习关注适合需要快速搭建煤矸石检测基线、验证算法效果或开展对比实验的读者直接上手使用。1. 煤矸石识别数据集与目标检测从选煤厂皮带场景说起选煤厂的皮带走廊里煤和矸石混在一起往前跑分选工盯着屏幕或者干脆站在皮带边上靠颜色、反光和形状判断哪块是矸石。这个场景要做自动化绕不开一个基础问题煤矸石识别数据集怎么建、目标检测模型怎么训。煤矸石识别数据集属于典型的工业场景目标检测数据和常见的 COCO、VOC 那套自然图像数据差别很大——背景单调、目标密集堆叠、类间差异小、类内差异大同一块矸石在湿煤和干煤状态下颜色能差出一大截。目标检测在这里要解决的不是有没有而是在哪、是哪一类、边界在哪因为后续要么驱动气排枪吹掉要么给机械臂抓取坐标。这套东西适合谁做矿山智能化、选煤厂技改、工业视觉质检的工程师以及手里有现场摄像头、想先跑通一个 baseline 再谈落地的团队。下面按数据、标注、训练、评估、避坑的顺序把这条链路拆开讲。2. 煤矸石识别数据集从现场采集到可训练格式2.1 工业现场采集的四个硬约束煤矸石数据和公开数据集最大的区别在于采集环境不可控但又有规律。常见做法是在皮带上方固定工业相机配合 LED 条形光源帧率不用太高5 到 15 fps 足够因为皮带速度通常不超过 3 m/s目标不会瞬间消失。分辨率建议 1920×1080 起步矸石粒径如果小于 30 mm再低的分辨率下目标只有十几个像素标注和检测都会崩。光照是第一个约束。选煤厂粉尘大镜头几天就糊一层逆光和反光会让煤块表面出现高光斑和矸石的镜面反射混淆。我一般会要求现场加遮光罩光源用漫射板压一下别用裸灯珠直打。第二个约束是水雾湿选环节皮带上方水汽重镜头前要加气吹或者加热除雾。第三个是振动相机支架必须独立于皮带架否则图像全是运动模糊。第四个是类别定义很多现场把矸石和夹矸煤混为一谈标注前必须和工艺工程师对齐到底分几类夹矸算不算矸石硫铁矿结核算不算。这个不定义清楚后面标注全是返工。采集数量上一个可用的 baseline 至少需要 3000 到 5000 张有效帧按 8:1:1 切训练、验证、测试。注意是有效帧连续视频抽帧时相邻帧几乎一样要去重否则验证集泄漏指标虚高。2.2 标注规范矩形框、类别与难例标记目标检测常用标注工具里LabelImg、CVAT、X-AnyLabeling 都能用工业场景我倾向 CVAT因为支持视频逐帧和多人协作审核。标注格式最终统一成 YOLO 的 txtclass x_center y_center width height归一化到 0-1或者 COCO json看训练框架。标注规范要写死几条框必须紧贴目标外轮廓允许 2 到 3 像素余量被遮挡超过 70% 的目标标ignore或者不标别硬标密集堆叠时框可以重叠不要为了不重叠把框画小边界处的目标如果只露出一角标为难例并在文件名里加后缀。下面是一个把 CVAT 导出的 COCO 格式转成 YOLO 格式的脚本现场经常用得上。import json import os from pathlib import Path # COCO 转 YOLO类别映射按你的 data.yaml 顺序改 CATEGORY_MAP {1: 0, 2: 1} # COCO category_id - YOLO class_id IMG_DIR Path(images) LBL_DIR Path(labels) LBL_DIR.mkdir(exist_okTrue) with open(annotations.json, r, encodingutf-8) as f: coco json.load(f) # 建立 image_id - 文件信息 的索引 img_info {img[id]: img for img in coco[images]} for ann in coco[annotations]: if ann.get(iscrowd, 0) 1: continue # 跳过 crowd 区域工业场景一般不用 img img_info[ann[image_id]] w, h img[width], img[height] x, y, bw, bh ann[bbox] # COCO 是左上角 宽高 # 转成 YOLO 的中心点归一化格式 xc (x bw / 2) / w yc (y bh / 2) / h nw bw / w nh bh / h cls CATEGORY_MAP[ann[category_id]] # 裁剪到 [0,1]防止标注越界导致训练报错 xc, yc min(max(xc, 0), 1), min(max(yc, 0), 1) nw, nh min(max(nw, 0), 1), min(max(nh, 0), 1) line f{cls} {xc:.6f} {yc:.6f} {nw:.6f} {nh:.6f}\n stem Path(img[file_name]).stem with open(LBL_DIR / f{stem}.txt, a, encodingutf-8) as out: out.write(line)这段逻辑的关键在坐标转换COCO 的 bbox 是左上角加宽高YOLO 要中心点加宽高再除以图像尺寸归一化。CATEGORY_MAP必须和训练时data.yaml里的names顺序严格一致错一位类别就全乱。裁剪到 0 到 1 是后悔药现场标注偶尔会把框拖出图像边界不裁训练时直接报错。iscrowd跳过是因为工业场景没有 crowd 概念留着反而干扰。2.3 数据增强与划分别让验证集骗了你煤矸石数据增强不能照搬自然图像那套。翻转可以用水平翻转安全垂直翻转要谨慎因为皮带上的物料有重力方向翻过来不真实。颜色抖动要克制HSV 的 H 通道别大动煤和矸石的色相差异本来就是判别依据抖过头等于把标签毁了。Mosaic 和 MixUp 可以用但 Mosaic 四拼会让小目标更小如果矸石本来就小建议关掉或者降低概率。划分数据集时最容易翻车的是按帧随机切。同一段视频的相邻帧高度相似随机切会导致训练集和验证集里有几乎一样的图验证 mAP 虚高十几个点上线就露馅。正确做法是按时间段或按批次切比如前 70% 时间段的帧做训练中间 15% 做验证最后 15% 做测试。如果现场有多个班次、多种煤质还要保证每个子集都覆盖到别让验证集全是干煤、测试集全是湿煤。3. 目标检测模型选型与煤矸石场景训练3.1 YOLO 系列在工业小目标上的取舍目标检测算法里煤矸石场景我一般从 YOLOv8 或 YOLOv11 起步原因是工程生态成熟、导出部署方便、社区踩坑记录多。YOLOv5 也能用但新项目没必要往回选。至于 yolov26 目标检测这类更新版本如果团队有精力追新可以试但工业现场优先看稳定性和部署链路不是版本号越新越好。SSD 系列在密集小目标上召回偏低halcon 深度学习目标检测适合产线已有 Halcon 授权的场景否则授权成本要算进去。选型的核心看三个指标小目标召回、推理延迟、导出后端。矸石在 1080p 里可能只占 40×40 像素YOLO 的 P3 特征层stride 8是主力如果目标更小要考虑加 P2 层或者提高输入分辨率到 1280。推理延迟上现场如果用 Jetson 或者工控机加 GPUYOLOv8n/s 能跑到 30 fps 以上如果只有 CPU那得选 n 级别并做量化。导出后端决定你能不能落地TensorRT、ONNX Runtime、OpenVINO 各有适用硬件训练前就要想清楚。3.2 训练配置从 data.yaml 到超参下面是一个煤矸石二分类煤 / 矸石的data.yaml和训练命令基于 Ultralytics 风格的接口其他框架思路一致。# data.yaml path: /data/coal_gangue train: images/train val: images/val test: images/test nc: 2 names: 0: coal 1: gangue# 训练输入 1280batch 按显存调epochs 先跑 100 看曲线 yolo detect train \ datadata.yaml \ modelyolov8s.pt \ imgsz1280 \ epochs100 \ batch8 \ lr00.01 \ lrf0.01 \ warmup_epochs3 \ mosaic0.5 \ hsv_h0.010 \ hsv_s0.5 \ hsv_v0.3 \ degrees0.0 \ translate0.1 \ scale0.3 \ fliplr0.5 \ flipud0.0 \ device0 \ projectruns/coal \ nameexp01参数逐个说imgsz1280是为了小目标代价是显存和延迟上升如果目标够大可以降到 640。batch8是 1280 输入下 8G 显存的保守值爆显存就往下调别硬撑。lr00.01是初始学习率工业数据量小的时候可以降到 0.005 防止震荡。mosaic0.5降低四拼概率避免小目标被缩得更小。hsv_h0.010把色相抖动压到很低保护煤矸石的颜色判别特征。flipud0.0关掉垂直翻转理由前面说过。degrees0.0关旋转皮带上的目标不会大角度旋转开了反而引入不真实样本。训练过程中盯三个东西train/box_loss和val/box_loss是否同步下降如果训练降验证升就是过拟合加数据或者加正则metrics/mAP50和mAP50-95的差距差距大说明框回归不准检查标注质量混淆矩阵里煤和矸石的互误如果某一类召回特别低看是不是样本不均衡用重采样或者类别权重补。3.3 微调崩了怎么救目标检测模型微调的常见崩法目标检测模型微调崩了是热词里高频出现的痛点煤矸石场景尤其常见因为数据量小、类别少、预训练权重和现场分布差异大。崩的典型表现有三种loss 变 NaN、mAP 从第一轮就趴着不动、训练正常但验证全预测成一类。loss NaN 多半是学习率太大或者标注里有非法值坐标越界、宽高为 0。先把lr0降到 1e-4 试再检查标注脚本有没有做 0 到 1 裁剪。mAP 不动常见于冻结层设错如果你冻结了 backbone 但现场图像和预训练分布差太远特征根本不适配解冻全部层重新微调。全预测一类通常是类别极度不均衡煤的样本远多于矸石模型学会全猜煤就能拿高准确率这时候要看 per-class mAP别只看总体用copy_paste或者过采样补少数类。还有一个隐蔽的坑预训练权重是在自然图像上训的输入归一化是 ImageNet 的 mean/std如果你自己写了预处理但没对齐训练会莫名其妙地差。用官方训练接口时它内部会处理自己写推理脚本时务必对齐。4. 煤矸石检测的评估、部署与现场排查4.1 评价指标怎么看才不被忽悠目标检测评价指标里mAP50 是最常被引用的但煤矸石场景我更看 mAP50-95 和 per-class recall。原因很直接现场要的是别漏掉矸石漏一块矸石进精煤就是质量问题误把煤当矸石吹掉只是浪费。所以矸石类的 recall 优先于 precisionmAP50 高但 recall 低说明阈值设高了降置信度阈值能救回来一部分。评估时还要看不同子集的指标干煤、湿煤、不同粒径段分开算。如果湿煤子集 mAP 掉 20 个点说明模型没学到湿态特征得补湿煤数据。另外要做混淆矩阵和 PR 曲线PR 曲线能看出在哪个置信度区间 precision 和 recall 平衡最好现场阈值就照这个定。4.2 导出与推理从 PyTorch 到产线训练完导出 ONNX 或者 TensorRT下面是导出和推理的核心片段。from ultralytics import YOLO # 导出 ONNX动态 batch 方便产线按需调 model YOLO(runs/coal/exp01/weights/best.pt) model.export(formatonnx, imgsz1280, dynamicTrue, simplifyTrue) # 推理conf 和 iou 按现场调矸石 recall 优先就把 conf 调低 model YOLO(best.onnx, taskdetect) results model.predict( sourcetest_belt.jpg, imgsz1280, conf0.25, # 置信度阈值漏检多就降到 0.15 iou0.5, # NMS IoU密集堆叠时别设太低 device0, verboseFalse, ) for r in results: for box in r.boxes: cls int(box.cls) xyxy box.xyxy.tolist()[0] print(cls, box.conf.item(), xyxy)conf0.25是通用起点煤矸石场景如果矸石漏检多降到 0.15 到 0.2代价是误报增加用后处理按面积或者位置过滤。iou0.5是 NMS 阈值密集堆叠时如果设太低比如 0.3相邻矸石的框会被互相抑制召回掉设太高又会出现重复框0.5 到 0.6 比较稳。导出 ONNX 时dynamicTrue让 batch 可变产线可以攒几帧一起推提高吞吐但延迟会升实时性要求高就固定 batch1。4.3 现场排查模型上线后指标掉了怎么办上线后指标掉是常态排查按数据、模型、环境三层走。数据层先看镜头有没有脏、光源有没有衰减、煤质有没有换这些变化会让输入分布漂移。模型层看是不是用了错误的权重文件、预处理有没有对齐、阈值有没有被改。环境层看 GPU 有没有降频、推理服务有没有内存泄漏导致帧丢弃。一个实用的做法是留一批现场标注的监控集每周跑一次画指标趋势线。掉超过 5 个点就触发告警人工看几张误检图判断是数据问题还是模型问题。别等客户投诉了才发现。5. 避坑与常见问题煤矸石数据集训练的五个血泪坑5.1 坑一验证集泄漏导致指标虚高现象是验证 mAP 95上线实际召回不到 70。原因是按帧随机切分相邻帧进了不同子集。解决是按时间段或批次切分切完用图像哈希去重确保验证集和训练集没有近似重复。5.2 坑二类别定义反复改导致标注白做现象是标注到一半工艺说夹矸要单独一类前面几千张全返工。原因是标注前没和工艺、质检对齐类别体系。解决是先出标注规范文档标 200 张做试点评审通过再全量铺开。5.3 坑三小目标被下采样吃掉现象是矸石粒径小的时候召回骤降大块矸石正常。原因是输入分辨率不够或者模型 stride 太大小目标在 P3 甚至 P4 上只剩几个像素。解决是提高输入到 1280 或加 P2 检测层同时检查标注框是不是小于 10 像素太小的目标考虑归为难例不参与训练。5.4 坑四颜色增强毁掉判别特征现象是训练指标正常现场湿煤和干煤混淆严重。原因是 HSV 增强的 H 通道抖动太大把煤矸石本来的色相差抹掉了。解决是把hsv_h压到 0.015 以下湿态数据单独采集补充别指望增强能造出湿煤。5.5 坑五导出后精度对不上现象是 PyTorch 推理正常导出 ONNX 或 TensorRT 后 mAP 掉几个点。原因是预处理不一致归一化 mean/std、通道顺序、letterbox 填充值或者量化精度损失。解决是对齐预处理导出后拿同一批图跑对比逐层排查量化先用 FP16 别直接 INT8。6. 把煤矸石检测做扎实的一个习惯建自己的回归测试集前面讲的都是怎么把模型训出来、部署上去最后说一个我踩坑之后养成的习惯从项目第一天起就建一个回归测试集规模不用大200 到 300 张覆盖干煤、湿煤、不同粒径、不同班次光照每张都人工标好。每次改数据、改模型、改阈值、换导出后端都拿这个集跑一遍记录 mAP50、矸石 recall、误报率三个数。指标掉了立刻知道是这次改动引入的不用在一堆变量里猜。这个集要冻结不能拿去训练也不能因为指标难看就偷偷换图。我见过团队为了汇报好看把测试集换成简单样本结果上线翻车。回归集的价值就在于它不变变的是模型。维护上每季度可以补充一批新的现场难例但老图保留这样趋势线才有意义。具体操作上我会写一个eval_regression.py固定conf和iou输出每个类别的指标和误检图清单存成 CSV 按日期归档。跑一次几分钟比事后救火便宜太多。煤矸石识别这个方向数据质量决定上限模型只是逼近上限的工具把数据管好、把回归测试守住比追新版本号实在得多。希望帮到你。本文还有配套的精品资源点击获取
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

Postman Linux 独立版:离线可用、免登录、无依赖的 API 测试工具 2026/10/2 10:33:35

Postman Linux 独立版:离线可用、免登录、无依赖的 API 测试工具

简介:本资源为Postman官方Linux平台x86_64架构桌面客户端安装包(v8.11.1),面向接口开发、测试工程师及前后端联调人员,解决Linux环境下无原生GUI接口调试工具的痛点,支持REST、GraphQL、WebSocket等全类型H…

阅读更多 →
首屏加载优化实战:从瓶颈分析到缓存策略落地 2026/10/2 10:33:34

首屏加载优化实战:从瓶颈分析到缓存策略落地

首屏加载优化大概是前端面试里最容易被问、实战里最容易出效果的一个方向。但很多人拿到一个慢项目,第一反应是压缩图片、上CDN,折腾一圈下来发现Lighthouse分数没涨多少,用户还是反映白屏久。问题出在哪儿?多半是没搞清楚瓶颈到底…

阅读更多 →
Win11游戏xinput1_3.dll丢失?六种实测修复方法 2026/10/2 10:33:34

Win11游戏xinput1_3.dll丢失?六种实测修复方法

1. 先搞清楚 xinput1_3.dll 到底是个什么东西1.1 这个文件为什么总和游戏过不去xinput1_3.dll 是 DirectX 运行库里的一个动态链接库,专门负责处理 Xbox 360 手柄以及兼容手柄在 Windows 上的输入信号。你插上一个手柄,游戏能识别到按键、摇杆、震动&…

阅读更多 →
前端首屏加载优化实战:从指标量化到构建、网络、运行时全链路提速 2026/10/2 10:33:33

前端首屏加载优化实战:从指标量化到构建、网络、运行时全链路提速

如果你看到这篇文章,大概率是遇上了差不多的场景:页面一打开,白屏两三秒,用户等得着急,自己也跟着焦虑。我前两年接手过一个管理后台项目,首屏加载时间稳定在3秒开外,模块切换还经常卡顿,后来花了两周时间把首屏压到了800毫秒以内,核心过程其实就是几个常规手段的组合拳,没有银…

阅读更多 →
AI自动生成Git提交信息:VSCode与上下文工程实战指南 2026/10/2 10:33:32

AI自动生成Git提交信息:VSCode与上下文工程实战指南

2. 智能提交信息的核心逻辑:不是“套模板”而是“把上下文喂给模型” 2.1 Commit AI 到底在解决什么问题 先说个反直觉的事:很多人以为 commit message 只是“写给未来的自己看的备注”,但实际上它最大的价值在于 降低全团队的认知成本 。…

阅读更多 →
汇编Debug调试实战:闰年判断程序单步跟踪与CX高位清零修复 2026/10/2 10:33:26

汇编Debug调试实战:闰年判断程序单步跟踪与CX高位清零修复

简介:这份资源是北京交通大学汇编与接口课程的Debug调试实验配套文档,面向正在学习汇编语言与微机接口的学生及需要掌握底层调试技能的开发者。实验以leapYear.exe闰年判断程序为主线,完整覆盖编译链接运行、代码逻辑逐句分析、Debug单步调试…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉