资讯动态

输电线异物检测实战:从YHT2739数据集到边缘部署全流程

发布时间:2026/10/21 20:54:44 来源:尧图企业网站定制
1. 输电线异物检测为什么这个小问题让人头疼好多年做输电线异物检测这行的朋友多少都有过这种经历凌晨两点调度来电说线路跳闸重合成功让你去查。第二天无人机飞出去在导线上找到一截快烧断的风筝线或者一团被风吹到导线上的塑料地膜。异物这东西体量不大造成的后果却一点不小。围绕智慧电力设备输电线异物检测这个方向这两年我一直在收集和整理一套四类异物检测数据集YHT2739也用它反复训练过好几版检测模型。这篇文章把从数据准备、标注规范、模型训练到边缘部署全过程的经验和坑都写出来给正在做同类项目的朋友一个参考。先说清楚这套东西适合谁看。如果你是在读学生、刚入行的算法工程师准备拿异物检测当练手项目这篇文章能帮你省掉大量试错时间。如果你是在电力运维单位做事手头正好有一批现场图片不知道该怎么变成可用的训练数据那这份从实际项目里趟出来的流程也可以直接照着操作。核心就一句话数据集的质量和标注口径决定模型上限的一半以上。1.1 异物故障为什么不大却要命输电线路基本都是露天架设的跨越农田、河道、树林、城镇边缘什么环境都有。异物挂线的直接后果就是导线对地或相间距离缩短一旦空气间隙被击穿就是短路放电。最典型的几种情况风筝线缠在导线上。风筝线很多是尼龙加金属纤维的受潮以后导电性能上升大风天气里导线舞动风筝线来回磨蹭绝缘子和导线非常容易诱发接地故障。地膜和编织袋被大风卷到导线上方。这类轻质薄膜一旦搭在两根导线上等于在相间搭了一座桥空气湿度大的时候直接闪络。鸟巢搭在横担或绝缘子串附近。鸟巢里的树枝、铁丝、塑料绳混合在一起下雨以后整体变成导电体顺着绝缘子表面爬电。气球、条幅这类带长飘带的异物飘到导线上同样是隐患。最麻烦的是异物导致的故障多数是瞬时性的重合闸能成功所以现场不一定有明显的烧灼痕迹。但反复放电会烧伤导线铝股、绝缘子伞裙一次消缺要协调停电窗口、抢修班组成本很高。我在现场听过一个老师傅的总结异物故障不在于这一次多严重而在于它会反复来。这也是为什么运维单位愿意投钱做智能巡检——异物检测本质上是把被动抢修变成主动消缺。1.2 为什么不能用通用目标检测数据集替代可能有朋友会问市面上开源的目标检测数据集那么多直接拿来训练不就行了我一开始也这么干过后来发现完全行不通。原因有三点一是类别对不上。通用数据集里的人、车、猫、狗和输电场景需要的风筝、塑料薄膜、鸟巢没有任何交集就算做迁移学习网络学到的纹理特征也基本用不上。二是尺度差异极大。异物在画面里往往非常小——一根风筝线在整幅巡检照片里可能只有几个像素宽而一张完整的农用地膜又可能占据画面三分之一。这种极端尺度跨度通用数据集里很少专门针对。三是标注口径不统一。同样是鸟巢有人画外接矩形框有人画多边形同样一团塑料膜有人标注为垃圾有人标注为异物。我用几个公开来源的图片拼过一版数据训出来的模型在自家测试集上 AP 高低起伏特别大后来排查发现就是标注口径混乱导致模型学到了伪特征。所以最后我还是决定按统一标准整理一套自己的数据也就是后面要展开的YHT2739数据集全部按四类目标、统一标注规范、统一导出格式保证每一张图都能直接用。2. YHT2739数据集的构成与标注口径2.1 四类目标的选择逻辑YHT2739里包含的四类目标不是拍脑袋定的而是从某区域电网近几年的故障台账和缺陷记录里统计出来的。异物相关的异常事件中风筝、塑料薄膜、鸟巢、彩带/气球这四类加起来超过八成剩下的是施工机械靠近、烟火等低频但高风险的情况。类别典型形态主要风险常见拍摄环境风筝带尾巴的纸质/尼龙风筝线条细长线缠导线引发短路天空背景、城市公园附近杆塔塑料薄膜农用地膜、编织袋、棚膜多为白色/蓝色搭线后相间闪络农田、大棚区、风大区域鸟巢树枝、枯草、铁丝编织的巢状结构阴雨天爬电、闪络铁塔横担、绝缘子串附近彩带/气球庆典条幅、铝膜气球及飘带缠绕导线、造成放电城镇周边、道路沿线杆塔这里有一个标注口径上的关键决定只要目标出现在杆塔、导线、绝缘子附近不论它当前是不是已经触碰带电部位一律标为对应类别。因为巡检照片是静态的而现场风是动的这帧看着还悬空几十公分下一阵大风可能就搭上去了。从风险管理角度看即便只是靠近也值得让运维人员看一眼。2.2 数据集规模与标注格式YHT2739这个编号里的2739就是整套数据集的图片总数。我手里这份整理好的版本里共2739张图片、约6000多个标注实例。来源分布大概是无人机巡检拍摄的照片占八成杆塔固定摄像头抓拍占两成分辨率为1920×1080为主另有部分无人机高清航拍原图达到5472×3648。标注格式同时导出了两种方便不同训练框架直接使用VOC XML和YOLO txt。附带一份类别定义文件内容大致是names: 0: kite 1: plastic_film 2: bird_nest 3: banner_balloon训练集和验证集按85:15的比例划分划分的时候特意做了处理同一个场景的连续帧不会一半进训练集一半进验证集避免因图像过于相似导致验证指标虚高。2.3 标注规范里最容易吵架的几个细节数据集项目最耗心力的不是拍摄和整理而是定义边界。我整理YHT2739的过程中和标注团队反复确认过下面几个规则这里也分享出来给同样在做数据的人参考遮挡超过一半的目标标注吗我的规则是主体只要可见即可标注。比如鸟巢半个被枝叶挡住还能看出巢状结构就标。这样做的好处是模型能学到被部分遮挡的异物仍然是异物而不是只认完整目标。极小目标标不标低于16×16像素的目标确实很难从图上辨认。但从输电异物场景来说绝对不能放弃这类样本——后期小目标正是漏检重灾区。所以我的规则是只要人工放大后能判断类别就标同时打上一个小目标属性方便后期做针对性分析。边界框切多少背景太紧会和目标混在一起太松会导致模型学到过多背景纹理。我要求标注框在目标边缘外沿留3~5像素余量风筝这种带长线的目标框要包含大部分可见线体。损坏的风筝还叫风筝吗一根光秃秃的竹骨架、一团缠在导线上的断线类别归属容易争议。统一处理规则是能判断来源就归原类别判断不了来源的碎屑归塑料薄膜类。这些规则看着琐碎但正是它们决定了训练出来的模型是认识异物还是背图片。3. 基于YHT2739训练检测模型参数、增强与调优3.1 模型选型与训练环境数据整理好之后就是模型训练。我最后选的是YOLO系列的单阶段检测器。原因很简单这个场景不追求把每个目标的轮廓抠出来只需要在图像里给出位置框和类别YOLO系的性价比和部署生态都是最适合的。而且YOLO系导出ONNX、转TensorRT的链路非常成熟后面接边缘盒子很顺畅。训练环境不需要多豪华单张普通显卡就能跑。我自己常用的配置是PyTorch 2.x CUDA显存8G以上即可。训练脚本和配置用ultralytics框架的默认方式核心是要改几个关键参数下面单独说。YAML数据文件直接指到YHT2739的目录path: ./YHT2739 train: images/train val: images/val names: 0: kite 1: plastic_film 2: bird_nest 3: banner_balloon3.2 输入分辨率为什么不能照着默认参数来这是我在这个项目上踩得最深的一个坑。YOLO系列默认训练尺寸一般是640×640但这套数据里的目标普遍很小。我第一版模型直接用默认尺寸训练验证集上的mAP勉强到0.6看起来还行结果一放到实际巡检照片里十几个像素宽的风筝线几乎全部漏检模型输出框时有时无完全没法用。原因不复杂图像缩放损失了小目标信息。一张5472×3648的高清航拍图缩到640×640原来的小目标可能只剩两三像素卷积下采样几次之后特征就没了。我把训练尺寸提到1280×1280之后小目标AP立刻涨了差不多10个百分点。后来又在2048×2048试了一版提升有限但显存占用和训练时间翻了几倍。所以最终我用的是1280同时在推理阶段保持同样的输入尺寸保证训练/推理一致。训练命令大致长这样yolo detect train \ dataYHT2739.yaml \ modelyolov8s.pt \ imgsz1280 \ epochs300 \ batch8 \ mosaic0.0 \ mixup0.0 \ close_mosaic10 \ patience503.3 数据增强的取舍Mosaic不是万能的很多人训练目标检测模型习惯性开Mosaic增强但在这个项目里我直接把Mosaic和MixUp都关掉了。原因得从实际效果说。Mosaic把四张图拼成一张每张子图被等比缩小。对普通目标来说这等于多了一个尺度增广好处明显。但YHT2739里大量目标本身就是10~30像素的小目标Mosaic一拼后直接缩到5像素以下网络几乎学不到有效纹理。更麻烦的是异物很多是长条形或丝状拼接时目标跨接缝截断标签和图像内容错位训练出来的模型对半截风筝线特别敏感误报高得离谱。我最后保留的增强是HSV色域扰动、随机平移、随机旋转、轻微缩放。这几种增强模拟了不同光照和拍摄角度对异物检测更有意义。另外我还把天空背景单独做了一组翻转增强——输电塔上往下看的俯拍图背景经常是大片天空翻转以后能有效增加场景多样性。3.4 一份可以照抄的调参记录下面是我在YHT2739上最终使用的参数附上每个参数的理由参数推荐值说明imgsz1280小目标占比高640下漏检严重batch8~12受显存限制1280尺寸下8比较稳epochs300数据量不大配合早停避免过拟合mosaic0.0小目标会被拼接过缩掉mixup0.0同上且目标的纹理特征会被混合破坏optimizerSGD数据量不大时SGD比Adam收敛更稳lr00.01默认值即可close_mosaic10最后10轮彻底关掉增强让模型稳定收敛还有一个容易忽略的小技巧前50轮把backbone冻结住只训练检测头。因为预训练模型的特征提取部分在ImageNet上学到的底层纹理特征边缘、颜色块依然有效先让检测头适应新数据集再解冻全模型微调整体收敛更快最终精度也有轻微提升。4. 评估环节的真相mAP好看不代表能上线4.1 指标怎么定才贴合实际业务模型训练结束之后第一个动作不是看mAP-50-95而是按类别拆开看AP。我在YHT2739验证集上的结果里风筝和气球条幅两类AP最高塑料薄膜次之鸟巢最低。这个排序和现场直觉完全一致鸟巢外观形态差异巨大有的巢干净利落有的巢是一团乱麻再加上它经常出现在复杂钢结构背景里模型学起来天然困难。这里还有第二个更重要的原则异物检测业务里漏检的代价远大于误检。漏掉一个鸟巢可能直接导致一次线路跳闸误报一次后台值班人员瞄一眼截图就能人工排除。所以我在评估时把Recall作为第一指标mAP作为参考指标。具体要求是每类Recall不低于0.85整体mAP-0.5不低于0.75才算过了我的验收线。4.2 我在测试集上翻过的车三组经典混淆评估阶段最花时间的不是看指标而是翻bad case。我整理了YHT2739测试集上最典型的三组错判至今印象很深第一组塑料薄膜 vs 水面/地面反光。白色的地膜在强烈阳光下会形成高亮区域和水面反光、水泥地反光在特征上极度相似。模型一开始把不少水塘标成了塑料薄膜。后来我专门收集了一批反光干扰图做负样本让模型见够长得像但不是异物的东西误报才压下来。第二组鸟巢 vs 杆塔钢结构阴影。铁塔的斜撑、横担交叉区域在侧光、逆光条件下会形成复杂的暗部纹理从远处看和鸟巢乱糟糟的结构非常接近。尤其是晚间红外摄像头拍出的黑白图塔材阴影几乎以假乱真。处理办法是砍掉一部分夜间低质量样本优先保证白天场景准确率夜间的误报交给后续规则过滤。第三组风筝 vs 空中的鸟和飞行器。风筝在天空背景里形态多变尤其是一整面印着大图案的软体风筝从远处看轮廓和飞鸟很像。后来我在数据增强里加入更多的天空背景干扰并且对风筝类别单独收集了多角度样本情况才好转。4.3 置信度阈值不是拍脑袋定的模型输出的置信度阈值定多少直接影响误报率和漏报率的平衡。我见过很多项目统一按0.5跑实际上这是最偷懒也最容易翻车的做法。我在YHT2739上做过一组阈值扫描阈值从0.25到0.65逐步提升观察每类的Recall变化。结果发现风筝和气球条幅在0.4以上仍然保持较高召回而塑料薄膜和鸟巢的召回在0.4之后急剧下降。原因还是这两类目标本身纹理复杂、模型信心天然不足。所以我最后没有用单一阈值而是把不同类别分开配置风筝、彩带/气球类置信度阈值定0.45塑料薄膜和鸟巢定0.35。推理时读类别后动态切换阈值整体误报率降低了三分之一召回还保住了。这一招强烈推荐给同样被多类目标困扰的朋友。thres_map { 0: 0.45, # kite 1: 0.35, # plastic_film 2: 0.35, # bird_nest 3: 0.45 # banner_balloon } for det in results[0].boxes: cls int(det.cls) if det.conf thres_map[cls]: # 生成告警 pass5. 从离线模型到杆塔摄像头部署与告警设计5.1 推理链路与硬件选型模型在服务器上指标好看只是第一步真正要扛事的是把模型塞进现场设备。我这边部署的目标设备是杆塔边缘计算盒子就是那种装在杆塔上、带一定算力的视频分析终端。芯片平台各有差异但整体思路一致把PyTorch模型先导出ONNX再转成TensorRT的FP16模型。这里要单独提醒一个坑INT8量化在这个场景里特别容易翻车。小目标和细长条目标对量化误差非常敏感我试过一版INT8量化后的模型塑料薄膜类AP直接掉了十几个点。所以算力允许的情况下建议用FP16不要为了省那一点显存去碰INT8。部署链路示意如下# PyTorch - ONNX yolo export modelbest.pt formatonnx imgsz1280 halfTrue # ONNX - TensorRT trtexec --onnxbest.onnx --saveEnginebest_fp16.engine --fp16FP16模型在边缘盒子上跑1080p输入单帧推理大约在20~40毫秒之间完全满足实时性要求。5.2 不要对着视频流硬扛用周期抓拍更稳很多人在部署时第一个想法是对视频流逐帧检测。实际跑下来你会发现边缘盒子的功耗、发热、稳定性和持续视频解码压力都比想象中大而且输电现场的画面一分钟里绝大多数时间是没变化的逐帧检测有效信息极少。我最后采用的是周期性抓拍检测方案每5分钟从摄像头抓拍一帧先做一次轻量级的背景差分如果画面与背景模板差异小于阈值就直接跳过检测差异大了才跑模型推理。这样算力消耗降了一个量级设备稳定性也好了很多。5.3 告警确认机制连续N帧确认异物检测的告警不能像安防那样一帧检出就报警。风一吹、光一变模型很容易出现单帧误报。我在实际项目里要求的规则是连续两次抓拍都检出同一个区域存在同类目标才推送告警。告警消息里带上原因帧的裁剪图和模型置信度方便值班人员一眼确认。另外现场的画面质量和实验室数据差距很大。雾天、暴雨、摄像头逆光、蜘蛛网遮住镜头都会让模型失效。这里我的做法是给每根杆塔做一个基础的画面质量分判断检测到过暗、过曝、异常模糊时先发一条设备维护提示而不做异物判断。把这个机制跑顺之后后台收到的无效告警明显减少。5.4 季节和新增干扰的适应问题输电场景还有一个特别容易被忽略的问题季节变化。夏季杆塔周围的树木枝叶茂密可能遮挡部分拍摄角度冬天画面萧瑟背景纹理完全不同。同一个模型在秋天调得很好到了夏天误报率可能翻倍。解决的思路分两层模型层面对不同季节的图像做增强训练系统层面预留季节模板切换功能——不同季节使用不同的背景差分模板和置信度阈值配置。这套机制不需要重新训练模型但对现场实用性提升很大。6. 数据闭环把YHT2739变成持续生长的资产6.1 告警截图回流是数据集最好的增量来源YHT2739这个数字只是第一版的规模。真正让检测系统越用越准的是部署之后的数据闭环。我的做法是把现场设备产生的每一次告警截图、每一次人工确认为误报或漏报的图片全部回流到一个待标注池里每周由标注人员统一处理一遍然后合并进训练集做增量训练。这个闭环里最值钱的不是那些模型已经检出的正样本而是误报样本。误报意味着模型把某种背景当成了异物这些样本恰恰是当前模型最大的弱点喂回去之后效果立竿见影。我一般在每轮增量训练后做一次回归测试拿旧版测试集和新增样本一起跑确保修掉误报的同时没有把老能力弄丢。增量训练本身也有讲究。直接在新数据上继续训练模型容易对旧数据灾难性遗忘风筝类AP可能掉下来。我通常的做法是新收集数据与历史数据按2:8比例混合学习率降到初始的十分之一训练轮次减半。实测下来性能是平滑上升的。6.2 下一版数据集要补什么从现场反馈来看YHT2739之外还有两个值得重点关注的方向一是施工机械靠近。吊车臂、塔吊在输电线路附近作业是高危场景一旦机械臂接近导线没被发现后果比异物挂线严重得多。这个类别对检测精度要求更高但训练样本也更难获得需要对接施工监控视频去整理。二是负样本类别。我给模型增加过正常塔材绝缘子防鸟刺三个负样本类。这个做法的目的不是要检测它们而是让模型明确区分异物和设备本体结构对降低误报帮助极大。很多误报本质上就是模型不知道那是什么东西姑且按异物报有了负样本类别后它学会把不确定的对象归到背景里。6.3 个人对这类数据集项目的一点体会做了这么多轮迭代之后我最深的体会是数据集项目的成功与否七成取决于标注规范和数据闭环三成才取决于模型结构。YHT2739真正值钱的地方不是那2739张图而是围绕它建立的标注口径、难例处理规则、增量回流机制。这些东西是任何公开数据集都给不了你的。如果你现在正要开始做自己的异物检测数据我建议第一版先不要贪多求全。四类高频异物、两千多张图、统一标注、闭环回流这套组合跑通之后再逐步加类别、加场景。做得糙一点没关系重要的是把从数据到告警的整条链路跑起来数据会在使用过程中自己长出来。

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

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

免费获取报价 →
↑