红外图像绝缘子识别数据集

红外图像绝缘子识别数据集,数据集一共919张图片,标注为voc格式,可以转yolo格式

数据集名称

红外图像绝缘子识别数据集 (Infrared Insulator Recognition Dataset, IIRD)

数据集描述

IIRD是一个专为电气工程领域设计的小规模红外图像数据集,特别适用于绝缘子的检测和识别任务。该数据集包含919张高质量的红外图像,每张图像中都标注了绝缘子的位置信息。所有标签以PASCAL VOC格式(XML)提供,并且可以转换为YOLO格式(TXT),方便直接用于基于YOLO的目标检测模型训练。数据集涵盖了多种环境和条件下的绝缘子图像,确保了模型在实际应用中的鲁棒性。

数据规模

  • 总样本数量:919张图像
  • 类别数量:1个类别(绝缘子)
  • 标签格式:PASCAL VOC格式 (XML),可转换为YOLO格式 (TXT)
  • 数据集大小:根据图像分辨率和压缩情况而定

图像特性

  • 多样化场景:数据集中包括变电站、输电线路等多种环境下的图像。
  • 多变环境:图像拍摄于不同的时间点(白天、夜间),保证了算法对光照变化的适应能力。
  • 高质量图像:所有图像均为高分辨率,确保细节清晰,有助于提高模型的识别精度。
  • 真实场景:图像均为实际拍摄,未经过任何数据增强处理,确保了数据的真实性和多样性。
  • 稀有数据:红外图像在电力领域相对较少,该数据集提供了宝贵的训练资源。

类别列表

  1. 绝缘子 (Insulator)

应用场景

  • 电力巡检:辅助无人机或机器人进行电力设备巡检,自动检测绝缘子的状态。
  • 故障诊断:通过分析红外图像,快速发现绝缘子的热缺陷或其他异常情况。
  • 维护规划:支持电力公司的维护计划,优化检修周期和资源配置。
  • 安全监控:提高电力设施的安全监控水平,预防潜在的故障和事故。

数据集结构

一个典型的文件夹结构可能如下所示:

1infrared_insulator_recognition_dataset/
2├── images/
3│   ├── img_00001.jpg
4│   ├── img_00002.jpg
5│   └── ...
6├── annotations/
7│   ├── img_00001.xml
8│   ├── img_00002.xml
9│   └── ...
10├── class_names.txt  # 类别名称文件
11├── train.txt  # 训练集图像路径列表
12├── val.txt  # 验证集图像路径列表
13└── test.txt  # 测试集图像路径列表

标签格式说明

  • PASCAL VOC格式
    • 每个图像都有一个对应的XML文件,包含每个对象的类别名及其对应的边界框坐标(xmin, ymin, xmax, ymax)。

示例

假设一张图片img_00001.jpg的分辨率为640x480像素,其对应的PASCAL VOC格式标签文件img_00001.xml内容如下:

1<annotation>
2    <folder>images</folder>
3    <filename>img_00001.jpg</filename>
4    <size>
5        <width>640</width>
6        <height>480</height>
7        <depth>3</depth>
8    </size>
9    <object>
10        <name>insulator</name>
11        <bndbox>
12            <xmin>100</xmin>
13            <ymin>150</ymin>
14            <xmax>200</xmax>
15            <ymax>250</ymax>
16        </bndbox>
17    </object>
18    <!-- 更多对象... -->
19</annotation>

转换为YOLO格式

您可以使用以下Python脚本来将PASCAL VOC格式的标签转换为YOLO格式。

