当前位置: 首页 > news >正文

高压电绝缘子破损目标检测数据集简介与应用

在电力系统中,高压电绝缘子起着关键的绝缘与机械支撑作用。一旦发生破损,不仅影响输电线路的安全运行,还可能引发电力事故。因此,利用目标检测技术对高压绝缘子的破损情况进行智能识别,已成为当前电力巡检中的重要研究方向。

本文将介绍一个面向高压电绝缘子破损检测任务构建的数据集,包括数据来源、标注类别、格式结构及应用前景,供从事智能巡检与目标检测研究的开发者参考。

一、数据集概述

本数据集主要面向高压电力线路中的绝缘子组件,特别关注破损绝缘子的自动识别问题。数据集中包含了各种场景下(如晴天、阴天、远距离、近距离、不同角度)的绝缘子图像,具备较强的泛化能力。数据主要来源于无人机巡检的图片,图片数量一共2400张,标签格式分别有:YOLO格式、VOC格式和JSON格式

二、数据增强

为提升模型对复杂环境下绝缘子破损图像的鲁棒性,本项目在原始图像基础上引入了多种数据增强手段。增强方法主要模拟了自然环境中的光照变化与成像模糊等常见扰动,增强后的图像与原始标签一一对应,扩展了训练样本的多样性,帮助模型更好泛化。具体包括以下三种增强方式:

1. 光照变暗(Gamma 校正)

使用随机范围在 1.6 - 2.6 的伽马值对图像进行非线性调整,模拟阴天或背光等低照度场景,增强模型在弱光环境下的检测能力。

2. 光照变亮(Gamma 校正)

设置伽马值在 0.3 - 0.7 之间,对图像进行亮度增强,模拟强光直射、正午阳光等过曝场景,提升模型在高光条件下的稳定性。

3. 模糊处理(均值模糊)

通过 11×11 的卷积核进行均值模糊,模拟摄像头抖动、对焦不准等真实采集中的模糊情况,有助于模型识别边缘不清晰的目标。

🔧 标签同步处理

每次增强后,图像的对应标签(YOLO 格式)文件会被自动复制并重命名,确保增强样本与其目标框信息一致,从而可直接用于训练。

import random
import shutil
import cv2
import numpy as np
import os
from tqdm import tqdm# 光照变暗
def gamma_transform_low(name, img, label_path, output_path):gamma = random.uniform(1.6, 2.6)  # 变暗is_gray = img.ndim == 2 or img.shape[1] == 1if is_gray:img = cv2.cvtColor(img, cv2.COLOR_GRAY2BGR)hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)illum = hsv[..., 2] / 255.illum = np.power(illum, gamma)v = illum * 255.v[v > 255] = 255v[v < 0] = 0hsv[..., 2] = v.astype(np.uint8)img = cv2.cvtColor(hsv, cv2.COLOR_HSV2BGR)if is_gray:img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)out_image_path = os.path.join(output_path, "images", "Low_" + name)cv2.imwrite(out_image_path, img)out_label_path = os.path.join(output_path, "labels_yolo", "Low_" + name.split(".jpg")[0] + ".txt")shutil.copyfile(label_path, out_label_path)# 光照变亮
def gamma_transform_high(name, img, label_path, output_path):gamma = random.uniform(0.3, 0.7)   # 变亮is_gray = img.ndim == 2 or img.shape[1] == 1if is_gray:img = cv2.cvtColor(img, cv2.COLOR_GRAY2BGR)hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)illum = hsv[..., 2] / 255.illum = np.power(illum, gamma)v = illum * 255.v[v > 255] = 255v[v < 0] = 0hsv[..., 2] = v.astype(np.uint8)img = cv2.cvtColor(hsv, cv2.COLOR_HSV2BGR)if is_gray:img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)out_image_path = os.path.join(output_path, "images", "High_" + name)cv2.imwrite(out_image_path, img)out_label_path = os.path.join(output_path, "labels_yolo", "High_" + name.split(".jpg")[0] + ".txt")shutil.copyfile(label_path, out_label_path)# 光照变亮
def Mohu(name, img, label_path, output_path):img1 = cv2.blur(img, (11, 11))  # 模糊处理,卷积核越大,效果越明显out_path = os.path.join(output_path, "images", "MoHu_" + name)cv2.imwrite(out_path, img1)out_label_path = os.path.join(output_path, "labels_yolo", "MoHu_" + name.split(".jpg")[0] + ".txt")shutil.copyfile(label_path, out_label_path)def main():images_input_path = "./data_sum\images"label_input_path = "./labels_yolo"output_path = "./output"image_list = os.listdir(images_input_path)for name in tqdm(image_list):img_path = os.path.join(images_input_path, name)label_path = os.path.join(label_input_path, name.split(".jpg")[0] + ".txt")image = cv2.imread(img_path)gamma_transform_low(name, image, label_path, output_path)gamma_transform_high(name, image, label_path, output_path)Mohu(name, image, label_path, output_path)if __name__ == "__main__":main()

四、数据集划分

下面代码主要作用是将原始数据集按比例划分为训练集、验证集和测试集,并分别保存对应的图像和YOLO格式标签文件。具体过程如下:

  • 读取数据源路径:程序首先定义了包含所有图像和YOLO标签的原始路径。
  • 获取图像列表并打乱顺序:通过读取图像文件名列表并使用 random.shuffle() 随机打乱,实现数据的随机分布。
  • 按照7:2:1的比例划分数据集:分别确定训练集、验证集和测试集的数量,并获取对应文件名。(可自行地定义划分比例)
  • 创建目标文件夹并复制文件:程序依次为训练集、验证集和测试集创建对应的图像与标签保存路径,并将图像文件和标签文件分别复制过去。
