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


在这里插入图片描述

YOLOv8现在可以接受输入很多,如下表所示。包括图像、URL、PIL图像、OpenCV、NumPy数组、Torch张量、CSV文件、视频、目录、通配符、YouTube视频和视频流。表格✅指示了每个输入源是否可以在流模式下使用,并给出了每个输入源使用流模式的示例参数
在这里插入图片描述

预测参数

KeyValueDescription
source'ultralytics/assets'source directory for images or videos
conf0.25object confidence threshold for detection
iou0.7intersection over union (IoU) threshold for NMS
halfFalseuse half precision (FP16)
deviceNonedevice to run on, i.e. cuda device=0/1/2/3 or device=cpu
showFalseshow results if possible
saveFalsesave images with results
save_txtFalsesave results as .txt file
save_confFalsesave results with confidence scores
save_cropFalsesave cropped images with results
hide_labelsFalsehide labels
hide_confFalsehide confidence scores
max_det300maximum number of detections per image
vid_strideFalsevideo frame-rate stride
line_widthNoneThe line width of the bounding boxes. If None, it is scaled to the image size.
visualizeFalsevisualize model features
augmentFalseapply image augmentation to prediction sources
agnostic_nmsFalseclass-agnostic NMS
retina_masksFalseuse high-resolution segmentation masks
classesNonefilter results by class, i.e. class=0, or class=[0,2,3]
boxesTrueShow boxes in segmentation predictions

下面是每个参数的解释:

  • source:输入源的目录,可以是图像或视频文件。
  • conf:目标检测的对象置信度阈值。只有置信度高于此阈值的对象才会被检测出来。默认值为0.25
  • iou:非极大值抑制(NMS)的交并比(IoU)阈值。用于在重叠较大的候选框中选择最佳的检测结果。默认值为0.7
  • half:是否使用半精度(FP16)进行推理。半精度可以减少计算量,但可能会牺牲一些精度。默认值为False
  • device:模型运行的设备,可以是cuda设备(cuda device=0/1/2/3)或CPU(device=cpu)。
  • show:是否显示检测结果。如果设置为True,则会在屏幕上显示检测到的对象。默认值为False
  • save:是否保存带有检测结果的图像。如果设置为True,则会将检测结果保存为图像文件。默认值为False
  • save_txt:是否将检测结果保存为文本文件(.txt)。默认值为False
  • save_conf:是否将检测结果与置信度分数一起保存。默认值为False
  • save_crop:是否保存裁剪后的带有检测结果的图像。默认值为False
  • hide_labels:是否隐藏标签。如果设置为True,则在显示检测结果时不显示对象标签。默认值为False
  • hide_conf:是否隐藏置信度分数。如果设置为True,则在显示检测结果时不显示置信度分数。默认值为False
  • max_det:每张图像的最大检测数。如果检测到的对象数超过此值,将保留置信度高低来保留。默认值为300
  • vid_stride:视频帧率步长。默认值为False,表示使用默认的帧率。
  • line_width:边界框的线宽。如果设置为None,则根据图像大小进行自动缩放。默认值为None
  • visualize:是否可视化模型特征。默认值为False
  • augment:是否对预测源应用图像增强。默认值为False
  • agnostic_nms:是否使用类别无关的NMS。默认值为False
  • retina_masks:是否使用高分辨率的分割掩膜。默认值为False
  • classes:按类别过滤结果。可以指定单个类别(例如class=0)或多个类别(例如class=[0,2,3])。默认值为None,表示不进行类别过滤。
  • boxes:在分割预测中显示边界框。默认值为True

使用Results对象

Results对象包含以下组件:

Results.boxes:用于操作边界框的属性和方法的对象

Results.masks:用于索引掩膜或获取分段坐标的对象

Results.probs:包含类别概率或逻辑值的张量(tensor)

Results.orig_img:加载在内存中的原始图像

Results.path:包含输入图像的路径

result对象默认是torch.Tensor对象,也可以转为其他对象

results = results.cuda()
results = results.cpu()
results = results.to('cpu')
results = results.numpy()
Boxes

Boxes对象可用于索引、操作边界框,并将其转换为不同的格式。Box格式转换结果是缓存的,这意味着每个对象只计算一次,并且这些值将在将来的调用中重复使用。

results = model(img)
boxes = results[0].boxes
box = boxes[0]  # returns one box
box.xyxy

Boxes 的属性有

boxes.xyxy  #  xyxy 形式的目标框, (N, 4)
boxes.xywh  # xywh 形式的目标框, (N, 4)
boxes.xyxyn  # xyxy 形式的目标框且归一化, (N, 4)
boxes.xywhn  #  xywh 形式的目标框且归一化, (N, 4)
boxes.conf  # 置信度的分数, (N, 1)
boxes.cls  # 类别, (N, 1)
boxes.data  # 原始目标框参数坐标 (x, y, w, h)、置信度以及类别, (N, 6) or boxes.boxes
Masks

Masks可以被索引、操作修改、将Masks转换为分割结果。也可以缓存段转换操作。

results = model(inputs)
masks = results[0].masks  # Masks object
masks.xy  # x, y segments (pixels), List[segment] * N
masks.xyn  # x, y segments (normalized), List[segment] * N
masks.data  # raw masks tensor, (N, H, W) or masks.masks 
Probs 置信度

包含了所有类别的置信度

results = model(inputs)
results[0].probs  # cls prob, (num_class, )

更多文档可以参考 https://docs.ultralytics.com/reference/yolo/engine/results/

绘制结果

yolov8提供了plot函数绘制结果,可以绘制边框,分割结果,分类结果类别等等。不在需要像yolov5那样直接写后处理nms等,很方便。

res = model(img)
res_plotted = res[0].plot()
cv2.imshow("result", res_plotted)
ArgumentDescription
conf (bool)是否绘制检测置信度得分。
line_width (int, optional)边界框的线宽。如果为None,则根据图像大小进行缩放。
font_size (float, optional)文本的字体大小。如果为None,则根据图像大小进行缩放。
font (str)用于文本的字体。
pil (bool)是否使用PIL库进行图像绘制。
example (str)要显示的示例字符串。用于指示输出的期望格式。
img (numpy.ndarray)绘制到另一个图像上。如果为None,则绘制到原始图像上。
labels (bool)是否绘制边界框的标签。
boxes (bool)是否绘制边界框。
masks (bool)是否绘制掩膜。
probs (bool)是否绘制分类概率。
视频流数据源

以下是使用OpenCV和YOLOv8在视频帧上运行推理的代码。

import cv2
from ultralytics import YOLO

# Load the YOLOv8 model
model = YOLO('yolov8n.pt')

# Open the video file
video_path = "path/to/your/video/file.mp4"
cap = cv2.VideoCapture(video_path)

# Loop through the video frames
while cap.isOpened():
    # Read a frame from the video
    success, frame = cap.read()

    if success:
        # Run YOLOv8 inference on the frame
        results = model(frame)

        # Visualize the results on the frame
        annotated_frame = results[0].plot()

        # Display the annotated frame
        cv2.imshow("YOLOv8 Inference", annotated_frame)

        # Break the loop if 'q' is pressed
        if cv2.waitKey(1) & 0xFF == ord("q"):
            break
    else:
        # Break the loop if the end of the video is reached
        break

# Release the video capture object and close the display window
cap.release()
cv2.destroyAllWindows()

请添加图片描述

  • 53
    点赞
  • 341
    收藏
    觉得还不错? 一键收藏
  • 19
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 19
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值