超详解| Yolov8模型手把手调参 | 配置 | 模型训练 | 验证 | 推理

YOLOv8是一款前沿、最先进(SOTA)的模型,基于先前YOLO版本的成功,引入了新功能和改进,进一步提升性能和灵活性。

然而,要充分发挥Yolov8的潜力,合理的参数配置是至关重要的。本文将带您深入了解Yolov8调参的每一个细节。无论您是初学者还是有经验的研究者,本文都将为您提供实用技巧和深入解读,帮助您在Yolov8的世界中取得更出色的成果。让我们一起开始这个令人激动的调参之旅吧!

文档目录

  • 1. 代码获取方式
  • 2. 准备项目环境
  • 3. Yolov8使用
    • 3.1. CLI
    • 3.2. Python
  • 4. default.yaml文件解读
    • 4.1. 类型/模式参数
      • 4.1.1. task: detect
      • 4.1.2. mode: train
    • 4.2. 训练参数
      • 4.2.1. model
      • 4.2.2. data
      • 4.2.3. epochs: 100
      • 4.2.4. patience: 50
      • 4.2.5. batch: 16
      • 4.2.6. imgsz: 640
      • 4.2.7. save: True
      • 4.2.8. save_period: -1
      • 4.2.9. cache: False
      • 4.2.10. device
      • 4.2.11. workers: 8
      • 4.2.12. project
      • 4.2.13. name
      • 4.2.14. exist_ok: False
      • 4.2.15. pretrained: True
      • 4.2.16. optimizer: auto
      • 4.2.17. verbose: True
      • 4.2.18. seed: 0
      • 4.2.19. deterministic: True
      • 4.2.20. single_cls: False
      • 4.2.21. rect: False
      • 4.2.22. cos_lr: False
      • 4.2.23. close_mosaic: 10
      • 4.2.24. resume: False
      • 4.2.25. amp: True
      • 4.2.26. fraction: 1.0
      • 4.2.27. profile: False
      • 4.2.28. freeze: None
      • 4.2.29. overlap_mask: True
      • 4.2.30. mask_ratio
      • 4.2.31. dropout
    • 4.3. 验证/测试参数
      • 4.3.1. val: True
      • 4.3.2. split: val
      • 4.3.3. save_json: False
      • 4.3.4. save_hybrid: False
      • 4.3.5. conf
      • 4.3.6. iou: 0.7
      • 4.3.7. max_det: 300
      • 4.3.8. half: False
      • 4.3.9. dnn: False
      • 4.3.10. plots: True
    • 4.4. 预测参数
      • 4.4.1. source
      • 4.4.2. show: False
      • 4.4.3. save_txt: False
      • 4.4.4. save_conf: False
      • 4.4.5. save_crop: False
      • 4.4.6. show_labels: True
      • 4.4.7. show_conf: True
      • 4.4.8. vid_stride: 1
      • 4.4.9. stream_buffer: False
      • 4.4.10. line_width
      • 4.4.11. visualize: False
      • 4.4.12. augment: False
      • 4.4.13. agnostic_nms: False
      • 4.4.14. classes
      • 4.4.15. retina_masks: False
      • 4.4.16. boxes: True
    • 4.5. 模型导出参数
      • 4.5.1. format: torchscript
      • 4.5.2. keras: False
      • 4.5.3. optimize: False
      • 4.5.4. int8: False
      • 4.5.5. dynamic: False
      • 4.5.6. simplify: False
      • 4.5.7. opset
      • 4.5.8. workspace: 4
      • 4.5.9. nms: False
    • 4.6. 超参数
      • 4.6.1. lr0: 0.01
      • 4.6.2. lrf: 0.01
      • 4.6.3. momentum: 0.937
      • 4.6.4. weight_decay: 0.0005
      • 4.6.5. warmup_epochs: 3.0
      • 4.6.6. warmup_momentum: 0.8
      • 4.6.7. warmup_bias_lr: 0.1
      • 4.6.8. box: 7.5
      • 4.6.9. cls: 0.5
      • 4.6.10. dfl: 1.5
      • 4.6.11. pose: 12.0
      • 4.6.12. kobj: 1.0
      • 4.6.13. label_smoothing: 0.0
      • 4.6.14. nbs: 64
      • 4.6.15. hsv_h: 0.015
      • 4.6.16. hsv_s: 0.7
      • 4.6.17. hsv_v: 0.4
      • 4.6.18. degrees: 0.0
      • 4.6.19. translate: 0.1
      • 4.6.20. scale: 0.5
      • 4.6.21. shear: 0.0
      • 4.6.22. perspective: 0.0
      • 4.6.23. flipud: 0.0
      • 4.6.24. fliplr: 0.5
      • 4.6.25. mosaic: 1.0
      • 4.6.26. mixup: 0.0
      • 4.6.27. copy_paste: 0.0
    • 4.7. 自定义配置文件
      • 4.7.1. cfg:
    • 4.8. 跟踪器设置
      • 4.8.1. tracker: botsort.yaml
  • 5. YOLOv8网络配置
    • 5.1. Parameters
    • 5.2. Backbone
    • 5.3. Head

