yolo --- 参数(训练、验证、预测)解释
模型训练参数
from ultralytics import YOLO # Load a model model = YOLO('yolov8n.pt') # load a pretrained model (recommended for training) # Train the model with 2 GPUs results = model.train(data='coco8.yaml', epochs=100, imgsz=640, device=[0, 1])
model
model: 模型文件的路径。这个参数指定了所使用的模型文件的位置,例如 yolov8n.pt 或 yolov8n.yaml。
选择.pt和.yaml的区别
若我们选择 yolov8n.pt这种.pt类型的文件,其实里面是包含了模型的结构和训练好的参数的,也就是说拿来就可以用,就已经具备了检测目标的能力了,yolov8n.pt能检测coco中的80个类别。但如果你需要检测的类别不在其中,例如口罩检测,那么就需要重新训练。
训练自己的数据集,我们一般采用yolov8n.yaml这种.yaml文件的形式,包含模型的结构。
data
data: 数据文件的路径。该参数指定了数据集文件的位置,例如 coco128.yaml。数据集文件包含了训练和验证所需的图像、标签。
epochs
epochs: 训练的轮数。这个参数确定了模型将会被训练多少次,每一轮都遍历整个训练数据集。训练的轮数越多,模型对数据的学习就越充分,但也增加了训练时间。
选取策略
- 数据集大小:
- 小数据集:通常需要较少的epochs(如50-100),因为模型容易快速过拟合。
- 大数据集:可能需要更多的epochs(如200-500),以充分学习数据的多样性。
- 模型复杂度:
- 复杂模型(如YOLOv5、YOLOv8的较大版本)通常需要更多epochs来收敛。
- 简单模型(如YOLOv5s)可能需要较少的epochs。
batch
batch: 每个批次中的图像数量。在训练过程中,数据被分成多个批次进行处理,每个批次包含一定数量的图像。这个参数确定了每个批次中包含的图像数量。特殊的是,如果设置为**-1**,则会自动调整批次大小,至你的显卡能容纳的最多图像数量。
- 梯度估计的稳定性:
- 较大的batch size:梯度估计更稳定(基于更多样本),训练过程更平滑,但可能陷入局部最优。
- 较小的batch size:梯度估计噪声更大,可能跳出局部最优,但训练过程波动较大。
- 内存与计算效率:
- 较大的batch size:可以更高效地利用GPU并行计算能力,减少梯度更新次数,但需要更大的显存。
- 较小的batch size:显存占用小,但可能无法充分利用GPU的并行计算能力。
- 泛化能力:
- 较大的batch size:可能导致模型泛化能力下降(尤其是在数据不足时)。
- 较小的batch size:可能增强模型的泛化能力,因为噪声梯度可以作为一种正则化手段。
device
device: 训练运行的设备。该参数指定了模型训练所使用的设备,例如使用 GPU 运行可以指定为 device=0,或者使用多个 GPU 运行可以指定为 device=0,1,2,3,如果没有可用的 GPU,可以指定为 device=cpu 使用 CPU 进行训练。
imgsz
训练的目标图像大小。所有图像在输入模型之前都会被调整到这个尺寸。影响模型准确性和计算复杂度
workers
在每个epoch加载数据时,dataloader一次性创建workers数量个工作进程,并且每个进行负责调度一个batch的数据,worker负责将batch加载到内存中,dataloader从RAM中找到这个epoch所需要的batch,如果找到就使用,如果没有就要继续加载batch到RAM。
如果workers设置的很大,优点是找batch的速度快,因为RAM中可能有好多个batch的数据在等待处理。缺点是CPU、内存开销大,因为是CPU负责调度进程加载数据到RAM中。
模型验证参数
from ultralytics import YOLO # Load a model model = YOLO('yolov8n.pt') # Customize validation settings validation_results = model.val(data='coco8.yaml', imgsz=640, batch=16, conf=0.25, iou=0.6, device='0')
模型预测参数
from ultralytics import YOLO # ---------- 加载模型 ---------- model = YOLO('runs/detect/train3/weights/best.pt') # ---------- 模型预测 ---------- model.predict( source='https://ultralytics.com/images/bus.jpg', save=True )
source
输入源包括静态图像、视频流和各种数据格式
stream
对于处理长视频或大型数据集,为了有效地管理内存,请使用 stream=True。当 stream=False 时,所有帧或数据点的结果都存储在内存中,这对于大型输入来说会迅速增加并可能导致内存不足错误。相比之下,stream=True 使用生成器,它只保留当前帧或数据点的结果在内存中,显著减少内存消耗并防止内存不足问题。
save
启用将标注的图像或视频保存到文件。这对于文档、进一步分析或分享结果非常有用。
imgsz
imgsz 是指宽,如下图的2560
实测:640*640的图片,imgsz=640识别不到,imgsz=1280识别的到,不填默认是1280