保姆教程:使用yolov11训练NEU-DET钢材缺陷数据集(准确率超高)

最近Ultralytics 公司发布了 YOLOv11,这一最新一代实时目标检测器在之前 YOLO 版本的基础上进行了升级。YOLOv11 不仅继续优化目标检测功能,还扩展了对目标追踪、实例分割、图像分类和姿态估计等多项任务的支持,进一步增强了其在各类计算机视觉应用中的表现与灵活性。

与前几版本YOLO不同,这一版本是Ultralytics公司自行研制,在性能上都表现了卓越的性能。

图片

图片

主要功能:

增强型特征提取:YOLOv11 采用改进的骨干网络和颈部架构,显著提升了特征提取能力,带来了更精确的目标检测和处理复杂任务的更高性能。

优化效率与速度:通过创新的架构设计和优化的训练管道,YOLOv11 提供了更快速的处理速度,同时在准确性与性能之间保持了最佳平衡。

参数更少,精度更高:得益于设计的优化,YOLOv11m 在 COCO 数据集上实现了更高的平均精度(mAP),同时其参数量比 YOLOv8m 减少了 22%,在不影响精度的情况下大幅提升了计算效率。

跨环境适应性:YOLOv11 可以无缝部署于多种环境,包括边缘设备、云平台以及支持 NVIDIA GPU 的系统,确保其灵活性和可扩展性。

广泛的任务支持:无论是目标检测、实例分割、图像分类、姿态估计,还是面向对象检测(OBB),YOLOv11 都能够应对各类计算机视觉任务,展现出强大的多任务处理能力。

并且YOLOv11也推出了不同的型号,来支持不同的应用场景

图片

今天就按照官方文档全程过一遍训练流程,大家可以按照自己的数据去训练这个流程。

图片

yolo环境需要torch支持,本次训练使用torch2.0.1,GPU:4060。

在官方Download文件,或者git clone到本地。解压后发现其自带一堆数据集。

图片

解压yolo模型后需要安装ultralytics库

pip install ultralytics

安装完成库后可以直接开始训练自己的数据集了,本次训练采用东北大学的NEU-DET钢材缺陷数据集。有需要的小伙伴可以关注一下后台私我。

确保自己的文件是这种格式,并且要建立data.yaml文件告诉yolo模型数据位置。

├─train│  ├─images│  └─labels└─valid    ├─images    └─labels

data.yaml文件:

train: E:\NEU-DET\NEU-DET\train\images  # 训练数据集路径val: E:\NEU-DET\NEU-DET\valid\images  # 验证数据集路径
nc: 6  # 类别数names: ['crazing', 'inclusion', 'patches', 'pitted_surface', 'rolled-in_scale', 'scratches']  # 类别名称

在vscode中输入下面一行代码,这是官方给的代码,可以看一下各个参数的意义

yolo detect train data=coco.yaml model=yolov10n/s/m/b/l/x.yaml epochs=500 batch=256 imgsz=640 device=0,1,2,3,4,5,6,7

yolo detect train:启动目标检测模型训练。

data=coco.yaml:指定数据集配置,使用 COCO 数据集。

model=yolov10n/s/m/b/l/x.yaml:选择 YOLOv11 的不同模型版本(n, s, m, b, l, x 代表不同规模的模型)。

epochs=500:训练 500 个周期。

batch=256:每批次 256 张图像。

imgsz=640:输入图像尺寸为 640x640。

device=0,1,2,3,4,5,6,7:在多个 GPU(设备编号 0 到 7)上并行训练。

如何训练自己的模型呢,我们可以修改一下这个代码

你可以使用官方训练好的最优权重,也可以选择官方提供的预训练模型配置文件。这里选择了最优权重 yolov11n.pt 模型作为基础。

下面就是修改好的代码,直接在终端运行即可,第一次训练可以选择10个周期,device根据自己需要选择,0就是1个,每个GPU就选择device=cpu,使用cpu进行训练。

yolo detect train data=D:\yolov10-main\ultralytics\nn\modules\yolo11n.pt model=D:\yolov10-main\ultralytics\nn\modules\yolo11n.pt epochs=10 batch=16 imgsz=640 device=0

