news 2026/4/22 12:44:18

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
双模态无人机太阳能光伏红外可见光一一对应缺陷检测数据集,共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/trainval:./images/visible/valnc: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 单应性变换(适用于无人机视角变化)

🔧 依赖安装

pipinstallopencv-python numpy matplotlib scikit-image

📄image_registration.py

# -*- coding: utf-8 -*-""" 红外-可见光图像配准脚本 输入:一对红外图 + 可见光图(同一场景) 输出:配准后的红外图(与可见光对齐) 作者:AI助手 """importcv2importnumpyasnpimportosfromskimageimportexposuredefpreprocess_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_imgreturnir_eq,vis_graydefregister_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)ifirisNoneorvisisNone:raiseFileNotFoundError(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)ifdes1isNoneordes2isNoneorlen(kp1)<4orlen(kp2)<4:print("⚠️ 特征点不足,跳过配准,直接返回原图")returnir# FLANN 匹配器FLANN_INDEX_KDTREE=1index_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 testgood_matches=[]form,ninmatches:ifm.distance<0.7*n.distance:good_matches.append(m)iflen(good_matches)<4:print("⚠️ 有效匹配点不足,跳过配准")returnir# 提取匹配点坐标src_pts=np.float32([kp1[m.queryIdx].ptformingood_matches]).reshape(-1,1,2)dst_pts=np.float32([kp2[m.trainIdx].ptformingood_matches]).reshape(-1,1,2)# 计算单应性矩阵(RANSAC)H,mask=cv2.findHomography(src_pts,dst_pts,cv2.RANSAC,5.0)ifHisNone:print("⚠️ 单应性矩阵计算失败,返回原图")returnir# 应用变换:将红外图 warp 到可见光视角h,w=vis.shape[:2]ir_registered=cv2.warpPerspective(ir,H,(w,h))# 保存结果ifoutput_path:cv2.imwrite(output_path,ir_registered)print(f"✅ 配准完成:{output_path}")returnir_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)# 可视化对比(可选)importmatplotlib.pyplotasplt 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 进行检测

🔧 依赖安装

pipinstallultralytics torch torchvision

📄dual_modal_yolo.py

# -*- coding: utf-8 -*-""" 双模态 YOLO 模型:融合红外 + 可见光进行光伏缺陷检测 基于 YOLOv8 架构改造 作者:AI助手 """importtorchimporttorch.nnasnnfromultralytics.nn.tasksimportDetectionModelfromultralyticsimportYOLOfrompathlibimportPathclassDualModalYOLO(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').modelreturnnn.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)returnout# -----------------------------# 训练数据加载器(自定义)# -----------------------------fromtorch.utils.dataimportDataset,DataLoaderimportosfromPILimportImageclassDualModalDataset(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.txtvis_dir=os.path.join(image_dir,'visible')ir_dir=os.path.join(image_dir,'infrared')forfinos.listdir(vis_dir):iff.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))# 转 tensorvis=torch.from_numpy(np.array(vis)).permute(2,0,1).float()/255.0ir=torch.from_numpy(np.array(ir)).unsqueeze(0).float()/255.0# 读取标签(YOLO格式)boxes,classes=[],[]ifos.path.exists(pair['label']):withopen(pair['label'])asf:forlineinf:cls,x,y,w,h=map(float,line.strip().split())boxes.append([x,y,w,h])classes.append(int(cls))returnir,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'iftorch.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.shapeforoinoutput])

✅ 三、使用建议

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

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/17 16:48:33

自建埋点分析系统的成本对比(含 ClkLog 开源方案)

很多团队在业务发展到一定阶段后&#xff0c;都会认真评估一次&#xff1a;用户行为分析系统&#xff0c;是继续用现成产品&#xff0c;还是自己搭一套&#xff1f;实际上&#xff0c;当企业需要埋点分析时&#xff0c;往往已经没有太多时间成本可投入。 业务方希望尽快看到数据…

作者头像 李华
网站建设 2026/4/20 16:21:19

ES集群性能调优技巧:架构设计核心要点总结

以下是对您提供的博文内容进行 深度润色与结构重构后的专业级技术文章 。全文已彻底去除AI痕迹、模板化表达和生硬过渡&#xff0c;以一位深耕ES多年、经历过数十个PB级集群运维与架构演进的工程师口吻重写——语言更自然、逻辑更绵密、细节更具实战温度&#xff0c;同时严格…

作者头像 李华
网站建设 2026/4/18 7:57:21

网络工程毕设容易的开题答疑

1 引言 毕业设计是大家学习生涯的最重要的里程碑&#xff0c;它不仅是对四年所学知识的综合运用&#xff0c;更是展示个人技术能力和创新思维的重要过程。选择一个合适的毕业设计题目至关重要&#xff0c;它应该既能体现你的专业能力&#xff0c;又能满足实际应用需求&#xff…

作者头像 李华
网站建设 2026/4/18 12:51:24

2026 年 10 大 AI 毕业论文写作工具实测,帮你躺赢毕业季

又到了本科毕业生对着空白文档抓耳挠腮的季节。从选题到定稿&#xff0c;每一步都像闯关。好在 AI 写作工具已经成为学术圈的 “隐形战友”。我们实测了 10 款最火的 AI 毕业论文工具&#xff0c;首推的 paperzz 堪称 “一站式通关神器”&#xff0c;更有 9 款各有绝活的工具&a…

作者头像 李华
网站建设 2026/4/18 8:50:25

批量处理音频文件?这个WebUI工具让你省心又高效

批量处理音频文件&#xff1f;这个WebUI工具让你省心又高效 你是否经历过这样的场景&#xff1a;手头有几十个会议录音、电话访谈或课程音频&#xff0c;需要从中提取有效语音片段&#xff0c;却只能靠人工听一遍再手动标记起止时间&#xff1f;耗时、易错、重复劳动——这正是…

作者头像 李华