文章目录
概要
官网:https://github.com/ultralytics/ultralytics?tab=readme-ov-file
提示:以 停车场空位检测 公开数据集示例,可直接运行本人打包代码: 百度云分享:ultralytics-8.3.2.zip 链接: https://pan.baidu.com/s/18f-9tsgajL46czn5PUcUsA?pwd=hjuk 提取码: hjuk
YOLOv11 是 Ultralytics 团队于 2024 年 9 月 30 日发布的最新目标检测模型,延续了 YOLO 系列实时推理特性,同时通过架构优化与技术创新进一步提升了检测精度、速度和多功能性。以下理论知识部分包括核心特性、改进介绍,操作实操一步步讲怎么训练自己的数据集。

理论知识
整体架构流程
参考于:https://blog.csdn.net/weixin_51832278/article/details/143631804
架构优化
- C3K2 模块:取代了 YOLOv8 的 C2f 模块,通过分割特征图并应用 3x3 小核卷积优化计算效率,减少了参数量的同时提升了特征表达能力。
- SPFF 模块:采用多尺度池化策略聚合不同分辨率的信息,显著增强了小目标检测能力,解决了早期版本对小物体敏感度不足的问题。
- C2PSA 注意力机制:引入跨阶段部分空间注意力模块,通过关注特征图中的关键区域(如小目标或遮挡物体),提升了复杂场景下的检测精度。
多任务支持
- 目标检测(无后缀):基础检测模型,支持旋转边界框(OBB)。
- 图像分割(后缀 -seg):结合实例分割与语义分割,提升边缘精度。
- 姿态估计(后缀 -pose):新增人体关键点检测,支持实时运动分析。
- 图像分类(后缀 -cls):优化分类头结构,经过训练后能够对图像进行类别分类。
- 多目标跟踪(集成 BoT-SORT 算法):支持视频流中的跨帧目标追踪。
多参数体量
灵活模型尺寸,提供 Nano(n)、Small(s)、Medium(m)、Large(l)、Extra-Large(x)五种尺寸,满足不同场景需求,以基础目标检测为例,各模型对比如下,x消耗时间是n的8倍。上述云盘代码中pretrain文件夹内已下载5类任务的m和x版。
操作实操
环境配置
在命令行安装requirements.txt即可,最容易出现不匹配的是tensorflow、pytorch、numpy,测试使用的环境如下:
yaml
cuda11.3
torch=1.12.0
tensorflow=2.10.0
numpy=1.23.4
pandas=1.4.3
opencv-python=4.5.5
数据准备
数据标注
见本人另外一篇博客,darklabel数据标注:
https://blog.csdn.net/qq_36112576/article/details/145686376?spm=1001.2014.3001.5502
每张影像对应一张同名txt,txt内格式如下:
python
0 0.5623046875 0.5 0.629296875 0.9986111111111111
1 0.515625 0.42569444444444443 0.30234375 0.85
第一列为类别编号label;二列为中心横坐标与图像宽度比值;三列为中心纵坐标与图像高度比值y_center;四列为bbox宽度与图像宽度比值width;五列为bbox高度与图像高度比值height。图框计算公式为:
x_min = (x_center - width / 2) * image_width
y_min = (y_center - height / 2) * image_height
x_max = (x_center + width / 2) * image_width
y_max = (y_center + height / 2) * image_height
数据放置路径
我们创建一个统一的data文件夹来放置各类数据,注意images和labels文件名字需一一对应。
python
data/
├── 数据集1(pklot) /
│ ├── train/
│ │ ├── images/
│ │ └── labels/
│ └── valid/
│ ├── images/
│ └── labels/
└── 数据集2 /
│ ├── train/
│ │ ├── images/
│ │ └── labels/
│ └── valid/
│ ├── images/
│ └── labels/
└── 数据集3 / ........
根目录创建一个 datapklot.yaml 文件(与data文件夹同级),内容如下:
提示:yaml格式文件用于定义数据集的配置,包括数据路径、种类数量、类别名字等信息
python
train: data/pklot/train/images
val: data/pklot/valid/images
nc: 2
names: ['space-empty', 'space-occupied']
训练
在pycharm中运行train.py,内容如下
提示:D:\\code\\yolov11\\ultralytics-8.3.2\\datapklot.yaml需要绝对路径
python
# -*- coding: utf-8 -*-
import warnings
warnings.filterwarnings('ignore')
from ultralytics import YOLO
if __name__ == '__main__':
model = YOLO(model=r'ultralytics/cfg/models/11/yolo11.yaml')
model.load('pretrain/yolo11m.pt') # 加载预训练权重,改进或者做对比实验时候不建议打开,因为用预训练模型整体精度没有很明显的提升
model.train(data=r'D:\\code\\yolov11\\ultralytics-8.3.2\\datapklot.yaml',
imgsz=640,
epochs=50,
batch=4,
workers=0,
device='',
optimizer='SGD',
close_mosaic=10,
resume=False,
project='runs/train',
name='exp',
single_cls=False,
cache=False,
)
# Evaluate model performance on the validation set
metrics = model.val()
数据正常加载:
训练正常进行:
模型保存在文件夹runs/train/exp次数/weights 中
预测
在pycharm中运行detect.py,内容如下,以下model为实例分割,可替换为训练模型或上述提到的其他任务模型,检测结果同样保存在runs/中。
python
# -*- coding: utf-8 -*-
from ultralytics import YOLO
if __name__ == '__main__':
# Load a model
model = YOLO(model=r'pretrain/yolo11n-seg.pt')
model.predict(source=r'123.mp4',
save=True,
show=True,
)