import os
import random
import shutilroot_dir = r"./data_sum"
save_root_dir = r"./data_split"image_sum_dir = os.path.join(root_dir, "images")
label_yolo_sum_dir = os.path.join(root_dir, "labels_yolo")# 获取文件夹下所有图片名称
image_list = os.listdir(image_sum_dir)
image_list = [name for name in image_list if name.endswith(".jpg")]# 随机打乱文件名列表
random.shuffle(image_list)# 划分训练集和验证集
train_ratio = 0.7
val_ratio = 0.2
test_ratio = 0.1num_images = len(image_list)
num_train = int(num_images * train_ratio)
num_val = int(num_images * val_ratio)
num_test = num_images - num_train - num_val
print("num_images:{}  num_train:{}  num_val:{}  num_test:{}".format(num_images, num_train, num_val, num_test))# 获取训练集和验证集名字
train_names = image_list[:num_train]
val_names = image_list[num_train: num_train + num_val]
test_names = image_list[num_train + num_val: num_images]# 训练集图片及标签保存路径
save_train_images_path = os.path.join(save_root_dir, "images", "train")
save_train_labels_path = os.path.join(save_root_dir, "labels", "train")if not os.path.exists(save_train_images_path):os.makedirs(save_train_images_path)if not os.path.exists(save_train_labels_path):os.makedirs(save_train_labels_path)for name in train_names:# 图像image_path = os.path.join(image_sum_dir, name)label_path = os.path.join(label_yolo_sum_dir, name.split(".jpg")[0] + ".txt")assert os.path.exists(image_path), "file:{} not exist ...".format(image_path)assert os.path.exists(label_path), "file:{} not exist ...".format(label_path)shutil.copy(image_path, save_train_images_path)shutil.copy(label_path, save_train_labels_path)# 验证集图片及标签保存路径
save_val_images_path = os.path.join(save_root_dir, "images", "val")
save_val_labels_path = os.path.join(save_root_dir, "labels", "val")if not os.path.exists(save_val_images_path):os.makedirs(save_val_images_path)if not os.path.exists(save_val_labels_path):os.makedirs(save_val_labels_path)for name in val_names:# 图像image_path = os.path.join(image_sum_dir, name)label_path = os.path.join(label_yolo_sum_dir, name.split(".jpg")[0] + ".txt")assert os.path.exists(image_path), "file:{} not exist ...".format(image_path)assert os.path.exists(label_path), "file:{} not exist ...".format(label_path)shutil.copy(image_path, save_val_images_path)shutil.copy(label_path, save_val_labels_path)# 测试图片及标签保存路径
save_test_images_path = os.path.join(save_root_dir, "images", "test")
save_test_labels_path = os.path.join(save_root_dir, "labels", "test")if not os.path.exists(save_test_images_path):os.makedirs(save_test_images_path)if not os.path.exists(save_test_labels_path):os.makedirs(save_test_labels_path)for name in test_names:# 图像image_path = os.path.join(image_sum_dir, name)label_path = os.path.join(label_yolo_sum_dir, name.split(".jpg")[0] + ".txt")assert os.path.exists(image_path), "file:{} not exist ...".format(image_path)assert os.path.exists(label_path), "file:{} not exist ...".format(label_path)shutil.copy(image_path, save_test_images_path)shutil.copy(label_path, save_test_labels_path)

本文数据集是在一些网站上搜集的,由于搜集的图片大多不带标注,自己进行了准确地标注,识别效果良好。如有需求,请支持。数据集链接——高压电绝缘子破损目标检测数据集

相关文章:

  • `docker run`、`docker start`、`docker exec` 区别
  • QT之头像剪裁效果实现
  • Invalid value type for attribute ‘factoryBeanObjectType‘: java.lang.String
  • 多维度健康护理:为进行性核上性麻痹患者护航
  • 前端面试准备-6
  • 网络攻防技术四:网络侦察技术
  • 线段树刷题记录
  • Langchian - 自定义提示词模板 提取结构化的数据
  • 每天掌握一个Linux命令 - hping3
  • Windows 账号管理与安全指南
  • 【深度学习新浪潮】以Dify为例的大模型平台的对比分析
  • Torch Geometric GCN训练心得
  • selenium-自动更新谷歌浏览器驱动
  • 从多巴胺的诱惑到内啡肽的力量 | 个体成长代际教育的成瘾困局与破局之道
  • NLP学习路线图(十九):GloVe
  • 香橙派3B学习笔记5:Linux文件系统分区_A/B系统分区
  • 【C++】23. unordered_map和unordered_set的使用
  • 【深度学习新浪潮】多模态模型如何处理任意分辨率输入?
  • Qt信号与槽机制深度解析
  • 图像任务中的并发处理:线程池、Ray、Celery 和 asyncio 的比较
  • 品牌网站建设框架/软文例文 经典软文范例
  • 合伙合同网站建设协议/深圳精准网络营销推广
  • 六安电商网站建设价格/专业营销团队公司
  • 网站制作 ?B?T/营销型网站推广方案
  • 寮步网站建设高性能/深圳关键词快速排名
  • 怎么做网站的301/谷歌搜索引擎怎么才能用