1. 代码获取方式

Yolov8项目地址:https://github.com/ultralytics/ultralytics

在这里插入图片描述

首先切换至指定目录,执行以下命令克隆Yolov8项目代码到本地。

git clone https://github.com/ultralytics/ultralytics

2. 准备项目环境

切换至ultralytics,安装依赖包。

cd ultralytics
pip install -r requirements.txt

如果加快下载速度,可使用国内源,例如:

pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple

3. Yolov8使用

3.1. CLI

YOLOv8可以在命令行界面(CLI)中直接使用,只需输入yolo命令,例如:

yolo predict model=yolov8n.pt imgz=640 source='https://ultralytics.com/images/bus.jpg'

其中,

  • predict:是指这条命令用于进行模型预测。
  • model:指定要使用的模型文件,示例中yolov8n.pt是Yolov8预训练模型。
  • imgz:指定输入图像的尺寸大小。
  • source:指定输入图像读取路径。

3.2. Python

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")

4. default.yaml文件解读

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]

其参数具体解析见如下。

4.1. 类型/模式参数

4.1.1. task: detect

指定Yolov8的任务类型,默认为detect,您也可根据实际应用场景设置为segment、classify、pose等。

4.1.2. mode: train

指定Yolov8的运行模式,默认为train,您也可根据实际操作设置为val、predict、export、track、benchmark等。

4.2. 训练参数

4.2.1. model

模型文件的路径,可以是预训练的模型权重文件(如yolov8n.pt)或模型配置文件(如yolov8n.yaml)。

4.2.2. data

数据集配置文件的路径,指定用于训练的数据集配置文件(如coco128.yaml)。

4.2.3. epochs: 100

训练过程中整个数据集将被迭代多少次。

4.2.4. patience: 50

用于控制训练过程中的停止机制,当模型在一定数量的轮次内没有观察到适应性的改善时,训练将被提前停止。
这个参数默认设置为50,即在训练过程中,如果模型在连续的50个轮次内没有发现适应性的改善,训练将被提前停止,并且不会再继续进行下去。

4.2.5. batch: 16

每个批次中的图像数量。

4.2.6. imgsz: 640

用于设置输入图像尺寸。

对于训练(train)和验证(val)模式,您可以使用一个整数来指定输入图像的尺寸大小。例如,imgsz: 416 表示将输入图像调整为 416x416 的尺寸。

对于预测(predict)和导出(export)模式,您可以使用一个包含两个整数的列表来指定输入图像的尺寸大小。例如,imgsz: [640, 480] 表示将输入图像调整为宽度为640、高度为480的尺寸。

通过调整输入图像的尺寸,进而可控制模型的输入大小,从而优化模型的准确性和速度。较大的输入图像尺寸可能会提高模型的准确性,但会增加计算量和内存消耗。较小的输入图像尺寸可能会降低模型的准确性,但会提高计算速度和内存效率。

您可以根据实际场景需求及硬件资源限制,设置合适的输入图像尺寸。

4.2.7. save: True

指定是否保存训练过程中的**模型检查点(即模型的权重和参数)**以及预测结果。

  • 训练模式下,设置save: True,训练过程中的模型检查点将被保存,以便在训练完成后进行模型的加载和继续训练。
  • 预测模型下,设置save: True将保存预测结果。

4.2.8. save_period: -1

用于指定训练过程中模型检查点的保存周期。

  • 当 save_period 设置为大于等于 1 的整数时,模型检查点将每隔指定的epochs保存一次。例如,save_period: 10 表示每隔 10 个epochs保存一次模型检查点。
  • 当 save_period 设置为小于1的值(如 -1)时,模型检查点的保存功能将被禁用,不会在训练过程中自动保存。

4.2.9. cache: False

用于设置数据加载时是否使用缓存。默认不使用。

  • 当设置为 True 时,表示使用缓存来加速数据加载。数据将被缓存到RAM或磁盘上,以便在训练过程中快速读取。
  • 当设置为 False 时,表示禁用缓存,数据将每次从原始数据源重新加载。

4.2.10. device

device是一个可选参数,用于指定模型运行的设备。

  • 如果设置为整数(如 device: 0),表示将模型加载到指定的CUDA设备上进行训练或推理。例如,device: 0表示将模型加载到第一个CUDA设备上运行。
  • 如果设置为列表(如 device: 0,1,2,3),表示将模型加载到多个CUDA设备上并行运行。
  • 如果设置为字符串(如 device: cuda),表示将模型加载到可用的CUDA设备上运行,如果没有可用的CUDA设备,则会自动切换到CPU运行。
  • 如果设置为字符串(如device: cpu),表示将模型加载到CPU上进行训练或推理。

