YOLO数据集 目标检测算法 光伏面板缺陷检测数据集 基于深度学习YOLOV11光伏面板缺陷检测系统 识别鸟粪 积雪 无缺陷 尘土 -物理损坏的检测

张开发
2026/4/16 12:50:58 15 分钟阅读

分享文章

YOLO数据集 目标检测算法 光伏面板缺陷检测数据集 基于深度学习YOLOV11光伏面板缺陷检测系统 识别鸟粪 积雪 无缺陷 尘土 -物理损坏的检测
YOLO数据集 目标检测算法 光伏面板缺陷检测数据集 基于深度学习YOLOV11光伏面板缺陷检测系统 识别鸟粪 积雪 无缺陷 尘土 -物理损坏的检测智慧电力-光伏面板缺陷检测数据集3636张提供yolo和voc两种标注方式6类标注数量Defective-缺陷: 2090Bird Drop-鸟粪: 2217Snow-积雪: 2185Non Defective-无缺陷: 2273Dust-尘土: 2185Physical Damage-物理损坏: 2302image num: 36362.模型代码模型训练使用yolov11n训练30个epoch训练结果map如描述图所示提供全套代码和训练好的权重文件。3.qt界面可视化运行界面采用pyqt编写可视化界面简单友好本项目已经训练好模型配置好环境后可直接使用运行效果见描述图像好的根据您提供的光伏面板污损检测数据集信息这是一个基于 YOLOv11 的目标检测系统。以下是该项目的详细表格描述及构建代码。光伏面板污损检测系统描述类别内容系统名称基于 YOLOv11 的光伏面板污损检测系统核心算法YOLOv11n (Ultralytics)检测任务光伏面板表面缺陷与污损检测检测类别6 类Defective (缺陷), Bird Drop (鸟粪), Snow (积雪), Non Defective (无缺陷), Dust (尘土), Physical Damage (物理损坏)数据集规模图像总数3636 张标注总数13252 个标注格式提供YOLO(.txt) 和VOC(.xml) 两种格式模型性能mAP0.5: 0.562 (所有类别平均)- Defective: 0.767- Bird Drop: 0.361- Snow: 0.546- Non Defective: 0.946- Dust: 0.541- Physical Damage: 0.212训练配置Epochs: 30模型:yolov11n.pt用户界面基于PyQt5开发的图形化界面系统功能- 图片/视频文件导入检测- 实时摄像头检测- 检测结果显示类别、置信度、坐标- 检测结果统计与保存构建系统代码1. 数据配置文件创建data.yaml文件用于指定数据集路径和类别信息。# data.yaml# 数据集根目录 (请修改为您的实际路径)path:/path/to/your/pv_dataset# 训练集和验证集图片路径 (相对于 path)train:images/trainval:images/val# 类别数量nc:6# 类别名称 (请确保与您的标注文件中的索引顺序一致)names:0:Defective1:Bird Drop2:Snow3:Non Defective4:Dust5:Physical Damage2. 模型训练代码创建train.py文件用于训练 YOLOv11n 模型。# train.pyfromultralyticsimportYOLOdefmain():# 1. 加载预训练模型# yolov11n.yaml 表示从头开始训练yolov11n.pt 表示加载预训练权重进行微调modelYOLO(yolov11n.pt)# 2. 开始训练resultsmodel.train(datadata.yaml,# 数据配置文件路径epochs30,# 训练轮次imgsz640,# 输入图像尺寸batch16,# 批次大小根据显存调整namepv_defect_v11n,# 训练任务名称结果将保存在 runs/detect/ 目录下device0# 使用的设备0 代表第一块 GPUcpu 代表使用 CPU)if__name____main__:main()3. PyQt5 图形用户界面代码创建gui.py文件实现图片检测的图形界面。# gui.pyimportsysimportcv2fromPyQt5.QtWidgetsimport(QApplication,QMainWindow,QWidget,QVBoxLayout,QHBoxLayout,QPushButton,QLabel,QFileDialog,QMessageBox)fromPyQt5.QtGuiimportQPixmap,QImagefromPyQt5.QtCoreimportQtfromultralyticsimportYOLOimportnumpyasnp# --- 配置 ---MODEL_PATHruns/detect/pv_defect_v11n/weights/best.pt# 训练好的模型权重路径CLASSES[Defective,Bird Drop,Snow,Non Defective,Dust,Physical Damage]classPVDetectionApp(QMainWindow):def__init__(self):super().__init__()self.setWindowTitle(基于YOLOv11的光伏面板污损检测)self.setGeometry(100,100,1000,700)# 加载模型try:self.modelYOLO(MODEL_PATH)exceptExceptionase:QMessageBox.critical(self,错误,f模型加载失败:{e})sys.exit(1)# 创建界面组件self.image_labelQLabel(等待加载图片...,self)self.image_label.setAlignment(Qt.AlignCenter)self.image_label.setMinimumSize(640,480)self.btn_loadQPushButton(加载图片)self.btn_detectQPushButton(开始检测)self.btn_saveQPushButton(保存结果)self.info_labelQLabel(检测结果将显示在这里,self)self.info_label.setWordWrap(True)# 布局btn_layoutQHBoxLayout()btn_layout.addWidget(self.btn_load)btn_layout.addWidget(self.btn_detect)btn_layout.addWidget(self.btn_save)main_layoutQVBoxLayout()main_layout.addWidget(self.image_label)main_layout.addLayout(btn_layout)main_layout.addWidget(self.info_label)containerQWidget()container.setLayout(main_layout)self.setCentralWidget(container)# 连接信号与槽self.btn_load.clicked.connect(self.load_image)self.btn_detect.clicked.connect(self.detect_image)self.btn_save.clicked.connect(self.save_image)self.current_pixmapNoneself.result_pixmapNonedefload_image(self):file_path,_QFileDialog.getOpenFileName(self,选择图片,,Image Files (*.png *.jpg *.bmp))iffile_path:self.current_pixmapQPixmap(file_path)self.image_label.setPixmap(self.current_pixmap.scaled(self.image_label.size(),Qt.KeepAspectRatio,Qt.SmoothTransformation))self.info_label.setText(f已加载图片:{file_path})self.result_pixmapNonedefdetect_image(self):ifnotself.current_pixmap:QMessageBox.warning(self,警告,请先加载图片)return# 将 QPixmap 转换为 OpenCV 格式 (numpy array)qimgself.current_pixmap.toImage()ptrqimg.bits()ptr.setsize(qimg.byteCount())imgnp.array(ptr).reshape(qimg.height(),qimg.width(),4)# 4 channels for RGBAimgcv2.cvtColor(img,cv2.COLOR_RGBA2BGR)# Convert to BGR for YOLO# 进行推理resultsself.model(img)resultresults[0]# 在原图上绘制结果info_text检测结果:\nforboxinresult.boxes:x1,y1,x2,y2map(int,box.xyxy[0].tolist())confbox.conf[0].item()clsint(box.cls[0].item())labelf{CLASSES[cls]}:{conf:.2f}# 绘制矩形框和标签cv2.rectangle(img,(x1,y1),(x2,y2),(0,255,0),2)cv2.putText(img,label,(x1,y1-10),cv2.FONT_HERSHEY_SIMPLEX,0.5,(0,255,0),2)info_textf-{label}at [{x1},{y1},{x2},{y2}]\n# 将 OpenCV 图像转换回 QPixmap 显示img_rgbcv2.cvtColor(img,cv2.COLOR_BGR2RGB)h,w,chimg_rgb.shape bytes_per_linech*w qimg_resultQImage(img_rgb.data,w,h,bytes_per_line,QImage.Format_RGB888)self.result_pixmapQPixmap.fromImage(qimg_result)self.image_label.setPixmap(self.result_pixmap.scaled(self.image_label.size(),Qt.KeepAspectRatio,Qt.SmoothTransformation))self.info_label.setText(info_text)defsave_image(self):ifnotself.result_pixmap:QMessageBox.warning(self,警告,没有可保存的检测结果)returnfile_path,_QFileDialog.getSaveFileName(self,保存图片,,Image Files (*.png *.jpg *.bmp))iffile_path:self.result_pixmap.save(file_path)QMessageBox.information(self,成功,f图片已保存至:{file_path})if__name____main__:appQApplication(sys.argv)windowPVDetectionApp()window.show()sys.exit(app.exec_())运行说明安装依赖pipinstallultralytics opencv-python PyQt5准备数据将您的数据集按照data.yaml中定义的结构放好。训练模型运行python train.py。训练完成后最佳权重会保存在runs/detect/pv_defect_v11n/weights/best.pt。运行界面确保gui.py中的MODEL_PATH指向您训练好的best.pt文件。运行python gui.py启动图形界面。以上步骤涵盖了从环境配置到模型训练及界面运行的完整流程。

更多文章