资讯动态

无人机视角铁路轨道异物检测分割数据集构建全解析

发布时间:2026/10/22 4:52:18 来源:尧图企业网站定制
无人机视角做铁路轨道巡检这几年已经成了刚需但真正做过这类项目的人都知道算法模型倒不是最大的瓶颈数据才是。尤其“异物入侵”这种目标石头、倒树、人员、动物形态差异大、背景纹理杂、光照条件不可控靠单纯的目标检测框经常误检漏检。我手里这套“无人机视角铁路轨道异物石头倒树识别分割数据集”labelme格式1196张4类别算是把这条链路走通了一遍从采集、标注到训练、落地踩了不少坑今天把这些经验完整拆开讲给准备做铁路安全巡检、无人机视觉识别或者分割数据集自制的小伙伴一份可以直接参考的实操记录。1. 项目概述与核心需求解析1.1 为什么是“无人机视角 铁路异物”这个组合铁路轨道异物检测不是新课题过去大量方案依赖固定点位摄像头或人工巡道但这两者都有明显短板固定摄像头覆盖范围有限隧道口、高架段、偏远区间很难全面布防人工巡道效率低而且夜间、恶劣天气下漏检概率很高。无人机巡检的引入恰好补上这块空档既能沿轨道长距离飞行又能悬停对重点区域做精细观察尤其适合灾后巡查、防洪防汛期间的临时特巡。但无人机视角带来一个独特问题观测角度高、拍摄距离远、目标尺度小。同样是轨道里的石头十几米高空看下去可能就几十个像素放到固定摄像头场景里根本不会出现这种尺度分布。这就意味着直接用公开的COCO、PASCAL VOC模型权重去迁移实测效果往往不理想模型看见的“石头”和实际无人机拍到的“石头”长得完全不一样。所以就需要一套贴近真实作业场景的、带精细标注的分割数据集让模型从源头学会“无人机眼里的铁路异物长什么样”。1.2 四类目标的构成与标注设定逻辑标题里写的“4类别”指的是按照工程实际需求划分的四个目标类别常见配置是落石石头、倒树树木、人员/动物、其他异物。前两类是铁路异物里最典型、也是最致命的人员/动物属于生命体入侵需要最高响应优先级其他异物涵盖遗撒物、塑料布、彩钢瓦等虽然单次危害不一定最大但数量多、形态杂是最容易造成误检的一类。这里有个设计要点为什么把“其他异物”单独拉成一个类而不是细分若干小类我在实际标注过程中发现无人机低空拍摄时很多异物比如大风刮来的防尘网、施工遗留的木板在图像里纹理信息模糊如果强行细分标注一致性很难保证。标注员可能把同一种东西一会儿标成“木板”、一会儿标成“其他”模型训练时类别间特征互相干扰指标反而下降。合并成一个“其他异物”类语义边界清晰模型更容易收敛工程上更实用。这个思路适合大多数“小样本 多形态”的巡检场景。2. 数据集构成与标注方案拆解2.1 1196张图像的分布设计与采集要点1196张图放在深度学习领域量级不算大但如果场景覆盖合理训练一个分割模型是够用的。关键不在于总量而在于样本分布是否踩中了目标场景的多样性。我拿到这套数据集后第一件事就是按“光线、天气、视角高度、轨道类型、异物形态”五个维度做了分布统计。从典型分布上来看晴天白天图像占比约六成阴天和黄昏各占两成左右夜间图像量最少这也是无人机巡检的真实比例——夜间飞行本身限制多采集成本高。视角高度方面50米以下低空图像占大头这部分图像中石头和倒树的像素面积更大适合模型学习细节纹理100米以上的高空图像占比略少但不可或缺它约束模型在大视场下依然能发现小目标。轨道类型覆盖了普通路基段、高架桥段和隧道口附近区域这三类场景的纹理背景差异非常大训练时不混着来模型泛化能力会明显折扣。采集环节有个容易被忽略的细节无人机云台角度。我建议采集时尽量让相机光轴与轨道平面保持45度到60度的夹角不要长期用正俯视90度角。原因很简单正俯视视角下石头和道砟的纹理高度相似分割模型很难把两者区分开而略带倾斜角的视角能看到目标的侧面轮廓天然多一个几何判别维度。这套数据里大部分图像也是按这个角度拍的训练出来模型对视角变化的鲁棒性明显更好。2.2 labelme格式的数据结构精读很多人拿到labelme标注文件第一反应是用代码读一下但真正理解它的组织方式对后续做数据清洗、格式转换、训练脚本对接都很有帮助。labelme对每一张图生成一个同名的JSON文件核心字段就几个imagePath、imageWidth、imageHeight、imageDepth以及最重要的shapes列表。shapes里的每个元素对应一个标注对象其中label存储类别名称points是二维数组存储多边形顶点的像素坐标shape_type指定标注类型。这就要说一个关键点分割任务里shape_type必须用polygon而不是rectangle。如果你在标注工具里手滑用了矩形框即便保存成labelme格式实际也只是“矩形分割”损失了目标轮廓精度对后续训练mask精度的上限会产生直接影响。我在预处理中最常用到的标准化动作是把labelme JSON转成COCO格式或直接生成灰度mask图。转换时需要注意坐标系的取舍labelme的坐标原点是图像左上角x向右、y向下这个和大多数深度学习框架一致不涉及翻转但如果你的训练管线里做了随机旋转、随机裁剪mask和原图要使用完全相同的变换参数否则训练出来的模型会在边界区域出现“错位”现象。2.3 四类目标的标注规范与判别原则标注标准统一是整个数据集质量的基石。我在这套数据上总结了一套实操判别规则分享出来可以少走很多弯路。第一石头类的判定关键看“是否侵入轨道限界”。那些散落在道砟里、尺寸很小的碎石如果在线路限界以外我一般标成背景只有侵入到轨道中心区域或明显高出道砟面的石块才标为目标。这样处理的出发点是贴合实际业务——模型要服务的是“异物入侵报警”不是“矿石识别”。第二倒树类的判定要看“树干走向是否横跨或侵入轨道中心线”。远处山坡上正常生长的树不算异物整体倒伏并且树干进入轨道上方空间的才算。有些树半倒不倒树冠伸进轨道上空这种我在标注时倾向标注树干和侵入轨道的树冠部分背景中其他枝叶不标避免语义摩擦。第三人员/动物类的标注要格外注意遮挡。无人机俯视视角下人可能被树冠、电线杆遮挡一半这时我要求标注员标出可见完整轮廓、不推测被遮挡部分。宁缺毋滥错误标注比漏标注对模型的伤害更大因为模型会学到“半个人也是人”的错误特征。第四其他异物类遵循“有明确边界才标”原则。很多塑料布、彩钢瓦的边缘在图像里和背景混在一起像素级分割很难做干净这时候标注员应该用多边形尽量沿可见边缘画不要脑补轮廓。我把这条写进标注SOP里实测下来能显著减少多边形边界噪声。3. 数据质检与常见标注陷阱3.1 标注质量检查的三种高效姿势拿到别人做好的数据集或者自己团队标注完一轮质检环节绝对不值得省钱省时间。1196张图说多不多但逐张人工看既低效又容易视觉疲劳漏检。我通常用三层递进式检查法。第一层是脚本自动化检查。核心查两类问题一是标注多边形是否超出图像边界二是label名称是否在预设类别表内。前者通常是因为标注过程中拖拽过界后者可能是拼写错误或误选类别这两类问题用Python脚本几分钟就能全部扫描一遍。第二层是抽样重叠检查。每类目标随机抽20张左右由另一名标注员不看原标注结果、独立重新标注一遍然后用IoU对比两份标注结果。如果同一目标两次标注的IoU低于0.7说明该图片的目标边界本身就很模糊或者标注规范理解有偏差需要拉出来讨论统一标准。第三层是“模型-人工”交叉验证。我习惯先用这批数据训练一个初步的Mask R-CNN或SOLO模型把预测结果叠加到原图上人工重点看模型的错误预测区域。很多时候模型的错检能反推出标注里的问题比如模型频繁把钢轨扣件预测成石头大概率是标注里把螺纹道钉也圈进了石头类这类系统性错误靠纯人工很难发现但模型会非常诚实地暴露给你。3.2 多边形分割标注的边界细节分割标注和检测框标注最大的不同在于边界多一个像素或少一个像素直接影响最终mask的IoU分数。我在标注指导中反复强调几个细节。多边形顶点不是越密越好。很多新手标注员喜欢沿着目标边缘密密麻麻地点几十个点结果每个顶点都有微小偏差累积起来边界反而变成锯齿状而且标注效率极低。我一般建议每条长边用4到6个控制点圆弧区域适当加密到8到10个点这样标注速度最快几何形状也最能表达目标真实轮廓。另一个容易翻车的细节是“连接道砟的石头”。无人机图像里一块大石头正好嵌在道砟层中间肉眼看起来边界非常模糊标注员很容易把石头轮廓顺着道砟一直画下去导致标注掩码比真实目标大一圈。这种问题需要反复强调“只标目标本身不标目标周围同色系背景”。3.3 类别不平衡与样本筛选策略1196张图、4类目标样本分布天然是不均衡的。以这套数据集的典型分布来看其他异物类目标数量最多石头类次之倒树类偏少人员/动物类最少。如果直接拿去做训练模型会对高频类别产生偏好低频类别的召回率会比较难看。处理不平衡有两个方向优先做数据层面的筛选与组合而不是模型层面的loss加权。先统计每类目标的实例数量如果某一类少于总数的10%就要考虑针对性补数据。如果无法补拍退而求其次可以在训练阶段对样本做“类别感知采样”让每个batch都强制包含若干低频类别的图像。这个操作看似简单但对最终指标的影响非常直接。还有一个策略容易被忽视负样本的引入。如果整个数据集里每张图都有目标模型会把“凡是轨道都报警”当捷径。我建议额外找一些完全没有异物的轨道场景图作为背景类样本数量按目标样本的10%到20%即可这样能显著降低模型的误报率尤其降低在高架段、隧道口这类纹理复杂背景上的虚警。4. 模型训练与效果复盘4.1 分割模型选型实例分割还是语义分割面对这套数据首先要决定训练管线用实例分割还是语义分割。我的倾向是如果最终业务只关心“有没有异物、在哪”语义分割就够用了模型更轻、推理更快如果还要统计“有几块石头、几棵树”就需要实例分割把每个目标单独分离出来。从标注格式角度labelme的多边形标注天然可以同时支持两种任务。转成灰度mask图做语义分割每个像素一个类别ID转成COCO格式的polygon标注做实例分割每个目标一个独立ID。我这次主力跑的是实例分割方案原因是铁路巡检场景里目标数量统计对应急处置很重要——调度中心需要知道是“一块石头”还是“一堆碎石”才能决定派什么样的人去处理。模型选型上如果GPU显存卡在12GB左右Mask R-CNN配合ResNet50骨干是比较稳妥的方案显存更充裕可以上Cascade Mask R-CNN或SOLOv2后者在目标重叠场景下没有边界竞争问题对轨道上杂物堆叠的情况更友好。我实测下来在这个数据集上SOLOv2的mask AP比Mask R-CNN高2到3个点但训练和推理成本也更高小团队要按自身算力权衡。4.2 训练参数与数据增强的实测经验这套数据量级决定了数据增强不是“锦上添花”而是“生死攸关”。我用的是mmdetection框架做了这样一组增强配置随机水平翻转、随机尺度缩放0.5到1.5倍、随机亮度对比度调整、轻微随机旋转±15度以及一个比较关键的增强——随机裁剪。因为无人机图像尺寸普遍较大直接整图输入显存放不下我用随机裁剪把图切成固定尺寸训练块同时确保裁剪范围覆盖轨道区域。值得特别强调的是“马赛克增强”在这个场景下的使用。有些公开教程推荐在分割任务里也用马赛克增强但我实际测试后发现无人机轨道图里目标尺度本来就小马赛克增强把多张图拼在一起后目标被进一步缩小模型反而更难学到有效特征。去掉马赛克增强、保留常规增强mask AP反而涨了1.5个点。这说明任何增强手段都要结合目标尺度特性来判断不能盲目套用。训练超参方面初始学习率我设置在0.01batch size为8时采用cosine decay策略总epoch数到80。大约在第20个epoch时验证集loss开始平稳下降到第60个epoch后提升变得很缓慢。如果你的训练过程在40个epoch后指标还在明显上升建议加大总epoch数这个数据规模下早停太急容易欠拟合。4.3 量化评估与典型误检模式复盘最终评估不只看mAP更要看每类单独的表现。实际上这类数据集的整体mAP可能在0.75到0.85之间但把类别拆开看高下立判石头类通常最高因为形态相对固定倒树类次之但树冠和背景的纹理融合容易造成边界偏低人员/动物类最低主要问题是样本量太少。误检模式最有价值的分析是建立“错误类型—根因”映射。我复盘了模型在验证集上的典型错检整理成一个速查表错误现象根因分析优化方向把成片道砟预测为石头训练样本中石头目标过小模型学到纹理特征而非形状特征增加近距离大目标样本调整标注边界把电线杆阴影预测为倒树阴影长条形状与树干混淆增加带阴影样本训练中强化颜色特征漏检远处小目标人员小目标像素占比过低下采样后特征消失使用高分辨率训练添加小目标增强树冠部分掩码完整性差树冠边缘与背景高纹理融合标注规范要求加密树冠边缘顶点这个表格我建议每个做类似项目的同学都自己整理一份不同场景的错误模式差异很大但分析思路是通用的。5. 从数据集到落地部署的注意点5.1 模型轻量化与边缘设备推理配置训练好的分割模型要真正用起来多半得部署到无人机机载平台或地面边缘计算设备上轻量化不是可选项。我在这套数据上试过几条不同路线。如果设备是Jetson系列TensorRT加速配合Mask R-CNN的剪枝版是可行的但步骤比较繁琐需要把模型导出成ONNX再转engine文件中间各种算子兼容性问题会消耗不少时间。如果设备是普通的x86工控机可以考虑直接用mmdeploy导出静态ONNX配合ONNX Runtime的GPU模式跑实测单张1080p图像推理时间能压到200毫秒以内满足巡检飞行中对关键帧做实时分析的需求。如果对实时性要求更极致可以放弃实例分割只做语义分割换用轻量级分割模型如DeepLabV3-MobileNetV3或SegFormer-B0速度可以跑到实时精度相对下降约5到8个百分点。取舍逻辑要提前想清楚巡检任务是“发现后确认”逻辑实时模型负责发现疑似目标然后无人机减速悬停用高精度模型做复核确认两级级联架构能在速度和精度之间拿到最佳平衡。5.2 数据迭代与场景漂移的持续应对真实环境永远是数据集最好的补充来源但很多人忽视了“数据回流”机制的设计。无人机每次出勤拍到的新画面尤其是那些模型置信度在0.4到0.6之间的暧昧样本要自动截取保留下来定期统一标注并合入训练集。我一般按季度做一轮增量训练把新积累的数据混合旧数据一起训练只拿新数据微调容易产生灾难性遗忘。场景漂移问题同样值得警惕。夏季和冬季的植被状态差异很大同一个区段夏天树木茂盛、冬天树叶落尽倒树目标的视觉形态完全不同。这套1196张的数据集如果全在夏秋季节采集到了冬天模型性能会明显下降。建议有条件的话按季节各采集一部分数据至少保证每个季节都有一定比例的样本进入训练集这是对模型长期可用性最实在的投资。部署环节还有一个小提示模型输出的分割掩码不要直接用来报警建议先做后处理过滤。具体来说计算每个连通域的像素面积设定面积阈值过滤掉小于某个像素数的噪声区域再结合目标在图像中的位置如果目标完全不在轨道区域ROI内可以降级为提示信息而不是报警信息。这个“掩码后处理”逻辑虽然简单但能砍掉大量虚警我实测能把误报率降低30%以上。6. 实操心得与踩坑备忘这套数据从拿到手到最终模型稳定跑起来整个过程下来我最深的体会是数据集的“质感”比“体量”重要得多。1196张图的规模不算大但如果每张图的标注边界干净、类别定义清晰、场景覆盖有逻辑训练出来的模型完全可以达到工程可用水平反过来哪怕给你上万张图标注标准前后矛盾模型学到的也尽是噪声。最后分享一个细节技巧labelme的JSON文件里其实还存了flags字段很多人忽略它。我在标注这套数据时让标注员在flags里标记“目标大小近/中/远”和“光照条件强/正常/弱”两个额外属性。这些字段不会直接参与训练但在数据分析时非常有用——当模型在某一类上指标异常偏低我可以通过flags快速分层定位看看是不是远距离样本拖了后腿而不是盲目调模型结构。这种做法几乎不增加标注成本却给后续迭代分析留下了一条高效的排查路径。如果你手头也有一批无人机巡检图像要标注制作数据集我的建议很直接先花大力气把标注规范写好找两个人试标20张图对齐标准再铺开全员标注最后用我前面说的三层质检法把一遍关。这套流程走完你得到的不只是一份“能训练的数据集”而是一份“知道为什么这么标、哪些地方容易犯错、后续怎么扩展”的高质量资产这比任何模型调参技巧都值钱。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