4.2.11. workers: 8

用于设置数据加载过程中的线程数。

  • 在训练过程中,数据加载是一个耗时的操作,特别是对于大型数据集。为了加快数据加载速度,可以使用多个线程并行地加载数据。
  • workers参数指定了用于数据加载的线程数量。默认为 8,表示使用8个线程来加载数据。

4.2.12. project

可选参数,用于指定项目的名称。

4.2.13. name

可选参数,用于指定实验的名称。

在设置了project参数的前提下,name 参数将用于创建实验结果保存的目录结构。结果将保存在 project/name 的文件夹中,其中 project 是项目名称,name 是实验名称。

4.2.14. exist_ok: False

用于指定是否覆盖已存在的实验结果。

4.2.15. pretrained: True

用于指定是否使用预训练模型。

  • 当设置为True时,表示使用预训练模型。预训练模型是在大规模数据集上进行训练的模型,通常具有良好的特征表示能力和泛化能力。
  • 当设置为False时,表示不使用预训练模型,将随机初始化模型的权重。此时,模型将从头开始进行训练。

另外,pretrained 参数还可以是一个字符串(例如 pretrained: ‘model_weights.pt’),用于指定要加载权重的模型文件。

4.2.16. optimizer: auto

用于指定要使用的优化器。

  • 当设置为 auto 时,系统会根据模型和训练任务的特性自动选择最适合的优化器。
  • 另外,您还可以从以下选项中选择手动指定的优化器:SGD、Adam、Adamax、AdamW、NAdam、RAdam 或 RMSProp。

4.2.17. verbose: True

用于指定是否打印详细的输出信息。

4.2.18. seed: 0

用于设置随机种子(random seed)以实现结果的可重现性。

通过设置随机种子,可以固定随机数生成器的初始状态,从而使得随机过程在不同的运行中产生相同的随机序列。

4.2.19. deterministic: True

用于启用确定性模式。

  • 当设置为 True 时,启用确定性模式,以确保在相同的输入和相同的参数设置下,模型的输出结果始终保持一致。
  • 当设置为 False 时,禁用确定性模式,模型的输出结果可能会在不同的运行中有所变化。

4.2.20. single_cls: False

用于指定是否将多类别数据集作为单类别进行训练。

  • 当设置为 False 时,模型将按照数据集中的实际类别进行训练,每个类别都有一个独立的标签。
  • 当设置为 True 时,模型将将多类别数据集视为单个类别进行训练,将所有目标物体都归为同一类别。

4.2.21. rect: False

用于确定在train/test模式下是否使用矩形训练数据。

  • 设置为True,则在train/test模式下,使用矩形的train/test数据进行train/test。模型会对输入进行相应的调整以适应不同的尺寸和宽高比。
  • 设置为False,则在train/test模式下,使用非矩形的train/test数据进行train/test。模型将仅接受具有相同尺寸和宽高比的输入。

4.2.22. cos_lr: False

用于确定是否使用余弦学习率调度器(cosine learning rate scheduler)。

  • 设置为True时,将使用余弦学习率调度器来调整模型的学习率。余弦学习率调度器可以帮助模型在训练过程中按照余弦函数的形状调整学习率,从而在训练初期使用较高的学习率,有助于快速收敛,而在训练后期逐渐降低学习率,有助于细致调整模型参数。
  • 设置为False时,将不使用余弦学习率调度器,而使用其他的学习率调度器(如常数学习率、指数衰减学习率等)来调整模型的学习率。

4.2.23. close_mosaic: 10

用于确定是否在最后几个训练周期中禁用马赛克数据增强(mosaic augmentation)。

当设置为0时,禁用马赛克数据增强,即在最后几个训练周期中不使用马赛克技术来扰乱图像。马赛克数据增强是一种常用的数据增强技术,通过将图像分割成小块并重新组合,以增加模型对图像局部特征的学习能力。

当设置为其他正整数时,表示在最后几个训练周期中禁用马赛克数据增强的次数。例如,如果设置为10,则表示在最后10个训练周期中的每个周期中禁用一次马赛克数据增强。

选择是否禁用马赛克数据增强取决于你的训练需求和模型性能。马赛克数据增强可以增加模型对图像的鲁棒性和泛化能力,但在一些情况下,禁用马赛克数据增强可能有助于更好地调整模型参数。

4.2.24. resume: False

用于确定是否从上一个checkpoint继续训练模型。

  • 设置为True时,将从上一个checkpoint处恢复训练。这意味着模型将加载上一个保存的参数,并继续训练过程,以便在之前的训练基础上继续优化模型。
  • 设置为False时,将不从上一个checkpoint处恢复训练。这意味着模型将从头开始训练,不考虑之前的训练状态和参数。

4.2.25. amp: True

