无人机电力巡检设备状态检测数据集

图像尺寸:800×800 像素 类别数量:49 类 训练集图像数量:5292;验证集图像数量:560;测试集图像数量:204
数据集概览
| 属性类别 | 详细信息 |
|---|---|
| 数据集名称 | 电力巡检设备状态检测数据集(Power Inspection Defect Detection Dataset) |
| 总图像数量 | 6,056 张 |
| 图像尺寸 | 800 × 800 像素 |
| 标注格式支持 | YOLO、PASCAL VOC、COCO(三种格式均提供) |
| 类别总数 | 49 类 |
| 数据划分 | - 训练集:5,292 张 - 验证集:560 张 - 测试集:204 张 |
类别详情表
| 类别 ID | 类别名称(英文/缩写) | 中文名称 | 图像数 | 标注实例数 |
|---|---|---|---|---|
| 1 | csat_tt | 铁塔顶部 | 244 | 254 |
| 2 | csat_ct | 铁塔本体 | 142 | 182 |
| 3 | cdiengomban | 陶瓷绝缘子污秽 | 1 | 1 |
| 4 | cdien_gom_ban | 陶瓷绝缘子污秽 | 58 | 61 |
| 5 | cdien_gom_tt_nut | 陶瓷绝缘子头部裂缝 | 40 | 40 |
| 6 | cdien_gom_tt_vo | 陶瓷绝缘子头部破损 | 99 | 100 |
| 7 | cbtong_tt | 总承载体(瓷瓶)头部 | 187 | 188 |
| 8 | cbtong_ct | 总承载体(瓷瓶)本体 | 59 | 65 |
| 9 | cdien_polyme_tt_ban | 聚合物绝缘子头部污秽 | 121 | 129 |
| 10 | cdien_polyme_tt_rach | 聚合物绝缘子头部裂纹 | 103 | 103 |
| 11 | cdien_polyme_tt_cong | 聚合物绝缘子头部弯曲 | 47 | 47 |
| 12 | cdien_polyme_ct_ban | 聚合物绝缘子本体污秽 | 158 | 273 |
| 13 | cdien_polyme_ct_rach | 聚合物绝缘子本体裂纹 | 147 | 282 |
| 14 | cdien_polyme_ct_cong | 聚合物绝缘子本体弯曲 | 123 | 168 |
| 15 | cdien_ttin_h_tt_ban | 复合绝缘子头部污秽 | 71 | 93 |
| 16 | cdien_ttin_h_tt_vo | 复合绝缘子头部破损 | 26 | 26 |
| 17 | cdien_ttin_h_tt_nut | 复合绝缘子头部裂缝 | 15 | 15 |
| 18 | cdien_ttin_h_ct_ban | 复合绝缘子本体污秽 | 63 | 64 |
| 19 | cdien_ttin_h_ct_vo | 复合绝缘子本体破损 | 144 | 150 |
| 20 | csv_dz_tt | 导线端头部 | 193 | 230 |
| 21 | vday_tt | 导线头部 | 69 | 70 |
| 22 | csv_ct | 输电线本体 | 70 | 102 |
| 23 | dcl_tt | 地线头部 | 163 | 270 |
| 24 | dcleo_ct | 地线本体 | 87 | 145 |
| 25 | leo_ct | 地线接地装置本体 | 83 | 99 |
| 26 | mnoi_tt | 接地装置头部 | 136 | 161 |
| 27 | mnoi_ct | 接地装置本体 | 138 | 153 |
| 28 | kneo_tt | 锚定装置头部 | 268 | 418 |
| 29 | kneo_ct | 锚定装置本体 | 123 | 180 |
| 30 | dcset_ct | 支撑件本体 | 156 | 201 |
| 31 | ddan_tt | 电缆本体 | 202 | 315 |
| 32 | ddan_ct | 电缆本体 | 202 | 315 |
| 33 | ddan_tt_tua | 电缆头部扭曲 | 104 | 104 |
| 34 | ddan_ct_tua | 电缆本体扭曲 | 153 | 157 |
| 35 | ddan_tt_vatla | 电缆头部异物 | 173 | 175 |
| 36 | ddan_ct_vatla | 电缆本体异物 | 168 | 170 |
| 37 | ddan_tt_mon | 电缆头部腐蚀 | 153 | 154 |
| 38 | ddan_tt_amon | 电缆头部腐蚀 | 1 | 1 |
| 39 | ddan_tran_tt | 电缆连接头部 | 232 | 280 |
| 40 | dbcsu_tt | 电缆保护套头部 | 120 | 233 |
| 41 | ddan_boc_tt | 电缆护套头部 | 184 | 223 |
| 42 | kdo_tt | 开关头部 | 44 | 60 |
| 43 | kdo_ct | 开关本体 | 111 | 133 |
| 44 | xa_tt | 闸刀开关头部 | 138 | 147 |
| 45 | lbs_tt | 负荷断路开关头部 | 160 | 185 |
| 46 | rec_tt | 复合开关头部 | 160 | 224 |
| 47 | kdre_tt | 断路器头部 | 131 | 180 |
| 48 | fco_tt | 熔断器头部 | 278 | 371 |
| — | tcrung_ct | 交汇处本体 | 94 | 175 |
注:表中'电缆本体'在原始数据中以
ddan_tt和ddan_ct同时出现,但根据语义应为ddan_ct。所有类别均覆盖设备部件位置(头部/本体)与缺陷类型(污秽、破损、裂纹、扭曲、异物、腐蚀等)。

