赞
踩
YOLOv8是一款前沿、最先进(SOTA)的模型,基于先前YOLO版本的成功,引入了新功能和改进,进一步提升性能和灵活性。
然而,要充分发挥Yolov8的潜力,合理的参数配置是至关重要的。本文将带您深入了解Yolov8调参的每一个细节。无论您是初学者还是有经验的研究者,本文都将为您提供实用技巧和深入解读,帮助您在Yolov8的世界中取得更出色的成果。让我们一起开始这个令人激动的调参之旅吧!
文档目录
Yolov8项目地址:https://github.com/ultralytics/ultralytics
首先切换至指定目录,执行以下命令克隆Yolov8项目代码到本地。
git clone https://github.com/ultralytics/ultralytics
切换至ultralytics,安装依赖包。
cd ultralytics
pip install -r requirements.txt
如果加快下载速度,可使用国内源,例如:
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
YOLOv8可以在命令行界面(CLI)中直接使用,只需输入yolo命令,例如:
yolo predict model=yolov8n.pt imgz=640 source='https://ultralytics.com/images/bus.jpg'
其中,
YOLOv8也可以在Python环境中直接使用,并接受与上述CLI示例中相同的参数。
from ultralytics import YOLO # 加载模型 # 从头开始构建新模型 model = YOLO("yolov8n.yaml") # 加载预训练模型(建议用于训练) model = YOLO("yolov8n.pt") # 使用模型 ## 训练模型 model.train(data="coco128.yaml", epochs=3) # 在验证集上评估模型性能 metrics = model.val() # 对图像进行预测 results = model("https://ultralytics.com/images/bus.jpg") # 将模型导出为 ONNX 格式 success = model.export(format="onnx")
defalut.yaml配置文件用于设置Yolov8模型的训练和预测参数。
task: detect mode: train # 训练设置 ------------------------------------------------------------------------------------------------------- batch: 16 # (int) number of images per batch (-1 for AutoBatch) imgsz: 640 # (int | list) input images size as int for train and val modes, or list[w,h] for predict and export modes save: True # (bool) save train checkpoints and predict results save_period: -1 # (int) Save checkpoint every x epochs (disabled if < 1) cache: False # (bool) True/ram, disk or False. Use cache for data loading device: # (int | str | list, optional) device to run on, i.e. cuda device=0 or device=0,1,2,3 or device=cpu workers: 8 # (int) number of worker threads for data loading (per RANK if DDP) project: # (str, optional) project name name: # (str, optional) experiment name, results saved to 'project/name' directory exist_ok: False # (bool) whether to overwrite existing experiment pretrained: True # (bool | str) whether to use a pretrained model (bool) or a model to load weights from (str) optimizer: auto # (str) optimizer to use, choices=[SGD, Adam, Adamax, AdamW, NAdam, RAdam, RMSProp, auto] verbose: True # (bool) whether to print verbose output seed: 0 # (int) random seed for reproducibility deterministic: True # (bool) whether to enable deterministic mode single_cls: False # (bool) train multi-class data as single-class rect: False # (bool) rectangular training if mode='train' or rectangular validation if mode='val' cos_lr: False # (bool) use cosine learning rate scheduler close_mosaic: 10 # (int) disable mosaic augmentation for final epochs (0 to disable) resume: False # (bool) resume training from last checkpoint amp: True # (bool) Automatic Mixed Precision (AMP) training, choices=[True, False], True runs AMP check fraction: 1.0 # (float) dataset fraction to train on (default is 1.0, all images in train set) profile: False # (bool) profile ONNX and TensorRT speeds during training for loggers freeze: None # (int | list, optional) freeze first n layers, or freeze list of layer indices during training # Segmentation overlap_mask: True # (bool) masks should overlap during training (segment train only) mask_ratio: 4 # (int) mask downsample ratio (segment train only) # Classification dropout: 0.0 # (float) use dropout regularization (classify train only) # Val/Test settings ---------------------------------------------------------------------------------------------------- val: True # (bool) validate/test during training split: val # (str) dataset split to use for validation, i.e. 'val', 'test' or 'train' save_json: False # (bool) save results to JSON file save_hybrid: False # (bool) save hybrid version of labels (labels + additional predictions) conf: # (float, optional) object confidence threshold for detection (default 0.25 predict, 0.001 val) iou: 0.7 # (float) intersection over union (IoU) threshold for NMS max_det: 300 # (int) maximum number of detections per image half: False # (bool) use half precision (FP16) dnn: False # (bool) use OpenCV DNN for ONNX inference plots: True # (bool) save plots during train/val # Prediction settings -------------------------------------------------------------------------------------------------- source: # (str, optional) source directory for images or videos show: False # (bool) show results if possible save_txt: False # (bool) save results as .txt file save_conf: False # (bool) save results with confidence scores save_crop: False # (bool) save cropped images with results show_labels: True # (bool) show object labels in plots show_conf: True # (bool) show object confidence scores in plots vid_stride: 1 # (int) video frame-rate stride stream_buffer: False # (bool) buffer all streaming frames (True) or return the most recent frame (False) line_width: # (int, optional) line width of the bounding boxes, auto if missing visualize: False # (bool) visualize model features augment: False # (bool) apply image augmentation to prediction sources agnostic_nms: False # (bool) class-agnostic NMS classes: # (int | list[int], optional) filter results by class, i.e. classes=0, or classes=[0,2,3] retina_masks: False # (bool) use high-resolution segmentation masks boxes: True # (bool) Show boxes in segmentation predictions # Export settings ------------------------------------------------------------------------------------------------------ format: torchscript # (str) format to export to, choices at https://docs.ultralytics.com/modes/export/#export-formats keras: False # (bool) use Kera=s optimize: False # (bool) TorchScript: optimize for mobile int8: False # (bool) CoreML/TF INT8 quantization dynamic: False # (bool) ONNX/TF/TensorRT: dynamic axes simplify: False # (bool) ONNX: simplify model opset: # (int, optional) ONNX: opset version workspace: 4 # (int) TensorRT: workspace size (GB) nms: False # (bool) CoreML: add NMS # Hyperparameters ------------------------------------------------------------------------------------------------------ lr0: 0.01 # (float) initial learning rate (i.e. SGD=1E-2, Adam=1E-3) lrf: 0.01 # (float) final learning rate (lr0 * lrf) momentum: 0.937 # (float) SGD momentum/Adam beta1 weight_decay: 0.0005 # (float) optimizer weight decay 5e-4 warmup_epochs: 3.0 # (float) warmup epochs (fractions ok) warmup_momentum: 0.8 # (float) warmup initial momentum warmup_bias_lr: 0.1 # (float) warmup initial bias lr box: 7.5 # (float) box loss gain cls: 0.5 # (float) cls loss gain (scale with pixels) dfl: 1.5 # (float) dfl loss gain pose: 12.0 # (float) pose loss gain kobj: 1.0 # (float) keypoint obj loss gain label_smoothing: 0.0 # (float) label smoothing (fraction) nbs: 64 # (int) nominal batch size hsv_h: 0.015 # (float) image HSV-Hue augmentation (fraction) hsv_s: 0.7 # (float) image HSV-Saturation augmentation (fraction) hsv_v: 0.4 # (float) image HSV-Value augmentation (fraction) degrees: 0.0 # (float) image rotation (+/- deg) translate: 0.1 # (float) image translation (+/- fraction) scale: 0.5 # (float) image scale (+/- gain) shear: 0.0 # (float) image shear (+/- deg) perspective: 0.0 # (float) image perspective (+/- fraction), range 0-0.001 flipud: 0.0 # (float) image flip up-down (probability) fliplr: 0.5 # (float) image flip left-right (probability) mosaic: 1.0 # (float) image mosaic (probability) mixup: 0.0 # (float) image mixup (probability) copy_paste: 0.0 # (float) segment copy-paste (probability) # Custom config.yaml --------------------------------------------------------------------------------------------------- cfg: # (str, optional) for overriding defaults.yaml # Tracker settings ------------------------------------------------------------------------------------------------------ tracker: botsort.yaml # (str) tracker type, choices=[botsort.yaml, bytetrack.yaml]
其参数具体解析见如下。
指定Yolov8的任务类型,默认为detect,您也可根据实际应用场景设置为segment、classify、pose等。
指定Yolov8的运行模式,默认为train,您也可根据实际操作设置为val、predict、export、track、benchmark等。
模型文件的路径,可以是预训练的模型权重文件(如yolov8n.pt)或模型配置文件(如yolov8n.yaml)。
数据集配置文件的路径,指定用于训练的数据集配置文件(如coco128.yaml)。
训练过程中整个数据集将被迭代多少次。
用于控制训练过程中的停止机制,当模型在一定数量的轮次内没有观察到适应性的改善时,训练将被提前停止。
这个参数默认设置为50,即在训练过程中,如果模型在连续的50个轮次内没有发现适应性的改善,训练将被提前停止,并且不会再继续进行下去。
每个批次中的图像数量。
用于设置输入图像尺寸。
对于训练(train)和验证(val)模式,您可以使用一个整数来指定输入图像的尺寸大小。例如,imgsz: 416 表示将输入图像调整为 416x416 的尺寸。
对于预测(predict)和导出(export)模式,您可以使用一个包含两个整数的列表来指定输入图像的尺寸大小。例如,imgsz: [640, 480] 表示将输入图像调整为宽度为640、高度为480的尺寸。
通过调整输入图像的尺寸,进而可控制模型的输入大小,从而优化模型的准确性和速度。较大的输入图像尺寸可能会提高模型的准确性,但会增加计算量和内存消耗。较小的输入图像尺寸可能会降低模型的准确性,但会提高计算速度和内存效率。
您可以根据实际场景需求及硬件资源限制,设置合适的输入图像尺寸。
指定是否保存训练过程中的**模型检查点(即模型的权重和参数)**以及预测结果。
用于指定训练过程中模型检查点的保存周期。
用于设置数据加载时是否使用缓存。默认不使用。
device是一个可选参数,用于指定模型运行的设备。
用于设置数据加载过程中的线程数。
可选参数,用于指定项目的名称。
可选参数,用于指定实验的名称。
在设置了project参数的前提下,name 参数将用于创建实验结果保存的目录结构。结果将保存在 project/name 的文件夹中,其中 project 是项目名称,name 是实验名称。
用于指定是否覆盖已存在的实验结果。
用于指定是否使用预训练模型。
另外,pretrained 参数还可以是一个字符串(例如 pretrained: ‘model_weights.pt’),用于指定要加载权重的模型文件。
用于指定要使用的优化器。
用于指定是否打印详细的输出信息。
用于设置随机种子(random seed)以实现结果的可重现性。
通过设置随机种子,可以固定随机数生成器的初始状态,从而使得随机过程在不同的运行中产生相同的随机序列。
用于启用确定性模式。
用于指定是否将多类别数据集作为单类别进行训练。
用于确定在train/test模式下是否使用矩形训练数据。
用于确定是否使用余弦学习率调度器(cosine learning rate scheduler)。
用于确定是否在最后几个训练周期中禁用马赛克数据增强(mosaic augmentation)。
当设置为0时,禁用马赛克数据增强,即在最后几个训练周期中不使用马赛克技术来扰乱图像。马赛克数据增强是一种常用的数据增强技术,通过将图像分割成小块并重新组合,以增加模型对图像局部特征的学习能力。
当设置为其他正整数时,表示在最后几个训练周期中禁用马赛克数据增强的次数。例如,如果设置为10,则表示在最后10个训练周期中的每个周期中禁用一次马赛克数据增强。
选择是否禁用马赛克数据增强取决于你的训练需求和模型性能。马赛克数据增强可以增加模型对图像的鲁棒性和泛化能力,但在一些情况下,禁用马赛克数据增强可能有助于更好地调整模型参数。
用于确定是否从上一个checkpoint继续训练模型。
用于确定是否使用自动混合精度(Automatic Mixed Precision,AMP)进行训练。
用于确定训练时要使用的数据集比例。
用于确定是否在训练过程中启动性能分析,并将结果记录到日志中。
用于确定在训练过程中是否冻结模型的某些层。
通常用在目标分割场景。用于确定在训练过程中的遮罩(masks)是否应该重叠。
用于确定遮罩(masks)的下采样比例。
当设置为4时,表示进行4倍下采样。这意味着遮罩的尺寸将缩小为原来的1/4。
用于确定是否在分类训练中使用dropout正则化。dropout正则化是一种常用的正则化技术,通过在训练过程中随机丢弃一部分神经元的输出,以减少过拟合的风险。
用于确定在训练过程中是否进行验证或测试。
用于确定用于验证的数据集划分类型。
用于确定是否将结果(可能包括训练损失、验证准确率、模型权重等信息)保存到JSON文件中。
用于确定是否保存标签的混合版本(hybrid version)。
用于确定目标检测中的目标置信度阈值。
用于确定非最大值抑制(NMS)中的交并比(IoU)阈值。
非最大值抑制是一种常用的目标检测后处理技术,用于去除重叠的检测框,只保留具有最高置信度的框。交并比阈值是用于判断两个框是否重叠的条件之一,即两个框的交集部分与并集部分的比值。
当设置的交并比阈值高于0.7时,意味着只有当两个框的交并比大于0.7时,才认为它们重叠。
用于确定每张图像的最大检测数量。当设置为300时,表示每张图像最多允许300个检测结果。
用于确定是否使用半精度(FP16)进行训练。半精度是一种较低精度的浮点数表示,可以减少模型的内存占用和计算开销。使用半精度可以加快训练速度,但可能会导致一些精度损失。
用于确定是否在模型推理中使用OpenCV DNN。OpenCV DNN提供了一个快速和轻量级的推理引擎,可以在多种硬件平台上进行高效的推理。
设置为True时,将使用OpenCV DNN库进行模型的推理。
设置为False时,将不使用OpenCV DNN,可能使用其他推理引擎或框架进行模型的推理。
用于确定在训练和验证过程中是否保存图表。
用于指定图像或视频的源目录。
是否在可能的情况下显示结果。设置为True时,将显示结果。
是否将结果保存为.txt文件。设置为True时,结果将保存为.txt文件。
是否将结果保存为带有置信度分数的文件。设置为True时,结果将保存为带有置信度分数的文件。
是否保存带有结果的裁剪图像。设置为True时,将保存带有结果的裁剪图像。
是否在图表中显示目标标签。设置为True时,目标标签将显示在图表中。
是否在图表中显示目标置信度分数。设置为True时,目标置信度分数将显示在图表中。
视频帧率步长。用于控制在视频中选择的帧的频率。设置为1时,表示使用所有帧进行处理。
是否缓冲所有的流式帧(True),或仅返回最近的帧(False)。
边界框的线宽。如果缺失,则自动设置线宽。
是否可视化模型特征。
是否对预测源应用图像增强。
是否进行类别无关的非最大值抑制。
通过类别进行结果过滤,可以设置为一个整数或整数列表,例如classes=0或classes=[0,2,3]。
是否使用高分辨率的分割遮罩。设置为True时,将使用高分辨率的分割遮罩。
是否在分割预测中显示边界框。设置为True时,边界框将显示在分割预测中。
导出模型的格式,可以选择将模型导出为TorchScript格式。
是否使用Keras。设置为True时,将使用Keras库。
是否对TorchScript进行优化。
是否进行CoreML或TensorFlow的INT8量化。
是否使用动态轴(dynamic axes)。
是否简化ONNX模型。
ONNX的opset版本号,为整数类型,可选择性设置。
TensorRT的工作空间大小,以GB为单位。
是否在CoreML中添加非最大抑制(NMS)。
初始学习率。初始学习率用于优化算法中的学习率参数,例如SGD和Adam。这个参数决定了优化算法在训练开始时的学习速率。
最终学习率。最终学习率是初始学习率乘以lrf的值,用于指定在训练过程中学习率逐渐减小的速率。
学习率动量。
权重衰减系数。
预热学习轮数。
预热学习初始动量。
预热学习初始偏置。
giou损失的系数。
分类损失的系数。
dfl损失的系数。
姿态损失的系数。
关键点目标损失的系数。
标签平滑化(label smoothing)的比例。
标准批次大小(nominal batch size)。
标准批次大小(nominal batch size)。
图像HSV-Saturation饱和度增强的比例。
图像HSV-Saturation饱和度增强的比例。
图像旋转的角度(+/-度)。
图像平移的比例(+/-比例)。
图像缩放的比例(+/-增益)。
图像缩放的比例(+/-增益)。
图像透视变换的比例(+/-比例),范围为0-0.001。
图像上下翻转的概率。
图像左右翻转的概率。
图像马赛克(mosaic)的概率。
图像混合(mixup)的概率。
分割图像的复制粘贴概率(copy-paste probability)。
覆盖默认的配置文件"default.yaml"。
设置跟踪器的类型。可以选择的选项有"botsort.yaml"和"bytetrack.yaml"。
# Ultralytics YOLO 声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/469543
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。