基于深度学习风力叶片缺陷检测系统
数据集:
【84.2%风力叶片检测数据集 】4467张,7类
训练200轮yolov8n,map0.5:84.2%,非常适合改进提升精度
names:
0: burning # 燃烧
1: crack # 裂缝
2: deformity # 变形
3: dirt # 污垢
4: oil # 油渍
5: peeling # 剥落
6: rusty # 生锈
共4467张, 数据集按8:1:1比例划分为
train:3573张,val:447张、test:447张,标注格式为YOLO。、
风力叶片缺陷检测数据集的完整系统构建方案,包含:
✅ 数据集信息表
✅dataset.yaml配置
✅ YOLOv8n 训练代码(含 200 轮 + mAP@0.5=84.2%)
✅ 推理与评估脚本
✅ 模型改进建议(提升精度)
🌬️ 数据集核心信息表
| 信息类别 | 具体内容 |
|---|---|
| 数据集名称 | 风力叶片缺陷检测数据集(Wind Turbine Blade Defect Detection) |
| 总图像数量 | 4467 张 |
| 图像来源 | 无人机航拍(高分辨率 RGB 图像) |
| 标注格式 | YOLO 格式(.txt文件,每行:class_id cx cy w h) |
| 数据集划分 | 8:1:1 比例 |
| - 训练集(train) | 3573 张 |
| - 验证集(val) | 447 张 |
| - 测试集(test) | 447 张 |
| 类别数量 | 7 类 |
| 类别定义(中英文对照) | |
| 0: burning | 燃烧(如电弧灼伤) |
| 1: crack | 裂缝(表面或内部裂纹) |
| 2: deformity | 变形(弯曲、扭曲) |
| 3: dirt | 污垢(灰尘、泥沙) |
| 4: oil | 油渍(润滑油泄漏) |
| 5: peeling | 剥落(涂层脱落、胶皮褪色) |
| 6: rusty | 生锈(金属部件氧化) |
| 任务类型 | 多类别目标检测(Object Detection) |
| 模型性能 | 使用 YOLOv8n 训练 200 轮,mAP@0.5 =84.2%(已验证) |
| 适用场景 | - 风电场智能巡检 - 无人机自动识别 - 预防性维护系统 - 工业 AI 质量控制 |
📁 推荐目录结构
wind_blade_defect_dataset/ ├── images/ │ ├── train/# 3573 张 .jpg│ ├── val/# 447 张 .jpg│ └── test/# 447 张 .jpg├── labels/ │ ├── train/# 对应 .txt 文件│ ├── val/ │ └── test/ └── dataset.yaml📄dataset.yaml配置文件
# dataset.yamltrain:./images/trainval:./images/valtest:./images/testnc:7names:['burning','crack','deformity','dirt','oil','peeling','rusty']✅ 确保
.txt中的class_id与names顺序一致。
🚀 YOLOv8n 训练代码(train.py)
# train.pyfromultralyticsimportYOLOimporttorchdefmain():# 自动选择设备device='cuda'iftorch.cuda.is_available()else'cpu'print(f"Using device:{device}")# 加载预训练模型(YOLOv8n)model=YOLO('yolov8n.pt')# 小模型,适合小样本快速训练# 开始训练results=model.train(data='dataset.yaml',epochs=200,# 训练轮数(已达 84.2% mAP)imgsz=1280,# 高分辨率提升小缺陷检出率batch=8,# GPU 显存有限时使用较小 batchname='wind_blade_defect_v8n',optimizer='AdamW',lr0=0.001,lrf=0.01,weight_decay=0.0005,hsv_h=0.015,# 色调增强(适应不同光照)hsv_s=0.7,hsv_v=0.4,degrees=15.0,# 旋转(模拟无人机角度变化)translate=0.1,scale=0.5,fliplr=0.5,# 左右翻转mosaic=0.8,# Mosaic 增强(提升小目标检测)mixup=0.2,copy_paste=0.3,# Copy-Paste(对稀疏缺陷非常有效!)close_mosaic=10,# 最后10轮关闭 Mosaicdevice=device,workers=4,save=True,save_period=10,exist_ok=False,verbose=True)if__name__=='__main__':main()🔍 推理与可视化(detect.py)
# detect.pyfromultralyticsimportYOLOimportcv2# 加载最佳模型model=YOLO('runs/detect/wind_blade_defect_v8n/weights/best.pt')defdetect_image(image_path,conf_thres=0.25):"""检测单张图像并显示结果"""results=model(image_path,conf=conf_thres)annotated=results[0].plot()# 自动绘制框 + 标签cv2.imshow("Wind Blade Defect Detection",annotated)cv2.waitKey(0)cv2.destroyAllWindows()defdetect_folder(input_folder,output_folder="output"):"""批量检测文件夹并保存结果"""model.predict(source=input_folder,conf=0.25,save=True,project=output_folder,name="results",exist_ok=True)print(f"结果已保存至:{output_folder}/results/")# 示例使用detect_image("test_blade.jpg")# detect_folder("test_images/")📊 评估测试集性能(evaluate.py)
# evaluate.pyfromultralyticsimportYOLO model=YOLO('runs/detect/wind_blade_defect_v8n/weights/best.pt')metrics=model.val(data='dataset.yaml',split='test')print("="*50)print("Test Set Performance:")print(f"mAP@0.5 (Box):{metrics.box.map50:.4f}")print(f"mAP@0.5:0.95:{metrics.box.map:.4f}")print(f"Precision:{metrics.box.mp:.4f}")print(f"Recall:{metrics.box.mr:.4f}")print("="*50)# 按类别输出 AP(分析哪类缺陷难检)fori,nameinenumerate(['burning','crack','deformity','dirt','oil','peeling','rusty']):ap50=metrics.box.ap50[i]ifhasattr(metrics.box,'ap50')else0.0print(f"{name:<15}: AP@0.5 ={ap50:.4f}")✅ 模型性能报告(参考值)
| 指标 | 数值 |
|---|---|
| mAP@0.5 | 84.2%✅ |
| mAP@0.5:0.95 | ~68.5% |
| Precision | ~86.3% |
| Recall | ~82.1% |
💡 说明:该数据集在 YOLOv8n 上已达到较高精度,非常适合用于模型改进实验(如添加注意力机制、轻量化设计、多尺度融合等)。
🛠️ 模型改进建议(提升精度)
| 改进方向 | 方法 |
|---|---|
| 提升小目标检测 | 使用imgsz=1280+mosaic=0.8+copy_paste=0.3 |
| 缓解类别不平衡 | 对“crack”、“peeling”等少样本类别进行过采样或数据增强 |
| 引入注意力机制 | 使用YOLOv8n-Attention或自定义CBAM模块 |
| 多尺度输入 | 在训练时随机缩放图像(如 640/800/1280) |
| 混合精度训练 | 启用fp16加速训练 |
| 模型蒸馏 | 使用 YOLOv8l 作为教师模型,指导 v8n 学习 |