恒美微站
首页
关于我们
建站服务
主题模板
案例展示
资讯中心
联系我们
YOLO-Series ONNXRuntime Rust 推理实战:用 usls 打通 YOLOv5–YOLO11 全任务的 Rust 部署
首页
资讯中心
/
YOLO-Series ONNXRuntime Rust 推理实战:用 usls 打通 YOLOv5–YOLO11 全任务的 Rust 部署
YOLO-Series ONNXRuntime Rust 推理实战:用 usls 打通 YOLOv5–YOLO11 全任务的 Rust 部署
发布时间:2026/10/15 3:40:12
计算机视觉深度学习人工智能【免费下载链接】yolov12[NeurIPS 2025] YOLOv12: Attention-Centric Real-Time Object Detectors项目地址https://gitcode.com/gh_mirrors/yo/yolov12点击查看免费下载本文以 YOLOv12Ultralytics仓库中examples/YOLO-Series-ONNXRuntime-Rust示例为核心讲解如何用 Rust ONNX Runtime 加载 YOLO 系列 ONNX 模型覆盖分类Classification、检测Detection、分割Segmentation、姿态Pose和旋转框OBB五类任务。读完本文你将掌握 ONNX Runtime 库的两种链接方式、CUDA/TensorRT 执行环境的版本要求、完整的 CLI 参数体系以及该示例从模型构建到可视化输出的完整推理链路。这个示例在仓库中的定位examples/YOLO-Series-ONNXRuntime-Rust 是 Ultralytics 官方examples目录中收录的 Rust 推理 Demo见 examples/README.md 中的应用列表标题为 YOLOv5-YOLO11 ONNXRuntime Rust由社区贡献者 jamjamjon 提供。与它同目录的还有仅针对 YOLOv8 的 examples/YOLOv8-ONNXRuntime-Rust而本示例的价值在于跨版本、跨任务模型兼容范围广支持YOLOv5、YOLOv6、YOLOv7、YOLOv8、YOLOv9、YOLOv10、YOLO11、YOLO-world、RTDETR等多个版本的模型文件任务覆盖全Classification、Segmentation、Detection、Pose、OBB五大视觉任务精度灵活同时支持FP16与FP32的 ONNX 模型执行提供者丰富支持CPU、CUDA、CoreML、TensorRT四种加速后端动态输入形状可按batch、width、height三个维度动态调整模型输入灵活的数据加载DataLoader组件支持图片、图片文件夹、视频文件与视频流实时显示与视频导出Viewer提供类似 OpenCVimshow()的实时窗口显示以及类似imwrite()的视频导出能力完备的标注渲染Annotator支持水平框HBB、旋转框OBB、多边形、掩码mask、关键点与文本标签。整个示例的工程非常精简仅由三个文件组成文件作用Cargo.toml声明依赖与包元信息src/main.rsCLI 解析、模型构建、数据加载、推理与可视化的完整入口README.md环境配置与运行命令说明核心推理逻辑全部委托给uslscrate版本0.0.19并启用autofeature它封装了模型加载、预处理、推理、NMS 后处理与结果可视化。Cargo.toml 的依赖仅四项anyhow错误处理、clapCLI 解析、tracing/tracing-subscriber日志与usls[dependencies] anyhow 1.0.92 clap 4.5.20 tracing 0.1.40 tracing-subscriber 0.3.18 usls { version 0.0.19, features [auto] }环境搭建ONNXRuntime 链接、CUDA/TensorRT 与 ffmpeg1. ONNXRuntime 库的两种链接方式ONNX Runtime 的 C ABI 动态库不会随 Cargo 自动安装需要二选一方式一手动链接Linux / macOS从 ONNX Runtime 官方发布页下载与目标平台匹配的运行时包导出ORT_DYLIB_PATH环境变量指向动态库文件export ORT_DYLIB_PATH/path/to/onnxruntime/lib/libonnxruntime.so.1.19.0链接机制的更多细节可参考 ONNX Runtime 官方 linking 文档ort.pyke.io/setup/linking。方式二自动下载给usls启用autofeature 后本仓库 Cargo.toml 已默认开启features [auto]构建/运行时会自动下载所需库无需手动配置cargo run -r --example yolo --features auto2. CUDA / CuDNN / TensorRT可选执行提供者的版本要求如下来自 README.md 的 Setup 章节执行提供者依赖要求CUDA EPCUDA12.xTensorRT EPCUDA12.x TensorRT10.xCoreML EP仅 macOS 平台3. ffmpeg可选如果需要在窗口中查看视频帧、或保存视频推理结果需按照rust-ffmpeg项目 Wiki 的说明安装 ffmpeg 相关开发库。纯图片输入/输出场景可以跳过此步。运行命令五大任务的完整示例README.md 提供了各任务的启动命令。以下按任务分组完整列出-r表示以 release 模式编译运行# 自定义模型文件 cargo run -r -- --task detect --ver v8 --nc 6 --model xxx.onnx # 6 类自定义模型 # Classify分类 cargo run -r -- --task classify --ver v5 --scale s --width 224 --height 224 --nc 1000 # YOLOv5 cargo run -r -- --task classify --ver v8 --scale n --width 224 --height 224 --nc 1000 # YOLOv8 cargo run -r -- --task classify --ver v11 --scale n --width 224 --height 224 --nc 1000 # YOLO11 # Detect检测 cargo run -r -- --task detect --ver v5 --scale n # YOLOv5 cargo run -r -- --task detect --ver v6 --scale n # YOLOv6 cargo run -r -- --task detect --ver v7 --scale t # YOLOv7 cargo run -r -- --task detect --ver v8 --scale n # YOLOv8 cargo run -r -- --task detect --ver v9 --scale t # YOLOv9 cargo run -r -- --task detect --ver v10 --scale n # YOLOv10 cargo run -r -- --task detect --ver v11 --scale n # YOLO11 cargo run -r -- --task detect --ver rtdetr --scale l # RTDETR # Pose姿态 cargo run -r -- --task pose --ver v8 --scale n # YOLOv8-Pose cargo run -r -- --task pose --ver v11 --scale n # YOLO11-Pose # Segment分割 cargo run -r -- --task segment --ver v5 --scale n # YOLOv5-Segment cargo run -r -- --task segment --ver v8 --scale n # YOLOv8-Segment cargo run -r -- --task segment --ver v11 --scale n # YOLO11-Segment cargo run -r -- --task segment --model yolo/FastSAM-s-dyn-f16.onnx # FastSAMFP16 动态形状 # OBB旋转框检测 cargo run -r -- --ver v8 --task obb --scale n --width 1024 --height 1024 --source images/dota.png # YOLOv8-OBB cargo run -r -- --ver v11 --task obb --scale n --width 1024 --height 1024 --source images/dota.png # YOLO11-OBB注意几个要点分类任务显式指定了输入尺寸如--width 224 --height 224因为分类骨干网的输入规格与检测模型不同OBB 任务建议 1024×1024 输入与训练分辨率一致且--source换成了 DOTAv1 风格的images/dota.png测试图默认输入是本仓库的 ultralytics/assets/bus.jpg--model参数可以直接指向任意本地 ONNX 文件绕过{版本}-{规模}-{任务}的路径约定例如官方分割模型之外还能加载FastSAM-s-dyn-f16.onnx这类第三方分割模型-dyn表示动态形状、-f16表示 FP16正好呼应精度灵活特性更多参数可通过cargo run -- --help查看。CLI 参数全解从 main.rs 源码看默认值examples/YOLO-Series-ONNXRuntime-Rust/src/main.rs 使用clap派生了Args结构体L9-L103其中每个字段的注释与默认值就是完整参数表参数类型默认值说明--modelOptionString无ONNX 模型路径缺省时按约定生成yolo/{ver}-{scale}-{task}.onnx--sourceString../../ultralytics/assets/bus.jpg输入源图片/文件夹/视频/视频流--task枚举detectYOLO 任务类型classify/detect/pose/segment/obb--ver枚举v8模型版本v5…v11、rtdetr等--scale枚举n模型规模n/s/m/l/x/t等--batch_sizeusize1批大小--width_min/--width/--width_maxisize224/640/1024输入宽度的动态范围min, 代表值, max--height_min/--height/--height_maxisize224/640/1024输入高度的动态范围--ncusize80类别数默认 COCO 80 类--confsVecf32[0.2, 0.15]置信度阈值通常为 cls conf 与 box/IOU conf 两级--trt/--cuda/--coremlboolfalse选择对应执行提供者均未启用时走 CPU--halfboolfalseTensorRT 下启用 FP16--device_idusize0设备 ID--profileboolfalse启用性能剖析日志--no_contoursboolfalse跳过轮廓查找以加速掩码绘制--viewboolfalse打开实时显示窗口需 ffmpeg--nosaveboolfalse不保存结果图/视频值得说明的细节执行提供者的优先级写在设备选择逻辑里main.rs L141-L149--cuda优先生效其次--trt再次--coreml否则回退 CPU。三者互斥同开时按此顺序取第一个命中的动态形状三元组with_ixx(0, 2, (height_min, height, height_max))L159-L160以 (min, opt, max) 形式声明第 2、3 维高、宽的动态范围batch 维声明为(1, batch_size, 4)——这与 Ultralytics 官方导出器的动态轴定义batch/height/width 三维动态在语义上完全对齐类别名与关键点名的注入在源码中以注释形式保留L168-L171with_names(COCO_CLASS_NAMES_80)、with_names2(COCO_KEYPOINTS_17)、exclude_classes/retain_classes按需取消注释即可切换为自定义类别名或类别筛选分割任务默认通过without_masks(true)L185关闭掩码填充渲染仅绘制轮廓Annotator同时配置了COCO_SKELETONS_16骨架连接表供 Pose 任务使用L183-L189。模型从哪来用 Ultralytics 官方导出器生成 ONNX该 Demo 的输入模型来自 Ultralytics 的 ONNX 导出链路。在本仓库中导出入口为yolo export或model.export(formatonnx)见 README.md 中的导出说明核心实现位于 ultralytics/engine/exporter.py 的export_onnx方法L487-L541。几个与 Rust 侧推理直接相关的行为output_names [output0, output1] if isinstance(self.model, SegmentationModel) else [output0] dynamic self.args.dynamic if dynamic: dynamic {images: {0: batch, 2: height, 3: width}} # shape(1,3,640,640)分割模型输出两个 tensoroutput0为检测头、output1为掩码系数检测/姿态/分类/旋转框模型只有output0——这解释了为什么usls需要--task参数来区分输出解析方式动态轴与 Rust 侧的动态形状参数一一对应导出时dynamicTrue声明的 batch/height/width 三轴正好由main.rs中的width_min/width/width_max、height_min/height/height_max在推理端动态取值。若使用静态形状导出的模型则--width/--height必须与导出尺寸严格一致导出配置项在 ultralytics/cfg/default.yamlL85-L87中有定义dynamic: False、simplify: True使用onnxslim做图简化、opset可选指定算子集版本。为 Rust/CPU 推理准备模型时推荐model.export(formatonnx, dynamicTrue, halfTrue)生成 FP16 动态形状模型与 Demo 的FP16/FP32精度灵活性特性匹配导出文件名天然遵循{model_name}.onnx约定将其重命名为{ver}-{scale}-{task}.onnx并放入运行目录的yolo/子目录即可与 Demo 的默认路径规则main.rs L116-L124无缝衔接。推理主流程源码走读main.rs 的main()L105-L236是一条非常清晰的七步流水线理解它基本就理解了usls的典型用法第 1 步CLI 解析与日志初始化L106-L113。--profile启用tracingINFO 级日志用于性能剖析。第 2 步推导模型路径与输出名L116-L138。未指定--model时按{ver.name()}-{scale.name()}-{task.name()}.onnx拼接如yolo/v8-n-detect.onnx输出前缀saveout取模型文件名主干最终结果文件会带上Annotator中注册的YOLO子目录标记。第 3 步构建设备L141-L149。按cuda trt coreml cpu优先级映射为usls::Device枚举并携带device_id。第 4 步组装Options并创建模型L152-L175。这是整个程序配置最密集的一段链式调用除前文参数表覆盖项外还包含with_nc类别数、with_find_contours分割轮廓开关、with_profile剖析开关最后YOLO::new(options)一次性完成 ONNX Runtime 会话创建与动态 shape 配置。第 5 步数据加载与标注器构建L178-L196。DataLoader::new(args.source).with_batch(model.batch()).build()支持图片/文件夹/视频/流四类源批大小自动对齐模型动态 batch 上限Annotator配置骨架、轮廓开关、框线宽与保存目录Viewer仅在--view时创建5ms 帧延迟、1 倍缩放、可拖拽窗口。第 6 步推理-标注-显示-写盘循环L199-L226。每个批次执行model.forward(xs, args.profile)随后annotator.plot(xs, ys, !args.nosave)渲染结果若窗口打开则imshow并监听 Esc 退出未加--nosave则write_batch落盘为视频帧。第 7 步收尾L229-L232。循环结束后调用viewer.finish_write()完成视频文件写入。这个模型 → DataLoader → Annotator → Viewer的四件套组合覆盖了从离线批处理到实时窗口预览再到视频导出的典型 Rust 侧部署形态。实践建议与适用边界运行目录约定默认输入../../ultralytics/assets/bus.jpg是相对于示例目录的路径因此建议直接在该目录examples/YOLO-Series-ONNXRuntime-Rust下执行cargo run模型放在同级的yolo/子目录输出落在saveout/相关路径平台差异--coreml仅适用于 macOS--cuda/--trt依赖 CUDA 12.xTensorRT EP 另需 TensorRT 10.x环境版本不匹配会导致会话创建失败精度选择--half只作用于 TensorRT 执行路径with_trt_fp16FP16 的 ONNX 模型文件如FastSAM-s-dyn-f16.onnx则在任意后端上由 ONNX Runtime 自身按图内精度执行性能排查加--profile打开 INFO 日志观察各阶段耗时分割渲染瓶颈大时可加--no_contours跳过轮廓查找版本能力边界本示例的--ver枚举覆盖 v5–v11 与rtdetrREADME 中另提及YOLO-world兼容Yolo 版本命名与规模字母需与 ONNX 文件实际规格一致否则模型路径拼接会找不到文件——直接传--model是最稳妥的做法与 Python 侧的关系本 Rust 示例消费的是 Python 训练侧导出的 ONNX 产物仓库内 examples/YOLOv8-ONNXRuntimePython 版与 examples/YOLOv8-ONNXRuntime-RustYOLOv8 专用 Rust 版可与本文示例对照阅读分别验证相同模型在不同语言栈下的推理行为。综上examples/YOLO-Series-ONNXRuntime-Rust以不到 300 行 Rust 代码给出了 YOLO 系列 ONNX 模型在 Rust 生态中加载—推理—可视化—导出的完整参考实现配合 Ultralytics 官方导出器产生的动态形状 ONNX 文件即可在 CPU/CUDA/TensorRT/CoreML 各后端上跑通五类视觉任务。赞分享计算机视觉深度学习人工智能【免费下载链接】yolov12[NeurIPS 2025] YOLOv12: Attention-Centric Real-Time Object Detectors项目地址https://gitcode.com/gh_mirrors/yo/yolov12点击查看免费下载相关推荐使用 Rust ONNXRuntime 运行 Ultralytics YOLO 全任务推理YOLO-Series-ONNXRuntime-Rust 实战指南使用 Rust ONNXRuntime 运行 Ultralytics YOLO 全任务推理YOLO Series ONNXRuntime Rust 实战指人工智能深度学习计算机视觉预训练在 Rust 中驱动 YOLOv8 全任务推理基于 ONNXRuntime 的实战示例与源码解析在 Rust 中驱动 YOLOv8 全任务推理基于 ONNXRuntime 的实战示例与源码解析 本篇文章围绕 Ultralytics 仓库内 example人工智能深度学习计算机视觉预训练用 C gRPC 客户端对接 NVIDIA Triton 推理服务器Ultralytics YOLO 全任务部署实战指南用 C gRPC 客户端对接 NVIDIA Triton 推理服务器Ultralytics YOLO 全任务部署实战指南 导读 本文基于 Ultralyt人工智能深度学习计算机视觉预训练上一篇ToolJet 在 Google Cloud Run 上的完整部署指南应用服务、ToolJet DatabasePostgREST与 LTS 升级下一篇Authelia 集成 Apache GuacamoleOpenID Connect 1.0 单点登录实战指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考