脚本: VOC to YOLO转换
1import os
2import xml.etree.ElementTree as ET
3
4def convert_voc_to_yolo(voc_dir, yolo_dir, class_names):
5    if not os.path.exists(yolo_dir):
6        os.makedirs(yolo_dir)
7    
8    for filename in os.listdir(voc_dir):
9        if not filename.endswith('.xml'):
10            continue
11        
12        tree = ET.parse(os.path.join(voc_dir, filename))
13        root = tree.getroot()
14        
15        image_width = int(root.find('size/width').text)
16        image_height = int(root.find('size/height').text)
17        
18        yolo_filename = filename.replace('.xml', '.txt')
19        with open(os.path.join(yolo_dir, yolo_filename), 'w') as f:
20            for obj in root.findall('object'):
21                name = obj.find('name').text
22                if name not in class_names:
23                    continue
24                
25                class_id = class_names.index(name)
26                
27                bbox = obj.find('bndbox')
28                xmin = int(bbox.find('xmin').text)
29                ymin = int(bbox.find('ymin').text)
30                xmax = int(bbox.find('xmax').text)
31                ymax = int(bbox.find('ymax').text)
32                
33                x_center = (xmin + xmax) / 2.0 / image_width
34                y_center = (ymin + ymax) / 2.0 / image_height
35                width = (xmax - xmin) / image_width
36                height = (ymax - ymin) / image_height
37                
38                f.write(f"{class_id} {x_center} {y_center} {width} {height}\n")
39
40# 使用示例
41voc_dir = 'path/to/infrared_insulator_recognition_dataset/annotations'
42yolo_dir = 'path/to/infrared_insulator_recognition_dataset/labels'
43class_names = ['insulator']
44
45convert_voc_to_yolo(voc_dir, yolo_dir, class_names)

数据准备

为了使用此数据集来训练基于YOLO格式的目标检测模型,您需要执行以下步骤:

  1. 确认数据集划分:确保训练集、验证集和测试集已经正确划分。
  2. 加载数据:根据所选的框架(如YOLOv5/v7或YOLOv8)加载数据。
  3. 设置配置文件:根据所选的框架设置相应的配置文件,指定类别数和其他相关参数。
  4. 开始训练过程:启动训练过程并监控模型的性能。

工具和脚本

您可以利用Python库如torchvisionPyTorch来加载和处理数据。以下是一些常用脚本的示例代码,包括数据加载、模型训练和评估。