YOLOv8 训练代码与配置方案
本部分提供完整、可直接运行的 YOLOv8 训练代码与配置方案,支持 YOLO、VOC、COCO 三种标注格式中的任意一种(推荐使用 YOLO 格式训练)。
一、前提条件
1. 安装依赖
pip install ultralytics opencv-python numpy pandas tqdm
ultralytics是官方 YOLOv8 库,支持检测、分类、分割等任务。
二、数据准备(YOLO 格式)
假设数据已按以下结构组织:
PowerInspectionDataset/
├── images/
│ ├── train/ # 5292 张
│ ├── val/ # 560 张
│ └── test/ # 204 张
└── labels/
├── train/
├── val/
└── test/
每张图像 xxx.jpg 对应一个 xxx.txt,内容为:
<class_id> <x_center> <y_center> <width> <height> # 归一化到 [0,1]
三、类别配置文件(power_data.yaml)
创建 power_data.yaml 文件:
train: ./PowerInspectionDataset/images/train
val: ./PowerInspectionDataset/images/val
test: ./PowerInspectionDataset/images/test
nc: 49
names:
- 铁塔顶部
- 电缆头部异物
- 爬电距离装置头部
- 开关头部
- 陶瓷绝缘子污秽
- 导线端头部
- 地线头部
- 电缆头部扭曲
- 接地装置头部
- 陶瓷绝缘子头部破损
- 电缆头部腐蚀
- 负荷断路开关头部
- 断路器头部
- 复合绝缘子头部裂缝
- 闸刀开关头部
- 电缆保护套头部
- 电缆连接头部
- 复合开关头部
- 聚合物绝缘子头部污秽
- 聚合物绝缘子头部裂纹
- 陶瓷绝缘子污秽
- 总承载体(瓷瓶)头部
- 锚定装置头部
- 复合绝缘子本体破损
-
注意:YOLOv8 默认支持中文类别名(保存模型和推理时会正常显示),但部分可视化工具可能需 UTF-8 编码支持。
四、训练脚本(train_power.py)
from ultralytics import YOLO
import os
def main():
# 创建输出目录
os.makedirs("runs/power_inspection", exist_ok=True)
# 加载预训练模型(建议使用 yolov8s 或 yolov8m)
model = YOLO('yolov8s.pt') # 可替换为 'yolov8m.pt' / 'yolov8l.pt'
# 开始训练
results = model.train(
data='power_data.yaml',
epochs=150, # 建议 100~200(根据收敛情况调整)
imgsz=800, # 图像尺寸(与数据一致)
batch=16, # 根据 GPU 显存调整(32GB 可用 32)
name='yolov8s_power_800',
project='runs/power_inspection',
device=0, # GPU ID,多卡可用 [0,1]
workers=8,
cache=False, # 若内存充足可设为 True 加速
optimizer='AdamW',
lr0=0.01, # 初始学习率
lrf=0.01, # 最终学习率 = lr0 * lrf
momentum=0.937,
weight_decay=0.0005,
warmup_epochs=3,
patience=30, # 早停:验证损失不再下降则停止
save=True,
save_period=10, # 每 10 个 epoch 保存一次
verbose=True,
plots=True # 生成训练曲线图
)
print(f"✅ 训练完成!最佳模型路径:{results.save_dir}/weights/best.pt")
if __name__ == :
main()
五、命令行快速训练(可选)
你也可以直接使用命令行(无需写 Python 脚本):
yolo detect train \
data=power_data.yaml \
model=yolov8s.pt \
epochs=150 \
imgsz=800 \
batch=16 \
name=yolov8s_power_800 \
project=runs/power_inspection \
device=0 \
optimizer=AdamW \
lr0=0.01 \
patience=30
六、验证与测试
验证模型性能:
from ultralytics import YOLO
model = YOLO('runs/power_inspection/yolov8s_power_800/weights/best.pt')
metrics = model.val(data='power_data.yaml')
print(metrics.box.map) # [email protected]:0.95
对单张图像推理:
results = model('test_image.jpg')
results[0].show() # 显示带中文标签的结果
七、如果原始标注是 VOC 或 COCO?
▶ 若是 VOC 格式(XML):
使用以下脚本转换为 YOLO 格式(需提前安装 xmltodict):
# voc2yolo.py
import os
import xml.etree.ElementTree as ET
from pathlib import Path
class_names = [
"铁塔顶部", "电缆头部异物", "爬电距离装置头部", "开关头部",
"陶瓷绝缘子污秽", "导线端头部", "地线头部", "电缆头部扭曲",
"接地装置头部", "陶瓷绝缘子头部破损", "电缆头部腐蚀",
"负荷断路开关头部", "断路器头部", "复合绝缘子头部裂缝",
"闸刀开关头部", "电缆保护套头部", "电缆连接头部",
"复合开关头部", "聚合物绝缘子头部污秽", "聚合物绝缘子头部裂纹",
"陶瓷绝缘子污秽", "总承载体(瓷瓶)头部", "锚定装置头部",
"复合绝缘子本体破损", "电缆护套头部", "复合绝缘子头部污秽",
"复合绝缘子头部破损", "复合绝缘子本体污秽", "陶瓷绝缘子头部裂缝",
"总承载体(瓷瓶)本体", "聚合物绝缘子本体污秽",
"聚合物绝缘子本体弯曲", "聚合物绝缘子本体裂纹",
"聚合物绝缘子头部弯曲", "铁塔本体", "输电线本体",
"地线本体", "支撑件本体", "电缆本体", "电缆本体扭曲",
"电缆本体异物", "开关本体", "地线接地装置本体",
"交汇处本体", "锚定装置本体", "接地装置本体",
"导线头部", ,
]
():
os.makedirs(yolo_dir, exist_ok=)
xml_file Path(voc_dir).glob():
tree = ET.parse(xml_file)
root = tree.getroot()
img_w = (root.find().text)
img_h = (root.find().text)
yolo_lines = []
obj root.findall():
cls_name = obj.find().text
cls_name class_names:
cls_id = class_names.index(cls_name)
bndbox = obj.find()
xmin = (bndbox.find().text)
ymin = (bndbox.find().text)
xmax = (bndbox.find().text)
ymax = (bndbox.find().text)
x_center = (xmin + xmax) / / img_w
y_center = (ymin + ymax) / / img_h
width = (xmax - xmin) / img_w
height = (ymax - ymin) / img_h
yolo_lines.append()
(os.path.join(yolo_dir, xml_file.stem + ), ) f:
f.write(.join(yolo_lines))
▶ 若是 COCO 格式:
YOLOv8 原生支持 COCO,只需在 power_data.yaml 中指定 train: path/to/coco/train.json 即可,但需确保类别顺序一致。
八、训练建议
| 项目 | 建议 |
|---|---|
| 模型选择 | 小目标多 → 用 yolov8s 或 yolov8m;精度优先 → yolov8l |
| 输入尺寸 | 800×800(与数据一致) |
| Batch Size | 16~32(取决于 GPU 显存) |
| Epochs | 100~200(观察验证 loss 是否收敛) |
| 增强策略 | 默认已包含 Mosaic、HSV、翻转等,适合电力小目标 |
| 评估指标 | 关注 [email protected] 和各类别 AP(尤其稀有类如'电缆头部腐蚀'仅 1 例) |




