跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI 生图工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
PythonAI算法

无人机光伏双模态缺陷检测数据集(红外 + 可见光)及 YOLO 融合方案

无人机光伏双模态缺陷检测数据集包含 650 对红外与可见光图像,标注格式为 YOLO。数据涵盖热斑、隐裂、二极管故障等 10 类缺陷。提供数据集结构说明、类别定义,并给出基于 SIFT+RANSAC 的图像配准脚本及 YOLOv8 双模态融合模型实现。通过红外热成像与可见光特征互补,提升缺陷识别精度,适用于电站智能巡检与运维决策。

moshang发布于 2026/4/10更新于 2026/9/957 浏览
无人机光伏双模态缺陷检测数据集(红外 + 可见光)及 YOLO 融合方案

无人机光伏双模态缺陷检测数据集与 YOLO 融合方案

本文介绍一套包含 650 对图像的无人机光伏缺陷检测数据集,涵盖红外热成像与可见光 RGB 图像。数据采用 YOLO 格式标注,支持双模态特征融合训练,适用于光伏电站智能巡检场景。

一、数据集基本信息

项目内容
数据集名称无人机光伏太阳能板缺陷检测数据集(红外 + 可见光配对)
总图像数量650 张(红外与可见光图像严格一一对应,共 650 对 → 1,300 张图像)
模态类型双模态配对数据:红外热成像(Infrared)、可见光图像(RGB)
标注格式YOLO 格式(.txt 文件,适用于 YOLOv5/v8/v11 等)
数据划分未明确说明,建议按 7:2:1 划分(可自行分割)
应用场景光伏电站智能巡检、缺陷定位、运维决策支持

注:实际使用中,可选择仅用可见光训练,或融合红外 + 可见光(需多输入模型,如双流 CNN)。

二、缺陷类别详细说明

类别编号类别代码推测中文全称英文解释缺陷特征
0dmjrb电池片隐裂Cell Micro-crack电池片内部微裂纹,红外中可能无温升,可见光需高分辨率识别
1ns热斑Hot Spot局部过热区域,红外图像显著高温,可见光可能无异常
2dyrb二极管故障Bypass Diode Failure导致整串电池发热,红外呈条状高温区
3ejgdl二极管过电流Diode Over-current与 dyrb 类似,但程度更严重
4zw遮挡Shading树影、鸟粪、灰尘等导致局部发电下降,红外呈低温区
5yyzd组件引线短路Junction Box Wiring Short连接线异常发热
6ygfs组件玻璃破碎Glass Fracture可见光明显破损,红外可能因散热变化出现异常
7ycdw异常低温Abnormal Low Temperature发电异常停止区域,温度低于周围
8dmjrb_ycdw隐裂 + 异常低温Micro-crack + Cold Spot复合缺陷:隐裂导致断路,表现为低温
9dyrb_ycdw二极管故障 + 异常低温Diode Fault + Cold Spot二极管开路导致无电流,温度偏低

注:缩写为拼音首字母组合。ycdw(异常低温)常出现在断路、严重隐裂、接线失效等场景。复合类别表示同一区域同时存在两种缺陷特征。

三、数据集结构建议

pv_defect_dataset/
├── images/
│   ├── infrared/      # 红外图像(.jpg)
│   └── visible/       # 可见光图像(.jpg)
├── labels/
│   └── visible/       # 通常以可见光为基准标注(.txt)
└── data.yaml

四、data.yaml 示例

# pv_defect_dataset/data.yaml
train: ./images/visible/train
val: ./images/visible/val
nc: 10
names:
  - 'dmjrb'    # 电池片隐裂
  - 'ns'       # 热斑
  - 'dyrb'     # 二极管故障
  - 'ejgdl'    # 二极管过电流
  - 'zw'       # 遮挡
  - 'yyzd'     # 引线短路
  - 'ygfs'     # 玻璃破碎
  - 'ycdw'     # 异常低温
  - 'dmjrb_ycdw' # 隐裂 + 低温
  - 'dyrb_ycdw'  # 二极管故障 + 低温

五、主要应用领域

  1. 光伏电站智能巡检:无人机自动飞行采集红外 + 可见光图像,AI 实时识别缺陷,替代人工。
  2. 缺陷精准定位与分类:区分热斑、隐裂、遮挡等,指导运维优先级(如热斑需紧急处理)。
  3. 发电量损失评估:结合缺陷类型与面积,估算发电效率损失。
  4. 预防性维护:早期发现隐裂、接线松动,避免故障扩大。
  5. 保险定损与质保索赔:提供客观、可追溯的缺陷证据链。
  6. 数字孪生电站建设:构建光伏组件健康状态数字档案。

六、技术优势

  • 红外 + 可见光融合:红外检测热异常(热斑、二极管故障),可见光检测物理损伤(破碎、遮挡、隐裂)。
  • 复合缺陷标注:提升模型对复杂故障的理解能力。
  • 小样本高效学习:650 对图像在工业场景已具备实用价值。

