2025-简单点-ultralytics库解析-engine.predictor模块

Ultralytics YOLO Engine.predictor详解

BasePredictor 类概述

BasePredictor 是 Ultralytics YOLO 项目中用于执行预测的基础类。它为各种预测任务(如目标检测、实例分割、姿态估计等)提供了一个统一的接口。这个类的设计目标是支持多种输入源和模型格式,同时保持代码的可扩展性和易用性。

主要特性

  1. 支持多种输入源:图片、视频、摄像头、网络流等
  2. 支持多种模型格式:PyTorch、ONNX、 TensorRT、CoreML 等
  3. 支持流式处理和批量处理
  4. 提供结果可视化和保存功能
  5. 支持多线程和线程安全操作

核心组件分析

1. 模型后端处理 - AutoBackend

Ultralytics YOLO 使用 AutoBackend 类来处理不同格式的模型文件。这个类能够自动识别模型格式并选择合适的推理引擎:

self.model = AutoBackend(
    weights=model or self.args.model,
    device=select_device(self.args.device, verbose=verbose),
    dnn=self.args.dnn,
    data=self.args.data,
    fp16=self.args.half,
    batch=self.args.batch,
    fuse=True,
    verbose=verbose,
)

AutoBackend 支持以下模型格式:

PyTorch (.pt)
TorchScript (.torchscript)
ONNX (.onnx)
OpenVINO (*_openvino_model/)
CoreML (*.mlpackage)
TensorRT (*.engine)
TensorFlow SavedModel (*_saved_model/)
TensorFlow GraphDef (*.pb)
TensorFlow Lite (*.tflite)
TensorFlow Edge TPU (*_edgetpu.tflite)
PaddlePaddle (*_paddle_model/)
MNN (*.mnn)
NCNN (*_ncnn_model/)
IMX (*_imx_model/)
RKNN (*_rknn_model/)

这种设计使得同一个预测接口可以用于不同平台和设备上的模型部署。

2. 图像预处理 - LetterBox

在进行推理之前,输入图像需要进行预处理。Ultralytics 使用 LetterBox 类来调整图像大小并保持宽高比:

letterbox = LetterBox(
    self.imgsz,
    auto=same_shapes and (self.model.pt or (getattr(self.model, "dynamic", False) and not self.model.imx)),
    stride=self.model.stride,
)
return [letterbox(image=x) for x in im]

参考letterbox
LetterBox 类通过在图像周围添加填充来保持原始宽高比,这对于保持模型准确性至关重要。

3. 数据源处理

Ultralytics 支持多种数据源,通过 load_inference_source 函数和相关的加载器类来实现:

self.dataset = load_inference_source(
    source=source,
    batch=self.args.batch,
    vid_stride=self.args.vid_stride,
    buffer=self.args.stream_buffer,
)

支持的数据源类型包括:

图像文件和目录
视频文件
网络摄像头
网络流(RTSP, RTMP, HTTP等)
屏幕截图
内存中的图像(numpy数组、PIL图像等)

工作流程

BasePredictor 的预测过程遵循以下步骤:

  1. 初始化:设置配置参数、设备和模型
  2. 数据加载:使用适当的加载器加载输入数据
  3. 预处理:调整图像大小、归一化等
  4. 推理:运行模型进行预测
  5. 后处理:处理模型输出,生成最终结果
  6. 结果输出:可视化、保存或返回结果
# 主要预测循环
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

万物琴弦光锥之外

给个0.1,恭喜老板发财

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值