用于确定是否使用自动混合精度(Automatic Mixed Precision,AMP)进行训练。

  • 设置为True时,将启用AMP训练。AMP是一种深度学习训练技术,可以在保持模型精度的同时,提高训练速度和内存利用率。
  • 设置为False时,将不使用AMP,即使用常规的精度进行训练,通常是使用单精度浮点数(single-precision floating-point)。

4.2.26. fraction: 1.0

用于确定训练时要使用的数据集比例。

  • 设置为1.0时,表示使用完整的训练数据集进行训练,即训练集中的所有图像都会被用于训练。
  • 设置为小于1.0的值时,表示仅使用训练数据集的一部分图像进行训练。具体来说,设置为0.8表示使用训练集中80%的图像进行训练,剩下的20%将不参与训练。

4.2.27. profile: False

用于确定是否在训练过程中启动性能分析,并将结果记录到日志中。

  • 设置为True时,在训练过程中将启用性能分析。
  • 设置为False时,将禁用性能分析。

4.2.28. freeze: None

用于确定在训练过程中是否冻结模型的某些层。

  • 设置为一个整数n,表示冻结前n层。这意味着在训练过程中,前n层的权重将保持不变,不会被更新。
  • 设置为一个列表,列表中的元素是要冻结的层的索引。这意味着在训练过程中,指定索引的层的权重将保持不变,不会被更新。

4.2.29. overlap_mask: True

通常用在目标分割场景。用于确定在训练过程中的遮罩(masks)是否应该重叠。

  • 设置为True时,在训练过程中的遮罩可以重叠。这意味着在进行分割训练时,多个遮罩可以同时存在并重叠在一起。
  • 设置为False时,遮罩将不重叠。这意味着每个遮罩将被视为独立的对象,不会与其他遮罩重叠。

4.2.30. mask_ratio

用于确定遮罩(masks)的下采样比例。

当设置为4时,表示进行4倍下采样。这意味着遮罩的尺寸将缩小为原来的1/4。

4.2.31. dropout

用于确定是否在分类训练中使用dropout正则化。dropout正则化是一种常用的正则化技术,通过在训练过程中随机丢弃一部分神经元的输出,以减少过拟合的风险。

  • 当设置为0.0时,表示不使用dropout正则化。
  • 当设置为介于0.0到1.0之间的值时,表示使用dropout正则化,并指定了要丢弃的神经元输出的比例。例如,设置为0.5表示在训练过程中随机丢弃50%的神经元输出。

4.3. 验证/测试参数

4.3.1. val: True

用于确定在训练过程中是否进行验证或测试。

  • 设置为True时,在训练过程中会进行验证或测试。这意味着会使用验证或测试数据集对模型进行评估,以了解模型在未见过的数据上的性能表现。
  • 设置为False时,将不进行验证或测试。这意味着训练过程中只会进行模型的训练,而不会对模型进行评估。

4.3.2. split: val

用于确定用于验证的数据集划分类型。

  • 设置为’val’时,表示使用验证集进行模型的验证。
  • 设置为’test’时,表示使用测试集进行模型的验证。
  • 设置为’train’时,表示使用训练集的一部分作为验证集。

4.3.3. save_json: False

用于确定是否将结果(可能包括训练损失、验证准确率、模型权重等信息)保存到JSON文件中。

  • 设置为True时,将保存训练过程中的结果到JSON文件中。
  • 设置为False时,将不保存结果到JSON文件中。

4.3.4. save_hybrid: False

用于确定是否保存标签的混合版本(hybrid version)。

  • 设置为True时,将保存标签的混合版本,即包括原始标签和额外的预测结果。
  • 设置为False时,将不保存标签的混合版本,只保存原始的标签。

4.3.5. conf

用于确定目标检测中的目标置信度阈值。

  • 当用于预测时,默认的目标置信度阈值为0.25。即是指只有目标的置信度高于0.25的检测结果才会被视为有效的目标。
  • 当用于验证时,默认的目标置信度阈值为0.001。

4.3.6. iou: 0.7

用于确定非最大值抑制(NMS)中的交并比(IoU)阈值。

非最大值抑制是一种常用的目标检测后处理技术,用于去除重叠的检测框,只保留具有最高置信度的框。交并比阈值是用于判断两个框是否重叠的条件之一,即两个框的交集部分与并集部分的比值。

当设置的交并比阈值高于0.7时,意味着只有当两个框的交并比大于0.7时,才认为它们重叠。

4.3.7. max_det: 300

用于确定每张图像的最大检测数量。当设置为300时,表示每张图像最多允许300个检测结果。

4.3.8. half: False

用于确定是否使用半精度(FP16)进行训练。半精度是一种较低精度的浮点数表示,可以减少模型的内存占用和计算开销。使用半精度可以加快训练速度,但可能会导致一些精度损失。

  • 设置为True时,将使用半精度(FP16)进行训练。
  • 设置为False时,将使用常规的精度(通常是单精度浮点数)进行训练。

4.3.9. dnn: False