这个输出列出了每一层的详细信息,包括层的类型(如 ConvC3k2 等)、输入和输出的通道数以及其他参数(如卷积核大小、步幅等)。

图片

这就是正在训练了

每次听到扇叶嗡嗡的转就有成就感,不知道大家跟我是不是一样的

图片

YOLO11n summary (fused): 238 layers, 2,583,322 parameters, 0 gradients, 6.3 GFLOPs                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95): 100%|██████████| 1/1 [00:00<00:00,  6.08it/s]                   all         30         64      0.688      0.825      0.806      0.501               crazing          5          8      0.552      0.625      0.505      0.185             inclusion          5         15      0.484        0.8      0.743      0.448               patches          5         17       0.66          1      0.972      0.655        pitted_surface          5          8      0.876          1      0.995      0.707       rolled-in_scale          5          9      0.857      0.666      0.728      0.383             scratches          5          7      0.697      0.857      0.894      0.625Speed: 0.2ms preprocess, 1.6ms inference, 0.0ms loss, 0.6ms postprocess per image

Class:类别名称。

Images:每个类别在评估集中的图像数量。

Instances:每个类别在评估集中的目标实例数。

Box(P):预测框的精度(Precision)。

R:召回率(Recall)。

mAP50:在 IOU 阈值为 50% 时的平均精度(mean Average Precision at 50% IoU)。

mAP50-95:在多个 IOU 阈值(从 50% 到 95%)下的平均精度,通常是衡量模型精度的更全面指标。

从总体指标来看,YOLOv11 在整体的 mAP50(0.806)表现较好,但在 mAP50-95(0.501)上略显不足,表示在多重 IoU 阈值下的表现不如单一阈值。

对于每个类别,表现有较大差异。像 pitted_surface 和 patches 等类别的性能相对较好,而 crazing 和 rolled-in_scale 的表现较差,尤其是在 mAP50-95 上表现较弱。

观察训练结果:

图片

图片

labels

图片

F1 Score

图片

result

图片

图片

可以看出训练结果还是很棒的

需要数据和源码及权重文件的可以关注公众号PythoniCave,后台私信

图片

### NEUDETYOLOv11的技术细节及其实现 #### YOLOv11的基础架构概述 YOLOv11作为目标检测领域的一个重要进展,继承并优化了许多前代版本的优点。通过点击上方链接进入YOLOv11的GitHub仓库,可以找到详细的安装指南以及如何下载打包好的YOLOv11代码与预训练权重文件到本地的方法[^1]。 #### NEUDET的具体实现方式 NEUDET是一个基于神经网络的目标检测框架,其设计旨在提高小物体检测精度的同时保持较高的推理速度。对于YOLOv11而言,NEUDET引入了几项关键技术: - **特征金字塔网络(FPN)**:为了增强模型对不同尺度对象的理解能力,采用了自底向上的路径聚合方法来构建更强大的多层表示。 - **空间注意力模块(SAM)**:该组件能够自动学习输入图像中的显著区域,并赋予这些位置更高的权重,从而改善整体性能。 - **通道注意力机制(CAM)**:通过对各个卷积核响应的重要性进行建模,进一步提升了模型捕捉细微差异的能力。 ```python import torch.nn as nn class SAM(nn.Module): def __init__(self, channel): super(SAM, self).__init__() self.conv = nn.Conv2d(channel, 1, kernel_size=7, padding=3) def forward(self, x): attention_map = self.conv(x) max_out, _ = torch.max(attention_map, dim=1, keepdim=True) avg_out = torch.mean(attention_map, dim=1, keepdim=True) out = max_out + avg_out return x * (torch.sigmoid(out)) ``` 上述代码展示了空间注意力模块的一种简单实现形式,其中`conv`函数用于生成单通道的关注度映射;接着利用最大池化和均值池化的组合操作计算最终关注度得分,并将其应用于原始特征图上以突出重要的视觉线索[^2]。 #### 使用说明 要开始使用NEUDET-YOLOv11解决方案,建议遵循官方文档提供的指导完成环境配置工作之后再尝试运行示例脚本或调整参数设置来进行定制开发。此外,还可以订阅相关专栏获取更多关于算法调优方面的技巧和支持材料。
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值