无人机电力巡检图像数据集 | 输电线路避障识别、语义分割、目标检测、深度学习模型训练素材10298期
无人机电力巡检图像数据集 | 输电线路避障识别、语义分割、目标检测、深度学习模型训练素材10298期
标签:#无人机电力巡检 #输电线路识别 #电缆电塔检测 #图像分割数据集 #UNet语义分割 #YOLO目标检测 #智慧电网AI运维 #计算机视觉工程实战
国内输电线路覆盖山地、丘陵、旷野等复杂野外环境,传统人工巡检模式不仅作业半径大、徒步巡检效率极低,还存在高空触电、山体滑坡、极端天气作业等重大安全隐患。现阶段无人机已成为电力线路巡检的主流载体,但无人机自主避障、航线悬停、线路精准跟踪高度依赖AI视觉算法:如何从航拍画面中精准区分不同类型电缆、差异化输电塔,过滤无效背景干扰,是实现无人机全自动巡检、智能避障的核心技术难点。而行业内专业标注的输电线路图像数据集稀缺、类别划分粗糙、标注格式不统一,大幅抬高了电力视觉算法的研发门槛。本次分享的无人机输电线路专用标注数据集,面向目标检测+语义分割双任务设计,细分线路与塔架品类、增设无效背景过滤类别,完美适配UNet、YOLO等主流深度学习模型,可直接用于无人机避障算法、线路分割模型、电力设施目标检测系统的训练、调优与工程落地,帮助研发团队快速攻克电力巡检视觉识别难题。
二、数据集详细介绍
2.1 整体概述
本数据集为无人机航拍视角下的户外输电线路实景图像,聚焦无人机电力巡检避障、线路分割、设施识别三大核心场景,针对电力行业设施特征做精细化类别划分,同时适配目标检测、语义分割两大计算机视觉主流任务。数据标注规范统一,无需二次格式转换,可无缝对接PyTorch、TensorFlow、PaddlePaddle等框架,兼顾学术研究、算法实训与工业项目落地等多种使用场景。

2.2 类别体系(6大细分类别)
数据集结合输电线路现场运维、无人机避障的实际需求,对电力核心设施进行精细化拆分,同时设置空类过滤冗余背景,类别体系贴合真实巡检工况,解决通用数据集品类模糊、无法满足细分识别的问题:
| 类别名称 | 场景释义 | 应用方向 |
|---|---|---|
| 电缆1 | 第一类输电电缆 | 线路跟踪、障碍物预判、语义分割 |
| 电缆2 | 第二类输电电缆 | 区分不同规格线缆,适配精细化避障逻辑 |
| 格构塔 | 钢结构格构式输电塔 | 大型电力塔架识别、远距离目标检测 |
| 塔_tucohy | 特种结构输电塔 | 异形塔架识别,适配复杂线路巡检场景 |
| 木质塔 | 木质材质输电塔 | 老旧线路塔架专项识别,差异化运维 |
| 空类 | 无效背景/无目标区域 | 过滤天空、植被、地面等干扰,降低模型误检率 |


2.3 核心数据参数
- 数据总量:共计1927张全标注实景图像,数据体量处于电力视觉数据集中等水平,既可以满足中小型深度学习模型完整训练、特征学习需求,又不会因数据量过大拉长训练周期、增加硬件算力消耗,在训练效率与模型泛化能力之间实现平衡。
- 图像质量:图像分辨率适配无人机航拍标准,能够清晰呈现电缆走向、塔架轮廓、部件细节等关键特征,可支撑模型完成小目标特征提取、边缘轮廓分割等任务,适配野外逆光、强光、复杂遮挡等真实拍摄环境。
- 标注格式:原生适配主流目标检测标注格式,同时兼容语义分割任务标签规则,一套数据可同时开展YOLO目标检测、UNet语义分割两类实验,拓展性极强。
- 适用场景:无人机自主避障算法、输电线路语义分割、电力设施多目标检测、巡检航线智能规划、线路状态监测等。