七、核心工具实现

为了有效利用该数据集,通常需要解决两个问题:一是将红外图与可见光图进行像素级对齐,二是构建能够融合双模态特征的检测模型。

1. 红外 - 可见光图像配准脚本

无人机拍摄时视角会有微小变化,直接叠加会导致错位。这里使用 SIFT 特征提取配合 RANSAC 单应性变换来实现对齐。

依赖安装:

pip install opencv-python numpy matplotlib scikit-image

image_registration.py:

# -*- coding: utf-8 -*-
"""
红外 - 可见光图像配准脚本
输入:一对红外图 + 可见光图(同一场景)
输出:配准后的红外图(与可见光对齐)
"""
import cv2
import numpy as np
from skimage import exposure

def preprocess_images(ir_img, vis_img):
    """预处理:增强对比度,便于特征匹配"""
    # 红外图:直方图均衡化
    ir_eq = exposure.equalize_adapthist(ir_img.astype(np.uint8), clip_limit=0.03)
    ir_eq = (ir_eq * 255).astype(np.uint8)
    # 可见光图:转换为灰度
    if len(vis_img.shape) == 3:
        vis_gray = cv2.cvtColor(vis_img, cv2.COLOR_BGR2GRAY)
    else:
        vis_gray = vis_img
    return ir_eq, vis_gray

def register_ir_to_visible(ir_path, vis_path, output_path=None):
    """
    将红外图像配准到可见光图像
    :param ir_path: 红外图像路径
    :param vis_path: 可见光图像路径
    :param output_path: 配准后红外图保存路径
    :return: 配准后的红外图像(H×W)
    """
    # 读取图像
    ir = cv2.imread(ir_path, cv2.IMREAD_GRAYSCALE)
    vis = cv2.imread(vis_path, cv2.IMREAD_COLOR)
    if ir is None or vis is None:
        raise FileNotFoundError(f"图像未找到:{ir_path} 或 {vis_path}")

    # 预处理
    ir_proc, vis_gray = preprocess_images(ir, vis)

    # 初始化 SIFT 检测器(OpenCV 4.5+ 支持)
    sift = cv2.SIFT_create()
    kp1, des1 = sift.detectAndCompute(ir_proc, None)
    kp2, des2 = sift.detectAndCompute(vis_gray, None)

    if des1 is None or des2 is None or len(kp1) < 4 or len(kp2) < 4:
        print("⚠️ 特征点不足,跳过配准,直接返回原图")
        return ir

    # FLANN 匹配器
    FLANN_INDEX_KDTREE = 1
    index_params = dict(algorithm=FLANN_INDEX_KDTREE, trees=5)
    search_params = dict(checks=50)
    flann = cv2.FlannBasedMatcher(index_params, search_params)
    matches = flann.knnMatch(des1, des2, k=2)

    # Lowe's ratio test
    good_matches = []
    for m, n in matches:
        if m.distance < 0.7 * n.distance:
            good_matches.append(m)

    if len(good_matches) < 4:
        print("⚠️ 有效匹配点不足,跳过配准")
        return ir

    # 提取匹配点坐标
    src_pts = np.float32([kp1[m.queryIdx].pt for m in good_matches]).reshape(-1, 1, 2)
    dst_pts = np.float32([kp2[m.trainIdx].pt for m in good_matches]).reshape(-1, 1, 2)

    # 计算单应性矩阵(RANSAC)
    H, mask = cv2.findHomography(src_pts, dst_pts, cv2.RANSAC, 5.0)
    if H is None:
        print("⚠️ 单应性矩阵计算失败,返回原图")
        return ir

    # 应用变换:将红外图 warp 到可见光视角
    h, w = vis.shape[:2]
    ir_registered = cv2.warpPerspective(ir, H, (w, h))

    # 保存结果
    if output_path:
        cv2.imwrite(output_path, ir_registered)
        print(f"✅ 配准完成:{output_path}")
    return ir_registered

if __name__ == "__main__":
    # 示例:配准单对图像
    ir_file = "sample/ir_001.jpg"
    vis_file = "sample/vis_001.jpg"
    out_file = "sample/ir_registered_001.jpg"
    registered = register_ir_to_visible(ir_file, vis_file, out_file)

2. 双模态 YOLO 融合模型代码

思路是分别用 CNN 提取红外和可见光特征,在特征层融合(concat + 1x1 conv)后接入 YOLOv8 Head 进行检测。

依赖安装:

pip install ultralytics torch torchvision

dual_modal_yolo.py:

# -*- coding: utf-8 -*-
"""
双模态 YOLO 模型:融合红外 + 可见光进行光伏缺陷检测
基于 YOLOv8 架构改造
"""
import torch
import torch.nn as nn
from ultralytics.nn.tasks import DetectionModel
from ultralytics import YOLO
from pathlib import Path