脚本1: 数据加载
1import os
2from torchvision import transforms
3from torch.utils.data import Dataset, DataLoader
4import cv2
5
6class InfraredInsulatorDataset(Dataset):
7    def __init__(self, image_dir, label_dir, transform=None):
8        self.image_dir = image_dir
9        self.label_dir = label_dir
10        self.transform = transform
11        self.images = [f for f in os.listdir(image_dir) if f.endswith('.jpg') or f.endswith('.png')]
12    
13    def __len__(self):
14        return len(self.images)
15    
16    def __getitem__(self, idx):
17        img_path = os.path.join(self.image_dir, self.images[idx])
18        label_path = os.path.join(self.label_dir, self.images[idx].replace('.jpg', '.txt').replace('.png', '.txt'))
19        
20        image = cv2.imread(img_path)
21        image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
22        
23        with open(label_path, 'r') as f:
24            labels = f.readlines()
25        
26        bboxes = []
27        for label in labels:
28            class_id, x_center, y_center, width, height = map(float, label.strip().split())
29            bboxes.append([class_id, x_center, y_center, width, height])
30        
31        if self.transform:
32            transformed = self.transform(image=image, bboxes=bboxes)
33            image = transformed['image']
34            bboxes = transformed['bboxes']
35        
36        return image, bboxes
37
38def load_data(data_dir, batch_size=32):
39    transform = transforms.Compose([
40        transforms.ToTensor(),
41        transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])
42    ])
43    
44    train_dataset = InfraredInsulatorDataset(os.path.join(data_dir, 'images'), os.path.join(data_dir, 'labels'), transform=transform)
45    val_dataset = InfraredInsulatorDataset(os.path.join(data_dir, 'images'), os.path.join(data_dir, 'labels'), transform=transform)
46    test_dataset = InfraredInsulatorDataset(os.path.join(data_dir, 'images'), os.path.join(data_dir, 'labels'), transform=transform)
47    
48    train_loader = DataLoader(train_dataset, batch_size=batch_size, shuffle=True, num_workers=4)
49    val_loader = DataLoader(val_dataset, batch_size=batch_size, shuffle=False, num_workers=4)
50    test_loader = DataLoader(test_dataset, batch_size=batch_size, shuffle=False, num_workers=4)
51    
52    return train_loader, val_loader, test_loader
53
54# 使用示例
55data_dir = 'path/to/infrared_insulator_recognition_dataset'
56train_loader, val_loader, test_loader = load_data(data_dir)
脚本2: 模型训练
1import torch
2import torch.nn as nn
3import torch.optim as optim
4from ultralytics import YOLO
5
6def train_model(model, train_loader, val_loader, num_epochs=10, learning_rate=0.001):
7    device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
8    model.to(device)
9    
10    optimizer = optim.Adam(model.parameters(), lr=learning_rate)
11    
12    for epoch in range(num_epochs):
13        model.train()
14        running_loss = 0.0
15        for images, targets in train_loader:
16            images = images.to(device)
17            targets = [{k: v.to(device) for k, v in t.items()} for t in targets]
18            
19            optimizer.zero_grad()
20            loss_dict = model(images, targets)
21            losses = sum(loss for loss in loss_dict.values())
22            losses.backward()
23            optimizer.step()
24            
25            running_loss += losses.item()
26        
27        print(f'Epoch {epoch+1}/{num_epochs}, Loss: {running_loss/len(train_loader)}')
28        
29        # 验证
30        model.eval()
31        with torch.no_grad():
32            for images, targets in val_loader:
33                images = images.to(device)
34                targets = [{k: v.to(device) for k, v in t.items()} for t in targets]
35                outputs = model(images)
36                # 进一步处理验证结果,计算mAP等指标
37                # ...
38
39# 使用示例
40model = YOLO('yolov8m.yaml')  # 加载YOLOv8m模型
41train_loader, val_loader, _ = load_data('path/to/infrared_insulator_recognition_dataset')
42train_model(model, train_loader, val_loader)
脚本3: 模型评估
1import torch
2from torch.utils.data import DataLoader
3
4def evaluate_model(model, test_loader):
5    device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
6    model.to(device)
7    model.eval()
8    
9    correct = 0
10    total = 0
11    with torch.no_grad():
12        for images, targets in test_loader:
13            images = images.to(device)
14            targets = [{k: v.to(device) for k, v in t.items()} for t in targets]
15            outputs = model(images)
16            # 进一步处理测试结果,计算mAP等指标
17            # ...
18
19# 使用示例
20test_loader = load_data('path/to/infrared_insulator_recognition_dataset')[2]
21evaluate_model(model, test_loader)

项目介绍

项目名称

基于YOLOv8的红外图像绝缘子检测系统

项目描述

该项目旨在开发一个基于YOLOv8的红外图像绝缘子检测系统,能够准确地识别和定位电力设施中的绝缘子。通过使用上述IIRD数据集,我们将训练一个高效的卷积神经网络(CNN)模型,实现对绝缘子的旋转框检测任务。项目的主要目标是提高绝缘子检测的准确性和鲁棒性,同时提供易于部署和使用的接口,方便集成到现有的电力巡检和故障诊断系统中。

项目目标

  • 高准确性:在测试集上达到较高的平均精度均值 (mAP)。
  • 鲁棒性:在不同光照条件和环境背景下保持良好的检测效果。
  • 易用性:提供易于部署和使用的接口,方便集成到现有的系统中。
  • 可扩展性:支持未来添加新的检测类别。

项目结构

1infrared_insulator_detection_project/
2├── data/
3│   ├── infrared_insulator_recognition_dataset/
4│   │   ├── images/
5│   │   ├── annotations/  # 原始VOC格式标签
6│   │   ├── labels/  # 转换后的YOLO格式标签
7│   │   ├── class_names.txt
8│   │   ├── train.txt
9│   │   ├── val.txt
10│   │   └── test.txt
11├── models/
12│   ├── yolov8m.py  # YOLOv8m模型定义
13├── trainers/
14│   ├── trainer.py  # 训练器
15├── utils/
16│   ├── utils.py  # 工具函数
17├── scripts/
18│   ├── load_data.py
19│   ├── train_model.py
20│   ├── evaluate_model.py
21├── notebooks/
22│   ├── data_exploration.ipynb  # 数据探索笔记本
23│   ├── model_training.ipynb  # 模型训练笔记本
24│   ├── model_evaluation.ipynb  # 模型评估笔记本
25├── requirements.txt  # 依赖库
26└── README.md  # 项目说明文件

