Yolo历史
Yolov5
YOLOv5由Ultralytics在2020年发布,其在工业界获得了广泛应用。YOLOv5基于PyTorch框架,实现了更快的训练和推理速度。它还引入了超参数优化、集成实验跟踪和自动导出到多种部署格式的功能,方便了模型的应用和部署。
Yolov8
2023年,Ultralytics发布了YOLOv8,引入了新的特性和改进,以增强性能、灵活性和效率。YOLOv8支持全方位的视觉AI任务,包括目标检测、图像分割和姿态估计,进一步拓展了YOLO模型的应用领域。
Yolo11
Ultralytics 最新的 YOLO 模型在多个任务上实现了最先进(SOTA)的性能,包括目标检测、图像分割、姿态估计、跟踪和分类,充分发挥了其在各类人工智能应用和领域中的能力。
不同版本Yolo效果对比
不同版本的YOLO在目标检测任务上展示了不同的性能表现。随着版本的更新,模型在速度和精度方面均得到了提升。例如,YOLOv5的训练速度较快,适用于资源受限的环境,而YOLOv8和YOLOv11则进一步提升了检测精度,特别是在复杂场景中的表现更加优异。
YOLOv11n 模型概述
YOLOv11n 是 YOLOv11 系列中的轻量级版本,参数量较少,计算资源需求较低,非常适合在资源受限的环境(如嵌入式设备、移动设备)上进行推理。虽然模型较小,但依然可以在精度和速度之间取得良好的平衡。
YOLO11安装
下载项目代码
git clone https://github.com/ultralytics/ultralytics.git
安装相关依赖
pip install -U ultralytics
YOLO11训练
从头开始训练
yolo detect train data=coco8.yaml model=yolo11n.yaml epochs=100 imgsz=640
基于预训练模型训练
yolo detect train data=coco8.yaml model=yolo11n.pt epochs=100 imgsz=640
验证模型
yolo predict model=yolo11n.pt source="path/dog.jpg"
Yolov11基本命令结构
基本语法
yolo TASK MODE [ARGS]
TASK(任务):可选参数,指定执行的任务类型。可以是以下之一:
detect:目标检测
segment:图像分割
pose:姿态估计
classify:图像分类
obb:倾斜边界框检测
MODE(模式):必选参数,指定执行的操作模式。可以是以下之一:
train:训练模型
val:验证模型
predict:使用模型进行推理
export:导出模型到指定格式
track:跟踪
benchmark:基准测试
ARGS(参数):可选参数,以 arg=value 的形式指定,用于覆盖默认设置。例如 imgsz=320。
训练检测模型
用 10 个 epoch 训练一个检测模型,并设置初始学习率为 0.01:
yolo train data=coco8.yaml model=yolo11n.pt epochs=10 lr0=0.01
视频推理
使用预训练的分割模型对一个 YouTube 视频进行推理,图像尺寸为 320:
yolo predict model=yolo11n-seg.pt source='https://youtu.be/LNwODJXcvt4' imgsz=320
验证模型
用批量大小为 1 和图像尺寸 640 验证一个预训练的检测模型:
yolo val model=yolo11n.pt data=coco8.yaml batch=1 imgsz=640
导出模型
将 YOLO11n 分类模型导出为 ONNX 格式,图像尺寸为 224x128:
yolo export model=yolo11n-cls.pt format=onnx imgsz=224,128
实时推理 GUI
启动一个基于 Streamlit 的实时推理 GUI 界面:
yolo streamlit-predict
yolov11训练参数配置
参数 | 默认值 | 描述 |
---|---|---|
model | None | 指定训练使用的模型文件。可以是预训练的 .pt 模型文件,也可以是定义模型结构的 .yaml 配置文件。 |
data | None | 数据集配置文件的路径(例如 coco8.yaml )。该文件包含数据集相关的参数,包括训练和验证数据的路径、类别名称和类别数量。 |
epochs | 100 | 训练的总轮数。每个 epoch 代表对整个数据集的一次完整遍历。调整此值会影响训练时间和模型的最终性能。 |
time | None | 最大训练时间(以小时为单位)。如果设置了该值,将优先于 epochs 参数,当到达最大时间时训练将自动停止。 |
patience | 100 | 当验证指标没有提升时,允许继续训练的轮数。在超过该值后,将提前停止训练,以避免过拟合。 |
batch | 16 | 批次大小。可以设定为一个整数(如 batch=16 ),也可以设置为 -1 表示使用 60% GPU 内存,或设置为 0.70 表示指定内存使用率。 |
imgsz | 640 | 训练图像的目标大小,所有图像在输入模型之前都会调整为这个尺寸。 |
save | True | 启用保存训练检查点和最终模型权重功能。方便后续恢复训练或部署模型。 |
save_period | -1 | 保存模型检查点的频率(以 epoch 为单位)。设置为 -1 将禁用此功能。 |
cache | False | 启用数据集图像缓存功能。可以设置为 True (缓存至内存)、disk (缓存至硬盘),或 False (不缓存)。 |
device | None | 指定训练使用的计算设备。可以是单个 GPU(如 device=0 ),多个 GPU(如 device=0,1 ),CPU(device=cpu ),或 Apple 芯片的 MPS(device=mps )。 |
workers | 8 | 用于加载数据的工作线程数量。对于多 GPU 训练,每个 GPU 都会分配一定数量的工作线程。 |
project | None | 训练输出保存的项目目录名称,用于有序管理不同实验结果。 |
name | None | 当前训练运行的名称,用于在项目文件夹中创建子目录以存储训练日志和输出。 |
exist_ok | False | 若为 True ,允许覆盖已存在的项目名称目录。适用于迭代实验。 |
pretrained | True | 是否从预训练模型开始训练。可以是布尔值或特定模型路径。 |
optimizer | 'auto' | 选择训练的优化器。包括 SGD、Adam、AdamW 等,或者选择 auto 根据模型配置自动选择。 |
verbose | False | 启用详细的训练输出日志。适合在训练过程中进行调试或监控。 |
seed | 0 | 设置训练的随机种子,确保结果的可重复性。 |
deterministic | True | 强制使用确定性算法,确保结果可重复,但可能影响性能。 |
single_cls | False | 在多类别数据集中,将所有类别视为一个类别。适用于二分类任务。 |
rect | False | 启用矩形训练模式,优化批次构成以最小化填充。 |
cos_lr | False | 使用余弦学习率调度器,随训练轮数调整学习率。 |
close_mosaic | 10 | 在训练的最后 N 个 epoch 中禁用 mosaic 数据增强,以稳定模型性能。 |
resume | False | 从上次保存的检查点继续训练。 |
amp | True | 启用自动混合精度训练,减少内存使用并加速训练。 |
fraction | 1.0 | 使用数据集的部分数据进行训练,适用于资源有限或实验场景。 |
lr0 | 0.01 | 初始学习率,通常对于 SGD 优化器为 1E-2 ,对于 Adam 优化器为 1E-3 。 |
lrf | 0.01 | 最终学习率,是初始学习率的一个比例。 |
momentum | 0.937 | SGD 或 Adam 优化器的动量因子。 |
weight_decay | 0.0005 | L2 正则化项,防止过拟合。 |
warmup_epochs | 3.0 | 学习率预热的轮数,逐步将学习率提升至初始值。 |
box | 7.5 | 损失函数中 box 损失的权重。 |
cls | 0.5 | 损失函数中分类损失的权重。 |
val | True | 启用验证,定期评估模型在验证集上的性能。 |
yolov11超参配置
参数 | 类型 | 默认值 | 范围 | 描述 |
---|---|---|---|---|
hsv_h | float | 0.015 | 0.0 - 1.0 | 调整图像的色调,基于色轮的比例引入色彩变化,帮助模型在不同的光照条件下泛化。 |
hsv_s | float | 0.7 | 0.0 - 1.0 | 改变图像的饱和度,影响颜色的强度,适用于模拟不同的环境条件。 |
hsv_v | float | 0.4 | 0.0 - 1.0 | 修改图像的亮度,帮助模型在不同光照条件下表现良好。 |
degrees | float | 0.0 | -180 - +180 | 在指定的度数范围内随机旋转图像,提高模型识别不同方向物体的能力。 |
translate | float | 0.1 | 0.0 - 1.0 | 将图像按图像尺寸的比例进行水平和垂直平移,帮助模型学习检测部分可见的物体。 |
scale | float | 0.5 | >=0.0 | 按比例缩放图像,模拟不同距离的物体,有助于模型适应不同的视角。 |
shear | float | 0.0 | -180 - +180 | 对图像进行剪切,模拟从不同角度查看物体的效果。 |
perspective | float | 0.0 | 0.0 - 0.001 | 对图像应用透视变换,增强模型理解三维空间中物体的能力。 |
flipud | float | 0.0 | 0.0 - 1.0 | 以指定概率将图像上下翻转,增加数据的多样性,同时保持物体特征不变。 |
fliplr | float | 0.5 | 0.0 - 1.0 | 以指定概率将图像左右翻转,适用于学习对称物体,并增加数据集多样性。 |
bgr | float | 0.0 | 0.0 - 1.0 | 以指定概率将图像通道从 RGB 切换为 BGR,增强模型对通道错误排序的鲁棒性。 |
mosaic | float | 1.0 | 0.0 - 1.0 | 将四张训练图像合成一张,模拟不同场景组合和物体交互,非常适合复杂场景理解。 |
mixup | float | 0.0 | 0.0 - 1.0 | 将两张图像及其标签混合,创建复合图像,增加标签噪声和视觉多样性,帮助模型泛化。 |
copy_paste | float | 0.0 | 0.0 - 1.0 | 将一个图像中的物体复制并粘贴到另一个图像上,增加物体实例数量,帮助模型学习物体遮挡情况。 |
copy_paste_mode | str | flip | - | 选择复制粘贴增强的方法,可以选择 “flip” 或 “mixup”。 |
auto_augment | str | randaugment | - | 自动应用预定义的增强策略(randaugment, autoaugment, augmix),通过增加视觉特征的多样性来优化分类任务。 |
erasing | float | 0.4 | 0.0 - 0.9 | 在分类训练过程中随机擦除图像的一部分,鼓励模型关注较不明显的特征,提高模型识别能力。 |
crop_fraction | float | 1.0 | 0.1 - 1.0 | 将分类图像裁剪为其原始大小的一部分,强调中央特征并适应物体的不同尺度,减少背景干扰。 |
数据集配置
在 YOLOv11 中,数据集配置文件(如 coco8.yaml)定义了训练、验证和测试数据的路径以及类别标签。以下是一个典型的数据集配置文件结构示例:
path: ../datasets/coco8 # 数据集的根目录
train: images/train # 训练集图片相对于 path 的路径
val: images/val # 验证集图片相对于 path 的路径
test: # 测试集图片的路径(可选)
类别映射表
names:
0: person
1: bicycle
2: car
3: motorbike
4: aeroplane
5: bus
6: train
7: truck
8: boat
9: traffic light
数据集配置说明:
path: 数据集的根目录,包含训练、验证和(可选)测试数据的文件夹路径。
train: 训练集图像的相对路径,指定图像文件夹用于模型训练。
val: 验证集图像的相对路径,用于在训练过程中评估模型性能。
test: 测试集图像的路径(可选)。如果不进行测试评估,可以省略。
names: 类别映射表,每个类别分配一个唯一的ID,并且映射到一个可识别的名称。