宜宾建设教育培训中心网站,外贸实用工具,搭建网页的基础语言,做网站设计工作的报告书YOLOv8是一款前沿、最先进#xff08;SOTA#xff09;的模型#xff0c;基于先前YOLO版本的成功#xff0c;引入了新功能和改进#xff0c;进一步提升性能和灵活性。
然而#xff0c;要充分发挥Yolov8的潜力#xff0c;合理的参数配置是至关重要的。本文将带您深入了解…YOLOv8是一款前沿、最先进SOTA的模型基于先前YOLO版本的成功引入了新功能和改进进一步提升性能和灵活性。
然而要充分发挥Yolov8的潜力合理的参数配置是至关重要的。本文将带您深入了解Yolov8调参的每一个细节。无论您是初学者还是有经验的研究者本文都将为您提供实用技巧和深入解读帮助您在Yolov8的世界中取得更出色的成果。让我们一起开始这个令人激动的调参之旅吧
文档目录
1. 代码获取方式2. 准备项目环境3. Yolov8使用 3.1. CLI3.2. Python 4. default.yaml文件解读 4.1. 类型/模式参数 4.1.1. task: detect4.1.2. mode: train 4.2. 训练参数 4.2.1. model4.2.2. data4.2.3. epochs: 1004.2.4. patience: 504.2.5. batch: 164.2.6. imgsz: 6404.2.7. save: True4.2.8. save_period: -14.2.9. cache: False4.2.10. device4.2.11. workers: 84.2.12. project4.2.13. name4.2.14. exist_ok: False4.2.15. pretrained: True4.2.16. optimizer: auto4.2.17. verbose: True4.2.18. seed: 04.2.19. deterministic: True4.2.20. single_cls: False4.2.21. rect: False4.2.22. cos_lr: False4.2.23. close_mosaic: 104.2.24. resume: False4.2.25. amp: True4.2.26. fraction: 1.04.2.27. profile: False4.2.28. freeze: None4.2.29. overlap_mask: True4.2.30. mask_ratio4.2.31. dropout 4.3. 验证/测试参数 4.3.1. val: True4.3.2. split: val4.3.3. save_json: False4.3.4. save_hybrid: False4.3.5. conf4.3.6. iou: 0.74.3.7. max_det: 3004.3.8. half: False4.3.9. dnn: False4.3.10. plots: True 4.4. 预测参数 4.4.1. source4.4.2. show: False4.4.3. save_txt: False4.4.4. save_conf: False4.4.5. save_crop: False4.4.6. show_labels: True4.4.7. show_conf: True4.4.8. vid_stride: 14.4.9. stream_buffer: False4.4.10. line_width4.4.11. visualize: False4.4.12. augment: False4.4.13. agnostic_nms: False4.4.14. classes4.4.15. retina_masks: False4.4.16. boxes: True 4.5. 模型导出参数 4.5.1. format: torchscript4.5.2. keras: False4.5.3. optimize: False4.5.4. int8: False4.5.5. dynamic: False4.5.6. simplify: False4.5.7. opset4.5.8. workspace: 44.5.9. nms: False 4.6. 超参数 4.6.1. lr0: 0.014.6.2. lrf: 0.014.6.3. momentum: 0.9374.6.4. weight_decay: 0.00054.6.5. warmup_epochs: 3.04.6.6. warmup_momentum: 0.84.6.7. warmup_bias_lr: 0.14.6.8. box: 7.54.6.9. cls: 0.54.6.10. dfl: 1.54.6.11. pose: 12.04.6.12. kobj: 1.04.6.13. label_smoothing: 0.04.6.14. nbs: 644.6.15. hsv_h: 0.0154.6.16. hsv_s: 0.74.6.17. hsv_v: 0.44.6.18. degrees: 0.04.6.19. translate: 0.14.6.20. scale: 0.54.6.21. shear: 0.04.6.22. perspective: 0.04.6.23. flipud: 0.04.6.24. fliplr: 0.54.6.25. mosaic: 1.04.6.26. mixup: 0.04.6.27. copy_paste: 0.0 4.7. 自定义配置文件 4.7.1. cfg: 4.8. 跟踪器设置 4.8.1. tracker: botsort.yaml 5. YOLOv8网络配置 5.1. Parameters5.2. Backbone5.3. Head 1. 代码获取方式
Yolov8项目地址https://github.com/ultralytics/ultralytics 首先切换至指定目录执行以下命令克隆Yolov8项目代码到本地。
git clone https://github.com/ultralytics/ultralytics2. 准备项目环境
切换至ultralytics安装依赖包。
cd ultralytics
pip install -r requirements.txt如果加快下载速度可使用国内源例如
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple3. Yolov8使用
3.1. CLI
YOLOv8可以在命令行界面CLI中直接使用只需输入yolo命令例如
yolo predict modelyolov8n.pt imgz640 sourcehttps://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(datacoco128.yaml, epochs3)
# 在验证集上评估模型性能
metrics model.val()
# 对图像进行预测
results model(https://ultralytics.com/images/bus.jpg)
# 将模型导出为 ONNX 格式
success model.export(formatonnx)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 device0 or device0,1,2,3 or devicecpu
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 modetrain or rectangular validation if modeval
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. classes0, 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 Keras
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. SGD1E-2, Adam1E-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 PrecisionAMP进行训练。
设置为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
通过类别进行结果过滤可以设置为一个整数或整数列表例如classes0或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为3stride步长为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为3stride步长为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为3stride步长为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(sizeNone, scale_factorNone, modenearest, align_cornersNone)本层为上采样层-1表示将上层的输出作为本层的输入。None表示上采样的输出尺寸size不指定。2表示scale_factor2即输出尺寸是输入的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是数据集的类别数。