YOLOv8验证参数详解(全面详细、重点突出、大白话阐述小白也能看懂)

val也可以称为评估,评估我们模型的性能。此模式可用于调整评估时的超参数的模型,以提高其性能。

全部参数表

首先罗列一下官网提供的全部参数。
https://docs.ultralytics.com/modes/val/

KeyValueDescription
dataNonepath to data file, i.e. coco128.yaml
imgsz640image size as scalar or (h, w) list, i.e. (640, 480)
batch16number of images per batch (-1 for AutoBatch)
save_jsonFalsesave results to JSON file
save_hybridFalsesave hybrid version of labels (labels + additional predictions)
conf0.001object confidence threshold for detection
iou0.6intersection over union (IoU) threshold for NMS
max_det300maximum number of detections per image
halfTrueuse half precision (FP16)
deviceNonedevice to run on, i.e. cuda device=0/1/2/3 or device=cpu
dnnFalseuse OpenCV DNN for ONNX inference
plotsFalseshow plots during training
rectFalserectangular val with each batch collated for minimum padding
splitvaldataset split to use for validation, i.e. ‘val’, ‘test’ or ‘train’

受限于博主能力有限。下文的解释,如有问题,欢迎大家指出。
在这里插入图片描述

使用示例代码

from ultralytics import YOLO

# Load a model
model = YOLO('yolov8n.pt')  # 加载yolov8n
model = YOLO('path/to/best.pt')  # 也可以加载你自己的模型

# Validate the model
metrics = model.val()  
metrics.box.map    # 查看目标检测 map50-95 的性能
metrics.box.map50  # 查看目标检测 map50 的性能
metrics.box.map75  # 查看目标检测 map75 的性能
metrics.box.maps   # 返回一个列表包含每一个类别的 map50-95 

参数解释

  • data: 这个参数指定了数据文件的路径,比如coco128.yaml,它是一个配置文件,包含了训练数据集的相关信息,比如图像路径、标签等。
    官方的coco128.yaml就是这样,path指定数据集的根目录,train,val指定训练和测试数据集的位置。nc指定类别数目,names指定类别名字。
# YOLOv5 🚀 by Ultralytics, GPL-3.0 license
# COCO128 dataset https://www.kaggle.com/ultralytics/coco128 (first 128 images from COCO train2017)
# Example usage: python train.py --data coco128.yaml
# parent
# ├── yolov5
# └── datasets
#     └── coco128  ← downloads here


# Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]
path: ../datasets/coco128  # dataset root dir
train: images/train2017  # train images (relative to 'path') 128 images
val: images/train2017  # val images (relative to 'path') 128 images
test:  # test images (optional)

# Classes
nc: 80  # number of classes
names: ['person', 'bicycle', 'car', 'motorcycle', 'airplane', 'bus', 'train', 'truck', 'boat', 'traffic light',
        'fire hydrant', 'stop sign', 'parking meter', 'bench', 'bird', 'cat', 'dog', 'horse', 'sheep', 'cow',
        'elephant', 'bear', 'zebra', 'giraffe', 'backpack', 'umbrella', 'handbag', 'tie', 'suitcase', 'frisbee',
        'skis', 'snowboard', 'sports ball', 'kite', 'baseball bat', 'baseball glove', 'skateboard', 'surfboard',
        'tennis racket', 'bottle', 'wine glass', 'cup', 'fork', 'knife', 'spoon', 'bowl', 'banana', 'apple',
        'sandwich', 'orange', 'broccoli', 'carrot', 'hot dog', 'pizza', 'donut', 'cake', 'chair', 'couch',
        'potted plant', 'bed', 'dining table', 'toilet', 'tv', 'laptop', 'mouse', 'remote', 'keyboard', 'cell phone',
        'microwave', 'oven', 'toaster', 'sink', 'refrigerator', 'book', 'clock', 'vase', 'scissors', 'teddy bear',
        'hair drier', 'toothbrush']  # class names


