2025-简单点-ultralytics库解析-engine模块
Ultralytics YOLO Engine.predictor详解
BasePredictor 类概述
BasePredictor 是 Ultralytics YOLO 项目中用于执行预测的基础类。它为各种预测任务(如目标检测、实例分割、姿态估计等)提供了一个统一的接口。这个类的设计目标是支持多种输入源和模型格式,同时保持代码的可扩展性和易用性。
主要特性
- 支持多种输入源:图片、视频、摄像头、网络流等
- 支持多种模型格式:PyTorch、ONNX、 TensorRT、CoreML 等
- 支持流式处理和批量处理
- 提供结果可视化和保存功能
- 支持多线程和线程安全操作
核心组件分析
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 的预测过程遵循以下步骤:
- 初始化:设置配置参数、设备和模型
- 数据加载:使用适当的加载器加载输入数据
- 预处理:调整图像大小、归一化等
- 推理:运行模型进行预测
- 后处理:处理模型输出,生成最终结果
- 结果输出:可视化、保存或返回结果
# 主要预测循环

最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