项目流程

  1. 数据准备

    • 确认数据集已划分为训练集、验证集和测试集。
    • 使用load_data.py脚本加载数据。
    • 将VOC格式的标签转换为YOLO格式。
  2. 数据探索

    • 使用data_exploration.ipynb笔记本探索数据集,了解数据分布和质量。
  3. 模型训练

    • 使用train_model.py脚本训练模型。
    • 根据需要调整超参数和模型配置。
  4. 模型评估

    • 使用evaluate_model.py脚本评估模型性能。
    • 生成可视化结果,比较不同模型的表现。
  5. 推理和应用

    • 将模型集成到实际应用中,实现绝缘子检测功能。
  6. 结果可视化

    • 使用可视化工具展示模型的检测结果。

改进方向

如果您已经使用上述方法对该数据集进行了训练,并且认为还有改进空间,以下是一些可能的改进方向:

  1. 数据增强

    • 引入数据增强策略,例如旋转、翻转、缩放、颜色抖动等,以提高模型的泛化能力。
    • 使用混合增强技术,如MixUp、CutMix等,以增加数据多样性。
  2. 模型优化

    • 调整模型超参数,例如学习率、批量大小、优化器等,以找到最佳配置。
    • 尝试使用不同的网络架构,例如YOLOv8的不同版本(s, m, l, x),以提高检测精度。
    • 引入注意力机制,如SENet、CBAM等,以增强模型对关键区域的关注。
  3. 损失函数

    • 尝试使用不同的损失函数,例如Focal Loss、Label Smoothing等,以改善检测效果。
    • 结合多种损失函数,例如交叉熵损失和正则化损失的组合,以平衡不同类型的任务。
  4. 后处理

    • 使用非极大值抑制(NMS)等后处理技术,以减少误检和漏检。
    • 优化边界框回归,提高定位精度。
  5. 迁移学习

    • 使用预训练模型进行微调,利用大规模数据集(如COCO)上的预训练权重,加快收敛速度并提高性能。
  6. 集成学习

    • 使用多个模型进行集成学习,通过投票或加权平均的方式提高最终的检测效果。
相关推荐
从懒虫到爬虫5 小时前
变压器设备漏油数据集 voc txt
数据集·qq767172261·变压器设备漏油数据集
从懒虫到爬虫16 小时前
变电站缺陷数据集8307张,带xml标注和txt标注,可以直接用于yolo训练
数据集·qq767172261·变电站缺陷数据集
从懒虫到爬虫18 小时前
滚动轴承故障诊断、预测与分类综合数据集
数据集·故障诊断·获取qq767172261·,预测、分类·滚动轴承
从懒虫到爬虫1 天前
无人机视角应急救援(人)数据集
数据集·无人机视角·应急救援·qq767172261
从懒虫到爬虫1 天前
密集行人数据集 CrowdHumanvoc和yolo两种格式,yolo可以直接使用train val test已经划分好有yolov8训练200轮模型
数据集·qq767172261·密集行人
从懒虫到爬虫2 天前
无人机视角下的车辆数据集
数据集·车辆检测·无人机视角·qq767172261·车辆数据集
从懒虫到爬虫3 天前
电力施工作业安全行为检测图像数据集
数据集·qq767172261·电力行业施工数据集·行为检测
从懒虫到爬虫3 天前
遥感图像目标检测数据集-DOTA数据集
数据集·qq767172261·dota数据集
从懒虫到爬虫3 天前
水下目标检测数据集 urpc2021
数据集·水下目标检测·qq767172261