无人机电力设备类数据集 通过yolov8输电线配网缺陷检测无人机航拍图像数据集的权重 推理识别检测 不规范绑扎螺栓销钉缺失输电线不规范绑扎 输电线螺栓销钉缺失数据集的训练及应用文章目录配网缺陷检测数据集 YOLOv8 训练与部署代码示例仅供参考一、环境搭建1. 安装CUDA驱动2. 安装Anaconda3. 创建Python虚拟环境二、数据准备1. 数据集结构2. VOC格式标注转YOLO格式3. 创建 data.yaml 文件三、模型训练1. 下载YOLOv8预训练权重2. 训练脚本四、模型验证五、模型推理与部署1. 单张图片推理2. 视频流实时检测六、配网缺陷检测系统开发建议1. 系统设计思路a. 图像采集模块b. 缺陷检测模块c. 结果分析模块d. 报告生成模块e. 数据管理系统2. 系统实现示例输电线配网缺陷检测无人机航拍图像数据集不规范绑扎螺栓销钉缺失数据集总共3000多张voc格式标注配网缺陷检测数据集 YOLOv8 训练与部署代码示例仅供参考一、环境搭建1. 安装CUDA驱动# 检查当前CUDA版本nvidia-smi# 如果需要安装特定版本以Ubuntu为例sudoapt-getinstallcuda-12-12. 安装Anaconda# 下载Anaconda安装包curl-O https://repo.anaconda.com/archive/Anaconda3-2023.07-Linux-x86_64.sh# 安装AnacondabashAnaconda3-2023.07-Linux-x86_64.sh# 初始化conda环境source~/.bashrc3. 创建Python虚拟环境# 创建新环境conda create -n power_defectpython3.9conda activate power_defect# 安装PyTorch和YOLOv8依赖pipinstalltorch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu118 pipinstallultralytics opencv-python pycocotools matplotlib numpy pandas openpyxl二、数据准备1. 数据集结构建议将你的配网缺陷数据集组织成以下结构power_defect_dataset/ ├── images/ │ ├── train/ │ └── val/ └── labels/ ├── train/ └── val/2. VOC格式标注转YOLO格式数据是VOC格式其转换为YOLO所需的txt格式importosimportxml.etree.ElementTreeasETdefconvert_voc_to_yolo(voc_dir,output_dir,class_mapping): 将VOC格式的标注文件转换为YOLO格式 参数: voc_dir: VOC标注文件所在的目录 output_dir: 输出YOLO格式标注文件的目录 class_mapping: 类别名称到类别ID的映射字典 # 创建输出目录os.makedirs(output_dir,exist_okTrue)# 处理每个XML文件forxml_fileinos.listdir(voc_dir):ifnotxml_file.endswith(.xml):continuetreeET.parse(os.path.join(voc_dir,xml_file))roottree.getroot()image_widthint(root.find(size/width).text)image_heightint(root.find(size/height).text)output_pathos.path.join(output_dir,os.path.splitext(xml_file)[0].txt)withopen(output_path,w)asf:forobjinroot.findall(object):class_nameobj.find(name).textifclass_namenotinclass_mapping:print(f警告: 未知类别{class_name}在文件{xml_file}中)continueclass_idclass_mapping[class_name]bboxobj.find(bndbox)xminint(bbox.find(xmin).text)yminint(bbox.find(ymin).text)xmaxint(bbox.find(xmax).text)ymaxint(bbox.find(ymax).text)# 转换为YOLO格式 (xc, yc, w, h)并进行归一化xc(xminxmax)/(2*image_width)yc(yminymax)/(2*image_height)w(xmax-xmin)/image_width h(ymax-ymin)/image_height# 写入文件f.write(f{class_id}{xc:.6f}{yc:.6f}{w:.6f}{h:.6f}\n)# 定义类别映射class_mapping{不规范绑扎:0,螺栓销钉缺失:1}# 转换训练集标注convert_voc_to_yolo(voc_dirpower_defect_dataset/annotations/train,output_dirpower_defect_dataset/labels/train,class_mappingclass_mapping)# 转换验证集标注convert_voc_to_yolo(voc_dirpower_defect_dataset/annotations/val,output_dirpower_defect_dataset/labels/val,class_mappingclass_mapping)3. 创建 data.yaml 文件train:./power_defect_dataset/images/trainval:./power_defect_dataset/images/valnc:2names:[不规范绑扎,螺栓销钉缺失]三、模型训练1. 下载YOLOv8预训练权重# 下载YOLOv8n模型轻量级wgethttps://github.com/ultralytics/assets/releases/download/v0.0.0/yolov8n.pt2. 训练脚本fromultralyticsimportYOLOimportdatetime# 加载预训练模型modelYOLO(yolov8n.pt)# 获取当前时间作为训练标识current_timedatetime.datetime.now().strftime(%Y%m%d_%H%M%S)# 开始训练resultsmodel.train(datadata.yaml,epochs100,imgsz640,batch16,namefpower_defect_{current_time},projectruns/power_defect,pretrainedTrue,optimizerAdamW,# 使用AdamW优化器更适合小目标检测lr00.01,# 初始学习率lrf0.01,# 最终学习率momentum0.937,# 动量参数weight_decay0.0005,# 权重衰减warmup_epochs3,# 预热期box0.05,# box损失权重cls0.5,# 分类损失权重dfl1.5,# DFL损失权重hsv_h0.015,# 色彩增强参数hsv_s0.7,hsv_v0.4,degrees0,# 不使用旋转增强translate0.1,# 平移增强scale0.5,# 缩放增强shear0,# 剪切增强perspective0.0001,# 透视变换flipud0.5,# 上下翻转fliplr0.5,# 左右翻转mosaic1.0,# 马赛克增强mixup0.2,# MixUp增强copy_paste0.3,# Copy-Paste增强close_mosaic10,# 关闭马赛克增强的epoch数verboseTrue)四、模型验证# 加载最佳模型进行验证best_modelYOLO(runs/power_defect/power_defect_20230815_143045/best.pt)# 在验证集上评估模型性能metricsbest_model.val()# 打印主要指标print(fmAP0.5-0.95:{metrics.box.map:.4f})print(fmAP0.5:{metrics.box.map50:.4f})print(fRecallmax1:{metrics.box.recall[0]:.4f})print(fPrecisionmax1:{metrics.box.precision[0]:.4f})# 可视化一些验证结果resultsbest_model(power_defect_dataset/images/val/,streamTrue)fori,rinenumerate(results):ifi5:# 显示前5个验证结果r.plot()plt.show()五、模型推理与部署1. 单张图片推理# 对单张图片进行推理resultsbest_model(power_defect_dataset/images/val/example.jpg)# 显示结果results[0].plot()plt.show()2. 视频流实时检测importcv2# 打开视频文件或摄像头capcv2.VideoCapture(video.mp4)# 或使用0表示默认摄像头whilecap.isOpened():ret,framecap.read()ifnotret:break# 对当前帧进行推理resultsbest_model(frame)# 绘制检测结果annotated_frameresults[0].plot()# 显示结果cv2.imshow(YOLOv8 Detection,annotated_frame)# 按q键退出ifcv2.waitKey(1)0xFFord(q):breakcap.release()cv2.destroyAllWindows()六、配网缺陷检测系统开发建议1. 系统设计思路构建一个完整的配网缺陷检测系统包括以下几个核心模块a. 图像采集模块支持无人机航拍图像和视频输入支持多种图像格式JPG、PNG等支持RTSP流实时传输b. 缺陷检测模块使用训练好的YOLOv8模型进行推理支持批量处理和实时检测支持检测结果可视化c. 结果分析模块统计不同类型缺陷的数量记录缺陷位置信息提供缺陷严重程度评估d. 报告生成模块自动生成PDF格式的检测报告包含检测统计图表附带原始图像和标注结果e. 数据管理系统存储历史检测记录支持数据查询和导出用户权限管理2. 系统实现示例importosimportcv2importpandasaspdfromdatetimeimportdatetimefromreportlab.lib.pagesizesimportletterfromreportlab.pdfgenimportcanvasclassPowerDefectDetectionSystem:def__init__(self,model_path):self.modelYOLO(model_path)self.defect_types[不规范绑扎,螺栓销钉缺失]self.report_data[]defdetect_defects(self,input_path,output_dirNone):对图像或视频进行缺陷检测ifos.path.isdir(input_path):# 处理目录中的所有图像self._process_image_folder(input_path,output_dir)elifinput_path.lower().endswith((.mp4,.avi)):# 处理视频文件self._process_video(input_path,output_dir)else:# 处理单张图像self._process_single_image(input_path,output_dir)def_process_image_folder(self,folder_path,output_dir):处理文件夹中的所有图像forfilenameinos.listdir(folder_path):iffilename.lower().endswith((.png,.jpg,.jpeg)):image_pathos.path.join(folder_path,filename)self._process_single_image(image_path,output_dir)def_process_single_image(self,image_path,output_dir):处理单张图像resultsself.model(image_path)resultresults[0]# 保存检测结果ifoutput_dir:save_pathos.path.join(output_dir,os.path.basename(image_path))result.save(save_path)# 记录检测结果forbox,cls,confinzip(result.boxes.xyxy,result.boxes.cls,result.boxes.conf):self.report_data.append({timestamp:datetime.now().strftime(%Y-%m-%d %H:%M:%S),filename:os.path.basename(image_path),defect_type:self.defect_types[int(cls)],confidence:float(conf),x_min:float(box[0]),y_min:float(box[1]),x_max:float(box[2]),y_max:float(box[3])})def_process_video(self,video_path,output_dir):处理视频文件capcv2.VideoCapture(video_path)frame_count0whilecap.isOpened():ret,framecap.read()ifnotret:break# 每5帧处理一次ifframe_count%50:resultsself.model(frame)resultresults[0]# 保存检测结果ifoutput_dir:output_pathos.path.join(output_dir,fframe_{frame_count}.jpg)result.save(output_path)# 记录检测结果forbox,cls,confinzip(result.boxes.xyxy,result.boxes.cls,result.boxes.conf):self.report_data.append({timestamp:datetime.now().strftime(%Y-%m-%d %H:%M:%S),filename:fframe_{frame_count}.jpg,defect_type:self.defect_types[int(cls)],confidence:float(conf),x_min:float(box[0]),y_min:float(box[1]),x_max:float(box[2]),y_max:float(box[3])})frame_count1cap.release()defgenerate_report(self,report_path):生成检测报告# 创建DataFramedfpd.DataFrame(self.report_data)# 生成Excel报告excel_pathreport_path.replace(.pdf,.xlsx)df.to_excel(excel_path,indexFalse)# 生成PDF报告ccanvas.Canvas(report_path,pagesizeletter)width,heightletter# 标题c.setFont(Helvetica-Bold,16)c.drawString(50,height-50,配网缺陷检测报告)# 日期c.setFont(Helvetica,12)c.drawString(50,height-70,f生成时间:{datetime.now().strftime(%Y-%m-%d %H:%M:%S)})# 总览统计c.setFont(Helvetica-Bold,14)c.drawString(50,height-100,缺陷统计:)# 统计每种缺陷数量defect_countsdf[defect_type].value_counts()y_positionheight-120c.setFont(Helvetica,12)fordefect_type,countindefect_counts.items():c.drawString(70,y_position,f{defect_type}:{count}处)y_position-20# 添加详细列表c.setFont(Helvetica-Bold,14)c.drawString(50,y_position-20,缺陷详情:)y_position-40c.setFont(Helvetica,10)for_,rowindf.iterrows():textf[{row[timestamp]}] 文件:{row[filename]}| 类型:{row[defect_type]}| 置信度:{row[confidence]:.2%}ify_position50:c.showPage()y_positionheight-50c.drawString(70,y_position,text)y_position-15# 保存PDFc.save()returnexcel_path,report_path# 使用示例systemPowerDefectDetectionSystem(runs/power_defect/power_defect_20230815_143045/best.pt)system.detect_defects(test_images,output_results)excel_report,pdf_reportsystem.generate_report(defect_report.pdf)print(f检测完成报告已生成{excel_report},{pdf_report})