无人机视角电力巡检资产检测与异常判别数据集
无人机视角电力巡检资产检测与异常判别,资产检测关注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类电力设施目标:
- Spiral Damper - 螺旋阻尼器
- Stockbridge Damper - 斯托克布里奇阻尼器
- Glass Insulator - 玻璃绝缘子
- Glass Insulator Big Shackle - 玻璃绝缘子大扣环
- Glass Insulator Small Shackle - 玻璃绝缘子小扣环
- Glass Insulator Tower Shackle - 玻璃绝缘子塔扣环
- Lightning Rod Shackle - 防雷接地线扣环
- Lightning Rod Suspension - 防雷悬挂装置
- Tower ID Plate - 塔身标识牌
- Polymer Insulator - 聚合物绝缘子
- Polymer Insulator Lower Shackle - 聚合物绝缘子下部扣环
- Polymer Insulator Upper Shackle - 聚合物绝缘子上部扣环
- Polymer Insulator Tower Shackle - 聚合物绝缘子塔扣环
- Spacer - 隔板
- Vari-grip - 可变夹具
- Yoke - 铁箍
- Yoke Suspension - 铁箍悬挂装置
主要关注以下5类异常:
- Yoke Suspension - 铁箍悬挂装置 (正常/生锈)
- Glass Insulator - 玻璃绝缘子 (正常/缺失盖子)
- Polymer Insulator Upper Shackle - 聚合物绝缘子上部扣环 (正常/生锈)
- Lightning Rod Suspension - 防雷悬挂装置 (正常/生锈)
- 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模型进行推理,并显示和保存推理结果。您可以根据实际需求进一步扩展和修改这段代码,以适应您的具体应用场景。如果您需要使用其他模型进行更高级的功能,如模型微调或增量训练,可以参考相应模型的官方文档来进行相应的配置和操作。