用于确定是否在模型推理中使用OpenCV DNN。OpenCV DNN提供了一个快速和轻量级的推理引擎,可以在多种硬件平台上进行高效的推理。

  • 设置为True时,将使用OpenCV DNN库进行模型的推理。

  • 设置为False时,将不使用OpenCV DNN,可能使用其他推理引擎或框架进行模型的推理。

4.3.10. plots: True

用于确定在训练和验证过程中是否保存图表。

  • 设置为True时,将保存训练和验证过程中的图表。
  • 设置为False时,将不保存训练和验证过程中的图表。

4.4. 预测参数

4.4.1. source

用于指定图像或视频的源目录。

4.4.2. show: False

是否在可能的情况下显示结果。设置为True时,将显示结果。

4.4.3. save_txt: False

是否将结果保存为.txt文件。设置为True时,结果将保存为.txt文件。

4.4.4. save_conf: False

是否将结果保存为带有置信度分数的文件。设置为True时,结果将保存为带有置信度分数的文件。

4.4.5. save_crop: False

是否保存带有结果的裁剪图像。设置为True时,将保存带有结果的裁剪图像。

4.4.6. show_labels: True

是否在图表中显示目标标签。设置为True时,目标标签将显示在图表中。

4.4.7. show_conf: True

是否在图表中显示目标置信度分数。设置为True时,目标置信度分数将显示在图表中。

4.4.8. vid_stride: 1

视频帧率步长。用于控制在视频中选择的帧的频率。设置为1时,表示使用所有帧进行处理。

4.4.9. stream_buffer: False

是否缓冲所有的流式帧(True),或仅返回最近的帧(False)。

4.4.10. line_width

边界框的线宽。如果缺失,则自动设置线宽。

4.4.11. visualize: False

是否可视化模型特征。

4.4.12. augment: False

是否对预测源应用图像增强。

4.4.13. agnostic_nms: False

是否进行类别无关的非最大值抑制。

4.4.14. classes

通过类别进行结果过滤,可以设置为一个整数或整数列表,例如classes=0或classes=[0,2,3]。

4.4.15. retina_masks: False

是否使用高分辨率的分割遮罩。设置为True时,将使用高分辨率的分割遮罩。

4.4.16. boxes: True

是否在分割预测中显示边界框。设置为True时,边界框将显示在分割预测中。

4.5. 模型导出参数

4.5.1. format: torchscript

导出模型的格式,可以选择将模型导出为TorchScript格式。

4.5.2. keras: False

是否使用Keras。设置为True时,将使用Keras库。

4.5.3. optimize: False

是否对TorchScript进行优化。

4.5.4. int8: False

是否进行CoreML或TensorFlow的INT8量化。

4.5.5. dynamic: False

是否使用动态轴(dynamic axes)。

4.5.6. simplify: False

是否简化ONNX模型。

4.5.7. opset

ONNX的opset版本号,为整数类型,可选择性设置。

4.5.8. workspace: 4

TensorRT的工作空间大小,以GB为单位。

4.5.9. nms: False

是否在CoreML中添加非最大抑制(NMS)。

4.6. 超参数

4.6.1. lr0: 0.01

初始学习率。初始学习率用于优化算法中的学习率参数,例如SGD和Adam。这个参数决定了优化算法在训练开始时的学习速率。

4.6.2. lrf: 0.01

最终学习率。最终学习率是初始学习率乘以lrf的值,用于指定在训练过程中学习率逐渐减小的速率。

4.6.3. momentum: 0.937

学习率动量。

4.6.4. weight_decay: 0.0005

权重衰减系数。

4.6.5. warmup_epochs: 3.0

预热学习轮数。

4.6.6. warmup_momentum: 0.8

预热学习初始动量。

4.6.7. warmup_bias_lr: 0.1

预热学习初始偏置。

4.6.8. box: 7.5

giou损失的系数。

4.6.9. cls: 0.5

分类损失的系数。

4.6.10. dfl: 1.5

dfl损失的系数。

4.6.11. pose: 12.0

姿态损失的系数。

4.6.12. kobj: 1.0

关键点目标损失的系数。

4.6.13. label_smoothing: 0.0

标签平滑化(label smoothing)的比例。

4.6.14. nbs: 64

标准批次大小(nominal batch size)。

4.6.15. hsv_h: 0.015

标准批次大小(nominal batch size)。

4.6.16. hsv_s: 0.7

图像HSV-Saturation饱和度增强的比例。

4.6.17. hsv_v: 0.4

图像HSV-Saturation饱和度增强的比例。

4.6.18. degrees: 0.0

图像旋转的角度(+/-度)。

4.6.19. translate: 0.1

图像平移的比例(+/-比例)。

4.6.20. scale: 0.5

图像缩放的比例(+/-增益)。

4.6.21. shear: 0.0

图像缩放的比例(+/-增益)。

4.6.22. perspective: 0.0

