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

资讯详情

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

YOLOv5+Pytorch煤矿大块煤识别:从数据标注到训练全流程

YOLOv5+Pytorch煤矿大块煤识别:从数据标注到训练全流程 简介本资源是面向煤矿智能化巡检与安全生产场景的工业视觉识别数据集专为YOLOv5 PyTorch框架训练大块煤检测模型而构建适用于计算机视觉工程师、矿业AI算法开发者及高校相关方向研究者。数据集基于真实煤矿现场采集的1767张图像全部采用YOLOv5标准格式标注每图对应1个txt标签文件配套232张原始JPG图像部分图像含多目标标注及1个类别定义yaml配置文件共2000个文件压缩包仅39.15MB轻量高效且即取即用。已有452人学习下载表明其在工业小样本检测任务中具备较强实践参考价值。用户可直接用于模型训练、验证与推理无需额外格式转换标注覆盖不同光照、堆叠形态与遮挡程度下的大块煤实例具备典型工业场景鲁棒性同时便于开展数据增强策略对比与模型泛化能力评估。 煤矿现场的视觉识别项目最难的不是模型结构选得多花哨而是数据本身能不能真实反映生产环境。前阵子做了一个煤堆大块煤识别任务用yolov5在pytorch框架下训练数据集是1767张煤矿现场实拍图全部手工标注完成。整个过程走下来我最大的感受是这活儿七分在数据三分在模型。今天把这套从数据采集、标注规范到模型训练的完整流程梳理出来给正准备做工业视觉检测、尤其是矿山场景的朋友一个参考。这个项目适合谁一是手头有类似工业检测需求、但还在纠结数据怎么搞的工程师二是准备用yolov5跑自定义数据集、但对标注规范和训练细节没底的学习者三是想了解真实工业场景下目标检测落地坑点的团队。我会把采集筛选、标注执行、训练调参、问题排查这几个环节的关键细节全部分享包括一些你用肉眼看不出来、但会直接影响模型效果的小坑。1. 为什么煤矿现场的大块煤检测不能拿公开数据集硬套1.1 工业场景和通用场景的差异在哪里很多人拿到目标检测任务第一反应是去网上下载一个通用目标检测数据集比如COCO、VOC之类先跑通流程再说。这个思路在学术demo阶段没问题但要落到煤矿现场基本行不通。煤矿现场的环境有几个非常典型的特点粉尘干扰井下或储煤场空气中煤粉浓度高镜头前经常蒙着一层灰图像的清晰度和对比度远低于常规场景。光照不均匀有的区域强光直射有的区域处于阴影中煤堆表面又有强反光导致同一张图里亮部和暗部的细节差异极大。目标堆叠严重煤堆上的大块煤不是整齐排列的而是层层堆叠、互相遮挡边缘轮廓不完整。背景复杂有传送带、破碎机、护栏、运煤车等各种设备背景干扰因素多。公开数据集里的图像大多是干净场景物体在画面中独立、完整、光照均匀。拿这样的数据训练出来的模型到了现场大概率会出现严重的漏检和误检。1.2 这个数据集的定位和设计逻辑这个项目的核心任务是从煤堆现场画面中识别出粒径较大的块煤。所谓大块煤通常是指粒径明显大于周围煤粉和小颗粒煤炭的块体在选煤、破碎、运输等环节都有监测需求——比如破碎机前如果堆积大量大块煤可能导致卡堵传送带上大块煤占比过高也影响下游工序。1767张现场图片的规模从数据量上看不算大但对工业场景来说关键在于数据的代表性和标注的质量而不是一味追求数量。实际采集的图片远不止1767张最终留下这些是经过筛选的筛掉的是重复度过高、严重模糊、光线过暗到人眼都难辨别的无效样本。这个筛选过程非常关键后面我会详细讲。所以说这个数据集的价值不在数量而在每张图都来自真实生产环境这个前提。模型最终是部署在现场的训练数据就必须来自现场这个逻辑是整个项目的地基。2. 1767张现场图片背后的采集与筛选逻辑2.1 原始素材怎么采覆盖场景多样性是第一优先级我们采集原始素材时没有只盯着数量多这一个目标。真正动脑子的是怎么把生产现场可能出现的画面变化都覆盖到。具体来说有几个维度的变量在采集时必须有意识地拉开差距时间段白天自然光、夜间灯光照明、黄昏光线暧昧的时段都要有。煤矿很多是连续生产模型夜间也要用。煤堆状态平整的煤堆、刚卸车形成的尖堆、被铲车推过的压实表面、正在移动的输送过程中的煤流这些状态差异很大都要拍到。拍摄距离近景煤块特征明显占画面比例大和远景煤块在画面中较小但仍需识别两种尺度的图都要有避免模型只对某一个尺度敏感。设备角度固定枪机平视、高位云台俯视、手持设备移动拍摄不同角度下煤块的形态和遮挡关系差异明显。为了做到这一点我们连续几天在不同班次去现场拍摄每次拍几百张最终积累了远超1767张的原始素材。这里有个经验宁可多拍也不能漏场景。后期筛选的成本远低于重新跑现场补拍的成本。2.2 从原始素材到最终数据集的筛选标准有了大量原始素材怎么筛到1767张我总结了一个三看筛选法一看清晰度画面模糊的、镜头起雾的、对焦不准的直接淘汰。模型需要学习的是煤块的特征不是模糊的色块。模糊样本混进训练集会让模型学到错误特征。二看信息量如果连续几十张图内容几乎一样比如固定摄像头对着同一堆煤拍了很久只保留有明显变化的几张即可。高度重复的样本不仅不提供新信息还会让训练集产生偏置模型在重复样本上过拟合反而降低泛化能力。三看标注可行性有些图因为遮挡、阴影等原因连人眼都很难判断哪些是独立的大块煤这种图标注出来也是错漏百出不如直接不要。最终留下的1767张图我保证每张图都有明确的、可标注的目标且整体场景覆盖足够分散。这样训练出来的模型泛化能力才有保障。2.3 数据量真的够吗一个经验判断1767张图如果一张图平均标注25~35个大块煤目标总标注框大概在4~6万个这个量级在工业视觉里是够用的。原因有两点第一目标类别的粒度相对统一。我们只识别大块煤这一类目标类别单一意味着模型不需要去区分非常多细粒度类别每个类别能分到的有效样本量更充足。第二场景虽然变化多但特征的空间分布相对集中。大块煤之间形态上比行人、汽车、猫狗这类跨类别差异要小得多模型不必学非常复杂的类间特征。所以如果你的项目也是单一目标识别且数据来自固定或半固定的工业场景那么1000~2000张高质量标注图作为起点是可行的。如果目标类别多、场景变化极端那这个数量就得往上翻。3. 标注规范不只是画框还要定义清楚什么是大块煤3.1 边界条件的确定是最容易被忽视的工作标注工作看起来就是拿框把目标框住但什么是大块煤这个定义如果团队内部没对齐标注出来的数据就是一团乱麻。我见过太多项目在标注规范上翻车当时标注的人凭感觉画最后模型训练出来效果差排查半天发现问题出在标注标准不一致上。在我们的项目里大块煤的判定标准做了如下约定粒度下限设定了一个粒径阈值具体数值取决于现场工艺要求低于这个阈值的煤块不标注视为背景。可见面积下限目标在画面中占据的面积过小比如小到人眼都很难确认边缘就不标注。这种微小目标是典型的标注噪声对模型训练无益。遮挡规则如果一个大块煤被其他煤块遮挡超过70%不标注遮挡程度较轻、主要轮廓可见则正常标注完整外接框。这个边界条件看起来简单实际执行时争议很大。比如这个煤块边缘露出了一小半算不算该标注为了避免争议我们在标注规范文档里配了正例和反例示意图并组织标注人员做了两轮试标统一了标准才正式开始。3.2 建议用图像标注工具但最终输出必须是YOLO格式实际标注环节我建议用LabelImg或者开源的X-anylabeling这类工具。如果你用了LabelImg保存出来是VOC格式的XML标注文件需要再通过脚本转换成YOLO格式的txt文件。转换逻辑很简单就是把XML里的坐标换算成归一化中心点坐标和宽高。如果你直接用X-anylabeling配置YOLO输出模式就可以直接生成txt文件。但坦白说工具的选择不是最核心的标注质量的一致性才是决定模型效果的关键因素。下面是我整理的标注过程规范要点边界框要贴合目标外接矩形不要刻意留白太多也不要把框切进目标内部。对完全重叠几乎同一位置出现两三个大块煤紧紧靠在一起的目标能区分边界的就逐个标区分不了的就标成一个框。由于现场镜头有灰尘部分图片边缘有污渍要区分污渍和真实煤块不能机械地把所有深色目标都框进去。每标完一张图抽查大图预览确认框的位置、大小、数量都合理。3.3 质量抽检与二次修正环节1767张图不是一次性标完就完事的。我们采用了标完一批、抽检一批、修正一批的循环。具体做法是每完成100张左右用脚本统计一次所有标注框的尺寸分布、中心点分布发现明显异常的比如某一张图突然出现了大量细小框或者整张图标注框数明显少于正常水平就重点回看。这种脚本统计的方法能发现人工检查很难注意到的问题。另外我还建议训练完第一版模型后用模型预测结果反过来检查标注质量——模型预测出的高置信度目标如果图片上根本没有对应标注框那大概率是标注遗漏。这个模型辅助标注质检的思路可以帮你把标注的召回率提上去。4. YOLOv5训练实战从环境到调参的关键细节4.1 pytorch环境搭建与版本选择pytorch的安装是很多新手第一道坎而且版本选错会引发各种诡异问题。我建议你按下面的逻辑来先确认显卡驱动支持的CUDA版本用nvidia-smi查看。然后安装对应版本的pytorch。比如你驱动支持CUDA 11.8就装pytorch的cu118版本。命令一般是pip install torch torchvision --index-url https://download.pytorch.org/whl/cu118对于yolov5建议使用Python 3.8至3.10之间的版本。太新的Python版本有时会出现某些依赖库编译报错的问题别在这上面浪费精力。另一个常见坑是numpy版本冲突。yolov5对numpy的版本有隐性要求装了过新或过旧的numpy可能会在训练时报一些莫名其妙的错误。装好环境后先跑一个简单的推理测试确认环境没问题再开始训练。4.2 数据集目录结构与配置文件把标注好的txt文件按YOLO格式组织成如下目录结构dataset/ ├── images/ │ ├── train/ │ ├── val/ │ └── test/ ├── labels/ │ ├── train/ │ ├── val/ │ └── test/ └── dataset.yaml划分比例建议train:val:test大约是8:1:1并且要保证划分时同场景的相似图片尽量别全跑进训练集或验证集。实际操作中我先把所有图片按场景分组再从每个组里按比例抽这样能避免验证集和训练集太像导致验证指标虚高。dataset.yaml的内容很简单train: dataset/images/train val: dataset/images/val test: dataset/images/test nc: 1 names: [large_coal]4.3 训练命令与超参数经验值基础训练命令如下python train.py --img 640 --batch 16 --epochs 150 --data dataset.yaml --weights yolov5s.pt --cache几个参数的选择逻辑img 640yolov5默认是640如果你的煤块在画面中占比普遍较大可以尝试降低到512以提升推理速度如果有很多小块需要识别可以考虑上采样到768或896但训练成本会上升。我们的场景里640是一个平衡点。batch 16根据显存来定。显存不够可以减到8或4。batch太小会导致BN层统计不稳定模型收敛慢。epochs 150工业单类别数据集通常100~200个epoch就能收敛得很好。没必要一上来就300、500个epoch先跑150看看曲线。weights yolov5s.pt不建议从头训练。在COCO预训练权重基础上微调能显著加快收敛尤其是你的训练数据量不太大的时候。yolov5s是速度和精度的均衡选择如果现场算力弱用yolov5n如果精度优先且设备能扛可以用yolov5m或l。4.4 训练过程怎么看loss曲线和验证指标训练过程中重点盯着以下几个指标box_loss、obj_loss这两个损失应该逐步下降并趋于平稳。如果loss曲线反复震荡先检查学习率是否过高。mAP0.5这个指标在单类别任务里直接反映检测精度。一般来说工业现场单类别目标mAP0.5能到0.9以上才算合格。P精确率和R召回率这两个指标的平衡更重要。如果你的场景里漏检比误检更不可接受那就要通过调整置信度阈值来平衡P和R让模型在部署时更偏重召回。debug训练过程最好的方式就是在训练结束后用训练好的权重跑一遍验证集图片把预测结果可视化保存出来一张一张看。这一步能发现很多指标看不出来的问题比如系统性地漏检某种光照条件下的目标、对某些背景误检等。5. 实测效果与踩坑记录光照、尺度、误检的应对方案5.1 第一版模型实测结果分析第一版模型训练完在测试集上mAP0.5达到了0.92看起来还行。但拿到现场视频实测后问题就暴露了。主要有三类问题暗光漏检夜间拍摄画面整体偏暗很多煤块的边缘和背景混在一起模型漏检率明显上升。粉尘运动模糊有些大块煤在运动中的图像有拖影模型有时识别不出。设备反光误检现场的金属护栏、设备表面有反光模型偶尔会把反光区域当成大块煤。这个结果说明指标好看不等于现场能用模型在干净测试集上的表现和脏乱差现场的表现差距非常大。5.2 针对光照与模糊问题的增强策略针对暗光漏检我做了几件事对训练集中的暗光图片做了自适应直方图均衡化增强煤块边缘对比度。在训练时开启了yolov5自带的mosiac增强和HSV颜色空间扰动。HSV扰动对光照变化非常有用它能模拟不同亮度和色温条件让模型不那么依赖某一个固定的光照模式。现场如果条件允许优先保证摄像头的补光。数据增强再多也不如源头画面清晰。针对运动模糊如果现场检测的是运动的煤流建议在采集训练数据时就包含运动画面而不是只拍静止煤堆。模型见过模糊的、拖影的样本推理时自然更稳。5.3 误检目标的二次判断与后处理误检问题尤其是反光区域被识别成煤块单靠调整模型参数不一定能彻底解决。我们最后用了一个巧妙的办法利用煤块和反光在形状特征上的差异做后处理过滤。大块煤通常是不规则的多边形边缘有凹凸而设备反光区域往往是规整的形状边缘圆滑或呈直线。在推理的后处理阶段对置信度在0.3~0.5之间中等置信度的检测框增加一个边缘复杂度判断计算目标框内边缘像素的分布复杂度反光区域的边缘复杂度显著低于真实煤块。这个简单的后处理规则帮助我们过滤掉了大量误检。这种方法比起单纯调高置信度阈值要精细得多因为它只针对中低置信度区间的疑似目标做二次判断不会影响高置信度目标的正常检出。5.4 部署时尺寸选择与推理速度的权衡最后部署阶段在Jetson、工控机这类边缘设备上跑yolov5需要权衡推理速度和精度。我们的经验是如果用TensorRT加速记得在导出engine文件时设置和训练输入一致的尺寸避免在推理时做尺寸变换带来的精度损失。对边缘设备yolov5s在fp16精度下通常可以做到实时如果实时性要求更高就换yolov5n。如果现场画面中煤块占比很大没必要用大分辨率推理640就够如果你要兼顾远处小目标可以尝试多尺度推理或用SAHI切片推理但成本高要先考虑是否有必要。6. 数据集和模型的后续迭代思路这个项目做完第一版之后我强烈建议不要停在这里。工业视觉项目的数据和模型都应该是能持续进化的。一个切实可行的迭代方向是把现场部署后模型判断不确定的样本即置信度在阈值附近徘徊的检测结果保存下来定期抽出来重新标注、加入训练集。这个持续收集难例样本的闭环最能提升模型在真实场景中的能力。另外大块煤检测这个任务本身也可以根据工艺需求做进一步细分。比如按粒径级别区分中等块和大块或者增加煤矸石这一类常见干扰物的检测。每增加一个类别标注规范都要重新对齐但模型能做的事情会更多实际价值更大。至于数据集的规模后续如果可能建议继续补充不同煤种、不同产地煤堆的图像。煤质不同表面光泽和纹理差异其实非常大单一煤种训练出来的模型在换煤种后需要做一定的适配。如果你手头有多个矿的现场条件数据集的多样性会明显提升模型的鲁棒性。最后再分享一个实际经验标注一份高质量的数据集花费的时间通常比你想象的多得多。千万留出足够的标注和质检时间别在项目排期上把这个环节压得太紧。数据才是整个细碎工作中最磨人、但也是回报率最高的一环。本文还有配套的精品资源点击获取
返回列表