遥感图像风力发电机检测,共9700张图像,采用voc格式标注
遥感图像风力发电机检测数据集
数据集描述
该数据集是一个专门用于遥感图像中风力发电机检测的数据集,旨在帮助研究人员和开发者训练和评估基于深度学习的目标检测模型。数据集中的图像涵盖了多种环境下的风力发电机,包括不同的地理区域、天气条件和背景复杂度,确保了模型在不同场景下的鲁棒性。
数据规模
- 总样本数量:9700张遥感图像
- 标注目标:所有图像都带有详细的标注信息,采用VOC(PASCAL VOC)格式进行标注,适用于训练和验证目标检测模型。
目标类别及数量
数据集中包含以下目标类别:
- 风力发电机 (Wind Turbine): 具体的实例数量未提供,但可以假设每个图像中至少有一个风力发电机实例。
图像分辨率
- 高分辨率遥感图像:具体的分辨率可能因卫星或航拍设备而异,但均为高分辨率图像,以确保风力发电机的清晰可见。
标注格式
数据集中的标注信息采用了PASCAL VOC格式的XML文件。每个图像都有一个对应的标签文件,记录了每个目标的位置信息(边界框坐标)和类别标签。这种格式可以直接用于支持VOC格式的目标检测框架,如Faster R-CNN、YOLO等。
数据集结构
典型的数据集目录结构如下:
1wind_turbine_detection_dataset/
2├── JPEGImages/
3│ ├── img_00001.jpg
4│ ├── img_00002.jpg
5│ └── ...
6├── Annotations/
7│ ├── img_00001.xml
8│ ├── img_00002.xml
9│ └── ...
10├── ImageSets/
11│ ├── Main/
12│ │ ├── train.txt
13│ │ ├── val.txt
14│ │ └── test.txt
15└── README.md # 数据集说明文件
应用场景
该数据集可以用于以下应用场景:
- 风电场监控:实时监测风力发电机场地内的风力发电机状态,及时发现异常情况。
- 维护与检修:辅助技术人员进行定期检查,提高维护效率。
- 故障诊断:通过分析图像数据,快速定位故障位置,减少停机时间。
- 科研分析:用于研究风力发电机检测算法和技术的发展趋势,特别是在遥感图像中的应用。
示例代码
以下是一个使用Python和相关库(如OpenCV、PIL等)来加载和展示数据集的简单示例代码:
1import os
2import cv2
3import numpy as np
4from PIL import Image
5import xml.etree.ElementTree as ET
6
7# 数据集路径
8dataset_path = 'path/to/wind_turbine_detection_dataset/'
9
10# 加载图像和标签
11def load_image_and_label(image_path, annotation_path):
12 # 读取图像
13 image = Image.open(image_path).convert('RGB')
14
15 # 解析XML标注文件
16 tree = ET.parse(annotation_path)
17 root = tree.getroot()
18 objects = []
19 for obj in root.findall('object'):
20 class_name = obj.find('name').text
21 bndbox = obj.find('bndbox')
22 xmin = int(bndbox.find('xmin').text)
23 ymin = int(bndbox.find('ymin').text)
24 xmax = int(bndbox.find('xmax').text)
25 ymax = int(bndbox.find('ymax').text)
26 objects.append([xmin, ymin, xmax, ymax, class_name])
27 return image, objects
28
29# 展示图像
30def show_image_with_boxes(image, boxes):
31 img = np.array(image)
32 for box in boxes:
33 xmin, ymin, xmax, ymax, class_name = box
34 cv2.rectangle(img, (xmin, ymin), (xmax, ymax), (0, 255, 0), 2)
35 cv2.putText(img, class_name, (xmin, ymin - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 0), 2)
36 cv2.imshow('Image with Boxes', img)
37 cv2.waitKey(0)
38 cv2.destroyAllWindows()
39
40# 主函数
41if __name__ == "__main__":
42 subset = 'train' # 可以选择 'val' 或 'test'
43 images_dir = os.path.join(dataset_path, 'JPEGImages')
44 annotations_dir = os.path.join(dataset_path, 'Annotations')
45 set_file = os.path.join(dataset_path, 'ImageSets', 'Main', f'{subset}.txt')
46
47 # 获取图像列表
48 with open(set_file, 'r') as f:
49 image_files = [line.strip() + '.jpg' for line in f.readlines()]
50
51 # 随机选择一张图像
52 selected_image = np.random.choice(image_files)
53 image_path = os.path.join(images_dir, selected_image)
54 annotation_path = os.path.join(annotations_dir, selected_image.replace('.jpg', '.xml'))
55
56 # 加载图像和标签
57 image, boxes = load_image_and_label(image_path, annotation_path)
58
59 # 展示带有标注框的图像
60 show_image_with_boxes(image, boxes)
这段代码展示了如何加载图像和其对应的PASCAL VOC XML标注文件,并在图像上绘制边界框和类别标签。您可以根据实际需求进一步扩展和修改这段代码,以适应您的具体应用场景。
示例代码:使用预训练模型进行推理
以下是使用预训练模型进行推理的示例代码。这里我们假设您使用的是基于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
7
8# 数据集路径
9dataset_path = 'path/to/wind_turbine_detection_dataset/'
10subset = 'test' # 可以选择 'train' 或 'val'
11
12# 加载预训练模型
13model = torchvision.models.detection.fasterrcnn_resnet50_fpn(pretrained=True)
14in_features = model.roi_heads.box_predictor.cls_score.in_features
15model.roi_heads.box_predictor = FastRCNNPredictor(in_features, num_classes=2) # 假设只有背景和风力发电机两个类别
16weights_path = 'path/to/pretrained/fasterrcnn_weights.pth' # 替换成实际的预训练模型路径
17model.load_state_dict(torch.load(weights_path))
18model.eval()
19
20# 主函数
21if __name__ == "__main__":
22 images_dir = os.path.join(dataset_path, 'JPEGImages')
23 set_file = os.path.join(dataset_path, 'ImageSets', 'Main', f'{subset}.txt')
24
25 # 获取图像列表
26 with open(set_file, 'r') as f:
27 image_files = [line.strip() + '.jpg' for line in f.readlines()]
28
29 # 随机选择一张图像
30 selected_image = np.random.choice(image_files)
31 image_path = os.path.join(images_dir, selected_image)
32
33 # 读取并预处理图像
34 image = Image.open(image_path).convert('RGB')
35 transform = torchvision.transforms.Compose([
36 torchvision.transforms.ToTensor(),
37 ])
38 image_tensor = transform(image).unsqueeze(0)
39
40 # 使用预训练模型进行推理
41 with torch.no_grad():
42 predictions = model(image_tensor)
43
44 # 处理预测结果
45 boxes = predictions[0]['boxes'].cpu().numpy()
46 labels = predictions[0]['labels'].cpu().numpy()
47 scores = predictions[0]['scores'].cpu().numpy()
48
49 # 过滤低置信度的结果
50 threshold = 0.5
51 high_confidence = scores > threshold
52 boxes = boxes[high_confidence]
53 labels = labels[high_confidence]
54
55 # 在图像上绘制边界框
56 img = np.array(image)
57 for box, label in zip(boxes, labels):
58 if label == 1: # 假设风力发电机的类别ID为1
59 xmin, ymin, xmax, ymax = map(int, box)
60 cv2.rectangle(img, (xmin, ymin), (xmax, ymax), (0, 255, 0), 2)
61 cv2.putText(img, 'Wind Turbine', (xmin, ymin - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 0), 2)
62
63 # 显示结果
64 cv2.imshow('Image with Boxes', img)
65 cv2.waitKey(0)
66 cv2.destroyAllWindows()
这段代码展示了如何使用预训练的Faster R-CNN模型进行推理,并显示和保存推理结果。您可以根据实际需求进一步扩展和修改这段代码,以适应您的具体应用场景。如果您需要使用其他模型进行更高级的功能,如模型微调或增量训练,可以参考相应模型的官方文档来进行相应的配置和操作。