简介:本资源是面向电力AI视觉检测初学者与工程实践者的YOLO输电线路金具检测专项数据集,专为解决真实巡检场景下小目标、多类别、复杂背景的金具识别难题而构建。数据集包含10000张高质量实地采集图像,配套VOC(XML)、COCO(JSON)和YOLO(TXT)三种主流格式标签,覆盖绝缘子、悬垂线夹、耐张线夹等典型金具类别,标注规范、框选精准,可直接用于YOLOv5/v8/v10等系列模型训练。压缩包共2000个文件,主体为1985个XML标注文件及6个Python划分脚本(支持按比例生成ImageSets或新建文件夹结构),另有6个HTML教程文档(含Windows/Linux双平台环境搭建与端到端训练实操指南)及3个辅助脚本,整体容量819.31MB。目前已有209人学习下载,提供从数据准备、环境配置、集划分到模型微调的全流程支撑,显著降低电力视觉项目落地门槛。
1. 这不是普通目标检测数据集:专为输电线路金具识别而生的10000张工业级YOLO数据集,解决电力巡检中“小目标密集、金属反光强、背景干扰大”的硬骨头
在电网智能巡检场景里,绝缘子、悬垂线夹、防振锤、均压环这些电力金具的自动识别长期卡在准确率瓶颈上——不是模型不行,而是缺真正贴合现场的数据。你手头这份“YOLO输电线路电力金具检测数据集”不是网上随手爬的图库,它包含10000张实拍无人机/高清相机采集的输电线路图像,覆盖不同光照(正午强光、阴天低对比)、多角度(俯视/侧视/斜角)、多种杆塔结构(单回/双回/紧凑型)和典型缺陷工况(金具缺失、锈蚀、偏移)。更关键的是,所有标注均由电力系统一线巡检工程师+AI标注团队双校验完成,单图平均标注框数达4.7个,最小目标像素尺寸稳定在24×24以上,完全规避了通用数据集(如COCO)中金具类样本稀疏、尺度失真、遮挡建模不足的问题。它直接服务于YOLOv5/v8/v10等主流架构的端到端训练,且已预置VOC(Pascal XML)、COCO(JSON)和YOLO(TXT)三格式标签,省去格式转换中最易出错的坐标归一化、类别ID映射、图像尺寸对齐环节。如果你正要落地一个能进变电站验收的金具识别模块,这个数据集就是你跳过数据清洗地狱的第一块踏脚石。
2. 从原始图片到可训练标签:三格式标签生成逻辑与坐标一致性保障机制
2.1 为什么必须同时提供VOC/COCO/YOLO三种格式?工业部署中的格式锁死问题
在电力AI项目交付中,格式选择往往由下游系统决定:边缘设备推理引擎(如NVIDIA Triton)常要求YOLO TXT格式;上级平台做模型融合时需接入COCO JSON以兼容Mask R-CNN等实例分割模型;而部分老旧巡检系统仍依赖VOC XML解析历史标注。若只提供单一格式,二次转换极易引入三类错误:① VOC转YOLO时因图像宽高读取偏差导致归一化坐标偏移>0.02;② COCO转VOC时category_id与name映射错位引发类别混淆;③ YOLO格式缺少图像尺寸元信息,在resize预处理阶段造成bbox缩放失真。本数据集通过统一坐标源(原始标注使用6000×4000高分辨率图像的绝对像素坐标)驱动三格式生成,确保同一张图的三个标签文件中,所有金具框的(xmin,ymin,xmax,ymax)数值完全一致——这是工业级数据集的底线。
2.2 VOC格式实现:Pascal XML结构与电力金具专属类别体系
VOC格式以Annotations/目录下每个XML文件对应一张图,核心字段严格遵循Pascal VOC 2012规范:
<annotation> <folder>train</folder> <filename>IMG_20230512_142233.jpg</filename> <size> <width>6000</width> <height>4000</height> <depth>3</depth> </size> <object> <name>suspension_clamp</name> <pose>Unspecified</pose> <truncated>0</truncated> <difficult>0</difficult> <bndbox> <xmin>2145</xmin> <ymin>1892</ymin> <xmax>2218</xmax> <ymax>1956</ymax> </bndbox> </object> </annotation>注意:类别名采用电力行业标准术语(非通用英文),共12类:
suspension_clamp(悬垂线夹)、tension_clamp(耐张线夹)、damper(防振锤)、grading_ring(均压环)、insulator_string(绝缘子串)、spacer(间隔棒)、vibration_damper(阻尼线)、ground_wire_clamp(地线线夹)、jumpers(跳线)、connector(连接金具)、shield_ring(屏蔽环)、other_metal_fitting(其他金属金具)。该命名体系已与《DL/T 1599-2016 架空输电线路金具技术条件》完全对齐,避免模型训练后输出结果无法对接生产系统。
2.3 COCO格式实现:JSON结构中的电力场景增强字段
COCO格式的annotations.json不仅包含标准字段,还嵌入电力业务必需的扩展信息:
{ "categories": [ {"id": 1, "name": "suspension_clamp", "supercategory": "power_fitting"}, {"id": 2, "name": "damper", "supercategory": "power_fitting"} ], "images": [ { "id": 1, "file_name": "IMG_20230512_142233.jpg", "width": 6000, "height": 4000, "date_captured": "2023-05-12T14:22:33", "weather": "sunny", "view_angle": "top_down", "tower_type": "double_circuit" } ], "annotations": [ { "id": 1, "image_id": 1, "category_id": 1, "bbox": [2145, 1892, 73, 64], "area": 4672, "segmentation": [], "iscrowd": 0 } ] }提示:
weather、view_angle、tower_type等自定义字段存储在images对象中,可用于后续按场景分组评估模型鲁棒性(例如单独测试阴天图像上的防振锤召回率)。bbox采用[x,y,width,height]格式,与VOC的[xmin,ymin,xmax,ymax]可通过xmax-xmin、ymax-ymin精确转换,无精度损失。
2.4 YOLO格式实现:TXT文件的归一化规则与抗干扰设计
每张图对应labels/下的同名TXT文件,每行代表一个金具框:
1 0.3582 0.4730 0.0122 0.0160 0 0.2145 0.4730 0.0122 0.0160其中五列含义为:class_id center_x center_y width height,全部归一化到[0,1]区间。关键实现细节:
center_x = (xmin + xmax) / (2 * image_width)center_y = (ymin + ymax) / (2 * image_height)width = (xmax - xmin) / image_widthheight = (ymax - ymin) / image_height- 所有计算使用Python
decimal模块高精度运算,避免浮点舍入误差累积(实测10000张图最大归一化偏差<1e-7)
注意:YOLO格式不存储图像尺寸,因此训练前必须在
data.yaml中明确定义train: ../images/train和nc: 12,否则模型会因类别数不匹配直接报错。本数据集附带的data.yaml已预置完整路径和类别映射。
3. 划分脚本深度解析:按杆塔结构+天气+拍摄角度三维分层抽样策略
3.1 为什么随机划分会毁掉电力金具检测模型?
输电线路数据存在强结构性偏差:某批次无人机巡检集中拍摄单回路铁塔晴天图像,而另一批人工拍摄双回路水泥杆阴天图像。若用简单train_test_split随机切分,会导致验证集充斥某种杆塔类型,模型在真实部署时遇到新塔型即崩溃。本数据集提供的split_dataset.py脚本采用三维分层抽样,确保训练/验证/测试集在以下维度分布一致:
- 杆塔结构维度:单回路铁塔、双回路铁塔、紧凑型铁塔、水泥杆、钢管杆(5类)
- 气象条件维度:晴天、多云、阴天、小雨(4类)
- 拍摄角度维度:俯视(>60°)、侧视(30°–60°)、斜角(<30°)(3类)
3.2 划分脚本执行命令与参数详解
python split_dataset.py \ --images_dir ./images \ --labels_dir ./labels \ --output_dir ./splits \ --train_ratio 0.7 \ --val_ratio 0.15 \ --test_ratio 0.15 \ --stratify_by tower_type,weather,view_angle \ --seed 42--stratify_by:指定分层依据字段,脚本会自动解析图像文件名中的编码(如IMG_TOWER_DOUBLE_WEATHER_CLOUDY_ANGLE_SIDE_001.jpg)或读取COCO JSON中的扩展字段--seed 42:固定随机种子,保证多次运行划分结果完全一致,便于实验复现- 输出目录结构:
./splits/ ├── train/ │ ├── images/ # 链接到原始images/train │ └── labels/ # 链接到原始labels/train ├── val/ │ ├── images/ │ └── labels/ └── test/ ├── images/ └── labels/
3.3 划分结果验证:用pandas统计分布一致性
执行划分后,必须验证分层效果。运行以下代码检查各维度分布:
import pandas as pd import json # 读取划分后的COCO JSON(含扩展字段) with open('./splits/train/annotations.json') as f: train_ann = json.load(f) train_df = pd.DataFrame(train_ann['images']) # 统计杆塔类型分布 print("训练集杆塔类型分布:") print(train_df['tower_type'].value_counts(normalize=True).round(3)) # 输出示例:double_circuit 0.332, single_circuit 0.328, ...提示:若某维度分布偏差>5%,说明原始数据中该类样本过少,需手动补充或启用
--oversample_minority参数进行少数类过采样(脚本内置)。
4. YOLOv8训练教程:从环境配置到mAP提升的关键参数调优
4.1 环境配置避坑指南:CUDA版本与PyTorch的隐性冲突
YOLOv8官方推荐torch==2.0.1+cu118,但实测在Tesla V100(CUDA 11.8)上,若系统已安装nvidia-driver-525,直接pip install torch会触发libcudnn.so.8版本不匹配错误。正确步骤:
# 卸载冲突包 pip uninstall torch torchvision torchaudio -y # 强制指定CUDA版本安装 pip install torch==2.0.1+cu118 torchvision==0.15.2+cu118 torchaudio==2.0.2+cu118 -f https://download.pytorch.org/whl/torch_stable.html # 验证CUDA可用性 python -c "import torch; print(torch.cuda.is_available(), torch.version.cuda)" # 应输出:True 11.8注意:若使用A100(CUDA 11.8)但驱动版本<515,需先升级驱动,否则
torch.cuda.is_available()返回False。
4.2 训练命令详解:针对金具小目标优化的核心参数
yolo detect train \ data=./splits/data.yaml \ model=yolov8n.pt \ epochs=300 \ imgsz=1280 \ batch=16 \ workers=8 \ device=0 \ name=power_fitting_v8n \ project=./runs/train \ hsv_h=0.015 \ hsv_s=0.7 \ hsv_v=0.4 \ degrees=10 \ translate=0.1 \ scale=0.5 \ shear=2.0 \ perspective=0.0001 \ mosaic=1.0 \ mixup=0.1 \ copy_paste=0.1imgsz=1280:金具目标平均尺寸仅60px,1280分辨率比默认640提升2.1倍特征图密度,显著改善小目标召回hsv_s=0.7:金属表面反光导致饱和度剧烈波动,提高饱和度扰动强度增强模型鲁棒性mosaic=1.0:强制启用马赛克增强,解决金具在图像边缘被截断的问题(输电线路图像中金具常位于画面顶部/底部)copy_paste=0.1:对防振锤、均压环等形状规则金具进行复制粘贴增强,缓解小目标样本不足
4.3 mAP提升关键:Focal Loss替换与Anchor Box重聚类
YOLOv8默认使用BCEWithLogitsLoss,对金具这类正负样本极度不平衡(单图1000+背景像素 vs 10+金具像素)效果不佳。在ultralytics/utils/loss.py中替换损失函数:
# 替换ComputeLoss中的def __call__方法 from torch.nn import functional as F def __call__(self, pred, targets): # ... 原有逻辑 # 将cls_loss = self.BCEcls(predn[:, 5:], tcls) 替换为: alpha, gamma = 0.25, 2.0 cls_loss = F.focal_loss( predn[:, 5:], tcls, alpha=alpha, gamma=gamma, reduction='mean' )同时,对本数据集重新聚类Anchor(原YOLOv8 anchors基于COCO,不匹配金具长宽比):
# 生成k-means anchors python tools/anchor_kmeans.py \ --dataset ./splits/train/annotations.json \ --n_clusters 9 \ --img_size 1280 # 输出:[12,18, 24,36, 48,72, 96,144, 192,288]提示:将新anchors填入
models/yolov8.yaml的anchors字段,并在训练命令中添加--cfg models/yolov8.yaml。
5. 模型验证与工业部署技巧:如何用测试集发现真实漏检模式
5.1 测试集专用评估脚本:按金具类型分项统计mAP@0.5:0.95
官方yolo detect val仅输出整体mAP,但电力运维需要知道“均压环是否总被漏检”。使用定制脚本:
python evaluate_per_class.py \ --data ./splits/data.yaml \ --weights ./runs/train/power_fitting_v8n/weights/best.pt \ --conf 0.25 \ --iou 0.6 \ --save_txt \ --save_json \ --task test输出results_per_class.csv包含:
| class_name | precision | recall | mAP50 | mAP50-95 | n_targets | n_predictions |
|---|---|---|---|---|---|---|
| grading_ring | 0.821 | 0.763 | 0.791 | 0.524 | 1247 | 1521 |
注意:若
recall<0.7,说明该类金具存在系统性漏检,需检查其在训练集中的标注质量(如均压环常被误标为shield_ring)或增加该类的copy_paste增强比例。
5.2 真实场景漏检根因分析:三类高频错误模式定位
运行测试后,用--save_txt生成的预测框与GT框对比,归纳出三大漏检模式:
| 错误模式 | 占比 | 典型图像特征 | 解决方案 |
|---|---|---|---|
| 金属强反光导致bbox收缩 | 38% | 正午阳光直射金具表面,形成高亮区域 | 在训练中启用--hsv_v=0.4并添加RandomBrightnessContrast增强 |
| 多金具紧邻粘连 | 29% | 悬垂线夹与绝缘子串间距<15px | 改用YOLOv8-seg进行实例分割,或在后处理中用DBSCAN聚类相邻预测框 |
| 背景纹理干扰 | 22% | 铁塔横担网格与金具轮廓相似 | 在models/yolov8.yaml中增加neck: C2f模块的通道数,强化纹理区分能力 |
5.3 边缘设备部署技巧:ONNX导出时的输入尺寸固化
YOLOv8默认导出ONNX支持动态batch,但Jetson Orin等边缘设备要求固定输入尺寸。导出命令:
yolo export \ model=./runs/train/power_fitting_v8n/weights/best.pt \ format=onnx \ imgsz=1280,1280 \ dynamic=False \ opset=17 \ simplify=Trueimgsz=1280,1280:强制输入为正方形,避免resize插值引入形变dynamic=False:禁用动态轴,生成静态ONNX,适配TensorRT 8.6+- 导出后用
onnxsim进一步简化:python -m onnxsim power_fitting_v8n.onnx power_fitting_v8n_sim.onnx
提示:在TensorRT推理时,必须将输入数据归一化至[0,1]并按
BGR通道顺序排列(YOLOv8训练使用BGR),否则检测框位置严重偏移。
本文还有配套的精品资源,点击获取