Advertisement

如何训练自己的数据集之——太阳能光伏异常红外图像数据集

阅读量:

太阳能光伏异常红外图像数据集,20000张 12类 1类正常 裂纹,热斑数据集 阴影遮挡 污染 电池片故障 二极管故障 植被遮挡数据集太阳能光伏数据集 光伏红外图像数据集 光伏异常数据集 光伏异常红外

太阳能光伏异常红外图像数据集,20000张 12类 1类正常 制作了分类标签,用于光伏异常检测分类近红外图像,经过颜色映射转为热图,太阳能光伏数据集 光伏红外图像数据集 光伏异常数据集 光伏异常红外

太阳能光伏异常红外图像数据集,20000张
数据集包含11类异常,加正常类共12类
制作了分类标签,可用于光伏异常检测分类
近红外图像,经过颜色映射转为热图

  1. Cell: 单个电池片故障
  2. Cell-Multi: 多个电池片故障
  3. Cracking: 裂纹
  4. Diode: 二极管故障
  5. Diode-Multi: 多个二极管故障
  6. Hot-Spot: 热斑
  7. Hot-Spot-Multi: 多个热斑
  8. No-Anomaly: 没有任何异常
  9. Offline-Module: 整体离线模块
  10. Shadowing: 阴影遮挡
  11. Soiling: 污染
  12. Vegetation: 植被遮挡

这些图像都是近红外拍摄的,然后通过颜色映射转化为热图的形式。这样的转化有助于突出显示温度差异,这对于检测光伏板的异常情况非常有用,因为许多故障会导致局部过热或其他温度模式的变化。

此数据集已经进行了标注,因此可以直接用于机器学习和深度学习模型的训练,特别是那些专注于光伏系统健康监控和维护的应用。通过分析这些图像,研究者和工程师们可以开发出能自动识别和诊断光伏板潜在问题的系统,进而提高系统的可靠性和效率。

下面是一份使用Python和PyTorch编写的用于训练太阳能光伏异常检测模型的关键代码。假设你已经有了标注好的数据集,并且数据集已经按照标准的训练集、验证集和测试集进行了划分。

数据集准备

首先,我们需要创建一个自定义的数据加载器来处理数据集。

复制代码
 import torch

    
 import torch.nn as nn
    
 import torch.optim as optim
    
 from torch.utils.data import Dataset, DataLoader
    
 from torchvision import transforms
    
 from PIL import Image
    
 import os
    
 import pandas as pd
    
 import numpy as np
    
  
    
 class SolarPanelDataset(Dataset):
    
     def __init__(self, root_dir, transform=None):
    
     self.root_dir = root_dir
    
     self.transform = transform
    
     self.labels = []
    
     self.images = []
    
  
    
     # 假设数据集有一个CSV文件来存储标签
    
     annotations_file = os.path.join(root_dir, 'annotations.csv')
    
     self.annotations = pd.read_csv(annotations_file)
    
     
    
     for index, row in self.annotations.iterrows():
    
         img_path = os.path.join(root_dir, row['filename'])
    
         image = Image.open(img_path)
    
         self.images.append(image)
    
         self.labels.append(row['label'])
    
  
    
     def __len__(self):
    
     return len(self.annotations)
    
  
    
     def __getitem__(self, idx):
    
     if torch.is_tensor(idx):
    
         idx = idx.tolist()
    
  
    
     img = self.images[idx]
    
     label = self.labels[idx]
    
  
    
     if self.transform:
    
         img = self.transform(img)
    
  
    
     return img, label
    
  
    
 # 数据变换
    
 transform = transforms.Compose([
    
     transforms.Resize((224, 224)),
    
     transforms.ToTensor(),
    
     transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])
    
 ])
    
  
    
 # 创建数据加载器
    
 root_dir = 'path/to/your/dataset'
    
 dataset = SolarPanelDataset(root_dir=root_dir, transform=transform)
    
 train_loader = DataLoader(dataset, batch_size=32, shuffle=True)
    
    
    
    
    AI写代码

模型定义

接下来,定义一个基本的卷积神经网络(CNN)模型。

复制代码
 class SolarPanelClassifier(nn.Module):

    
     def __init__(self, num_classes=12):
    
     super(SolarPanelClassifier, self).__init__()
    
     self.features = nn.Sequential(
    
         nn.Conv2d(3, 64, kernel_size=3, padding=1),
    
         nn.ReLU(inplace=True),
    
         nn.MaxPool2d(kernel_size=2, stride=2),
    
  
    
         nn.Conv2d(64, 128, kernel_size=3, padding=1),
    
         nn.ReLU(inplace=True),
    
         nn.MaxPool2d(kernel_size=2, stride=2),
    
  
    
         nn.Conv2d(128, 256, kernel_size=3, padding=1),
    
         nn.ReLU(inplace=True),
    
         nn.MaxPool2d(kernel_size=2, stride=2),
    
  
    
         nn.Conv2d(256, 512, kernel_size=3, padding=1),
    
         nn.ReLU(inplace=True),
    
         nn.MaxPool2d(kernel_size=2, stride=2)
    
     )
    
  
    
     self.classifier = nn.Sequential(
    
         nn.Linear(512 * 7 * 7, 4096),
    
         nn.ReLU(True),
    
         nn.Dropout(),
    
         nn.Linear(4096, 4096),
    
         nn.ReLU(True),
    
         nn.Dropout(),
    
         nn.Linear(4096, num_classes)
    
     )
    
  
    
     def forward(self, x):
    
     x = self.features(x)
    
     x = x.view(x.size(0), -1)
    
     x = self.classifier(x)
    
     return x
    
    
    
    
    AI写代码

训练模型

现在我们可以开始训练模型了。

复制代码
 # 初始化模型和优化器

    
 device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
    
 model = SolarPanelClassifier().to(device)
    
 criterion = nn.CrossEntropyLoss()
    
 optimizer = optim.SGD(model.parameters(), lr=0.001, momentum=0.9)
    
  
    
 # 训练循环
    
 num_epochs = 20
    
 for epoch in range(num_epochs):
    
     running_loss = 0.0
    
     for i, (images, labels) in enumerate(train_loader, 0):
    
     images, labels = images.to(device), labels.to(device)
    
  
    
     # 零梯度
    
     optimizer.zero_grad()
    
  
    
     # 前向传播
    
     outputs = model(images)
    
     loss = criterion(outputs, labels)
    
  
    
     # 反向传播和优化
    
     loss.backward()
    
     optimizer.step()
    
  
    
     running_loss += loss.item()
    
     
    
     print(f'Epoch {epoch + 1}, Loss: {running_loss / len(train_loader)}')
    
  
    
 print('Finished Training')
    
    
    
    
    AI写代码

测试模型

最后,我们需要评估模型在测试集上的性能。

复制代码
 correct = 0

    
 total = 0
    
 with torch.no_grad():
    
     for data in test_loader:
    
     images, labels = data[0].to(device), data[1].to(device)
    
     outputs = model(images)
    
     _, predicted = torch.max(outputs.data, 1)
    
     total += labels.size(0)
    
     correct += (predicted == labels).sum().item()
    
  
    
 print(f'Accuracy of the network on the test images: {100 * correct / total}%')
    
    
    
    
    AI写代码

以上就是使用PyTorch构建和训练太阳能光伏异常检测模型的关键代码。请确保你已经正确安装了所有依赖项,并且数据集路径正确无误。此外,根据你的硬件配置,你可能需要调整批量大小、学习率以及其他超参数。

全部评论 (0)

还没有任何评论哟~