图像透视变换的比例(+/-比例),范围为0-0.001。

4.6.23. flipud: 0.0

图像上下翻转的概率。

4.6.24. fliplr: 0.5

图像左右翻转的概率。

4.6.25. mosaic: 1.0

图像马赛克(mosaic)的概率。

4.6.26. mixup: 0.0

图像混合(mixup)的概率。

4.6.27. copy_paste: 0.0

分割图像的复制粘贴概率(copy-paste probability)。

4.7. 自定义配置文件

4.7.1. cfg:

覆盖默认的配置文件"default.yaml"。

4.8. 跟踪器设置

4.8.1. tracker: botsort.yaml

设置跟踪器的类型。可以选择的选项有"botsort.yaml"和"bytetrack.yaml"。

5. YOLOv8网络配置

# Ultralytics YOLO 🚀, GPL-3.0 license# Parameters
nc: 80  # number of classes
depth_multiple: 0.33  # scales module repeats
width_multiple: 0.50  # scales convolution channels# YOLOv8.0s backbone
backbone:# [from, repeats, module, args]- [-1, 1, Conv, [64, 3, 2]]  # 0-P1/2- [-1, 1, Conv, [128, 3, 2]]  # 1-P2/4- [-1, 3, C2f, [128, True]]- [-1, 1, Conv, [256, 3, 2]]  # 3-P3/8- [-1, 6, C2f, [256, True]]- [-1, 1, Conv, [512, 3, 2]]  # 5-P4/16- [-1, 6, C2f, [512, True]]- [-1, 1, Conv, [1024, 3, 2]]  # 7-P5/32- [-1, 3, C2f, [1024, True]]- [-1, 1, SPPF, [1024, 5]]  # 9# YOLOv8.0s head
head:- [-1, 1, nn.Upsample, [None, 2, 'nearest']]- [[-1, 6], 1, Concat, [1]]  # cat backbone P4- [-1, 3, C2f, [512]]  # 13- [-1, 1, nn.Upsample, [None, 2, 'nearest']]- [[-1, 4], 1, Concat, [1]]  # cat backbone P3- [-1, 3, C2f, [256]]  # 17 (P3/8-small)- [-1, 1, Conv, [256, 3, 2]]- [[-1, 12], 1, Concat, [1]]  # cat head P4- [-1, 3, C2f, [512]]  # 20 (P4/16-medium)- [-1, 1, Conv, [512, 3, 2]]- [[-1, 9], 1, Concat, [1]]  # cat head P5- [-1, 3, C2f, [1024]]  # 23 (P5/32-large)- [[15, 18, 21], 1, Detect, [nc]]  # Detect(P3, P4, P5)

[from, repeats, module, args]

- from:本层的来源,即就是输入。-1表示将上层的输出作为本层的输入。
- repeats:本层重复次数。
- module:本层名称。
- args:本层参数。

5.1. Parameters

  • nc:数据集中的类别数。
  • depth_multiple:模型层数因子,用于调整网络的深度。
  • width_multiple:模型通道数因子,用于调整网络的宽度。

5.2. Backbone

  • 第0层:[-1,1,Conv,[64, 3, 2]] #0-P1/2
    • -1表示将上层的输出作为本层的输入,第0层的输入是640*640*3的图像。
    • Conv表示卷积层。
    • [64, 3, 2]:输出通道数64,卷积核大小k为3,stride步长为2。由此计算padding为1。
    • 输出特征图大小(向下取整1):f_out=((f_in - k + 2*p ) / s )=((640 - 3 + 2*1 ) / 2 )=320
    • 所以本层输出特征图尺寸为320*320*64,长宽为原输入图片的1/2。
  • 第1层:[-1,1,Conv,[128, 3, 2]] # 1-P2/4
    • [128, 3, 2]:输出通道数128,卷积核大小k为3,stride步长为2。
    • 输出特征图大小(向下取整1):f_out=((f_in - k + 2*p ) / s )=((320 - 3 + 2*1 ) / 2 )=160
    • 所以本层输出特征图尺寸为160*160*128,长宽为原输入图片的1/4。
  • 第2层:[-1,3,C2f,[128, True]]
    • [128, True]:128表示输出通道数,True表示Bottleneck有shortcut。
    • 本层输出特征图尺寸仍为160*160*128。
  • 第3层:[-1,1,Conv,[256,3,2]] # 3-P3/8
    • [256,3,2]:输出通道数256,卷积核大小k为3,stride步长为2。
    • 输出特征图大小(向下取整1):f_out=((f_in - k + 2*p ) / s )=((160-3+ 2*1 )/2)=80
    • 所以本层输出特征图尺寸为80*80*256,长宽为原输入图片的1/8。
  • 第9层:[-1,1,SPPF,[1024, 5]]
    • [1024, 5]:1024表示输出通道数,5表示池化核大小k。
    • 输出特征图尺寸为20*20*1024。