class DualModalYOLO(nn.Module):
    """
    双模态 YOLO 模型
    输入:[B, 1, H, W] 红外 + [B, 3, H, W] 可见光
    输出:YOLO 检测头输出
    """
    def __init__(self, num_classes=10, model_size='s'):
        super().__init__()
        self.num_classes = num_classes
        # 加载预训练 YOLOv8 backbone(仅用于特征提取)
        base_model = YOLO(f'yolov8{model_size}.pt').model
        self.backbone_vis = base_model.model[:6]  # 取前 6 层作为可见光主干
        self.backbone_ir = self._copy_backbone()  # 红外主干(独立权重)
        
        # 融合层:将红外(1 通道)特征映射到 3 通道再融合
        self.ir_proj = nn.Conv2d(1, 3, kernel_size=1)
        self.fusion_conv = nn.Conv2d(6, 3, kernel_size=1)  # concat 后 3+3=6 → 3
        
        # 共享后续 YOLO 层
        self.shared_layers = base_model.model[6:]
        self.detection_head = base_model.model[-1]

    def _copy_backbone(self):
        """复制可见光主干结构,但不共享权重"""
        base_model = YOLO('yolov8s.pt').model
        return nn.Sequential(*list(base_model.model[:6]))

    def forward(self, x_ir, x_vis):
        """
        :param x_ir: [B, 1, H, W] 红外图
        :param x_vis: [B, 3, H, W] 可见光图
        """
        # 主干特征提取
        feat_ir = self.backbone_ir(self.ir_proj(x_ir))  # [B, C, H/8, W/8]
        feat_vis = self.backbone_vis(x_vis)            # [B, C, H/8, W/8]
        
        # 特征融合
        fused = torch.cat([feat_ir, feat_vis], dim=1)  # [B, 2C, ...]
        fused = self.fusion_conv(fused)                # [B, C, ...]
        
        # 后续检测
        out = self.shared_layers(fused)
        return out

if __name__ == "__main__":
    # 此处仅展示模型结构
    model = DualModalYOLO(num_classes=10)
    dummy_ir = torch.randn(1, 1, 640, 640)
    dummy_vis = torch.randn(1, 3, 640, 640)
    output = model(dummy_ir, dummy_vis)
    print("✅ 双模态模型构建成功!输出形状:", [o.shape for o in output])

八、使用建议

任务推荐方案
快速上线先用可见光单模态 YOLOv8 训练(650 张已足够)
高精度需求使用配准后红外 + 可见光,训练双模态模型
部署优化导出 ONNX/TensorRT,红外 + 可见光拼接为 4 通道输入(R,G,B,IR)

目录

  1. 无人机光伏双模态缺陷检测数据集与 YOLO 融合方案
  2. 一、数据集基本信息
  3. 二、缺陷类别详细说明
  4. 三、数据集结构建议
  5. 四、data.yaml 示例
  6. pvdefectdataset/data.yaml
  7. 五、主要应用领域
  8. 六、技术优势
  9. 七、核心工具实现
  10. 1. 红外 - 可见光图像配准脚本
  11. -- coding: utf-8 --
  12. 2. 双模态 YOLO 融合模型代码
  13. -- coding: utf-8 --
  14. 八、使用建议

更多推荐文章

查看全部
  • Claude Code 权限管理实战:安全与效率的平衡
  • OpenCore 在 PC 上安装 macOS 完整指南
  • C++26 模块化革命:GCC 如何重塑现代 C++ 开发效率
  • Flutter 集成 Firebase 后端配置与前后端闭环实战
  • MiniRAG:面向 1.5B 小模型的 RAG 框架,效果媲美 GPT4
  • 基于 Coze 与 OpenClaw 搭建飞书机器人群组
  • Jupyter Notebook 安装教程:Python 3.10 版本
  • Vivado 工程创建与 FPGA 开发流程指南
  • Web 架构深度解析:前后端分离与传统的利弊权衡
  • 基于 Java Socket 实现多人在线聊天系统
  • Java Web 开发:JSON 基础、@Test 测试与 Cookie Session 请求处理
  • gflags 与 spdlog 实战:C++ 命令行参数与高性能日志搭配
  • JetBrains IDE 集成 LeetCode 插件配置与使用指南
  • 字节跳动豆包系列深度拆解:国民级全模态 AI 的普惠化路径
  • Xilinx Vivado 付费 IP 核 License 状态解读与获取
  • Claude Scholar:AI 学术研究全流程助手
  • Java 栈与队列原理及手写实现
  • Python 爬虫实战指南:从基础请求到分布式框架
  • 微信小程序城市公交查询与失物招领系统的开发笔记
  • C# ImageSharp 与 JavaScript Canvas 图像处理性能对比

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • RSA密钥对生成器

    生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online

  • Mermaid 预览与可视化编辑

    基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online

  • 随机西班牙地址生成器

    随机生成西班牙地址(支持马德里、加泰罗尼亚、安达卢西亚、瓦伦西亚筛选),支持数量快捷选择、显示全部与下载。 在线工具,随机西班牙地址生成器在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • curl 转代码

    解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online