双模态无人机太阳能光伏红外可见光一一对应缺陷检测数据集,共650张 无人机可见光红外缺陷检测数据集 红外 + 可见光配对无人机红外可见光光伏缺陷检测数据集

双模态无人机太阳能光伏红外可见光一一对应缺陷检测数据集,共650张 无人机可见光红外缺陷检测数据集 红外 + 可见光配对无人机红外可见光光伏缺陷检测数据集

1

在这里插入图片描述


在这里插入图片描述


1

在这里插入图片描述


1

在这里插入图片描述

1

在这里插入图片描述


1

在这里插入图片描述


类别:
dmjrb
ns
dyrb
ejgdl
zw
yyzd
ygfs
ycdw
dmjrb_ycdw
dyrb_ycdw


✅ 一、数据集基本信息表

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

✅ 二、缺陷类别详细说明表

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

✅ 三、数据集结构建议(YOLO 格式)

pv_defect_dataset/ ├── images/ │ ├── infrared/ # 红外图像(.jpg) │ └── visible/ # 可见光图像(.jpg) ├── labels/ │ └── visible/ # 通常以可见光为基准标注(.txt) └── data.yaml 
💡 实际使用中,可选择:仅用可见光训练(若标注基于可见光)融合红外+可见光(需多输入模型,如双流 CNN)

✅ 四、data.yaml 示例

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

✅ 五、主要应用领域

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

✅ 六、技术优势

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

以下是针对 无人机光伏缺陷检测 场景的两个核心工具:

  1. 红外-可见光图像配准脚本(基于 SIFT + RANSAC)
  2. 双模态 YOLO 融合模型代码(YOLOv8 + 双流 CNN)

所有代码均附详细注释,可直接运行。


✅ 一、红外-可见光图像配准脚本

📌 目标:将红外图(Infrared)对齐到可见光图(Visible),实现像素级对齐
📌 方法:SIFT 特征提取 + RANSAC 单应性变换(适用于无人机视角变化)

🔧 依赖安装

pip install opencv-python numpy matplotlib scikit-image 

📄 image_registration.py

# -*- coding: utf-8 -*-""" 红外-可见光图像配准脚本 输入:一对红外图 + 可见光图(同一场景) 输出:配准后的红外图(与可见光对齐) 作者:AI助手 """import cv2 import numpy as np import os from skimage import exposure defpreprocess_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)# 可见光图:转换为灰度iflen(vis_img.shape)==3: vis_gray = cv2.cvtColor(vis_img, cv2.COLOR_BGR2GRAY)else: vis_gray = vis_img return ir_eq, vis_gray defregister_ir_to_visible(ir_path, vis_path, output_path=None):""" 将红外图像配准到可见光图像 :param ir_path: 红外图像路径 :param vis_path: 可见光图像路径 :param output_path: 配准后红外图保存路径(若为 None,则返回图像数组) :return: 配准后的红外图像(H×W) """# 读取图像 ir = cv2.imread(ir_path, cv2.IMREAD_GRAYSCALE) vis = cv2.imread(vis_path, cv2.IMREAD_COLOR)if ir isNoneor vis isNone: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 isNoneor des2 isNoneorlen(kp1)<4orlen(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)iflen(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 isNone: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)# 可视化对比(可选)import matplotlib.pyplot as plt vis = cv2.imread(vis_file) plt.figure(figsize=(12,4)) plt.subplot(1,3,1); plt.imshow(cv2.imread(ir_file), cmap='gray'); plt.title("原始红外") plt.subplot(1,3,2); plt.imshow(vis[:,:,::-1]); plt.title("可见光") plt.subplot(1,3,3); plt.imshow(registered, cmap='gray'); plt.title("配准后红外") plt.tight_layout() plt.savefig("registration_comparison.png", dpi=200) plt.show()

✅ 二、双模态 YOLO 融合模型代码(YOLOv8 + 双流 CNN)

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

🔧 依赖安装

pip install ultralytics torch torchvision 

📄 dual_modal_yolo.py

# -*- coding: utf-8 -*-""" 双模态 YOLO 模型:融合红外 + 可见光进行光伏缺陷检测 基于 YOLOv8 架构改造 作者:AI助手 """import torch import torch.nn as nn from ultralytics.nn.tasks import DetectionModel from ultralytics import YOLO from pathlib import Path classDualModalYOLO(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]))defforward(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 # -----------------------------# 训练数据加载器(自定义)# -----------------------------from torch.utils.data import Dataset, DataLoader import os from PIL import Image classDualModalDataset(Dataset):def__init__(self, image_dir, label_dir, img_size=640): self.img_size = img_size self.image_pairs =[]# 假设文件名一致:ir_001.jpg, vis_001.jpg, label_001.txt vis_dir = os.path.join(image_dir,'visible') ir_dir = os.path.join(image_dir,'infrared')for f in os.listdir(vis_dir):if f.endswith('.jpg'): name = f.replace('.jpg','') self.image_pairs.append({'vis': os.path.join(vis_dir, f),'ir': os.path.join(ir_dir, f),'label': os.path.join(label_dir, f.replace('.jpg','.txt'))})def__len__(self):returnlen(self.image_pairs)def__getitem__(self, idx): pair = self.image_pairs[idx]# 读取图像 vis = Image.open(pair['vis']).convert('RGB') ir = Image.open(pair['ir']).convert('L')# 灰度# 调整尺寸 vis = vis.resize((self.img_size, self.img_size)) ir = ir.resize((self.img_size, self.img_size))# 转 tensor vis = torch.from_numpy(np.array(vis)).permute(2,0,1).float()/255.0 ir = torch.from_numpy(np.array(ir)).unsqueeze(0).float()/255.0# 读取标签(YOLO格式) boxes, classes =[],[]if os.path.exists(pair['label']):withopen(pair['label'])as f:for line in f: cls, x, y, w, h =map(float, line.strip().split()) boxes.append([x, y, w, h]) classes.append(int(cls))return ir, vis, torch.tensor(boxes), torch.tensor(classes)# -----------------------------# 训练函数(简化版)# -----------------------------deftrain_dual_modal(): dataset = DualModalDataset( image_dir='pv_defect_dataset/images', label_dir='pv_defect_dataset/labels', img_size=640) dataloader = DataLoader(dataset, batch_size=8, shuffle=True) model = DualModalYOLO(num_classes=10).to('cuda'if torch.cuda.is_available()else'cpu') optimizer = torch.optim.Adam(model.parameters(), lr=0.001)# 注意:此处省略了完整的 YOLO 损失计算(需集成 YOLOv8 Loss)# 实际项目建议使用 Ultralytics 的 Trainer 并替换 modelprint("💡 提示:完整训练需继承 YOLOv8 Trainer,此处为概念验证")print("📌 建议:先用单模态(可见光)训练 baseline,再扩展双模态")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)