5.3. Head

  • 第10层:[-1,1,nn.Upsample,[None,2,‘nearest’]]

    torch.nn.Upsample(size=None, scale_factor=None, mode='nearest', align_corners=None)
    
    • 本层为上采样层,-1表示将上层的输出作为本层的输入。None表示上采样的输出尺寸size不指定。2表示scale_factor=2,即输出尺寸是输入的2倍,nearest表示使用的上采样算法为最近邻插值算法。经过这层之后,特征图的长和宽变为原来的二倍,通道数不变,所以输出特征图尺寸为40*40*1024。
  • 第11层:[[-1,6],1,Concat,[1]] #cat backbone P4

    • 本层为cancat层,[-1,6]表示将上层和第6层的输出作为本层的输入,[1]表示concat拼接的维度为1。上层的输出尺寸为40*40*1024,第6层的输出尺寸为40*40*512,最终本层的输出尺寸为40*40*1536。
  • 第21层:[-1,3,C2f,[1024]] # 21(P5/32-large)

    • 本层是C2f模块,3表示本层重复3次。1024表示输出通道数。经过这层之后,特征图尺寸变为20*20*1024,特征图的长宽已经变成原输入图片的1/32。
  • 第22层:[[15, 18, 21], 1, Detect, [nc]]

    • 本层是Detect层,[15, 18, 21]表示将第15、18、21层的输出(分别是80*80*256、40*40*512、20*20*1024)作为本层的输入。nc是数据集的类别数。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/69931.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

stable diffusion实践操作-VAE

系列文章总目录 stable diffusion实践操作 文章目录 系列文章总目录一、 前言1 定义功能全局介绍2 模型全局介绍2.1 后缀以及存放位置2.2 查看大模型是否有VAE 二、正文1 原理1.1 基础原理 2 使用2.1 增加饱和度2.2 增加细节 3 下载3.1 自动下载3.2 手动下载 三 、总结 一、 前…

掌握逻辑漏洞复现技术,保护您的数字环境

环境准备 这篇文章旨在用于网络安全学习&#xff0c;请勿进行任何非法行为&#xff0c;否则后果自负。 1、支付逻辑漏洞 攻击相关介绍 介绍&#xff1a; 支付逻辑漏洞是指攻击者利用支付系统的漏洞&#xff0c;突破系统的限制&#xff0c;完成非法的支付操作。攻击者可以采…

从0到1构建界面设计系统思维

用户界面&#xff08;UI&#xff09;是人与机器之间发生交互的载体&#xff0c;也是用户体验&#xff08;UX&#xff09;的一个组成部分。用户界面由两个主要部分组成&#xff1a;视觉设计&#xff08;即传达产品的外观和感觉&#xff09;和交互设计&#xff08;即元素的功能和…

实现SSE的textevent-stream是什么?和applicationoctet-stream有什么区别?

WEB通讯技术。前端实现SSE长连接&#xff0c;nodejsexpress搭建简单服务器&#xff0c;进行接口调试&#xff0c;通过curl请求数据 点击上面的地址是可以了解轮询和长轮询以及websocket等通信模式&#xff0c;一些基础概念和速成技能&#xff0c;这篇来接着详细聊聊text/event…

Qt---对话框 事件处理 如何发布自己写的软件

目录 一、对话框 1.1 消息对话框&#xff08;QMessageBox&#xff09; 1> 消息对话框提供了一个模态的对话框&#xff0c;用来提示用户信息&#xff0c;或者询问用户问题并得到回答 2> 基于属性版本的API 3> 基于静态成员函数版本 4> 对话框案例 1、ui界面 …

2023年8月30日-[SWPUCTF 2021 新生赛]jicao

<?php highlight_file(index.php); include("flag.php"); $id$_POST[id]; $jsonjson_decode($_GET[json],true); if ($id"wllmNB"&&$json[x]"wllm") {echo $flag;} ?> 包含了flag.php文件&#xff0c;设定了一个POST请求的id和…

【AIGC专题】Stable Diffusion 从入门到企业级实战0401

一、概述 本章是《Stable Diffusion 从入门到企业级实战》系列的第四部分能力进阶篇《Stable Diffusion ControlNet v1.1 图像精准控制》第01节&#xff0c; 利用Stable Diffusion ControlNet Inpaint模型精准控制图像生成。本部分内容&#xff0c;位于整个Stable Diffusion生…

Ubuntu之apt-get系列--apt-get安装软件的方法/教程

原文网址&#xff1a;Ubuntu之apt-get系列--apt-get安装软件的方法/教程_IT利刃出鞘的博客-CSDN博客 简介 本文介绍Ubuntu使用apt-get安装软件的方法。 安装软件 先更新列表 sudo apt-get update 安装软件 sudo apt-get install <package name>[<version>]…

Android后退堆栈

