3.3 使用 Ultralytics YOLO 进行模型预测
Ultralytics YOLO 生态系统和集成
介绍
在机器学习和计算机视觉的世界里,将视觉数据解释成有意义的信息叫做“推断”或“预测”。Ultralytics YOLO11 提供了一个强大的推断模式,设计用于高性能、实时推断,可应用于多种数据源。
观看:如何在自定义项目中提取 Ultralytics YOLO 模型的输出。
实际应用
-
制造业:汽车配件检测
-
体育运动:足球运动员检测
-
安全监控:人员跌落检测
为什么使用 Ultralytics YOLO 进行推断?
以下是选择 YOLO11 推断模式的几个理由:
-
多样性:能够对图片、视频甚至实时流进行推断。
-
性能:为高速、实时处理而设计,同时保持高准确性。
-
易用性:提供直观的 Python 和 CLI 接口,便于快速部署和测试。
-
高度可定制:多种设置和参数,允许根据具体需求调整模型的推断行为。
推断模式的关键功能
YOLO11 的推断模式设计得非常强大且灵活,具备以下功能:
-
多种数据源兼容:无论是单张图片、图片集合、视频文件,还是实时视频流,推断模式都能处理。
-
流式模式:使用流式功能生成内存高效的结果对象生成器,可通过设置 stream=True 启用。
-
批量处理:可以一次处理多张图片或多个视频帧,进一步提高推断速度。
-
易于集成:由于其灵活的 API,轻松实现与现有数据管道或其他软件组件的集成。
Ultralytics YOLO 模型返回一个 Python 结果对象列表,或者在 stream=True 参数下,返回内存高效的生成器。
推断示例
以下为并行时流式模式的调用示例:
from ultralytics import YOLO
# 加载一个模型
model = YOLO("yolo11n.pt") # 预训练的 YOLO11n 模型
# 对一组图片进行批量推断
results = model(["image1.jpg", "image2.jpg"]) # 返回结果对象的列表
# 处理结果列表
for result in results:
boxes = result.boxes # 边界框对象
masks = result.masks # 分割掩码对象
keypoints = result.keypoints # 关键点对象
probs = result.probs # 分类概率对象
obb = result.obb # 定向边界框对象
result.show() # 显示结果
result.save(filename="result.jpg") # 保存结果
推断数据源
YOLO11 可以处理多种类型的输入源,如下表所示。这些源包括静态图片、视频流和各种数据格式。表中还标明了每种数据源是否可以在流模式下使用(通过参数 stream=True)。
提示: 使用 stream=True 来处理长视频或大型数据集,以有效管理内存。stream=False 会将所有帧或数据点的结果存储在内存中,而 stream=True 则利用生成器,只保留当前帧或数据点的结果,大幅降低内存消耗,避免内存不足。
数据源类型 | 示例 | 说明 |
---|---|---|
图片 | 'image.jpg' | 单张图片文件 |
URL | 'https://ultralytics.com/images/bus.jpg' | 图片的 URL |
截图 | 'screen' | 捕获屏幕截图 |
PIL | Image.open('image.jpg') | RGB 格式的图片 |
OpenCV | cv2.imread('image.jpg') | BGR 格式的图片 |
numpy | np.zeros((640, 1280, 3)) | BGR 格式的 numpy 数组 |
torch | torch.zeros(16, 3, 320, 640) | RGB 格式的张量 |
CSV | 'sources.csv' | 包含图片、视频或目录路径的 CSV 文件 |
视频 ✅ | 'video.mp4' | 视频文件(如 MP4、AVI 等) |
目录 ✅ | 'path/' | 包含图片或视频的目录路径 |
glob ✅ | 'path/*.jpg' | 匹配多个文件的通配符模式 |
YouTube ✅ | 'https://youtu.be/LNwODJXcvt4' | YouTube 视频的 URL |
流媒体 ✅ | 'rtsp://example.com/media.mp4' | 流媒体 URL(如 RTSP、RTMP) |
多流媒体 ✅ | 'list.streams' | 包含多个流媒体 URL 的文本文件 |
以下是对每种数据源类型进行推断的代码示例:
from ultralytics import YOLO
# 加载预训练的 YOLO11n 模型
model = YOLO("yolo11n.pt")
# 定义图片文件路径
source = "path/to/image.jpg"
# 对指定数据源进行推断
results = model(source) # 返回结果对象的列表
推断参数
model.predict()
方法在推断时接受多个参数,可以覆盖默认设置:
from ultralytics import YOLO
# 加载预训练的 YOLO11n 模型
model = YOLO("yolo11n.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 | 定义推断的图片尺寸,可以是单个整数或 (高度, 宽度) 的元组。 |
half | bool | False | 启用半精度(FP16)推断,可加快支持的 GPU 上的推断速度。 |
device | str | None | 指定推断的设备(如 'cpu','cuda:0' 或 '0')。 |
max_det | int | 300 | 每张图片允许的最大检测数。 |
vid_stride | int | 1 | 视频输入的帧步长,可跳过帧以加快处理速度。 |
visualize | bool | False | 启用模型特征的可视化,便于调试和解释模型。 |
图像和视频格式
YOLO11 支持多种图像和视频格式,具体请参见 ultralytics/data/utils.py 文件中的有效后缀及示例预测命令。
处理结果
所有 Ultralytics predict()
调用将返回一个 Results
对象列表。
from ultralytics import YOLO
# 加载预训练的 YOLO11n 模型
model = YOLO("yolo11n.pt")
# 对图片进行推断
results = model("bus.jpg") # 结果对象列表
# 处理结果
for result in results:
print(result.boxes) # 打印检测到的边界框对象