# Download script/URL (optional)
download: https://github.com/ultralytics/yolov5/releases/download/v1.0/coco128.zip
  • imgsz: 这个参数决定了输入图像的尺寸大小。可以是一个数字640,表示宽度和高度相等都是640,也可以是一个包含宽度和高度的列表,比如(640, 480)。

  • batch: 这个参数定义了每个训练批次中包含的图像数量。如果设置为-1,系统将自动确定批量大小。

  • save_json: 如果设置为True,训练过程中的结果将保存为JSON文件。这对于后续的结果分析和可视化很有用。

  • save_hybrid: 这个参数决定是否保存标签和额外预测结果的混合版本。这对于一些特定的任务,如目标检测中的多标签预测,可能会很有用。

  • conf: 这个参数是物体检测中的置信度阈值。只有当检测结果中物体的置信度高于这个阈值时,它们才会被视为有效的检测结果。

  • iou: 这个参数是非极大值抑制(NMS)算法中的交并比(IoU)阈值。当多个边界框之间的交并比高于这个阈值时,只保留置信度最高的边界框。

  • max_det: 这个参数限制了每张图像中允许的最大检测数量。它可以帮助控制输出结果的数量,防止出现过多的重复检测。

  • half: 如果设置为True,将使用半精度(FP16)进行模型的训练或推理。半精度可以减少模型占用的显存和计算资源,但可能会影响模型的精度。

  • device: 这个参数指定了模型运行的设备,可以是cuda设备(如cuda device=0/1/2/3)或者是cpu。根据设备的性能和可用性选择合适的选项。

  • dnn: 如果设置为True,将使用OpenCV的DNN模块进行ONNX模型的推理。这可以提供更快的推理速度,但需要安装和配置OpenCV。

  • plots: 如果设置为True,训练过程中会显示一些图表,如损失曲线和精度曲线。这对于监控训练过程和调试模型很有帮助。

  • rect: 这个参数决定在验证过程中是否使用矩形方式将每个批次的图像整合到最小填充区域中。

  • split: 这个参数指定了用于验证的数据集划分,可以是’val’、‘test’或者’train’。根据需要选择适当的划分来评估模型的性能。

在这里插入图片描述

from ultralytics import YOLO
model = YOLO('yolov8n.pt').export(format="onnx")
print(model)

在这里插入图片描述

### 调整 YOLOv5 中 IOU 阈值参数以优化模型训练 在YOLOv5的目标检测框架中,调整IOU(Intersection over Union)阈值对于提高模型精度和召回率至关重要。超参数配置文件位于`data/hyps/`目录下[^1]。 #### 修改超参数配置文件 为了修改IOU阈值,需编辑对应的`.yaml`文件。通常情况下,默认的超参数设置可能并不适用于特定数据集,因此需要根据实际情况进行微调。例如: ```yaml # data/hyps/hyp.scratch.yaml iou: 0.7 # 设置初始IOU阈值 ``` 此部分定义了非极大值抑制(NMS)过程中使用的IOU阈值。当两个边界框之间的交并比大于设定的阈值时,则认为它们表示同一物体,并保留具有更高置信度的那个边界框[^3]。 #### 使用DIoU改进NMS效果 除了传统的基于IOU的方法外,还可以考虑引入更加先进的指标来改善NMS的效果。文献指出,在原有基础上加入中心点距离惩罚项可以有效减少假阳性误判情况的发生[^4]。具体实现方式如下: ```python def non_max_suppression(prediction, conf_thres=0.25, iou_thres=0.45, classes=None, agnostic=False, multi_label=False, labels=(), max_det=300, nm=0): ... elif method == 'diounms': nms_method = diou_nms else: raise ValueError(f'Unknown NMS type {method}') output = [torch.zeros((0, 6), device=prediction.device)] * prediction.shape[0] ... ``` 上述代码片段展示了如何扩展现有的NMS函数以支持不同的策略选择,其中就包含了对DIoU的支持。通过这种方式可以在一定程度上缓解由于简单几何关系所造成的误差累积问题。 #### 训练期间动态调整IOU阈值 值得注意的是,在实际操作当中也可以尝试让IOU阈值随着迭代次数的变化而变化。比如前期采用较低的标准以便于快速筛选掉明显错误的结果;后期再逐步收紧条件直至达到最优解为止。这种做法有助于平衡速度与质量之间的矛盾,使得整个流程更为高效合理[^2]。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值