无人机视角电力巡检资产检测与异常判别数据集

无人机视角电力巡检资产检测与异常判别,资产检测关注17类目标,共10000余张无人机图像,json方式标注,类别如下:
1.Spiral Damper - 螺旋阻尼器
2.Stockbridge Damper - 斯托克布里奇阻尼器
3.Glass Insulator - 玻璃绝缘子
4.Glass Insulator Big Shackle - 玻璃绝缘子大扣环
5.Glass Insulator Small Shackle - 玻璃绝缘子小扣环
6.Glass Insulator Tower Shackle - 玻璃绝缘子塔扣环
7.Lightning Rod Shackle - 防雷接地线扣环
8.Lightning Rod Suspension - 防雷悬挂装置
9.Tower ID Plate - 塔身标识牌
10.Polymer Insulator - 聚合物绝缘子
11.Polymer Insulator Lower Shackle - 聚合物绝缘子下部扣环
12.Polymer Insulator Upper Shackle - 聚合物绝缘子上部扣环
13.Polymer Insulator Tower Shackle - 聚合物绝缘子塔扣环
14.Spacer - 隔板
15.Vari-grip - 可变夹具
16.Yoke - 铁箍
17.Yoke Suspension - 铁箍悬挂装置

主要关注以下5类异常,11000余张图像
1 Yoke Suspension(正常/生锈)、2 Glass Insulator(正常/缺失盖子)、3 Polymer Insulator Upper Shackle(正常/生锈)、
4 Lightning Rod Suspension(正常/生锈)、以及 5 Vari-grip(正常/鸟巢/生锈)

数据集名称

无人机视角电力巡检资产检测与异常判别数据集

数据集描述

该数据集是一个专门用于无人机视角下的电力巡检任务的数据集,旨在帮助研究人员和开发者训练和评估基于深度学习的目标检测和异常判别模型。数据集中的图像涵盖了多种电力设施及其部件,并详细标注了17类目标及其中5类关键部件的正常状态和异常状态。这些图像由无人机拍摄,具有高分辨率,能够清晰地展示电力设施的细节。

数据规模
  • 总样本数量:超过21000张无人机图像(包括10000余张资产检测图像和11000余张异常判别图像)
  • 数据量:具体大小未提供,但可以假设在GB级别
  • 分辨率:具体的分辨率可能因无人机拍摄高度而异,但均为高分辨率图像,以确保电力设施的细节清晰。
  • 标注目标:所有图像都带有详细的标注信息,采用标准JSON格式进行标注,适用于训练和验证目标检测和异常判别模型。
目标类别及数量

数据集中包含以下17类电力设施目标:

  1. Spiral Damper - 螺旋阻尼器
  2. Stockbridge Damper - 斯托克布里奇阻尼器
  3. Glass Insulator - 玻璃绝缘子
  4. Glass Insulator Big Shackle - 玻璃绝缘子大扣环
  5. Glass Insulator Small Shackle - 玻璃绝缘子小扣环
  6. Glass Insulator Tower Shackle - 玻璃绝缘子塔扣环
  7. Lightning Rod Shackle - 防雷接地线扣环
  8. Lightning Rod Suspension - 防雷悬挂装置
  9. Tower ID Plate - 塔身标识牌
  10. Polymer Insulator - 聚合物绝缘子
  11. Polymer Insulator Lower Shackle - 聚合物绝缘子下部扣环
  12. Polymer Insulator Upper Shackle - 聚合物绝缘子上部扣环
  13. Polymer Insulator Tower Shackle - 聚合物绝缘子塔扣环
  14. Spacer - 隔板
  15. Vari-grip - 可变夹具
  16. Yoke - 铁箍
  17. Yoke Suspension - 铁箍悬挂装置

主要关注以下5类异常:

  1. Yoke Suspension - 铁箍悬挂装置 (正常/生锈)
  2. Glass Insulator - 玻璃绝缘子 (正常/缺失盖子)
  3. Polymer Insulator Upper Shackle - 聚合物绝缘子上部扣环 (正常/生锈)
  4. Lightning Rod Suspension - 防雷悬挂装置 (正常/生锈)
  5. Vari-grip - 可变夹具 (正常/鸟巢/生锈)

