变电站电力设备目标检测数据集
数据集概览
- 图像数量: 1200张
- 类别数量: 15类
- 格式: YOLO格式,可以直接用于YOLO系列目标检测算法的模型训练。
检测目标分类
- 开式刀闸开关 (Open blade disconnect switch)
- 闭式刀闸开关 (Closed blade disconnect switch)
- 开式双联刀闸开关 (Open tandem disconnect switch)
- 闭式双联刀闸开关 (Closed tandem disconnect switch)
- 断路器 (Breaker)
- 熔断器隔离开关 (Fuse disconnect switch)
- 玻璃碟形绝缘子 (Glass disc insulator)
- 瓷针式绝缘子 (Porcelain pin insulator)
- 消音器/隔音罩 (Muffle)
- 避雷器 (Lightning arrester)
- 自动重合闸 (Recloser)
- 电力变压器 (Power transformer)
- 电流互感器 (Current transformer)
- 电压互感器 (Potential transformer)
- 三极隔离开关 (Tripolar disconnect switch)
数据集结构
//**YOLO格式 可直接用于YOLO系列目标检测算法模型训练
变电站电力设备目标检测数据集介绍
数据集概览
这是一个针对变电站内电力设备的目标检测数据集,共有1200张图像,涵盖了15种不同类型的电力设备。每张图片都使用YOLO格式进行了标注,可以直接用于训练和评估YOLO系列的目标检测模型。
数据集特点
- 多类别: 包含15种不同的电力设备类型,能够满足复杂场景下的目标检测需求。
- 高质量: 图像清晰,标注准确,确保了模型训练的质量。
- 实用性高: 专门针对变电站环境设计,适用于电力行业的监控与维护应用。
- 兼容性强: YOLO格式的标注文件使得该数据集可以无缝对接到YOLOv3、YOLOv4、YOLOv5等版本的目标检测框架中。
数据集结构
假设数据集文件夹结构如下:
substation_equipment_dataset/
├── images/
│ ├── train/
│ ├── val/
│ └── test/
├── labels/
│ ├── train/
│ ├── val/
│ └── test/
└── data.yaml
images/
目录下存放图片文件。labels/
目录下存放对应的YOLO格式标注文件。data.yaml
文件定义了数据集的配置信息。
data.yaml
文件示例
yaml
深色版本
# data.yaml
train: ./images/train
val: ./images/val
test: ./images/test
nc: 15
names: [
'open_blade_disconnect_switch',
'closed_blade_disconnect_switch',
'open_tandem_disconnect_switch',
'closed_tandem_disconnect_switch',
'breaker',
'fuse_disconnect_switch',
'glass_disc_insulator',
'porcelain_pin_insulator',
'muffle',
'lightning_arrester',
'recloser',
'power_transformer',
'current_transformer',
'potential_transformer',
'tripolar_disconnect_switch'
]
请注意,这里的nc
参数设置为15,表示有15个类别;names
参数则列出了这15个类别的名称。
关键代码示例
以下是一段Python代码示例,展示如何加载和查看数据集中的部分图片及其对应的YOLO格式标注,并在图片上绘制边界框:
import os
import cv2
import matplotlib.pyplot as plt
from matplotlib.patches import Rectangle
def load_image_and_label(image_path, label_path):
"""
加载图片和其对应的标注信息。
Parameters:
image_path (str): 图片路径。
label_path (str): 标注文件路径。
Returns:
img (numpy.ndarray): 加载的图片。
labels (list of dict): 标注信息列表。
"""
img = cv2.imread(image_path)
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) # 转换颜色空间
with open(label_path, 'r') as f:
lines = f.readlines()
labels = []
for line in lines:
class_id, x_center, y_center, width, height = map(float, line.strip().split())
labels.append({
'class_id': int(class_id),
'x_center': x_center,
'y_center': y_center,
'width': width,
'height': height
})
return img, labels
def draw_bounding_boxes(img, labels, class_names):
"""
在图片上绘制边界框。
Parameters:
img (numpy.ndarray): 图片。
labels (list of dict): 标注信息列表。
class_names (list of str): 类别名称列表。
"""
fig, ax = plt.subplots(1, figsize=(12, 12))
ax.imshow(img)
for label in labels:
x_center, y_center, width, height = label['x_center'], label['y_center'], label['width'], label['height']
h, w, _ = img.shape
x_min = int((x_center - width / 2) * w)
y_min = int((y_center - height / 2) * h)
x_max = int((x_center + width / 2) * w)
y_max = int((y_center + height / 2) * h)
rect = Rectangle((x_min, y_min), x_max - x_min, y_max - y_min, linewidth=2, edgecolor='r', facecolor='none')
ax.add_patch(rect)
class_name = class_names[label['class_id']]
ax.text(x_min, y_min, class_name, fontsize=12, color='red', backgroundcolor='white')
plt.axis('off')
plt.show()
if __name__ == "__main__":
data_dir = "/path/to/your/dataset"
train_images_dir = os.path.join(data_dir, "images/train")
train_labels_dir = os.path.join(data_dir, "labels/train")
# 选择任何一张训练集中的图片及其对应的标注信息
image_name = os.listdir(train_images_dir)[0] # 选择第一张图片
label_name = image_name.replace(".jpg", ".txt") # 假设图片是.jpg格式,标签文件名相同但扩展名为.txt
image_path = os.path.join(train_images_dir, image_name)
label_path = os.path.join(train_labels_dir, label_name)
img, labels = load_image_and_label(image_path, label_path)
print(f"Loaded image shape: {img.shape}")
print(f"Number of objects: {len(labels)}")
print(f"First object's label: {labels[0]}")
class_names = [
'open_blade_disconnect_switch',
'closed_blade_disconnect_switch',
'open_tandem_disconnect_switch',
'closed_tandem_disconnect_switch',
'breaker',
'fuse_disconnect_switch',
'glass_disc_insulator',
'porcelain_pin_insulator',
'muffle',
'lightning_arrester',
'recloser',
'power_transformer',
'current_transformer',
'potential_transformer',
'tripolar_disconnect_switch'
]
draw_bounding_boxes(img, labels, class_names)
这段代码将加载指定目录下的第一张图片及其对应的YOLO格式标注,并在图片上绘制边界框。通过这种方式,你可以直观地看到每个对象的位置以及它们所属的类别。此外,你还可以根据需要修改这段代码来处理其他格式的标注文件或进行更复杂的分析