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

article/2025/7/14 18:39:49

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

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

一、数据集概述

本数据集主要面向高压电力线路中的绝缘子组件,特别关注破损绝缘子的自动识别问题。数据集中包含了各种场景下(如晴天、阴天、远距离、近距离、不同角度)的绝缘子图像,具备较强的泛化能力。数据主要来源于无人机巡检的图片,图片数量一共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)

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


http://www.hkcw.cn/article/LxESmKLTII.shtml

相关文章

深度学习与神经网络 前馈神经网络

1.神经网络特征 无需人去告知神经网络具体的特征是什么&#xff0c;神经网络可以自主学习 2.激活函数性质 &#xff08;1&#xff09;连续并可导&#xff08;允许少数点不可导&#xff09;的非线性函数 &#xff08;2&#xff09;单调递增 &#xff08;3&#xff09;函数本…

paoxiaomo的XCPC算法竞赛训练经验

楼主作为一个普通二本的ICPC选手&#xff0c;在0基础的情况下凭借自学&#xff0c;获得过南昌邀请赛金牌&#xff0c;杭州区域赛银牌&#xff0c;一路上经历过不少的跌宕起伏&#xff0c;如今将曾经摸索出来的学习路线分享给大家 一&#xff0c;语言基础 学习C语言基础语法&a…

电力系统时间同步系统

电力系统中&#xff0c;电压、电流、功率变化等特征量测量都是时间相关函数[1]&#xff0c;统一精准的时间源对于电网安全稳定运行至关重要&#xff0c;因此&#xff0c;电力系统运行规程[2]中明确要求继电保护装置、自动化装置、安全稳定控制系统、能量管理系统和生产信息管理…

Codeforces Round 1028 (Div. 2)(A-D)

题面链接&#xff1a;Dashboard - Codeforces Round 1028 (Div. 2) - Codeforces A. Gellyfish and Tricolor Pansy 思路 要知道骑士如果没了那么这个人就失去了攻击手段&#xff0c;贪心的来说我们只需要攻击血量少的即可&#xff0c;那么取min比较一下即可 代码 void so…

金属材料资料

一、金属材料 1. 黑色金属材料&#xff08;钢铁材料&#xff09; 铸铁&#xff08;含碳量&#xff1e;2.11%&#xff09; 分类&#xff1a; 按碳存在形式&#xff1a;白口铸铁&#xff08;硬脆&#xff0c;炼钢原料&#xff09;、灰口铸铁&#xff08;应用最广&#xff09;、…

mysql专题上

连接服务器 mysql -h 127.0.0.1 -P 3306 -u root -p -h后接的是要连接的部署了mysql的主机&#xff0c;127.0.0.1指的是单机访问&#xff0c;如果没有指令则直接连接本地 -P后接的是端口号 一般是3306 -u后接的是要登入的用户 -p指要登陆密码 如果要退出可以直接quit mysql…

DAY43打卡

浙大疏锦行 kaggle找到一个图像数据集&#xff0c;用cnn网络进行训练并且用grad-cam做可视化 进阶&#xff1a;并拆分成多个文件 fruit_cnn_project/ ├─ data/ # 存放数据集&#xff08;需手动创建&#xff0c;后续放入图片&#xff09; │ ├─ train/ …

蓝天影院订票网站的设计V3

1 绪 论 1.1 本课题研究背景 20世纪90年代中期以来&#xff0c;随着以Internet为代表的计算机技术&#xff0c;网络技术和信息技术的迅速发展&#xff0c;影院订票也逐渐转移到网络上[1][2]。伴随着我国计算机信息产业的飞速进步&#xff0c;计算机的开发应用已经遍布生活…

Python----目标检测(《YOLO9000: Better, Faster, Stronger》和YOLO-V2的原理与网络结构)

一、YOLO9000: Better, Faster, Stronger 1.1、基本信息 标题: YOLO9000: Better, Faster, Stronger 作者: Joseph Redmon, Ali Farhadi 机构: 华盛顿大学1, 艾伦人工智能研究所2 发布时间: 2016年&#xff08;根据arXiv编号1612.08242推断&#xff09; 论文链接: [1612.0…

力扣HOT100之动态规划:32. 最长有效括号