2.4 产业与技术应用价值
- 工程落地层面:赋能智慧电网全自动巡检系统,依托AI识别结果实现无人机自动避障、定点悬停巡检,替代高危人工巡检,压缩运维成本,提升线路故障排查效率。
- 算法研发层面:补齐输电线路细分品类的训练数据短板,助力工程师优化模型在野外复杂背景、小目标、遮挡场景下的识别精度与鲁棒性,推动电力视觉算法迭代。
- 学习实训层面:适合深度学习从业者、电力智能化开发人员开展目标检测+语义分割多任务联合实战,完整覆盖数据集处理、模型训练、推理部署全流程。
- 安全保障层面:精准区分各类电力设施与无效背景,减少无人机巡检过程中的误判、撞线风险,保障巡检设备与输电线路双重安全。

三、运行环境与依赖配置
3.1 推荐运行环境
操作系统:Windows 10/11、Ubuntu 18.04/20.04、macOS;
Python版本:3.8 ~ 3.11(全框架兼容);
硬件建议:GPU(NVIDIA,CUDA 11.2及以上),8G显存可满足基础训练,16G及以上显存可开启大批次训练与数据增强;CPU仅支持推理与小规模调试。

3.2 依赖库一键安装命令
同时适配YOLO目标检测、UNet语义分割两大任务,集成图像处理、模型训练、数据统计全套工具:
# 电力巡检视觉项目全套依赖安装
pip install ultralytics torch torchvision opencv-python numpy pillow matplotlib scikit-image albumentations
ultralytics:YOLO系列模型核心库,用于输电设施目标检测;torch/torchvision:PyTorch基础框架,支撑UNet语义分割模型训练;albumentations:专业图像增强库,适配野外航拍图像数据增广;scikit-image:图像轮廓、边缘处理,辅助分割任务后处理。
四、深度学习实战代码(附带电力巡检场景专属注释)
结合数据集特性,提供数据集划分、YOLOv8多目标检测训练、UNet线路语义分割训练、批量图像推理四大核心模块,代码针对无人机航拍、电力小目标、复杂背景做专项优化,每段代码附带行业实战经验注释。
4.1 数据集自动划分脚本(训练集:验证集 = 8:2)
场景经验:1927张航拍图像按8:2划分后,训练集1542张、验证集385张,样本分布均衡。输电线路图像存在大量相似背景、连续拍摄画面,代码开启全局随机打乱,避免同一场景数据集中在单一集合,防止模型出现验证集泛化失效问题。同时兼容检测/分割两类数据目录结构。
import os
import random
import shutil
# ===================== 全局配置(根据本地路径修改)=====================
raw_data_root = "./power_line_raw" # 原始数据集根目录
split_data_root = "./power_line_split" # 划分后数据集保存目录
train_ratio = 0.8 # 训练集占比
img_suffix = [".jpg", ".png", ".jpeg"] # 支持图像格式
# ===================================================================
def split_power_dataset():
# 初始化训练、验证文件夹
train_img_dir = os.path.join(split_data_root, "train", "images")
train_label_dir = os.path.join(split_data_root, "train", "labels")
val_img_dir = os.path.join(split_data_root, "val", "images")
val_label_dir = os.path.join(split_data_root, "val", "labels")
# 递归创建文件夹
for dir_path in [train_img_dir, train_label_dir, val_img_dir, val_label_dir]:
os.makedirs(dir_path, exist_ok=True)
# 遍历所有图像文件
all_img_list = []
for root, dirs, files in os.walk(raw_data_root):
for file in files:
if os.path.splitext(file)[-1].lower() in img_suffix:
all_img_list.append(file)
# 核心操作:全局随机打乱,规避航拍连续画面带来的数据偏差
random.shuffle(all_img_list)
split_index = int(len(all_img_list) * train_ratio)
train_files = all_img_list[:split_index]
val_files = all_img_list[split_index:]
# 拷贝图像+对应标签(YOLO标签格式:同名txt文件)
def copy_data(file_list, img_target, label_target):
for file_name in file_list:
img_src = os.path.join(raw_data_root, file_name)
label_name = os.path.splitext(file_name)[0] + ".txt"
label_src = os.path.join(raw_data_root, label_name)
shutil.copy(img_src, os.path.join(img_target, file_name))
if os.path.exists(label_src):
shutil.copy(label_src, os.path.join(label_target, label_name))
copy_data(train_files, train_img_dir, train_label_dir)
copy_data(val_files, val_img_dir, val_label_dir)
print("数据集划分完成!")
print(f"训练集图像数量:{len(train_files)}")
print(f"验证集图像数量:{len(val_files)}")
if __name__ == "__main__":
split_power_dataset()
4.2 YOLOv8 输电线路多目标检测训练代码
场景经验:输电电缆、小型塔架属于典型航拍小目标,设置imgsz=800提升小目标特征提取能力;野外图像光照复杂、遮挡频发,开启Mosaic、旋转增强模拟复杂工况;6分类任务采用迁移学习,基于预训练权重微调,大幅提升收敛速度,适合中小规模数据集训练。
from ultralytics import YOLO
import torch
# ===================== 检测模型训练专属配置 =====================
data_yaml_path = "./power_line.yaml" # YOLO数据集配置文件路径
model_weight = "yolov8s.pt" # 基础模型:n(轻量)、s(平衡)、m(高精度)
epochs = 120 # 训练轮次,电力小目标建议100-150轮
img_size = 800 # 航拍小目标专属分辨率
batch_size = 8 # 8G显存设8,16G显存可设16
device = 0 if torch.cuda.is_available() else "cpu"
patience = 20 # 早停机制,连续20轮不提升则停止,防止过拟合
# =================================================================
def train_power_detection():
# 加载预训练模型
model = YOLO(model_weight)
# 启动训练(电力巡检场景超参优化)
train_res = model.train(
data=data_yaml_path,
epochs=epochs,
imgsz=img_size,
batch=batch_size,
device=device,
patience=patience,
mosaic=1.0, # 开启马赛克增强,适配复杂背景与目标重叠
degrees=15, # 随机旋转,适配无人机不同拍摄角度
scale=0.4, # 尺度变换,适配远近不同距离的电力设施
box=7.0, # 提升检测框回归精度,贴合电缆、塔架轮廓
name="power_line_detect"
)
print("YOLOv8目标检测模型训练完成!")
print("最优权重保存路径:runs/detect/power_line_detect/weights/best.pt")
return train_res
if __name__ == "__main__":
train_power_detection()
配套power_line.yaml配置文件(YOLO标准格式):
train: ./power_line_split/train/images
val: ./power_line_split/val/images
nc: 6 # 类别总数
names: ["电缆1", "电缆2", "格构塔", "塔_tucohy", "木质塔", "空类"]
4.3 UNet 输电线路语义分割训练代码
场景经验:电缆属于细长型线性目标,语义分割对边缘精度要求高;数据集图像背景多为天空、植被,使用UNet基础模型兼顾精度与推理速度,适合无人机边缘端部署;使用albumentations做针对性图像增强,解决野外逆光、阴影问题。
import torch
import torch.nn as nn
from torch.utils.data import Dataset, DataLoader
import albumentations as A
from albumentations.pytorch import ToTensorV2
import cv2
import os
# ===================== 分割任务基础配置 =====================
DEVICE = torch.device("cuda" if torch.cuda.is_available() else "cpu")
IMG_HEIGHT = 640
IMG_WIDTH = 640
BATCH_SIZE = 4
EPOCHS = 80
NUM_CLASSES = 6 # 分割类别与数据集保持一致
train_img_path = "./power_line_split/train/images"
train_mask_path = "./power_line_split/train/masks"
# ===========================================================
# 简易UNet基础模型(轻量化,适配无人机边缘部署)
class DoubleConv(nn.Module):
def __init__(self, in_channels, out_channels):
super().__init__()
self.conv = nn.Sequential(
nn.Conv2d(in_channels, out_channels, 3, padding=1),
nn.BatchNorm2d(out_channels),
nn.ReLU(inplace=True),
nn.Conv2d(out_channels, out_channels, 3, padding=1),
nn.BatchNorm2d(out_channels),
nn.ReLU(inplace=True)
)
def forward(self, x):
return self.conv(x)
class UNet(nn.Module):
def __init__(self, in_channels=3, out_channels=6):
super().__init__()
self.in_conv = DoubleConv(in_channels, 64)
self.down1 = nn.MaxPool2d(2)
self.conv1 = DoubleConv(64, 128)
self.down2 = nn.MaxPool2d(2)
self.conv2 = DoubleConv(128, 256)
self.up1 = nn.ConvTranspose2d(256, 128, 2, stride=2)
self.conv3 = DoubleConv(256, 128)
self.up2 = nn.ConvTranspose2d(128, 64, 2, stride=2)
self.conv4 = DoubleConv(128, 64)
self.out_conv = nn.Conv2d(64, out_channels, 1)
def forward(self, x):
x1 = self.in_conv(x)
x2 = self.conv1(self.down1(x1))
x3 = self.conv2(self.down2(x2))
x = self.up1(x3)
x = torch.cat([x, x2], dim=1)
x = self.conv3(x)
x = self.up2(x)
x = torch.cat([x, x1], dim=1)
x = self.conv4(x)
out = self.out_conv(x)
return out
# 数据集加载类(适配电力分割数据)
class PowerSegDataset(Dataset):
def __init__(self, img_dir, mask_dir, transform=None):
self.img_dir = img_dir
self.mask_dir = mask_dir
self.transform = transform
self.images = os.listdir(img_dir)
def __len__(self):
return len(self.images)
def __getitem__(self, index):
img_path = os.path.join(self.img_dir, self.images[index])
mask_path = os.path.join(self.mask_dir, self.images[index].replace(".jpg", ".png"))
image = cv2.imread(img_path)
mask = cv2.imread(mask_path, cv2.IMREAD_GRAYSCALE)
if self.transform:
aug = self.transform(image=image, mask=mask)
image = aug["image"]
mask = aug["mask"]
return image, mask
# 电力航拍图像专属增强策略
train_transform = A.Compose([
A.Resize(IMG_HEIGHT, IMG_WIDTH),
A.HorizontalFlip(p=0.5),
A.RandomBrightnessContrast(p=0.3), # 适配野外逆光、明暗变化
A.ShiftScaleRotate(p=0.3),
ToTensorV2()
])
# 训练主函数
def train_unet_segment():
# 初始化数据集、加载器、模型
dataset = PowerSegDataset(train_img_path, train_mask_path, train_transform)
loader = DataLoader(dataset, batch_size=BATCH_SIZE, shuffle=True)
model = UNet(in_channels=3, out_channels=NUM_CLASSES).to(DEVICE)
loss_fn = nn.CrossEntropyLoss()
optimizer = torch.optim.Adam(model.parameters(), lr=1e-4)
# 循环训练
for epoch in range(EPOCHS):
model.train()
total_loss = 0
for imgs, masks in loader:
imgs = imgs.to(DEVICE).float() / 255.0
masks = masks.to(DEVICE).long()
preds = model(imgs)
loss = loss_fn(preds, masks)
optimizer.zero_grad()
loss.backward()
optimizer.step()
total_loss += loss.item()
avg_loss = total_loss / len(loader)
print(f"第{EPOCHS+1}轮 | 平均损失值:{avg_loss:.4f}")
# 保存训练完成的分割模型
torch.save(model.state_dict(), "./unet_power_line_segment.pth")
print("UNet输电线路语义分割模型训练完成,权重已保存!")
if __name__ == "__main__":
train_unet_segment()
4.4 批量图像推理脚本(无人机巡检批量筛查)
场景经验:无人机单次巡检会生成数百张航拍图像,该脚本实现全自动批量检测、结果统计。针对电力场景设置较低置信度阈值conf=0.25,避免细小电缆、远端塔架被漏检;自动统计各类设施占比,可直接对接巡检后台生成运维报表。
from ultralytics import YOLO
import os
# ===================== 批量推理配置 =====================
best_model = "./runs/detect/power_line_detect/weights/best.pt"
batch_img_folder = "./batch_inspect_imgs" # 待检测航拍图像文件夹
class_names = ["电缆1", "电缆2", "格构塔", "塔_tucohy", "木质塔", "空类"]
img_suffix = [".jpg", ".png", ".jpeg"]
conf_threshold = 0.25 # 电力小目标降低置信度,减少漏检
# =======================================================
def batch_power_inspect():
model = YOLO(best_model)
class_count = {name: 0 for name in class_names}
total_num = 0
# 遍历文件夹所有图像
for img_name in os.listdir(batch_img_folder):
if os.path.splitext(img_name)[-1].lower() not in img_suffix:
continue
total_num += 1
img_full_path = os.path.join(batch_img_folder, img_name)
results = model(img_full_path, conf=conf_threshold)
# 统计识别结果
for res in results:
boxes = res.boxes
for box in boxes:
cls_id = int(box.cls.item())
cls_name = class_names[cls_id]
class_count[cls_name] += 1
# 输出巡检统计报告
print("========== 无人机电力巡检批量识别报告 ==========")
print(f"本次总计检测图像:{total_num} 张")
for cls, count in class_count.items():
ratio = round(count / total_num * 100, 2) if total_num > 0 else 0
print(f"{cls}:检测到 {count} 个目标,占比 {ratio}%")
if __name__ == "__main__":
batch_power_inspect()
五、数据集使用技巧与实战经验总结
- 模型选型建议
- 无人机端边缘部署:优先选用
yolov8n、轻量化UNet,推理速度快、算力占用低,满足实时避障需求; - 云端后台高精度分析:选用
yolov8m/yolov8l、标准UNet++,提升小目标与遮挡目标识别精度。
- 无人机端边缘部署:优先选用
- 数据优化技巧
航拍图像普遍存在逆光、雾天、远景模糊问题,可结合代码中的albumentations库增加降噪、亮度修复预处理;电缆为线性细长目标,训练时可适当调高box损失权重,优化分割/检测边缘效果。 - 过拟合规避方案
本数据集共1927张图像,属于中等规模数据,训练轮次建议控制在80~130轮,配合patience早停机制;不要无限增大batch size,显存不足时优先降低批次,而非关闭数据增强。 - 工程拓展方向
- 多任务融合:将目标检测与语义分割结合,同时实现设施定位+线路轮廓提取,优化无人机避障路径规划;
- 数据扩充:叠加雨天、雾天、夜间红外图像,构建多气候、多模态电力数据集,提升模型全场景适配能力;
- 二次开发:模型导出为ONNX/TensorRT格式,部署至无人机机载计算模块,实现端侧实时AI巡检。
- 落地适配要点
模型训练完成后,可对接无人机飞控SDK,将识别到的电缆、塔架坐标转化为避障指令,形成图像识别-航线调整-自主巡检完整闭环。
六、补充说明
- 数据来源:无人机实地航拍野外输电线路实景图像,无合成数据,场景1:1还原真实电力巡检环境;
- 框架兼容性:全面支持YOLO系列、UNet、Mask R-CNN等检测/分割模型,适配主流深度学习框架;
- 适用人群:深度学习算法工程师、电力智能化研发人员、计算机视觉实训学员、电网运维技术团队。
公众号配套标签
#无人机自主避障 #输电线路语义分割 #UNet实战教程 #YOLO电力检测 #智慧电网数据集 #AI电力巡检项目 #计算机视觉工程落地
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)