具体的每个类别的实例数量未提供,但可以假设每种类别都有足够的实例来支持模型训练和验证。

图像特性
  • 高分辨率可见光影像:图像由无人机拍摄,具有较高的空间分辨率,确保了电力设施细节的清晰度。
  • 多样化的电力设施环境:覆盖了不同地理位置、天气条件和背景复杂度的电力设施场景。
  • 丰富的背景信息:图像中包含了复杂的自然背景和其他电力设施部件,增加了检测和异常判别的难度。
标注格式

数据集中的标注信息采用了标准的JSON格式文件。每个图像都有一个对应的标签文件,记录了每个目标的位置信息(边界框坐标)和类别标签。对于异常判别部分,还标注了每个目标的具体异常类型。这种格式可以直接用于多种目标检测框架,如Faster R-CNN、YOLO等。

数据集结构

典型的数据集目录结构如下:

1drone_power_inspection_dataset/
2├── images/
3│   ├── asset_detection/
4│   │   ├── img_00001.jpg
5│   │   ├── img_00002.jpg
6│   │   └── ...
7│   ├── anomaly_detection/
8│   │   ├── img_00001.jpg
9│   │   ├── img_00002.jpg
10│   │   └── ...
11├── annotations/
12│   ├── asset_detection/
13│   │   ├── img_00001.json
14│   │   ├── img_00002.json
15│   │   └── ...
16│   ├── anomaly_detection/
17│   │   ├── img_00001.json
18│   │   ├── img_00002.json
19│   │   └── ...
20└── README.md  # 数据集说明文件
应用场景

该数据集可以用于以下应用场景:

  • 电力设施巡检:通过无人机影像进行电力设施的自动检测和异常识别,提高巡检效率和准确性。
  • 智能监控系统:辅助智能监控系统,在各种复杂环境中进行电力设施检测和异常判别。
  • 维护与检修:帮助技术人员及时发现并处理电力设施的异常情况,减少故障风险。
  • 科研分析:用于研究目标检测和异常判别算法和技术的发展趋势,特别是在无人机视角下的应用。

示例代码

以下是一个使用Python和相关库(如OpenCV、PIL等)来加载和展示数据集的简单示例代码:

1import os
2import cv2
3import numpy as np
4from PIL import Image
5import json
6
7# 数据集路径
8dataset_path = 'path/to/drone_power_inspection_dataset/'
9
10# 加载图像和标注
11def load_image_and_labels(image_path, annotation_path):
12    # 读取图像
13    image = Image.open(image_path).convert('RGB')
14    
15    # 解析JSON标注文件
16    with open(annotation_path, 'r') as infile:
17        annotation = json.load(infile)
18        objects = []
19        for obj in annotation['objects']:
20            class_name = obj['class']
21            bbox = obj['bbox']
22            xmin, ymin, xmax, ymax = bbox
23            if 'anomaly' in obj:
24                anomaly_type = obj['anomaly']
25            else:
26                anomaly_type = 'normal'
27            objects.append([xmin, ymin, xmax, ymax, class_name, anomaly_type])
28    return image, objects
29
30# 展示图像和标注
31def show_image_with_boxes(image, boxes):
32    img = np.array(image)
33    for box in boxes:
34        xmin, ymin, xmax, ymax, class_name, anomaly_type = box
35        color = (0, 255, 0) if anomaly_type == 'normal' else (0, 0, 255)
36        cv2.rectangle(img, (xmin, ymin), (xmax, ymax), color, 2)
37        label = f'{class_name} ({anomaly_type})'
38        cv2.putText(img, label, (xmin, ymin - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.5, color, 2)
39    cv2.imshow('Image with Boxes', img)
40    cv2.waitKey(0)
41    cv2.destroyAllWindows()
42
43# 主函数
44if __name__ == "__main__":
45    subset = 'asset_detection'  # 可以选择 'anomaly_detection'
46    images_dir = os.path.join(dataset_path, 'images', subset)
47    annotations_dir = os.path.join(dataset_path, 'annotations', subset)
48    
49    # 获取图像列表
50    image_files = [f for f in os.listdir(images_dir) if f.endswith('.jpg')]
51    
52    # 随机选择一张图像
53    selected_image = np.random.choice(image_files)
54    image_path = os.path.join(images_dir, selected_image)
55    annotation_path = os.path.join(annotations_dir, selected_image.replace('.jpg', '.json'))
56    
57    # 加载图像和标注
58    image, boxes = load_image_and_labels(image_path, annotation_path)
59    
60    # 展示带有标注框的图像
61    show_image_with_boxes(image, boxes)

这段代码展示了如何加载图像和其对应的JSON标注文件,并在图像上绘制边界框和类别标签。您可以根据实际需求进一步扩展和修改这段代码,以适应您的具体应用场景。

示例代码:使用预训练模型进行推理

以下是使用预训练模型进行推理的示例代码。这里我们假设您使用的是基于Faster R-CNN的模型,但您可以根据需要选择其他支持VOC格式的模型。

1import torch
2import torchvision
3from torchvision.models.detection.faster_rcnn import FastRCNNPredictor
4import cv2
5import numpy as np
6from PIL import Image
7import json
8
9# 数据集路径
10dataset_path = 'path/to/drone_power_inspection_dataset/'
11subset = 'anomaly_detection'  # 可以选择 'asset_detection'
12
13# 加载预训练模型
14model = torchvision.models.detection.fasterrcnn_resnet50_fpn(pretrained=True)
15in_features = model.roi_heads.box_predictor.cls_score.in_features
16model.roi_heads.box_predictor = FastRCNNPredictor(in_features, num_classes=22)  # 17个类别 + 5个异常类别 + 背景
17weights_path = 'path/to/pretrained/fasterrcnn_weights.pth'  # 替换成实际的预训练模型路径
18model.load_state_dict(torch.load(weights_path))
19model.eval()
20
21# 主函数
22if __name__ == "__main__":
23    images_dir = os.path.join(dataset_path, 'images', subset)
24    set_file = os.path.join(dataset_path, 'annotations', subset, f'{subset}.txt')
25    
26    # 获取图像列表
27    with open(set_file, 'r') as f:
28        image_files = [line.strip() + '.jpg' for line in f.readlines()]
29    
30    # 随机选择一张图像
31    selected_image = np.random.choice(image_files)
32    image_path = os.path.join(images_dir, selected_image)
33    
34    # 读取并预处理图像
35    image = Image.open(image_path).convert('RGB')
36    transform = torchvision.transforms.Compose([
37        torchvision.transforms.ToTensor(),
38    ])
39    image_tensor = transform(image).unsqueeze(0)
40    
41    # 使用预训练模型进行推理
42    with torch.no_grad():
43        predictions = model(image_tensor)
44    
45    # 处理预测结果
46    boxes = predictions[0]['boxes'].cpu().numpy()
47    labels = predictions[0]['labels'].cpu().numpy()
48    scores = predictions[0]['scores'].cpu().numpy()
49    
50    # 过滤低置信度的结果
51    threshold = 0.5
52    high_confidence = scores > threshold
53    boxes = boxes[high_confidence]
54    labels = labels[high_confidence]
55    
56    # 在图像上绘制边界框
57    img = np.array(image)
58    
59    class_names = ['Background', 'Spiral Damper', 'Stockbridge Damper', 'Glass Insulator', 
60                   'Glass Insulator Big Shackle', 'Glass Insulator Small Shackle', 
61                   'Glass Insulator Tower Shackle', 'Lightning Rod Shackle', 
62                   'Lightning Rod Suspension', 'Tower ID Plate', 'Polymer Insulator', 
63                   'Polymer Insulator Lower Shackle', 'Polymer Insulator Upper Shackle', 
64                   'Polymer Insulator Tower Shackle', 'Spacer', 'Vari-grip', 'Yoke', 
65                   'Yoke Suspension', 'Yoke Suspension (Rust)', 'Glass Insulator (Missing Cap)', 
66                   'Polymer Insulator Upper Shackle (Rust)', 'Lightning Rod Suspension (Rust)', 
67                   'Vari-grip (Nest)', 'Vari-grip (Rust)']
68    
69    for box, label in zip(boxes, labels):
70        if label > 0:  # 忽略背景
71            xmin, ymin, xmax, ymax = map(int, box)
72            cv2.rectangle(img, (xmin, ymin), (xmax, ymax), (0, 255, 0), 2)
73            cv2.putText(img, class_names[label], (xmin, ymin - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 0), 2)
74    
75    # 显示结果
76    cv2.imshow('Image with Boxes', img)
77    cv2.waitKey(0)
78    cv2.destroyAllWindows()

这段代码展示了如何使用预训练的Faster R-CNN模型进行推理,并显示和保存推理结果。您可以根据实际需求进一步扩展和修改这段代码,以适应您的具体应用场景。如果您需要使用其他模型进行更高级的功能,如模型微调或增量训练,可以参考相应模型的官方文档来进行相应的配置和操作。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/428259.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

我与Linux的爱恋:进程优先级|进程切换

​ ​ 🔥个人主页:guoguoqiang. 🔥专栏:Linux的学习 文章目录 1.进程优先级1.什么是进程优先级?2.进程优先级的类型3.进程优先级的作用4.进程优先级的实现5.进程优先级的重要性6.查看系统进程7.修改进程优先级8.优先…

java踩坑

1.mybatis在idea可以正常运行,但是打jar包后,就报链接超时,可能是参数设置有问题,但是idea自动忽略了。 出问题的配置:(圈出来的地方乱码了,idea有纠错能力,它自动调整为正确的&…

【数据结构-差分】力扣1589. 所有排列中的最大和

有一个整数数组 nums ,和一个查询数组 requests ,其中 requests[i] [starti, endi] 。第 i 个查询求 nums[starti] nums[starti 1] … nums[endi - 1] nums[endi] 的结果 ,starti 和 endi 数组索引都是 从 0 开始 的。 你可以任意排列…

React学习笔记(三)——React 组件通讯

1. 组件通讯-概念 了解组件通讯的意义 大致步骤: 知道组件的特点知道组件通讯意义 具体内容: 组件的特点 组件是独立且封闭的单元,默认情况下,只能使用组件自己的数据在组件化过程中,通常会将一个完整的功能拆分成多…

影刀RPA实战:网页爬虫之苦瓜书籍数据

书籍常常被视为心灵的慰藉,因为它们能够在不同的层面上为人们提供支持和安慰。 1. 书籍对我们的重要性 书籍是人类知识的载体,也是智慧的结晶。它们不仅是学习的工具,更是人类心灵的慰藉。在忙碌的生活中,书籍能够提供知识、启发…

缓存穿透 问题(缓存空对象)

文章目录 1、缓存穿透2、缓存空对象3、AlbumInfoApiController --》getAlbumInfo()4、AlbumInfoServiceImpl --》getAlbumInfo()5、RedisConstant6、请求缓存不存在的数据 1、缓存穿透 缓存穿透带有恶意性,强调不存在的数据。 2、缓存空对象 3、AlbumInfoApiCont…

【PHP源码】匿名来信系统H5版本V1.0免费开源源码(含搭建教程)

你的匿名来信H5一封你的来信源码/表白祝福短信程序/往来信/传话短信源码支持邮件发信与手机短信发信“你的匿名来信”是最近某音上爆火的一个活动话题,可以通过H5网站,编辑自己想要对某人说的话或者祝福,网站会把您想说的发给您预留的号码&am…

云计算课程作业1

作业1 Xmanager连接 rhel连接 作业2 首先确认你的虚拟机设置的是NAT 1-3 然后打开这篇blog,并完成第一步和第二步 因为我们是NAT,所以不需要连接网桥,即跳过第三步,但是这里ping一下测试网络连接 2- 如果到这里你发现提示yum…

uniapp中使用echarts 完整步骤,包括报错以及解决方案

在我们日常可能会有小程序中要使用echarts,我今天总结了一下整个引入的步骤 首先echarts - DCloud 插件市场在插件市场里面导入进项目,我这边用的是vue3的以及主要开发小程序,就直接放我的案例了 按照上面的步骤,在样式部分这样…

详读西瓜书+南瓜书第3章——线性回归

在这里,我们来深入探讨线性模型的相关内容,这章涵盖了从基础线性回归到更复杂的分类任务模型。我们会逐步分析其数学公式和实际应用场景。 3.1 基本形式 线性模型的核心是通过属性的线性组合来预测结果。具体形式为: 其中,w 是…

JVM基础篇学习笔记

【注:本文章为自学笔记,仅供学习使用。】 一、JVM简介 JVM是Java虚拟机的缩写,本质上是运行在计算机上面的程序,作用是运行Java字节码文件。 1.1 JVM的功能 Java如果不做优化,则性能不如C/C,因为后者会…

上手一个RGBD深度相机:从原理到实践--ROS noetic+Astra S(中):RGB相机的标定和使用

前言 本教程涉及基础相机的原理,使用,标定,和读取。(注:本教程默认大家有ROS1基础,故不对程序进行详细解释) 上一期:[csdn博客]上手一个RGBD深度相机:从原理到实践–ROS noeticAstra S&#xf…

vue无法通过页面路径访问提示404,通过nginx配置处理

部署vue项目时,可以通过IP的方式访问主页,当进入特定页面在刷新时,因为浏览器通过URL地址进行请求,就提示404错误。 每次都需要重新从主页进入,这里是因为nginx配置的问题,在nginx里增加一行重定向的设置 …

mac命令行分卷压缩与合并

对当前目录内的文件压缩的同时分卷 //语法:zip -r -s 1m 压缩文件名.zip 当前路径 zip -r -s 1m split.zip . //解压 zip -s 0 split.zip --out unsplit.zip unzip unsplit.zip 将一个zip文件进行分卷 一个900k的压缩包名为hello.zip,将其分割为每500K一个zip zip - hello.…

usemeno和usecallback区别及使用场景

1. useMemo 用途: useMemo 用于缓存计算结果。它接受一个函数和依赖项数组,只有当依赖项发生变化时,才会重新计算该函数的返回值。否则,它会返回缓存的值。 返回值: useMemo 返回的是函数执行后的结果。 使用场景: 当一个计算量大的函数在每…

dev c++输出中文乱码解决 printf乱码解决

把编码换成utf8就行 打开eiditor options

SpringBoot实现OAuth客户端

背景 5 月份的时候,我实践并整理了一篇博客:SpringBoot搭建OAuth2,该博客完成之后,本以为能对OAuth2的认证机制更加清晰,但我却觉得自己更“迷惘”了。 抛开我在项目中积累的浅薄经验不谈,单从在网…

生信初学者教程(八):数据收集

文章目录 数据分布表达谱数据最终数据分布自动下载GSE14520下载GSE149614下载其它数据在确定研究疾病为肝细胞癌**(Liver Hepatocellular Carcinoma: HCC)**后,系统地进行了文献回顾,专注于搜索与HCC相关的荟萃分析文章,以获取该领域的研究动态和已有成果。为了支持的研究…

【专题】2024新能源企业“出海”系列之驶向中东、东南亚报告合集PDF分享(附原数据表)

原文链接: https://tecdat.cn/?p37698 在“双碳”目标引领下,中国新能源产业近年迅猛发展,新能源企业凭借技术革新、政策支持与市场驱动实现快速增长,在产业链完备、技术领先、生产效能及成本控制等方面优势显著。面对国内外环境…

2024年“华为杯”研赛第二十一届中国研究生数学建模竞赛解题思路|完整代码论文集合

我是Tina表姐,毕业于中国人民大学,对数学建模的热爱让我在这一领域深耕多年。我的建模思路已经帮助了百余位学习者和参赛者在数学建模的道路上取得了显著的进步和成就。现在,我将这份宝贵的经验和知识凝练成一份全面的解题思路与代码论文集合…