这道题放在动态规划里属实是有点难为人了&#xff0c;感觉用动态规划来做反而更难理解了&#xff0c;这道题用索引栈来做相当好理解&#xff0c;这里先讲下索引栈的思路。 索引栈做法 我们定义一个存放整数的栈&#xff0c;定义一个全局变量result来记录最长有效子串的长度&a…

操作系统:文件系统笔记

文件系统 参考资料&#xff1a; 12.10 虚拟文件系统_哔哩哔哩_bilibili7.1 文件系统全家桶 | 小林coding 基本组成 文件系统是操作系统中负责管理持久数据的子系统&#xff0c;说简单点&#xff0c;就是负责把用户的文件存到磁盘硬件中&#xff0c;因为即使计算机断电了&#…

Docker 安装 Redis 容器

系列文章目录 文章目录 系列文章目录前言1 获取redis镜像2 创建和部署redis容器3 查看redis是否启动成功4 使用Redis客户端验证连接总结 前言 搭建环境&#xff1a; ubuntu22.04.05 docker redis: 7.0.10 测试环境&#xff1a; windows: win11 Redis测试客户端&#xff1a;Ti…

Spring Boot 3.X 下Redis缓存的尝试(二):自动注解实现自动化缓存操作

前言 上文我们做了在Spring Boot下对Redis的基本操作&#xff0c;如果频繁对Redis进行操作而写对应的方法显示使用注释更会更高效&#xff1b; 比如&#xff1a; 依之前操作对一个业务进行定入缓存需要把数据拉取到后再定入&#xff1b; 而今天我们可以通过注释的方式不需要额外…

【Linux】Ubuntu 20.04 英文系统显示中文字体异常

英文系统显示中文字体异常 新安装的 Ubuntu 20.04 英文系统&#xff0c;显示中文字体有些奇怪&#xff0c;比如在谷歌浏览器中中文字体显示效果如下 参考 英文版ubuntu默认中文显示很奇怪 解决方案 - dbxxx - 博客园 编辑文件 sudo gedit /etc/fonts/conf.avail/64-languag…

每天总结一个html标签——a标签

文章目录 一、定义与使用说明二、支持的属性三、支持的事件四、默认样式五、常见用法1. 文本链接2. 图片链接3. 导航栏 在前端开发中&#xff0c;a标签&#xff08;锚点标签&#xff09;是最常用的HTML标签之一&#xff0c;主要用于创建超链接&#xff0c;实现页面间的跳转或下…

Day10

1. ArrayList和LinkedList的区别&#xff1f; 底层结构&#xff1a;ArrayList 是基于动态数组实现&#xff0c;支持索引快速访问&#xff1b;LinkedList 是基于双向链表实现&#xff0c;依赖指针访问前后元素。插入与删除效率&#xff1a;在尾部操作时&#xff0c;两者性能相近…

Flask + Celery 应用

目录 Flask Celery 应用项目结构1. 创建app.py2. 创建tasks.py3. 创建celery_worker.py4. 创建templates目录和index.html运行应用测试文件 Flask Celery 应用 对于Flask与Celery结合的例子&#xff0c;需要创建几个文件。首先安装必要的依赖&#xff1a; pip install flas…

鸿蒙电脑会在国内逐渐取代windows电脑吗?

点击上方关注 “终端研发部” 设为“星标”&#xff0c;和你一起掌握更多数据库知识 10年内应该不会 用Windows、MacOS操作系统的后果是你的个人信息可能会被美国FBI看到&#xff0c;但绝大多数人的信息FBI没兴趣去看 你用某家公司的电脑系统,那就得做好被某些人监视的下场,相信…

安全态势感知中的告警误报思考

如果说2020年还是小打小闹&#xff0c;那么2021年无疑是杀疯了&#xff0c;我带着我的误报识别系统和事件专家系统在流量态势感知领域杀疯了。先说说这个误报识别系统&#xff0c;我创新性的定义了灰色事件&#xff0c;认为告警不是非黑即白的&#xff0c;而是需要持续评估的&a…

电脑wifi显示已禁用怎么点都无法启用

一、重启路由器与电脑 有时候&#xff0c;简单的重启可以解决很多小故障。试着先断开电源让路由器休息一会儿再接通&#xff1b;对于电脑&#xff0c;则可选择重启系统看看情况是否有改善。 二、检查驱动程序 无线网卡驱动程序的问题也是导致WiFi无法启用的常见原因之一。我…