电力配网、主网绝缘子缺陷检测数据集深度学习基于YOLOV11电无人机力配网绝缘子缺陷检测数据集 无人机电力主网缺陷检测数据集的训练及英语
📅 2026/7/13 22:12:47
👁️ 阅读次数
📝 编程学习
电力配网、主网绝缘子缺陷检测数据集 ,4904张,提供yolo,voc,coco三种标注方式
图像尺寸:640*640
类别数量:7类
训练集图像数量:4777; 验证集图像数量:114; 测试集图像数量:13
类别名称: 每一类图像数 ,每一类标注数
Dirty_Su22kV - 22kV 绝缘子污秽:772, 1019
Su_22kV - 22kV 绝缘子正常:1016, 3783
Broken_Su22kV - 22kV 绝缘子破损:1029, 1565
DirtyGlass_Su110kV - 110kV 玻璃绝缘子污秽:274, 574
Su_110kV - 110kV 绝缘子正常:1250, 2640
LossGlass_Su110kV - 110kV 玻璃绝缘子缺失(自爆):347, 553
DirtyPolyme_Su110kV - 110kV 复合绝缘子污秽:243, 285
image num: 4904
模型代码:提供全部训练及测试源代码,模型训练使用yolov11n训练,50个epoch训练结果,map如描述图所示。
qt界面:运行界面采用pyqt5编写, 提供全部源代码,支持图片、视频及摄像头进行检测: 界面可实时显示目标位置、目标总数、置信度等信息: 支持检测结果保存;本项目已经训练好模型,配置好环境后可直接使用,运行效果见描述图像、
、
系统环境:python=3.8 opencv-python PyQt5 torch
文件:
1.完整的数据集文件(包括图像,yolo格式的txt文件、yaml文件,voc格式的xml文件等)
2.模型代码完整程序文件(.py .pt等)
3.qt界面源文件、图标(.ui、.qrc、.py等)
、
一、绝缘子缺陷检测数据集信息表
| 项目 | 详情 |
|---|---|
| 数据集名称 | 电力配网、主网绝缘子缺陷检测数据集 |
| 总图片数量 | 4904张 |
| 图像尺寸 | 统一为640×640 |
| 标注格式 | YOLO (.txt) + VOC (.xml) + COCO (.json) 三种格式 |
| 类别数量 | 7类 |
| 数据划分 | 训练集:4777张 验证集:114张 测试集:13张 |
| 适用场景 | 电力线路绝缘子缺陷检测、主网/配网安全监测、目标检测项目、课程实验 |
类别详情表
| 类别ID | 类别名称 | 中文说明 | 图像数 | 标注数 |
|---|---|---|---|---|
| 0 | Dirty_Su22kV | 22kV 绝缘子污秽 | 772 | 1019 |
| 1 | Su_22kV | 22kV 绝缘子正常 | 1016 | 3783 |
| 2 | Broken_Su22kV | 22kV 绝缘子破损 | 1029 | 1565 |
| 3 | DirtyGlass_Su110kV | 110kV 玻璃绝缘子污秽 | 274 | 574 |
| 4 | Su_110kV | 110kV 绝缘子正常 | 1250 | 2640 |
| 5 | LossGlass_Su110kV | 110kV 玻璃绝缘子缺失(自爆) | 347 | 553 |
| 6 | DirtyPolyme_Su110kV | 110kV 复合绝缘子污秽 | 243 | 285 |
二、数据集目录结构
insulator_dataset/ ├── images/ │ ├── train/ │ ├── val/ │ └── test/ ├── labels/ # YOLO格式 │ ├── train/ │ ├── val/ │ └── test/ ├── Annotations/ # VOC格式 (.xml) ├── coco_annotations/ # COCO格式 (.json) └── insulator.yaml # YOLO配置文件insulator.yaml配置文件
path:./insulator_datasettrain:images/trainval:images/valtest:images/testnc:7names:0:Dirty_Su22kV1:Su_22kV2:Broken_Su22kV3:DirtyGlass_Su110kV4:Su_110kV5:LossGlass_Su110kV6:DirtyPolyme_Su110kV三、水印去除脚本(批量处理)
importosimportcv2importnumpyasnpdefremove_watermark(input_dir,output_dir):ifnotos.path.exists(output_dir):os.makedirs(output_dir)forimg_nameinos.listdir(input_dir):ifimg_name.endswith((".jpg",".png")):img_path=os.path.join(input_dir,img_name)img=cv2.imread(img_path)ifimgisNone:continue# 针对黄色水印去除hsv=cv2.cvtColor(img,cv2.COLOR_BGR2HSV)lower_yellow=np.array([20,100,100])upper_yellow=np.array([30,255,255])mask=cv2.inRange(hsv,lower_yellow,upper_yellow)# 修复填充kernel=np.ones((5,5),np.uint8)mask=cv2.dilate(mask,kernel,iterations=1)img_clean=cv2.inpaint(img,mask,3,cv2.INPAINT_TELEA)cv2.imwrite(os.path.join(output_dir,img_name),img_clean)print("水印去除完成!")if__name__=="__main__":remove_watermark("./insulator_dataset/images","./insulator_dataset/images_clean")四、YOLOv11 训练代码(50 epoch)
fromultralyticsimportYOLOdeftrain_insulator():# 加载YOLOv11n模型model=YOLO("yolov11n.pt")results=model.train(data="./insulator_dataset/insulator.yaml",epochs=50,imgsz=640,batch=16,device=0,# 无GPU改为 device="cpu"workers=4,patience=10,pretrained=True,optimizer="Adam",lr0=0.001,warmup_epochs=3,mosaic=0.8,mixup=0.1,project="runs/insulator_train",name="yolov11n_insulator",exist_ok=True)print("训练完成!最优模型路径:",results.save_dir/"weights/best.pt")if__name__=="__main__":train_insulator()五、PyQt5 检测界面完整代码
importsysimportcv2importosfromPyQt5.QtWidgetsimport(QApplication,QMainWindow,QWidget,QVBoxLayout,QHBoxLayout,QPushButton,QLabel,QFileDialog,QTableWidget,QTableWidgetItem,QComboBox)fromPyQt5.QtCoreimportQt,QThread,pyqtSignalfromPyQt5.QtGuiimportQPixmap,QImagefromultralyticsimportYOLOclassDetectThread(QThread):result_ready=pyqtSignal(object)def__init__(self,model,source):super().__init__()self.model=model self.source=source self.running=Truedefrun(self):cap=cv2.VideoCapture(self.source)whileself.runningandcap.isOpened():ret,frame=cap.read()ifnotret:breakres=self.model.predict(frame,conf=0.3)self.result_ready.emit(res[0])cap.release()defstop(self):self.running=FalseclassInsulatorDetectUI(QMainWindow):def__init__(self):super().__init__()self.setWindowTitle("基于YOLOv11的电力绝缘子缺陷检测系统")self.setGeometry(100,100,1200,700)self.model=YOLO("./runs/insulator_train/yolov11n_insulator/weights/best.pt")self.detect_thread=Noneself.init_ui()definit_ui(self):central=QWidget()self.setCentralWidget(central)main_layout=QHBoxLayout(central)# 左侧显示区left_layout=QVBoxLayout()self.label_view=QLabel("图像显示区")self.label_view.setFixedSize(640,480)left_layout.addWidget(self.label_view)# 右侧控制区right_layout=QVBoxLayout()self.btn_img=QPushButton("图片检测")self.btn_video=QPushButton("视频检测")self.btn_camera=QPushButton("摄像头检测")self.btn_save=QPushButton("保存结果")self.btn_exit=QPushButton("退出")self.table_result=QTableWidget()self.table_result.setColumnCount(5)self.table_result.setHorizontalHeaderLabels(["序号","文件路径","类别","置信度","坐标位置"])right_layout.addWidget(QLabel("文件导入"))right_layout.addWidget(self.btn_img)right_layout.addWidget(self.btn_video)right_layout.addWidget(self.btn_camera)right_layout.addWidget(QLabel("检测结果"))right_layout.addWidget(self.table_result)right_layout.addWidget(self.btn_save)right_layout.addWidget(self.btn_exit)main_layout.addLayout(left_layout)main_layout.addLayout(right_layout)# 绑定信号self.btn_img.clicked.connect(self.detect_image)self.btn_video.clicked.connect(self.detect_video)self.btn_camera.clicked.connect(self.detect_camera)self.btn_exit.clicked.connect(self.close)defdetect_image(self):path,_=QFileDialog.getOpenFileName(self,"选择图片","","Images (*.jpg *.png)")ifnotpath:returnimg=cv2.imread(path)res=self.model.predict(img,conf=0.3)[0]self.show_result(res,path)defdetect_video(self):path,_=QFileDialog.getOpenFileName(self,"选择视频","","Videos (*.mp4 *.avi)")ifnotpath:returnself.start_thread(path)defdetect_camera(self):self.start_thread(0)defstart_thread(self,source):ifself.detect_thread:self.detect_thread.stop()self.detect_thread.quit()self.detect_thread=DetectThread(self.model,source)self.detect_thread.result_ready.connect(lambdares:self.show_result(res,"实时流"))self.detect_thread.start()defshow_result(self,res,path=""):img=res.plot()img=cv2.cvtColor(img,cv2.COLOR_BGR2RGB)h,w,c=img.shape qimg=QImage(img.data,w,h,w*c,QImage.Format_RGB888)self.label_view.setPixmap(QPixmap.fromImage(qimg).scaled(640,480,Qt.KeepAspectRatio))# 更新表格self.table_result.setRowCount(len(res.boxes))fori,boxinenumerate(res.boxes):cls=res.names[int(box.cls[0])]conf=float(box.conf[0])x1,y1,x2,y2=map(int,box.xyxy[0])self.table_result.setItem(i,0,QTableWidgetItem(str(i+1)))self.table_result.setItem(i,1,QTableWidgetItem(path))self.table_result.setItem(i,2,QTableWidgetItem(cls))self.table_result.setItem(i,3,QTableWidgetItem(f"{conf:.2%}"))self.table_result.setItem(i,4,QTableWidgetItem(f"[{x1},{y1},{x2},{y2}]"))if__name__=="__main__":app=QApplication(sys.argv)win=InsulatorDetectUI()win.show()sys.exit(app.exec_())六、环境依赖清单requirements.txt
python==3.8 ultralytics==8.3.40 opencv-python PyQt5 torch torchvision numpy
编程学习
技术分享
实战经验