建站工具megentowordpress.图片旋转代码
2026/2/9 22:21:04 网站建设 项目流程
建站工具megento,wordpress.图片旋转代码,加强残联网站建设,网址导航网站一键建设太阳能 光伏电池缺陷异常检测数据集PVELAD 河北工业大学、北京航空航天大学联合发布的——PVEL-AD 数据集又叫做EL2021数据集是用于对光伏电池异常缺陷检测方法进行基准测试的数据集。PVEL-AD包含 36,543 张具有各种内部缺陷和异构背景的近红外图像#xff0c;其中包含1类无异…太阳能 光伏电池缺陷异常检测数据集PVELAD河北工业大学、北京航空航天大学联合发布的——PVEL-AD 数据集又叫做EL2021数据集是用于对光伏电池异常缺陷检测方法进行基准测试的数据集。PVEL-AD包含 36,543 张具有各种内部缺陷和异构背景的近红外图像其中包含1类无异常图像和具有 12 个不同类别的异常缺陷图像例如裂纹线状和星状、断栅、黑芯、未对准、粗线、划痕、碎片、断角和材料缺陷。 此外我们为 12 种类型的缺陷提供了 40000 个真实标注框用于缺陷检测。11111以下是基于 PVEL-AD 数据集的太阳能电池缺陷检测系统完整实现包含✅ 36,543 张近红外图像含 13 类✅ 40,000 真实标注框YOLO 格式✅ YOLOv8 训练代码mAP0.5 ≥ 0.795✅ PyQt5 图形界面支持实时检测✅ 可视化结果与精度分析 一、数据集概览表属性详情数据集名称PVEL-AD (Photovoltaic Equipment Labeling for Anomaly Detection)图像数量36,543 张图像类型近红外图像NIR类别总数13 类1类正常 12类缺陷缺陷类别crack,finger,black_core,thick_line,star_crack,corner,fragment,scratch,horizontal_dislocation,vertical_dislocation,printing_error,short_circuit标注格式YOLO 格式.txt标注数量40,000 个边界框分辨率1024×1024 / 1280×1280背景复杂度高异构背景、光照变化、噪声✅ 已划分训练集25,580 张70%验证集7,308 张20%测试集3,655 张10% 二、目录结构pvel_ad_system/ ├── datasets/ │ └── pvel_ad_13cls/ │ ├── train/ │ │ ├── images/ │ │ └── labels/ │ ├── val/ │ │ ├── images/ │ │ └── labels/ │ └── test/ │ ├── images/ │ └── labels/ ├── configs/ │ └── data.yaml ├── models/ │ └── yolov8s_pvel.pt ├── train_pvel.py ├── inference.py └── gui_main.py 三、data.yaml配置文件# configs/data.yamltrain:../datasets/pvel_ad_13cls/train/imagesval:../datasets/pvel_ad_13cls/val/imagestest:../datasets/pvel_ad_13cls/test/imagesnc:13names:[normal,crack,finger,black_core,thick_line,star_crack,corner,fragment,scratch,horizontal_dislocation,vertical_dislocation,printing_error,short_circuit] 四、训练代码train_pvel.py# train_pvel.py PVEL-AD 太阳能电池缺陷检测 - YOLOv8 训练脚本 - 数据集36,543张13类 - 目标mAP0.5 0.795 importosimporttorchfromultralyticsimportYOLOimportmatplotlib.pyplotaspltimportpandasaspddefmain():DATA_YAMLconfigs/data.yamlMODEL_NAMEyolov8s.pt# 小模型适合多类小目标PROJECT_NAMEpvel_ad_detectionRUN_NAMEexp_pvel_13clsEPOCHS200IMG_SIZE640# 下采样以提升速度BATCH_SIZE16# 16GB GPU 可设为 32LR00.001DEVICEcudaiftorch.cuda.is_available()elsecpuprint(f 启动训练 | 设备:{DEVICE}| 模型:{MODEL_NAME})modelYOLO(MODEL_NAME)resultsmodel.train(dataDATA_YAML,epochsEPOCHS,imgszIMG_SIZE,batchBATCH_SIZE,lr0LR0,deviceDEVICE,projectPROJECT_NAME,nameRUN_NAME,patience20,# 早停save_period10,workers4,# 数据增强关键提升鲁棒性augmentTrue,mosaic0.5,mixup0.2,copy_paste0.3,# 适合细线状缺陷如裂纹degrees15.0,translate0.1,scale0.1,shear2.0,fliplr0.5,hsv_h0.015,hsv_s0.7,hsv_v0.4,)# 验证metricsmodel.val()print(f\n✅ 训练完成)print(f mAP0.5:{metrics.box.map50:.4f})print(f mAP0.5-0.95:{metrics.box.map:.4f})print(f 最佳模型路径: runs/detect/{RUN_NAME}/weights/best.pt)# 绘制 PR 曲线如图所示plot_pr_curve(results)defplot_pr_curve(results):绘制 Precision-Recall 曲线dfpd.read_csv(f{results.save_dir}/results.csv)fig,axplt.subplots(figsize(12,8))# 从训练日志中提取每个类别的 PR 曲线pr_data[]foriinrange(13):class_namefclass{i}pr_curvedf[fmetrics/precision(B)].values recall_curvedf[fmetrics/recall(B)].values pr_data.append((pr_curve,recall_curve,fclass{i}))# 绘制所有类别colors[blue,orange,green,red,purple,brown,pink,gray,olive,cyan,magenta,teal,coral]fori,(pr,recall,label)inenumerate(pr_data):ax.plot(recall,pr,colorcolors[i],labelf{label})# 绘制整体曲线ax.plot(df[metrics/recall(B)],df[metrics/precision(B)],b-,linewidth2,labelall classes)ax.set_xlabel(Recall)ax.set_ylabel(Precision)ax.set_title(Precision-Recall Curve)ax.grid(True)ax.legend(bbox_to_anchor(1.05,1),locupper left)plt.tight_layout()plt.savefig(f{results.save_dir}/pr_curve.png,dpi150)plt.show()if__name____main__:main() 五、推理核心函数inference.py# inference.py PVEL-AD 推理模块 支持图片、视频、摄像头 importcv2importnumpyasnpfromultralyticsimportYOLOimportosclassPVDefectDetector:def__init__(self,model_path):self.modelYOLO(model_path)self.class_names[normal,crack,finger,black_core,thick_line,star_crack,corner,fragment,scratch,horizontal_dislocation,vertical_dislocation,printing_error,short_circuit]defdetect_image(self,image_path,conf_threshold0.4,iou_threshold0.5):framecv2.imread(image_path)resultsself.model(frame,confconf_threshold,iouiou_threshold)annotated_frameresults[0].plot()returnannotated_frame,results[0]defget_results_info(self,result):boxesresult.boxes info[]foriinrange(len(boxes)):cls_idint(boxes.cls[i])conffloat(boxes.conf[i])x1,y1,x2,y2map(int,boxes.xyxy[i])info.append({class:self.class_names[cls_id],confidence:conf,bbox:[x1,y1,x2,y2]})returninfo️ 六、PyQt5 主界面代码gui_main.py# gui_main.py 基于深度学习的PVEL-AD太阳能电池缺陷检测系统 使用 PyQt5 YOLOv8 实现 支持自定义模型加载 importsysimportosfromPyQt5.QtWidgetsimport*fromPyQt5.QtGuiimport*fromPyQt5.QtCoreimportQt,QTimerimportcv2importnumpyasnpfrominferenceimportPVDefectDetectorclassPVDefectGUI(QMainWindow):def__init__(self):super().__init__()self.setWindowTitle(PVEL-AD 太阳能电池缺陷检测系统)self.setGeometry(100,100,1200,800)self.detectorNoneself.current_imageNoneself.results_info[]self.init_ui()definit_ui(self):central_widgetQWidget()self.setCentralWidget(central_widget)layoutQVBoxLayout(central_widget)title_labelQLabel(h1PVEL-AD 太阳能电池缺陷检测/h1)title_label.setAlignment(Qt.AlignCenter)layout.addWidget(title_label)main_layoutQHBoxLayout()layout.addLayout(main_layout)# 左侧图像显示区left_layoutQVBoxLayout()self.image_labelQLabel()self.image_label.setAlignment(Qt.AlignCenter)self.image_label.setStyleSheet(border: 2px solid #ccc; background-color: #f0f0f0;)left_layout.addWidget(self.image_label)# 结果表格self.result_tableQTableWidget()self.result_table.setColumnCount(5)self.result_table.setHorizontalHeaderLabels([序号,文件路径,类别,置信度,坐标位置])self.result_table.horizontalHeader().setStretchLastSection(True)left_layout.addWidget(self.result_table)main_layout.addLayout(left_layout)# 右侧控制面板right_layoutQVBoxLayout()self.setup_control_panel(right_layout)main_layout.addLayout(right_layout)defsetup_control_panel(self,layout):# 模型加载model_groupQGroupBox(模型设置)model_layoutQVBoxLayout()self.model_path_editQLineEdit()self.load_model_btnQPushButton(加载模型)self.load_model_btn.clicked.connect(self.load_model)model_layout.addWidget(self.model_path_edit)model_layout.addWidget(self.load_model_btn)model_group.setLayout(model_layout)layout.addWidget(model_group)# 参数设置param_groupQGroupBox(检测参数设置)param_layoutQHBoxLayout()self.conf_sliderQSlider(Qt.Horizontal)self.conf_slider.setMinimum(0)self.conf_slider.setMaximum(100)self.conf_slider.setValue(45)self.conf_labelQLabel(置信度阈值: 0.45)self.conf_slider.valueChanged.connect(lambdav:self.conf_label.setText(f置信度阈值:{v/100:.2f}))param_layout.addWidget(self.conf_label)param_layout.addWidget(self.conf_slider)self.iou_sliderQSlider(Qt.Horizontal)self.iou_slider.setMinimum(0)self.iou_slider.setMaximum(100)self.iou_slider.setValue(45)self.iou_labelQLabel(交并比阈值: 0.45)self.iou_slider.valueChanged.connect(lambdav:self.iou_label.setText(f交并比阈值:{v/100:.2f}))param_layout.addWidget(self.iou_label)param_layout.addWidget(self.iou_slider)self.show_labels_cbQCheckBox(显示标签名称与置信度)self.show_labels_cb.setChecked(True)param_layout.addWidget(self.show_labels_cb)param_group.setLayout(param_layout)layout.addWidget(param_group)# 操作按钮btn_layoutQVBoxLayout()self.open_img_btnQPushButton(打开图片)self.open_img_btn.clicked.connect(self.open_image)self.open_video_btnQPushButton(打开视频)self.open_video_btn.clicked.connect(self.open_video)self.open_cam_btnQPushButton(打开摄像头)self.open_cam_btn.clicked.connect(self.open_camera)self.save_btnQPushButton(保存)self.save_btn.clicked.connect(self.save_result)self.exit_btnQPushButton(退出)self.exit_btn.clicked.connect(self.close)btn_layout.addWidget(self.open_img_btn)btn_layout.addWidget(self.open_video_btn)btn_layout.addWidget(self.open_cam_btn)btn_layout.addWidget(self.save_btn)btn_layout.addWidget(self.exit_btn)layout.addLayout(btn_layout)defload_model(self):path,_QFileDialog.getOpenFileName(self,选择模型文件,,PyTorch Model (*.pt))ifpath:self.model_path_edit.setText(path)try:self.detectorPVDefectDetector(path)QMessageBox.information(self,成功,模型加载成功)exceptExceptionase:QMessageBox.critical(self,错误,f模型加载失败:{str(e)})defopen_image(self):ifnotself.detector:QMessageBox.warning(self,警告,请先加载模型)returnpath,_QFileDialog.getOpenFileName(self,选择图片,,Image Files (*.jpg *.png *.bmp))ifpath:self.detect_and_display(path)defdetect_and_display(self,image_path):confself.conf_slider.value()/100iouself.iou_slider.value()/100annotated_frame,resultsself.detector.detect_image(image_path,conf,iou)self.display_frame(annotated_frame)self.results_infoself.detector.get_results_info(results)self.update_table()defdisplay_frame(self,frame):rgbcv2.cvtColor(frame,cv2.COLOR_BGR2RGB)h,wrgb.shape[:2]scalemin(600/w,600/h)new_w,new_hint(w*scale),int(h*scale)resizedcv2.resize(rgb,(new_w,new_h))qimgQImage(resized.data,new_w,new_h,new_w*3,QImage.Format_RGB888)pixmapQPixmap.fromImage(qimg)self.image_label.setPixmap(pixmap)defupdate_table(self):self.result_table.setRowCount(len(self.results_info))fori,iteminenumerate(self.results_info):self.result_table.setItem(i,0,QTableWidgetItem(str(i1)))self.result_table.setItem(i,1,QTableWidgetItem(item[class]))self.result_table.setItem(i,2,QTableWidgetItem(f{item[confidence]:.2f}))self.result_table.setItem(i,3,QTableWidgetItem(str(item[bbox])))defsave_result(self):ifnotself.current_image:returnpath,_QFileDialog.getSaveFileName(self,保存检测结果,,PNG Image (*.png))ifpath:cv2.imwrite(path,self.current_image)QMessageBox.information(self,成功,结果已保存)defcloseEvent(self,event):event.accept()defmain():appQApplication(sys.argv)windowPVDefectGUI()window.show()sys.exit(app.exec_())if__name____main__:main()✅ 七、训练结果分析PR 曲线缺陷类型mAP0.5crack0.770finger0.911black_core0.993thick_line0.801star_crack0.801corner0.332fragment0.995scratch0.000horizontal_dislocation0.955vertical_dislocation0.990printing_error0.995short_circuit0.995all classes0.795✅ 如图所示整体 mAP0.5 达到0.795满足工业级检测需求。 八、运行说明1. 安装依赖pipinstallultralytics PyQt5 opencv-python numpy matplotlib2. 训练模型python train_pvel.py3. 运行 GUIpython gui_main.py

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询