目录
yolov8导航
如果大家想要了解关于yolov8的其他任务和相关内容可以点击这个链接,我这边整理了许多其他任务的说明博文,后续也会持续更新,包括yolov8模型优化、sam等等的相关内容。
YOLOv8(附带各种任务详细说明链接)
介绍
在机器学习和计算机视觉的领域,对视觉数据进行解读的过程被称为“推理”或“预测”。Ultralytics YOLOv8 提供了一项强大的功能——预测模式,专为高性能、实时推理各种数据源而设计。
为什么选择 Ultralytics YOLO 进行推理?
以下是为什么你应该考虑使用 YOLOv8 的预测模式来满足各种推理需求的原因:
- 多功能性:能够对图像、视频甚至实时流进行推理,适应各种数据源。
- 高性能:专为实时、高速处理而设计,在不牺牲准确性的前提下提供卓越的性能。
- 易用性:提供直观的 Python 和 CLI 接口,便于快速部署和测试,降低了使用门槛。
- 高度可定制:允许通过各种设置和参数来调整模型的推理行为,以满足您的具体需求,确保灵活应用。
预测模式的关键特性
YOLOv8 的预测模式设计得非常强大且多功能,主要特性包括:
- 多数据源兼容性:无论您的数据是单个图像、一组图像、视频文件,还是实时视频流,预测模式都能处理。
- 流模式:使用流模式来生成内存高效的 Results 对象生成器。通过在预测器的调用方法中设置
stream=True
来启用此功能。 - 批处理:能够在单个批次中处理多张图像或视频帧,从而进一步加快推理速度。
- 易于集成:由于其灵活的 API,可以轻松与现有的数据管道和其他软件组件集成。
当在推理期间传递 stream=True
时,Ultralytics YOLO 模型返回一个内存高效的 Python 生成器的 Results 对象;否则,返回一个 Results 对象的 Python 列表:
from ultralytics import YOLO
# 加载模型
model = YOLO("yolov8n.pt") # 预训练的 YOLOv8n 模型
# 对一组图像运行批量推理
results = model(["im1.jpg", "im2.jpg"]) # 返回一个 Results 对象列表
# 处理结果列表
for result in results:
boxes = result.boxes # 包含边界框输出的 Boxes 对象
masks = result.masks # 包含分割掩码输出的 Masks 对象
keypoints = result.keypoints # 包含姿态输出的 Keypoints 对象
probs = result.probs # 包含分类输出的 Probs 对象
obb = result.obb # 包含 OBB 输出的 Oriented boxes 对象
result.show() # 显示结果
result.save(filename="result.jpg") # 保存结果到磁盘
推理流程
YOLOv8 可以处理不同类型的输入来源进行推理,如下表所示。输入来源包括静态图像、视频流和各种数据格式。表中还指出了每种来源是否可以在流模式下使用(使用参数 stream=True
✅)。对于处理视频或实时流,流模式非常有用,因为它创建了结果生成器,而不是将所有帧加载到内存中。
提示
对于处理长视频或大型数据集,使用 stream=True
以有效管理内存。当 stream=False
时,所有帧或数据点的结果都会存储在内存中,对于大输入来说可能会导致内存不足错误。相反,stream=True
利用了生成器,仅将当前帧或数据点的结果保存在内存中,显著减少了内存消耗,防止内存不足问题。
来源 | 参数 | 类型 | 说明 |
---|---|---|---|
图像 | 'image.jpg' | str 或 Path | 单个图像文件。 |
URL | 'https://ultralytics.com/images/bus.jpg' | str | 图像的 URL。 |
屏幕截图 | 'screen' | str | 捕获屏幕截图。 |
PIL | Image.open('im.jpg') | PIL.Image | HWC 格式,RGB 通道。 |
OpenCV | cv2.imread('im.jpg') | np.ndarray | HWC 格式,BGR 通道,uint8 (0-255)。 |
numpy | np.zeros((640,1280,3)) | np.ndarray | HWC 格式,BGR 通道,uint8 (0-255)。 |
torch | torch.zeros(16,3,320,640) | torch.Tensor | BCHW 格式,RGB 通道,float32 (0.0-1.0)。 |
CSV | 'sources.csv' | str 或 Path | 包含图像、视频或目录路径的 CSV 文件。 |
视频 ✅ | 'video.mp4' | str 或 Path | 视频文件,支持 MP4、AVI 等格式。 |
目录 ✅ | 'path/' | str 或 Path | 包含图像或视频的目录路径。 |
glob ✅ | 'path/*.jpg' | str | 匹配多个文件的通配符模式。使用 * 作为通配符。 |
YouTube ✅ | 'https://youtu.be/LNwODJXcvt4' | str | YouTube 视频的 URL。 |
流 ✅ | 'rtsp://example.com/media.mp4' | str | 支持 RTSP、RTMP、TCP 或 IP 地址的流协议的 URL。 |
多流 ✅ | 'list.streams' | str 或 Path | *.streams 文本文件,每行一个流 URL,如 8 个流将以批处理大小 8 运行。 |
在图像文件上运行推理
from ultralytics import YOLO
# 加载预训练的 YOLOv8n 模型
model = YOLO("yolov8n.pt")
# 定义图像文件的路径
source = "path/to/image.jpg"
# 在该源上运行推理
results = model(source) # 返回一个 Results 对象列表
推理参数
model.predict()
接受多个可以在推理时传递的参数,以覆盖默认值:
示例
from ultralytics import YOLO
# 加载预训练的 YOLOv8n 模型
model = YOLO("yolov8n.pt")
# 运行带有参数的推理,例如在 'bus.jpg' 上
model.predict("bus.jpg", save=True, imgsz=320, conf=0.5)
推理参数
参数 | 类型 | 默认值 | 描述 |
---|---|---|---|
source | str | 'ultralytics/assets' | 指定推理的数据源。可以是图像路径、视频文件、目录、URL 或实时流的设备ID。支持多种格式和来源,灵活应用于不同类型的输入。 |
conf | float | 0.25 | 设置检测的最低置信度阈值。置信度低于此阈值的对象将被忽略。调整此值可减少误报。 |
iou | float | 0.7 | 非极大值抑制(NMS)的交并比(IoU)阈值。较低的值会通过消除重叠框减少检测数量,有助于减少重复检测。 |
imgsz | int 或 tuple | 640 | 定义推理的图像大小。可以是单个整数 640(表示正方形调整大小)或 (height, width) 元组。合适的大小可以提高检测精度和处理速度。 |
half | bool | False | 启用半精度(FP16)推理,在支持的 GPU 上可以加快模型推理速度,同时对准确性影响较小。 |
device | str | None | 指定用于推理的设备(例如 cpu、cuda:0 或 0)。允许用户选择在 CPU、特定 GPU 或其他计算设备上执行模型。 |
max_det | int | 300 | 每张图像允许的最大检测数量。限制模型在单次推理中可以检测的对象总数,防止在密集场景中输出过多结果。 |
vid_stride | int | 1 | 视频输入的帧间隔。允许在视频处理中跳过帧,以牺牲时间分辨率来加快处理速 |