ultralytics使用手册
简介
ultralytics是一个图像识别的库,它下面有一个叫yolo的预训练模型。
SAM图片分割模型助力数据标注
task 任务
- detect 检测:从图像中识别物体的位置。
- segment 分割:从图像中实体物体,勾勒出物品的轮廓,返回的是物体的掩码。淹码就是勾勒物体轮廓的数据。
- classify 分类:对图像的整体内容进行分类。
- pose 姿势估计:识别图像中特定点/关键点,关键点可以代表物体的各个部分。通过已
[x,y]或[x,y,visible]坐标表示关键点。 - obb 旋转框检测:识别图像中的物体,并用可旋转的框包括物体。
mode 模式
- train 训练
- val 验证
- predict 预测/推理
- export 导出
- track 追踪
- benchmark 基准测试
CLI使用方法
语法:
yolo TASK MODE ARGS
ARGS是任意数量的自定义 arg=value 键值对
示例
# 执行检测任务的推理模式
# 使用yolo11n.pt模型
# 检测bus.jpg图片
yolo detect predict model=yolo11n.pt source='bus.jpg'python常用API
from ultralytics import YOLO
model=YOLO("yolo11n.pt") # 加载模型
result=model.predice(source="") # 推理预测
result=model.track(source="") # 实时跟踪数据标注
- labelImg:https://github.com/HumanSignal/labelImg
- label-studio:https://github.com/HumanSignal/label-studio
- CVAT:
各个模式下的可配置参数
https://docs.ultralytics.com/zh/usage/cfg/#predict-settings
数据集格式
一个数据集需要以下内容:
- 数据集YAML(Yet Another Markup Language)文件用于定义数据集配置。它包含有关数据集路径、类别和其他相关信息。
- 训练用图片及其标注文件
- 验证用图片及其标注文件
每个图像对应一个文本文件:数据集中的每个图像都有一个对应的文本文件,该文本文件与图像文件同名,扩展名为 ".txt"。
数据集文件目录格式
图片-标注形式
这种目录格式适用于detect、pose、segment、obb任务
datasets
|-custom dateset name # 数据集名
|-images
|-train # 存放用于模型训练用的图片
|-val # 存放用于模型训练过程中验证/评估的图片
|-labels
|-train # 存放训练用的图片的标签信息
|-val # 存放验证用的图片的标签信息![[images/Pasted image 20250813172623.png]]
文件夹名-图片形式
这种目录格式适用于classify任务。每个文件夹对于数据集中的一个类别。
datasets
|-custom dateset name # 数据集名
|-train # 训练集
|-cat
|-1_cat.jpg
|-2_cat.jpg
|-dog
|-1_dog.jpg
|-2_dog.jpg
|-test # 测试集
|-cat
|-1_cat.jpg
|-2_cat.jpg
|-dog
|-1_dog.jpg
|-2_dog.jpg
|-val # 验证集 可选
|-cat
|-1_cat.jpg
|-2_cat.jpg
|-dog
|-1_dog.jpg
|-2_dog.jpg各类任务数据集格式介绍
检测任务
详细介绍:https://docs.ultralytics.com/zh/datasets/detect/
- 每行一个对象:文本文件中的每一行对应于图像中的一个对象实例。
- 框坐标需要是归一化的 xywh 格式(从 0 到 1)
- 如果图像中没有对象,则不需要 txt 文件。
- txt文件格式为:
class x_center y_center width height 格式![[images/Pasted image 20250813174757.png]]
分割任务
详细介绍:https://docs.ultralytics.com/zh/datasets/segment/
- 每行一个对象:文本文件中的每一行对应于图像中的一个对象实例。
- 每行的对象实例包含一下信息:
- 对象类别索引:一个整数,表示对象的类别(例如,0 代表人,1 代表汽车等)。
- 对象边界坐标:围绕掩码区域的边界坐标,已归一化到 0 和 1 之间。
- txt文件每行格式如下:
<class-index> <x1> <y1> <x2> <y2> ... <xn> <yn>在这种格式中, <class-index> 是对象类别的索引,以及 <x1> <y1> <x2> <y2> ... <xn> <yn> 是对象分割掩码的边界坐标。坐标之间用空格分隔。
分类任务
详细介绍:https://docs.ultralytics.com/zh/datasets/classify/#dataset-structure-for-yolo-classification-tasks
分类任务不需要数据集YAML文件,要求数据集文件目录按格式要求整理好。
姿势估计任务
详细介绍:https://docs.ultralytics.com/zh/datasets/pose/
- 每行一个对象:文本文件中的每一行对应于图像中的一个对象实例。
- 每行包含的对象信息:每行包含关于对象实例的以下信息:
- 对象类别索引:一个整数,表示对象的类别(例如,0 代表人,1 代表汽车等)。
- 对象中心坐标:对象的中心 x 和 y 坐标,已归一化到 0 和 1 之间。
- 对象宽度和高度:对象的宽度和高度,已归一化到 0 和 1 之间。
- 对象关键点坐标:对象的关键点坐标,已归一化到 0 和 1 之间。
- txt文件每行格式如下:
# Dim = 2 格式
<class-index> <x> <y> <width> <height> <px1> <py1> <px2> <py2> ... <pxn> <pyn>
# Dim = 3 格式
<class-index> <x> <y> <width> <height> <px1> <py1> <p1-visibility> <px2> <py2> <p2-visibility> <pxn> <pyn> <pn-visibility>旋转框检测任务
详细介绍:https://docs.ultralytics.com/zh/datasets/obb/#yolo-obb-format
- 每行一个对象:文本文件中的每一行对应于图像中的一个对象实例。
- 每行包含的对象边界框的四个角点的坐标
- txt文件每行格式如下:
class_index x1 y1 x2 y2 x3 y3 x4 y4关键指标
损失率(Loss)
- 定义:模型输出和真实标签之间的差距大小。它是训练时优化的直接目标。
- 越低表示模型越接近真实的答案,在训练集上拟合程度更好。
- 不同任务使用的损失函数不同。
精确度(Precision)
- 定义:预测为正的样本中,有多少是真的正样本, $$ Precision=\frac{真正例\ TP}{真正例\ TP + 假正例\ FP} $$
- 示例:预测出了100个对象是猫,其中真的是猫的数量是90只,不是猫的数量是10只,则精确度为90%。 $$ Precision=\frac{90}{90 + 10}=90% $$
召回率(Recall)
- 定义:所有真实正样本中,有多少真实正样本被模型预测出来。 $$ Recall=\frac{真正例\ TP}{所有真正例\ TP} $$
- 示例:数据里真的有100只猫,模型识别出90只 → 召回率 = 90/100 = 90%。 $$ Recall=\frac{90}{100}=90% $$
平均精度均值(mAP, mean Average Precision)
- 定义:在不同的置信度阈值下计算精确度和召回率,绘制PR曲线(Precision-Recall),计算曲线下的面积(AP, Average Precision),对所有类别的AP取平均(mAP)。
- 场景:常用于目标检测、信息检索等任务。
- 意义:综合衡量模型在不同阈值下的整体表现。mpa越高,说明模型在各种判断条件下都能保持较好的精确度和召回率。
┌─────────────────────────┐
│ 损失率(Loss) │ ← 训练优化的目标
└─────────────┬───────────┘
↓
┌─────────────模型预测──────────────┐
↓ ↓
┌─────────────┐ ┌────────────────┐
│ 精确度 │ ← 看预测对的比例 │ 召回率 │ ← 看漏掉多少
│ (Precision) │ │ (Recall) │
└─────────────┘ └────────────────┘
↓
┌─────────────────────┐
│ 平均精度均值(mAP) │ ← 综合多个阈值/类别
└─────────────────────┘