修改代码 现在的ItemClick使得用户单击其中一个项目时就会跳转&#xff0c;现在要修改其使得在一个小屏幕设备上才会这样做&#xff0c;在一个大屏幕设备上运行用户选择一个训练项目时在右边的片段显示响应的信息。 希望片段处理后退的方式&#xff1a;假设用户在手机上运行这…

【ES6】js中的__proto__和prototype

在JavaScript中&#xff0c;__proto__和prototype都是用于实现对象继承的关键概念。 1、proto __proto__是一个非标准的属性&#xff0c;用于设置或获取一个对象的原型。这个属性提供了直接访问对象内部原型对象的途径。对于浏览器中的宿主对象和大多数对象来说&#xff0c;可…

加强版python连接飞书通知——本地电脑PC端通过网页链接打开本地已安装软件(调用注册表形式,以漏洞扫描工具AppScan为例)

前言 如果你想要通过超链接来打开本地应用,那么你首先你需要将你的应用添入windows注册表中(这样网页就可以通过指定代号来调用程序),由于安全性的原因所以网页无法直接通过输入绝对路径来调用本地文件。 一、通过创建reg文件自动配置注册表 创建文本文档,使用记事本打开…

STM32使用FAT文件系统-常见概念、代码走读

fat文件系统的所有外部接口都在ff.h中 格式化 挂载 使用文件系统的第一步&#xff0c;就是挂载。 函数原型&#xff1a;FRESULT f_mount (FATFS* fs, const TCHAR* path, BYTE opt); /* Mount/Unmount a logical drive */ static FATFS fs; FRESULT fres f_mo…

【爬虫】7.4. 字体反爬案例分析与爬取实战

字体反爬案例分析与爬取实战 文章目录 字体反爬案例分析与爬取实战1. 案例介绍2. 案例分析3. 爬取 本节来分析一个反爬案例&#xff0c;该案例将真实的数据隐藏到字体文件里&#xff0c;即使我们获取了页面源代码&#xff0c;也无法直接提取数据的真实值。 1. 案例介绍 案例网…

存储过程报Illegal mix of collations错误的解决方法

CREATE PROCEDURE maxAgeStudent(IN _gender CHAR) BEGINDECLARE maxage INT DEFAULT 0;SELECT max(age) INTO maxage FROM student where gender _gender;SELECT * from student WHERE age maxage and gender _gender; END; 在调用的时候 call maxAgeStudent(1) 产生了报…

SpringCloud入门实战(十五)分布式事务框架Seata简介

&#x1f4dd; 学技术、更要掌握学习的方法&#xff0c;一起学习&#xff0c;让进步发生 &#x1f469;&#x1f3fb; 作者&#xff1a;一只IT攻城狮 &#xff0c;关注我&#xff0c;不迷路 。 &#x1f490;学习建议&#xff1a;1、养成习惯&#xff0c;学习java的任何一个技术…

qemu/kvm学习笔记

qemu/kvm架构 cpu虚拟化的示例 Reference: kvmtest.c [LWN.net] 主要步骤&#xff1a; QEMU通过/dev/kvm设备文件发起KVM_CREATE_VM ioctl&#xff0c;请求KVM创建一个虚拟机。KVM创建虚拟机相应的结构体&#xff0c;并为QEMU返回一个虚拟机文件描述符QEMU通过虚拟机文件描述…

读懂AUTOSAR,之CAN Driver L-PDU发送和“重入问题”

1. L-PDU发送 L-PDU传输时,Can模块将L-PDU内容ID和数据长度转换为硬件特定格式(如果需要),并触发传输。 [SWS_Can_00059] CAN到内存的数据映射定义为首先发送的CAN数据字节为数组元素0,最后发送的CAN数据字节为数组元素7或63(在CAN FD的情况下)。(SRS_SPAL_12063)[S…

linux 进程管理命令

进程管理命令 查看进程命令 ps命令 显示系统上运行的进程列表 # 查看系统中所有正在运行的系统ps aux# 获取占用内存资源最多的10个进程&#xff0c;可以使用如下命令组合&#xff1a;ps aux|head -1;ps aux|grep -v PID|sort -rn -k 4|head# 获取占用CPU资源最多的10个进程&am…

PXE批量装机

目录 前言 一、交互式 &#xff08;一&#xff09;、搭建环境 &#xff08;二&#xff09;、配置dhcp服务 &#xff08;三&#xff09;、FTP服务 &#xff08;四&#xff09;、配置TFTP服务 &#xff08;五&#xff09;、准备pxelinx.0文件、引导文件、内核文件 &#…

Java分别用BIO、NIO实现简单的客户端服务器通信

分别用BIO、NIO实现客户端服务器通信 BIONIONIO演示&#xff08;无Selector&#xff09;NIO演示&#xff08;Selector&#xff09; 前言&#xff1a; Java I/O模型发展以及Netty网络模型的设计思想 BIO Java BIO是Java平台上的BIO&#xff08;Blocking I/O&#xff09;模型&a…