做输电线路巡检的视觉检测,尤其是“电缆损坏”这个细分类目,最难的往往不是模型结构,而是数据。我这边整理了一套面向YOLO系列的电缆损坏目标检测数据集,覆盖了输电线路巡检中最常见的四类缺陷:电缆断裂、雷击损伤、断股、烧蚀痕迹,所有图片都按YOLO标注格式做好了目标检测标注。这篇博文就把这套数据集的整理思路、标注口径、清洗过程、YOLO系列实测结果和部署建议全部摊开讲一遍,希望能帮到现在正在做电力缺陷检测、或者打算拿YOLO做工程落地的朋友省掉几个月的弯路。
整套数据集的初衷很直接:电网巡检已经从纯人工登塔、望远镜排查,逐步转向无人机挂载相机批量拍摄,但照片拍回来之后还是要一张张看。一个驻点团队一天拍几千张图,靠人眼找细小的断股和雷击点,极其疲劳,而且不同班组对同一处损伤的判断口径往往不一样。目标检测算法刚好可以在这里帮上忙:先把“疑似损伤”筛出来,再由人工复核确认。不过算法能用起来的前提,是有足够干净、标注口径统一的训练数据。
1. 电缆损坏检测为什么难:缺陷小、背景杂、口径各不同
1.1 损伤区域在整张巡检图里往往只有几十个像素
很多人第一次接触电力巡检图像,会以为电缆缺陷像交通标志一样主体很大,实际上完全相反。无人机巡检拍摄的原始图通常是3840×2160甚至更高分辨率,一根电缆在画面里可能只占几个像素宽度。以常见的单芯架空导线为例,在某次巡飞任务里拍摄的图片中,电缆宽度约8个像素,整根导线长度约300像素,而断股损伤点的外接框可能只有10×25像素,占全图面积比例不到万分之一。
这就是巡检场景下目标检测最核心的难点:不是“目标太小看不清”,而是“目标在整幅图中的占比极小,下采样之后特征直接被吃掉”。在640×640输入下,一个10×25像素的损伤区域缩放后大约只剩4×10像素,经过几次卷积和池化,到深层特征图时只剩下单点响应甚至完全消失,模型自然学不到东西。所以后面所有训练策略,包括输入分辨率、增强方式、损失权重,都要围绕“小目标”这个核心约束来设计。
1.2 四类缺陷的视觉特征与识别难度对比
这套数据集只锁定四类最常见的电缆损伤:电缆断裂、雷击损伤、断股、烧蚀痕迹。别小看这四个类别,它们之间既有清晰区分,也有大量交叉和易混淆的情况。我把自己在标注规范里写的判断依据整理成了一张表:
| 类别 | 主要诱因 | 典型视觉特征 | 最容易混淆的对象 |
|---|---|---|---|
| 电缆断裂 | 张力过载、疲劳、外力破坏 | 断口明显,线缆整体失去连续性,断口常有缩颈或拉伸变形 | 接续管、耐张线夹的机械结构 |
| 雷击损伤 | 雷电流通过线缆 | 放电烧熔特征明显,局部发黑、变形,股线呈毛刷状散开,常有金属熔滴 | 高温烧蚀、机械磨损后的表面缺陷 |
| 断股 | 微风振动、长期磨损、施工损伤 | 单根或多根股线断裂,但线缆整体未完全断开,断裂处翘起成“毛刺” | 鸟窝、异物挂线、绝缘子遮挡 |
| 烧蚀痕迹 | 短路电弧高温、外力摩擦发热 | 表面氧化变色、光泽消失,局部发黑或出现剥离坑点 | 泥污、锈迹、雷击损伤 |
实际标注过程中,雷击损伤和烧蚀痕迹是最容易互相污染的。雷击损伤必然伴随高温烧熔,但它还有一个关键特征:损伤区域呈明显的“放电通道”形态,往往沿导线表面出现连续的熔融痕迹,严重时伴随断股;而单纯烧蚀更多是局部点状或条状的表面变色,没有那种“电击穿的爆裂感”。标注时一旦没有统一的量化标准,A标注员把雷击标成烧蚀,B标注员反过来,模型学到的类别边界就是模糊的。
1.3 目标检测在输电巡检场景里的实际价值
为什么非要引入目标检测,而不是传统图像处理做阈值分割或者边缘检测?因为损伤类型多、背景复杂、光照变化大,传统方法需要在不同阈值之间反复调参,换一个相机、换一个天气就失效。目标检测模型本质上是在学“损伤区域相对背景的长相组合”,对光照和角度的鲁棒性更好,并且能一次性输出损伤类型和位置,方便后端直接记录台账。
在实际巡检流程里,无人机或者杆塔摄像头拍回来的图片先进模型做初筛,模型输出一批低置信度的“疑似损伤框”,后台只需要保留这些裁剪片段供人工复核。这样既避免了人眼逐张看图导致的疲劳漏检,又保留了人工确认的安全兜底。这也是为什么我把数据集格式直接做成YOLO系列通用的TXT格式,从标注到训练到部署的链路最短。
2. 数据集内容与标注规则:四类损伤的整理标准
2.1 图像来源与场景去重策略
这套数据集的图像来源主要有三块:无人机巡飞采集的可见光影像、杆塔在线监拍设备的抓拍图、以及实验室模拟受损样本的实拍。总数量约9200张有效图片,包含约两万个目标框。
如果光统计数量没意义,关键在场景多样性。巡飞影像覆盖了多个季节和时段:晴天顺光、逆光、多云散射光、清晨低角度光、薄雾天气都有;杆塔监拍则更多是固定视角,画面稳定但背景单一;实验室模拟样本主要是为了补充断股和雷击损伤的近距离特写。
整理时做过两轮去重。第一轮是视频帧去重,因为巡检视频按照每秒抽帧的话,同一处损伤会连续出现十几帧甚至几十帧,背景几乎完全一致,如果全部送进训练集,会导致模型对“这个画面”过拟合,而不是对“这类损伤”泛化。第二轮是相似场景去重,用感知哈希算法把同一基塔、同一相机角度下拍摄的近似帧聚到一起,每组只保留代表性图片。去重之后,训练集、验证集、测试集之间的重复度明显下降,评测结果也更有参考价值。
2.2 四类缺陷的判定量化标准
标注规范里最重要的部分,是告诉标注员“什么情况算、什么情况不算”。不能凭感觉,要尽量量化。我们实际落地的判定标准是:
- 电缆断裂:金属股线完全断开,断口两侧错位明显,或者线缆整体失去连续性。断口处如果有缩颈变形,也归为断裂特征之一。若断裂处同时有高温熔融,则叠加雷击或烧蚀属性,但主类别仍为断裂。
- 断股:线缆整体未断开,但单根或多根股线断裂,断裂的股线端头翘起、外散,呈“松股”或“毛刺”状。断股通常不伴随大面积熔融,如果有熔融痕迹则归入雷击损伤。
- 雷击损伤:损伤区域存在放电烧熔特征,周围可见金属熔滴、表面电弧灼伤形成的沟槽,或股线呈毛刷状向外炸开。只要确认有雷电流通道的形态特征,就优先标为雷击损伤。
- 烧蚀痕迹:受高温或电弧反复作用,导线表面氧化变色、光泽消失,出现局部发黑、剥离,但整体结构和股线状态基本完好,没有明显的放电熔融和断股。
有一个硬性标注前提:只标注图像中肉眼能看得到的可见损伤区域,通过“推测”“脑补”认为某处背后可能有损伤的情况一律不标。另外,一个目标框不允许跨类别混合,如果一个区域同时满足雷击损伤和烧蚀的特征,按照“雷击优先”的原则归属雷击损伤类别。
2.3 边框选取细则与YOLO格式转换
边框怎么画,直接决定模型学到的位置误差。我们的标注规则有几条硬约束:第一,目标框必须紧贴实际损伤区域,不是框整根电缆,更不是框电缆外加一段背景;第二,损伤区域跨越多股线缆时,取整体外接矩形,但外接矩形不能把周边无关的杆塔、绝缘子、作为背景的远山圈进来;第三,损伤区域小于20×20像素但人眼能明确辨认的,仍然要标注,不因为小就放弃;第四,损伤区域被其他结构遮挡时,只标注可见部分,不让标注员凭空补全遮挡区域。
标注工具用的是通用的图像标注工具,导出成COCO格式后再转成YOLO TXT。每张图片对应一个同名TXT文件,每行一个目标,格式是:类别ID 归一化中心点x 归一化中心点y 归一化宽度 归一化高度。例如一张1080×1920的图片里,某个雷击损伤框左上角在(500, 300)、右下角在(540, 350),对应的TXT内容就是:
1 0.4907 0.1736 0.0370 0.0260这里的1是雷击损伤的类别ID。类别ID顺序固定为0-电缆断裂、1-雷击损伤、2-断股、3-烧蚀痕迹,后面所有脚本和模型输出都按这个顺序来。
2.4 训练集、验证集、测试集的划分原则
划分数据集的时候踩过一个典型坑:如果纯按文件名随机划分,同一段巡检视频里连续若干帧会同时出现在训练集和验证集,模型相当于是“背题”而不是“做题”,验证指标虚高一截。所以这套数据集是按场景组划分,先按拍摄任务和杆塔ID聚合成组,再把组随机分配到训练集、验证集、测试集,比例大约7:1.5:1.5。训练集约6400张,验证集约1400张,测试集约1400张。所有图片都按场景组隔离,保证同一个位置、同一个损伤点不会跨集合出现。
3. 数据清洗和标签校验:那些容易让模型“学歪”的细节
3.1 用低置信度检测结果反查脏标签
数据第一次标注完之后,不能直接拿去训练。我们先用YOLOv8n的预训练模型把全部图片跑了一遍,把置信度落在0.1到0.5区间的检测框全部导出,人工逐张过一遍。这个操作的思路很朴素:高置信度的框大概率标得没问题,低置信度的框反而可能是标注漏了、标错了,或者目标确实长得很像别的东西。
这一轮清理查出来的问题超出预期。最多的一类是烧蚀痕迹的误标:很多杆塔表面有锈蚀痕迹,颜色、纹理跟电缆烧蚀在外观上很像,标注员在快速标注时直接把塔材锈迹也圈了进来,初版数据里这类污染框占烧蚀类别总数的百分之十几。把这些脏标签剔除后,重新训练,烧蚀类别的精确率上升了将近10个点。这个过程虽然枯燥,但确实是数据集质量最关键的防线。
3.2 类别不平衡:断股样本太少带来的连锁问题
初版标注完成后统计过各类别的框数量,分布很不均匀:雷击损伤约6800框,烧蚀痕迹约4400框,断裂约4200框,断股只有大约2500框。这个比例下,模型很容易把少量断股样本当成异常噪声忽略掉,训练出来的模型对断股召回率特别差。
处理方式分两步。第一步是补数据,针对断股专门联系了模拟试验场景,补拍了一批高清晰度特写,把断股框数量拉到了3600左右,同时通过翻转、旋转、亮度调整做适度增强。第二步是在训练时给断股类别加了更高的类别权重,让损失函数在断股样本上“更敏感”。两步叠加之后,断股类别的召回率从0.53提升到了0.69左右。
3.3 冗余帧会让验证指标虚高
如果只是追求指标好看,把相似帧留在验证集里确实能刷分,但这样的模型上现场会现原形。我们做过一次对照实验:保持训练集不变,把验证集从“去重后的1400张”换成“未去重的2600张”,mAP50数字直接涨了4个多点。原因很简单,未去重的验证集里大量存在与训练集背景几乎一致的帧,模型在训练时已经见过这些背景了,验证时当然越看越熟。
去重之后,mAP表面上看是“降”了,但测试集上的真实泛化能力反而变好。后来手机上判断模型是否靠谱,我不太关心训练集的拟合程度,更在意更换新场景后的盲测分数。
4. YOLO系列实测对比与训练参数调优
4.1 YOLOv5s、YOLOv8n、YOLOv8s同一配方下的表现
针对这套电缆损坏数据集,我分别用三个主流YOLO版本做了同条件训练:YOLOv5s、YOLOv8n、YOLOv8s。统一输入分辨率1280×1280,批量大小8,优化器用AdamW,初始学习率0.001,训练200轮,后50轮关闭Mosaic增强。测试硬件是单张8GB显存的图形卡,推理耗时在另一台边缘设备上单独测量。
| 模型 | 推理耗时(单张,ms) | mAP50 | mAP50:95 | 断股召回率@0.5 |
|---|---|---|---|---|
| YOLOv5s | 7.3 | 0.842 | 0.531 | 0.68 |
| YOLOv8n | 4.8 | 0.823 | 0.507 | 0.64 |
| YOLOv8s | 9.1 | 0.867 | 0.562 | 0.77 |
实测下来,YOLOv8s整体精度最高,YOLOv8n在精度只低4个点左右的情况下速度快了近一倍,非常适合挂在无人机机载平台或者边缘盒子做实时初筛。YOLOv5s在解码和部署生态上最成熟,但同一分辨率下精度略逊于v8系列。四类缺陷里普遍是断股最难,雷击损伤和断裂相对好一些。这也符合前面的判断:断股目标往往最小、对比度最低。
4.2 输入分辨率为什么选择1280而不是640
一开始按默认习惯用640×640训练,效果很不理想,断股类别mAP50只有0.4左右。原因前面说过,原始图片里大量损伤框本来就只有几十个像素,缩到640后几乎不可见。把输入拉升到1280后,小目标的特征保留明显改善,mAP50:95提升了6个点以上。
代价是显存和训练速度。1280输入下,8Batch用8GB显存会爆,只能把批量降到4再配合梯度累积,或者直接换更大显存的卡。推理阶段同样更慢,所以在真实部署时我会准备两套方案:边缘端用960输入跑快速筛查,后端复核用1280输入跑精细检测。
4.3 Mosaic增强在电缆损伤数据上要谨慎使用
Mosaic增强是YOLO系列常用的提点手段,把四张图拼成一张,丰富上下文。但在这套数据集上,Mosaic反而带来了一个问题:四张图拼接后,电缆损伤区域可能在拼接缝附近被裁开,导致一个断股目标被切成两半或者和完全无关的背景焊在一起,模型学到了一些“拼接痕迹”特征,而不是真正的损伤特征。后50轮关闭Mosaic后,验证集上的误检明显减少。
我最终采用的增强组合是:随机翻转、90度旋转、亮度对比度抖动、轻微模糊、随机噪声,以及针对薄雾天气的雾化模拟。不采用大尺度的随机擦除,因为损伤区域本身太小,擦除后容易把目标直接擦没,导致训练信号丢失。
4.4 训练配置参考与常见坑
下面给出一份可以直接参考的训练配置(以YOLOv8为例):
yolo detect train \ data=electric_cable.yaml \ model=yolov8s.pt \ epochs=200 \ imgsz=1280 \ batch=8 \ optimizer=AdamW \ lr0=0.001 \ weight_decay=0.0005 \ mosaic=0.5 \ close_mosaic=50 \ patience=50 \ device=0这里close_mosaic=50表示训练最后50轮自动关闭Mosaic。patience=50是早停参数,如果连续50轮验证集指标没有提升就提前终止,既可以省时间也能防止过拟合。
训练时还要注意类别权重问题。YOLO原生配置里可以通过cls参数调整分类损失系数,比如把断股类别对应的分类损失权重调高到1.5-2.0。如果不做类别权重,少数类会被多数类压制,断股这种小类别的召回率会很难看。
5. 部署阶段的泛化问题与数据扩展建议
5.1 换相机、换天气之后会掉多少点
模型训练时指标好看,不代表现场就能用。我把训练好的模型拿到一批从未见过的场景图片上做盲测,这批图来自不同的相机型号、不同的拍摄角度,其中包括逆光、薄雾、雨天三类典型困难场景,结果很明显:
- 晴天顺光条件下,mAP50基本和测试集持平,在0.85左右;
- 逆光条件下,检测召回率掉了约8个百分点,损伤区域陷入暗部阴影,对比度严重下降;
- 薄雾条件下,断股和烧蚀的召回率进一步下跌,边缘模糊导致小目标更难分辨。
解决办法不是换更大的模型,而是把数据增强和图像预处理接进推理链路。比如对逆光图做限制对比度自适应直方图均衡(CLAHE),对薄雾图先做轻量级去雾处理,再喂给模型。实际部署里,我在推理前增加了一个预处理分支,专门针对不同来源图片做自适应增强,最终把逆光场景的召回率拉回了5个百分点左右。
5.2 巡检流程里模型该放在哪一环
模型不要直接替代人做最终决策,更稳妥的方案是“AI初筛+人工复核”。无人机照片回传后,模型以较低阈值输出所有疑似损伤框,后台自动裁剪出损伤片段,按置信度排序推送给复核人员。复核人员只看裁剪图而不是整张原图,效率和准确率都远高于逐张翻图。
置信度阈值的选择也有讲究。阈值0.3能保证较高的召回率,但复核队列里会有不少误报;阈值0.5误报少了,又容易漏掉一些低置信度的小目标。我在实际流程里取0.35左右,确保断裂和雷击这类后果严重的缺陷尽量不漏,同时把复核量控制在一个班组能消化的范围内。
5.3 数据集还能往哪些方向扩展
目前这套数据集聚焦可见光条件下四类常见损伤,实际巡检中还有一些方向值得扩展。第一是增加覆冰工况,导线覆冰与断股、断裂同时出现时,模型需要学会区分冰凌轮廓和损伤轮廓;第二是增加污闪痕迹,绝缘子和导线表面的污闪放电痕迹和烧蚀痕迹在很多情况下外观接近;第三是接入多光谱通道,热成像和紫外成像对雷击点、发热点有独特响应,多模态数据对复杂工况的鲁棒性会明显好于单纯可见光。
我自己在整理前置数据时留了一个固定动作:每次训练前都会检查各类别的框数量分布图和小目标占比统计,一旦发现某类目标占比低于总框数的10%或者小目标占比超过一半,就先做标注复核和补充增强,而不是直接调参硬跑。如果你拿到这套数据集准备开始用,建议也保留这一步,这比后期花时间刷指标省力得多。