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

news2024/9/21 8:04:47

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

一、数据集简介

太阳能光伏板的性能直接影响到光伏发电系统的效率和可靠性。随着无人机和红外成像技术的发展,通过航拍红外图像对光伏板进行缺陷检测已成为一种高效且准确的方法。本数据集包含11种不同的缺陷分类,总计20000张图像,适用于基于深度学习的缺陷分类任务。这些图像均为近红外黑白图像,经过可视化处理,以便于观察和分析。
在这里插入图片描述

二、数据集详情
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. 图像特点
  • 图像格式:近红外黑白图像。
  • 图像尺寸:统一为256x256像素。
  • 图像数量:总计20000张图像,每类缺陷大约1818张图像。
  • 图像处理:所有图像均经过可视化处理,增强了对比度和清晰度,便于观察和分析。
    在这里插入图片描述
三、数据集结构

数据集的文件结构如下:

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/
  • train/:训练集,包含18000张图像。
  • val/:验证集,包含1000张图像。
  • test/:测试集,包含1000张图像。
四、数据处理代码

以下是一个完整的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
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)
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()
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]
)
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()
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)
五、结论

本数据集提供了丰富的太阳能光伏板航拍红外图像,涵盖了11种不同的缺陷分类。通过上述代码示例,我们展示了如何加载、预处理数据集,并使用深度学习模型进行缺陷分类。该数据集和代码可以为研究人员和工程师提供一个强大的工具,用于开发和测试先进的光伏板缺陷检测系统,从而提高光伏发电系统的可靠性和效率。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2142723.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【CPP】模板(后篇)

目录 13.1 非类型模板参数13.2 函数模板的特化13.3 类模板的特化13.4 模板的分离编译 这里是oldking呐呐,感谢阅读口牙!先赞后看,养成习惯! 个人主页:oldking呐呐 专栏主页:深入CPP语法口牙 13.1 非类型模板参数 顾名思义,非类型模板参数就是一个模板的参数,只不过不是类型,而…

第二十六篇——九地篇:九种形势的应对之道

目录 一、背景介绍二、思路&方案三、过程1.思维导图2.文章中经典的句子理解3.学习之后对于投资市场的理解4.通过这篇文章结合我知道的东西我能想到什么? 四、总结五、升华 一、背景介绍 地势的维度重新阐述了懂得人心的重要性,道久其归一为为别人。…

个人随想-gpt-o1大模型中推理链的一个落地实现

​首先祝大家中秋节快乐。 最近openai又推出了新的模型openai o1​还有它的mini版。官网的介绍,就是它的推理能力很强,比gpt-4o​有很大的提升。 最近也跟同行在聊这个o1,​看看落地方面有哪些可行性。在我们自己的实验上,把o1用…

Python画笔案例-052 绘制彩色递归六边形

