Advertisement

太阳能光伏板航拍红外图像缺陷分类数据集

阅读量:

太阳能光伏板航拍红外图像缺陷分类数据集

太阳能光伏板航拍红外图像缺陷分类数据集
一、数据集简介

太阳能光伏板的性能主要取决于光伏发电系统的效率和可靠性这两个关键指标。随着无人机技术和红外成像技术的进步,在线对光伏板进行缺陷检测并生成航拍红外图像已成为提高系统效率与可靠性的重要手段之一。该数据集涵盖了11种典型缺陷类型,并包含2万张标准化图像样本;这些图像均为近红外黑白类型,并经过可视化处理后便于观察分析以辅助诊断工作

在这里插入图片描述

✍🏻作者简介:机器学习,深度学习,卷积神经网络处理,图像处理
🚀B站项目实战:https://space.bilibili.com/364224477
😄 如果文章对你有帮助的话, 欢迎评论 💬点赞👍🏻 收藏 📂加关注+
🤵‍♂代做需求:@个人主页

二、数据集详情
1. 缺陷分类

数据集中的11种缺陷分类包括但不限于以下几类:

  1. 裂纹(Cracks):光伏板表面出现的裂纹现象。
  2. 局部过热区域(Hot Spots):局部区域出现异常升高温度的情况。
  3. 阴影区域(Shadows):由于周围物体遮挡所形成的阴影区域。
  4. 表面灰尘或污垢(Pollution):表面覆盖的灰尘或污垢造成的缺陷。
  5. 断线电池片(Broken Cells):内部电路短路导致的断线问题。
  6. 背板分离现象(Delamination):电池片与背板之间发生分离的现象。
  7. 因过热导致的烧坏电池片(Burnt Cells):因温度过高而导致的电池片烧坏问题。
  8. 缺失电池片单元(Missing Cells):未能正确安装或造成缺损的电池片单元。
  9. 表面划痕或划痕(Scratches):在表面形成的划痕或多处划痕现象。
  10. 表面水渍或水迹(Water Stains):覆盖在光伏板上的水渍或水迹情况。
  11. 未归类其他缺陷(Others):未能归类到上述各类中的其他类型的缺陷。
2. 图像特点
三、数据集结构

数据集的文件结构如下:

复制代码
    solar_panel_defect_dataset/
    │
    ├── train/
    │   ├── cracks/
    │   ├── hot_spots/
    │   ├── shadows/
    │   ├── pollution/
    │   ├── broken_cells/
    │   ├── delamination/
    │   ├── burnt_cells/
    │   ├── missing_cells/
    │   ├── scratches/
    │   ├── water_stains/
    │   └── others/
    │
    ├── val/
    │   ├── cracks/
    │   ├── hot_spots/
    │   ├── shadows/
    │   ├── pollution/
    │   ├── broken_cells/
    │   ├── delamination/
    │   ├── burnt_cells/
    │   ├── missing_cells/
    │   ├── scratches/
    │   ├── water_stains/
    │   └── others/
    │
    └── test/
    ├── cracks/
    ├── hot_spots/
    ├── shadows/
    ├── pollution/
    ├── broken_cells/
    ├── delamination/
    ├── burnt_cells/
    ├── missing_cells/
    ├── scratches/
    ├── water_stains/
    └── others/
    
    
    
    