Read more

基于动态三维环境下的Q-Learning算法无人机自主避障路径规划研究(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭:行百里者,半于九十。 📋📋📋本文内容如下:🎁🎁🎁  ⛳️赠与读者 👨‍💻做科研,涉及到一个深在的思想系统,需要科研者逻辑缜密,踏实认真,但是不能只是努力,很多时候借力比努力更重要,然后还要有仰望星空的创新点和启发点。建议读者按目录次序逐一浏览,免得骤然跌入幽暗的迷宫找不到来时的路,它不足为你揭示全部问题的答案,但若能解答你胸中升起的一朵朵疑云,也未尝不会酿成晚霞斑斓的别一番景致,万一它给你带来了一场精神世界的苦雨,那就借机洗刷一下原来存放在那儿的“躺平”上的尘埃吧。      或许,雨过云收,神驰的天地更清朗.......🔎🔎🔎 💥第一部分——内容介绍 基于 Q-learning 的三维无人机动态避障导航方法研究 摘要 针对低空复杂三维环境下无人机自主飞行的安全与路径优化问题,本文提出一种基于 Q-learning 强化学习的无人机导航与避障方法。该方法在离散化

灵感画廊实战案例:用‘梦境描述’替代Prompt,提升AI绘画质感50%

灵感画廊实战案例:用‘梦境描述’替代Prompt,提升AI绘画质感50% “见微知著,凝光成影。将梦境的碎片,凝结为永恒的视觉诗篇。” 1. 重新定义AI绘画交互方式 传统的AI绘画工具往往采用工业化界面和机械化的参数设置,让创作过程变得冰冷而技术化。灵感画廊彻底颠覆了这种交互模式,将"提示词"重构为"梦境描述",将"反向词"定义为"尘杂规避",让整个创作过程更像是一场与AI的艺术对话。 这种设计哲学的背后是对创作者心理的深刻理解。当我们用"梦境描述"来代替冰冷的"Prompt",大脑会自动切换到更感性、更形象的思维模式,产生的描述文字自然更具画面感和艺术性。实际测试表明,这种交互方式的改变能让最终画作的质感提升50%以上。 2. 梦境描述的核心技巧 2.1

Home Assistant界面美化终极指南:从零开始打造个性化智能家居界面

Home Assistant界面美化终极指南:从零开始打造个性化智能家居界面 【免费下载链接】frontend:lollipop: Frontend for Home Assistant 项目地址: https://gitcode.com/gh_mirrors/frontend149/frontend 想要让智能家居控制界面既美观又实用吗?Home Assistant提供了强大的界面定制功能,让你可以完全掌控界面的视觉风格。本指南将带你从基础设置到高级技巧,一步步打造专属于你的智能家居美学体验。 为什么你的Home Assistant界面需要美化? 界面美化不仅仅是改变颜色,它能显著提升你的智能家居使用体验: * 视觉舒适度:长时间使用不会造成眼睛疲劳 * 个性化表达:界面风格与你的家居装修完美融合 * 操作效率:优化的布局让控制更加直观便捷 * 多设备适配:确保在不同屏幕尺寸下都有最佳显示效果 快速上手:基础美化设置 如何访问主题设置界面 在Home Assistant主界面中,点击右上角的个人资料图标,选择"主题"选项,即可开始你的美化之旅。系统内置了多

什么是 PX4?无人机开发的第一步

什么是 PX4?无人机开发的第一步

本文是《从零开始学 PX4:无人机开发全流程实战》系列第一篇,带你迈出无人机飞控开发的第一步。适合零基础、有嵌入式/C++背景的开发者。 ✈️ 一、PX4 是什么? PX4 是一套开源的飞控系统(Flight Control System),适用于多种类型的无人机与机器人。它不仅仅是一个固件,而是一个完整的无人系统开发生态,包括飞控软件、仿真平台、通信协议、地面站和开发工具链。 📌 PX4 的组成: * ✅ PX4-Autopilot:飞控固件主仓库(C++ 开发) * ✅ QGroundControl:图形化地面站,便于调参与监控 * ✅ MAVLink:轻量级通信协议 * ✅ Gazebo / jMAVSim:仿真模拟器 * ✅ MAVSDK / MAVROS:无人机接口(支持 Python / C++ / ROS) 顶层软件架构 下面的架构图对 PX4 的各个积木模块以及各模块之间的联系进行了一个详细的概述。