1、绘制彩色递归六边形 通过 python 的turtle 库绘制 彩色递归六边形,如下图: 2、实现代码 绘制彩色递归六边形,以下为实现代码: """彩色递归六边形.py """ import turtledef draw_circle(radius,…

【自动化测试】移动app的分层测试以及自动遍历的基本概念

引言 移动应用的分层测试是一种系统化的测试方法,它将测试过程分解为不同的层次,以确保应用在每个层面上都符合设计要求和用户期望 文章目录 引言一、移动app的分层测试1.1 单元测试(Unit Testing)1.2 集成测试(Integr…

甲骨文创始人埃里森:人工智能终有一天会追踪你的一举一动

9月17日消息,据外电报道,甲骨文创始人拉里埃里森在甲骨文财务分析师会议上表示,他预计人工智能有一天将为大规模执法监控网络提供动力。“我们将进行监督。”他说。“每一位警察都将随时受到监督,如果有问题,人工智能会…

人工智能辅助汽车造型设计

随着科技的不断进步,人工智能(AI)在各个领域的应用越来越广泛,汽车设计行业也不例外。尤其在车辆外观造型设计中,AI正在成为设计师的重要助手,通过提供强大的工具和独特的创意方式,革新了传统设…

算法之搜索--最长公共子序列LCS

最长公共子序列&#xff08;longest common sequence&#xff09;:可以不连续 最长公共子串&#xff08;longest common substring&#xff09;&#xff1a;连续 demo for (int i 1;i<lena;i){for (int j 1;j<lenb;j){if(a[i-1]b[j-1]){dp[i][j]dp[i-1][j-1]1;}el…

神奇的Serializable接口,为什么有时候网络传输不用实现Serializable,有时候又需要?

大家好&#xff0c;这里是小奏,觉得文章不错可以关注公众号小奏技术 背景 其他大家在初学java的时候肯定是接触过Serializable接口的&#xff0c;这个接口是一个标记接口&#xff0c;没有任何方法&#xff0c;只是一个标记&#xff0c;用来标记一个类可以被序列化&#xff0c;…

深入解析代理模式:静态代理、JDK 动态代理和 CGLIB 的全方位对比!

代理模式&#xff08;Proxy Pattern&#xff09;是一种结构型设计模式&#xff0c;它提供了对象的替身&#xff0c;即代理对象来控制对实际对象的访问。通过代理对象&#xff0c;可以在不修改目标对象的情况下&#xff0c;扩展或控制其功能。例如&#xff0c;代理模式可以用于延…

JDBC的介绍和连接MySQL数据库

目录 1. 为什么学习JDBC 1.1 数据存储​编辑​编辑 1.2 数据操作​编辑 2. JDBC概述 2.1 JDBC概念 2.2 JDBC 核心组成 3. 实现 JDBC 3.1 JDBC 搭建步骤 3.2 详细演示 3.3 核心API 3.3.1 Driver​ 3.3.2 Connection​ 3.3.3 Statament​ 3.3.4 PreparedStatement …

嵌入式单片机中can总线调试方法

大家好,今天将向大家介绍如何使用STM32F4自带的CAN控制器实现两个开发板之间的CAN通信。 1.CAN CAN是控制器局域网络(Controller Area Network, CAN)的简称,是由以研发和生产汽车电子产品著称的德国BOSCH公司开发的,并最终成为国际标准(ISO 11898),是国际上应用最广泛的…

大模型笔记03--快速体验dify

大模型笔记03--快速体验dify 介绍部署&测试部署 dify测试dify对接本地ollama大模型对接阿里云千问大模型在个人网站中嵌入dify智能客服 注意事项说明 介绍 Dify 是一款开源的大语言模型(LLM) 应用开发平台。它融合了后端即服务&#xff08;Backend as Service&#xff09;…

优化 OR 条件过多导致的查询超时

优化 OR 条件过多导致的查询超时 文章目录 优化 OR 条件过多导致的查询超时背景问题分析方案分析方案一&#xff1a;入参去重方案二&#xff1a;分页或者分批查询方案三&#xff1a;UNION 代替 OR方案四&#xff1a;IN 代替 OR1. 分别对列进行 IN 查询&#xff0c;在代码中进行…

同一Python脚本中训练多个模型时的 wandb 配置错误解决方案

文章目录 摘要背景介绍报错信息wandb 模型训练名 摘要 在机器学习项目中&#xff0c;使用Python脚本训练多个模型时&#xff0c;可能会遇到WandB&#xff08;Weights and Biases&#xff09;配置错误&#xff0c;尤其是在训练多个模型参数大小不一致的情况下。 本文将介绍如何…

Vue学习记录之三(ref全家桶)

ref、reactive是在 setup() 声明组件内部状态用的&#xff0c; 这些变量通常都要 return 出去&#xff0c;除了供 < template > 或渲染函数渲染视图&#xff0c;也可以作为 props 或 emit 参数 在组件间传递。它们的值变更可触发页面渲染。 ref &#xff1a;是一个函数&…

Get包中的根组件

文章目录 1. 知识回顾2. 使用方法2.1 源码分析2.2 常用属性 3. 示例代码4. 内容总结 我们在上一章回中介绍了"Get包简介"相关的内容&#xff0c;本章回中将介绍GetMaterialApp组件.闲话休提&#xff0c;让我们一起Talk Flutter吧。 1. 知识回顾 我们在上一章回中已经…

Unity webgl跨域问题 unity使用nginx设置跨域 ,修改请求头

跨域 什么是跨域 跨域是指浏览器因安全策略限制&#xff0c;阻止一个域下的网页访问另一个域下的资源。 一些常见的跨域情况&#xff1a; 协议不同 从 http://example.com 请求 https://example.com。域名不同 从 http://example.com 请求 http://anotherdomain.com。端口不…

Village Exteriors Kit 中世纪乡村房屋场景模型

此模块化工具包就是你一直在寻找的适合建造所有中世纪幻想村庄和城市建筑所需要的工具包。 皇家园区 - 村庄外饰套件的模型和纹理插件资源包 酒馆和客栈、魔法商店、市政大厅、公会大厅、布莱克史密斯锻造厂、百货商店、珠宝商店、药店、草药师、银行、铠甲、弗莱切、马厩、桌…

list从0到1的突破

目录 前言 1.list的介绍 2.list的常见接口 2.1 构造函数&#xff08; (constructor)&#xff09; 接口说明 2.2 list iterator 的使用 2.3 list capacity 2.4 list element access 2.5 list modifiers 3.list的迭代器失效 附整套练习源码 结束语 前言 前面我们学习…