![](https://ad.itadn.com/c/weblog/blog-img/images/2025-07-13/mlxqakhtE1NvrMD9uHZPW3Tw8ipL.png)
四、数据处理代码

以下是一个完整的Python代码范例

1. 导入必要的库
复制代码
    import os
    import numpy as np
    import pandas as pd
    import cv2
    import matplotlib.pyplot as plt
    from sklearn.model_selection import train_test_split
    from tensorflow.keras.preprocessing.image import ImageDataGenerator
    from tensorflow.keras.models import Sequential
    from tensorflow.keras.layers import Conv2D, MaxPooling2D, Flatten, Dense, Dropout
    from tensorflow.keras.optimizers import Adam
    from tensorflow.keras.callbacks import EarlyStopping, ModelCheckpoint
    
    
    
    
![](https://ad.itadn.com/c/weblog/blog-img/images/2025-07-13/orvROSZhdy6aDzKpNGiHkXeJ14uC.png)
2. 加载数据集
复制代码
    def load_images_from_folder(folder):
    images = []
    labels = []
    for category in os.listdir(folder):
        path = os.path.join(folder, category)
        if not os.path.isdir(path):
            continue
        for img in os.listdir(path):
            img_path = os.path.join(path, img)
            image = cv2.imread(img_path, cv2.IMREAD_GRAYSCALE)
            image = cv2.resize(image, (256, 256))
            images.append(image)
            labels.append(category)
    return np.array(images), np.array(labels)
    
    train_folder = 'solar_panel_defect_dataset/train'
    val_folder = 'solar_panel_defect_dataset/val'
    test_folder = 'solar_panel_defect_dataset/test'
    
    X_train, y_train = load_images_from_folder(train_folder)
    X_val, y_val = load_images_from_folder(val_folder)
    X_test, y_test = load_images_from_folder(test_folder)
    
    # 将标签编码为整数
    from sklearn.preprocessing import LabelEncoder
    le = LabelEncoder()
    y_train = le.fit_transform(y_train)
    y_val = le.transform(y_val)
    y_test = le.transform(y_test)
    
    # 归一化图像数据
    X_train = X_train / 255.0
    X_val = X_val / 255.0
    X_test = X_test / 255.0
    
    # 扩展维度
    X_train = np.expand_dims(X_train, axis=-1)
    X_val = np.expand_dims(X_val, axis=-1)
    X_test = np.expand_dims(X_test, axis=-1)
    
    
    
    
![](https://ad.itadn.com/c/weblog/blog-img/images/2025-07-13/FOCdK7raqfYz1HBksUn5ywgTVGWZ.png)
3. 构建深度学习模型
复制代码
    def build_model():
    model = Sequential([
        Conv2D(32, (3, 3), activation='relu', input_shape=(256, 256, 1)),
        MaxPooling2D((2, 2)),
        Conv2D(64, (3, 3), activation='relu'),
        MaxPooling2D((2, 2)),
        Conv2D(128, (3, 3), activation='relu'),
        MaxPooling2D((2, 2)),
        Flatten(),
        Dense(128, activation='relu'),
        Dropout(0.5),
        Dense(11, activation='softmax')
    ])
    model.compile(optimizer=Adam(learning_rate=0.001), loss='sparse_categorical_crossentropy', metrics=['accuracy'])
    return model
    
    model = build_model()
    model.summary()
    
    
    
    
![](https://ad.itadn.com/c/weblog/blog-img/images/2025-07-13/okiwU42yAbHPu7vLTYfrWJ1sRMnO.png)
4. 训练模型
复制代码
    early_stopping = EarlyStopping(monitor='val_loss', patience=10, restore_best_weights=True)
    model_checkpoint = ModelCheckpoint('best_model.h5', monitor='val_loss', save_best_only=True)
    
    history = model.fit(
    X_train, y_train,
    epochs=50,
    batch_size=32,
    validation_data=(X_val, y_val),
    callbacks=[early_stopping, model_checkpoint]
    )
    
    
    
    
![](https://ad.itadn.com/c/weblog/blog-img/images/2025-07-13/twCRWOnzULlVS2yxNbMs4XH1k5PG.png)
5. 评估模型
复制代码
    # 加载最佳模型
    model.load_weights('best_model.h5')
    
    # 评估模型
    test_loss, test_acc = model.evaluate(X_test, y_test)
    print(f'Test accuracy: {test_acc:.4f}')
    
    # 绘制训练和验证的损失和准确率曲线
    plt.figure(figsize=(12, 4))
    plt.subplot(1, 2, 1)
    plt.plot(history.history['loss'], label='Training Loss')
    plt.plot(history.history['val_loss'], label='Validation Loss')
    plt.legend()
    plt.title('Loss')
    
    plt.subplot(1, 2, 2)
    plt.plot(history.history['accuracy'], label='Training Accuracy')
    plt.plot(history.history['val_accuracy'], label='Validation Accuracy')
    plt.legend()
    plt.title('Accuracy')
    
    plt.show()
    
    
    
    
![](https://ad.itadn.com/c/weblog/blog-img/images/2025-07-13/pedYUS2RlhVifJNsA8ZQjnwmbqy9.png)
6. 预测和可视化
复制代码
    def plot_predictions(images, true_labels, predicted_labels, n=5):
    fig, axes = plt.subplots(n, 2, figsize=(10, 5 * n))
    for i in range(n):
        ax = axes[i, 0]
        ax.imshow(images[i].squeeze(), cmap='gray')
        ax.set_title(f'True: {true_labels[i]}')
        ax.axis('off')
    
        ax = axes[i, 1]
        ax.imshow(images[i].squeeze(), cmap='gray')
        ax.set_title(f'Predicted: {predicted_labels[i]}')
        ax.axis('off')
    plt.tight_layout()
    plt.show()
    
    # 从测试集中随机选择一些图像进行预测
    indices = np.random.choice(len(X_test), 5, replace=False)
    sample_images = X_test[indices]
    sample_true_labels = y_test[indices]
    sample_predicted_labels = model.predict(sample_images).argmax(axis=1)
    
    plot_predictions(sample_images, sample_true_labels, sample_predicted_labels)
    
    
    
    
![](https://ad.itadn.com/c/weblog/blog-img/images/2025-07-13/f5B438SKUCqgQTpld6bjw0XWOxGE.png)
五、结论

本数据集提供了丰富的太阳能光伏板航拍红外图像,涵盖了11种不同的缺陷分类。通过上述代码示例,我们展示了如何加载、预处理数据集,并使用深度学习模型进行缺陷分类。该数据集和代码可以为研究人员和工程师提供一个强大的工具,用于开发和测试先进的光伏板缺陷检测系统,从而提高光伏发电系统的可靠性和效率。
✍🏻作者简介:机器学习,深度学习,卷积神经网络处理,图像处理
🚀B站项目实战:https://space.bilibili.com/364224477
😄 如果文章对你有帮助的话, 欢迎评论 💬点赞👍🏻 收藏 📂加关注+
🤵‍♂代做需求:@个人主页

全部评论 (0)

还没有任何评论哟~