RTMPose-s-OpenVINO

RTMPose-s for Intel NPUs, GPUs and CPUs: rtmpose_s_fp16 from litert-community/RTMPose-s-LiteRT as ONNX (tf2onnx 1.17.0, opset 17), OpenVINO IR with fp32 weights, and a precompiled Intel NPU blob. On the NPU of a Core Ultra 9 386H the blob runs in 0.89 ms per run, numpy input to numpy output.

Scripts, raw records, and the same table for all 52 graphs of LiteRT-Models: https://github.com/john-rocky/windows-zoo

Files

file bytes sha256
rtmpose_s_fp16.onnx 22,197,006 6c802b86a0f976f700afc336916a6db593df098b11568803e96d749ef6c8b9f3
openvino/rtmpose_s_fp16.xml 645,133 43bc352fc506a2dba6c3c4a6d28c8841d7355862788cf264d61cb2ea0dc2b85e
openvino/rtmpose_s_fp16.bin 21,870,864 e67abb3cc341620f5e759c33aafdf66535a6f2e93eb7c2ef99cc8ce5c5a3536c
npu/rtmpose_s_fp16.blob 11,858,056 e080cbbab273a719570224f9795a1b88873b0ff8246f051a7b0316d5b78239ed

The NPU blob was compiled with OpenVINO 2026.4.1, Intel NPU driver 32.0.100.4841 (OpenVINO reports NPU_DRIVER_VERSION 1004841, NPU_COMPILER_VERSION 524292). If import_model refuses a blob on another driver or OpenVINO version, compile the IR instead (the commented line in the snippet).

How it was measured

MSI Stealth 16 AI+ (Core Ultra 9 386H, RTX 5080 Laptop GPU at a 95 W power limit, Windows 11 build 26200.9711, on AC power), 2026-11-06 to 2026-11-07. On the laptop, each row is one process: load, one run, 5 warmup runs, then the median of 30 timed runs (2 warmup + 10 timed runs when the first run takes more than 3 s), numpy input to numpy output, every runtime at its default settings, one process at a time, each started after the CPU, the RTX and the Intel GPU had gone idle (the thresholds are in METHOD.md of the GitHub repo). Output check: each output against the CPU output in fp32 on the same input (ONNX Runtime's CPU EP); PASS = cosine ≥ 0.99, no NaN or Inf, and top-1 agreement ≥ 0.99 for class scores. The Snapdragon rows are Qualcomm AI Hub profile jobs of the same ONNX files (their own timer).

Speed and output check

processor runtime file ms load s output check
Intel AI Boost NPU OpenVINO 2026.4.1 npu/ blob (import_model) 0.89 0.01 FAIL: output_0_output: cos 0.9367 < 0.99; output_0_output: argmax agreement 15/17; output_1_output: cos 0.9374 < 0.99; output_1_output: argmax agreement 10/17
Intel AI Boost NPU ONNX Runtime 1.31.1 + OpenVINO EP 1.8.1 .onnx, compiled when the session loads 1.17 0.95 FAIL: output_0_output: cos 0.9367 < 0.99; output_0_output: argmax agreement 15/17; output_1_output: cos 0.9374 < 0.99; output_1_output: argmax agreement 10/17
Intel Graphics (iGPU) ONNX Runtime 1.31.1 + OpenVINO EP 1.8.1 .onnx 0.66 0.45 PASS (cos ≥ 0.9999)
RTX 5080 Laptop (95 W limit) ONNX Runtime 1.31.1, CUDA EP fp16 copy of the .onnx (not in this repo) 2.72 1.26 FAIL: output_0_output: argmax agreement 16/17; output_1_output: argmax agreement 15/17
RTX 5080 Laptop (95 W limit) ONNX Runtime 1.31.1, CUDA EP .onnx 2.94 1.16 FAIL: output_1_output: argmax agreement 16/17
Core Ultra 9 386H CPU ONNX Runtime 1.31.1, CPU EP .onnx 3.23 0.07 reference
Snapdragon X2 Elite NPU Qualcomm AI Hub, precompiled QNN ONNX .onnx compiled by AI Hub 0.44 0.44 not compared (AI Hub profile job, 2026-10-30)
Snapdragon X2 Elite NPU Qualcomm AI Hub, ONNX Runtime QNN EP .onnx, compiled when it loads 0.42 0.79 not compared (AI Hub profile job, 2026-10-30)
Galaxy S26 NPU Qualcomm AI Hub, precompiled QNN ONNX .onnx compiled by AI Hub 0.36 0.15 not compared (AI Hub profile job, 2026-10-30)

The ONNX file against the source .tflite (LiteRT interpreter on the CPU, the same input): PASS, cosine ≥ 0.9999 for every output.

Run it on the Intel NPU

Download this repo, then run the snippets from its folder:

pip install huggingface_hub
hf download mlboydaisuke/RTMPose-s-OpenVINO --local-dir RTMPose-s-OpenVINO
cd RTMPose-s-OpenVINO

OpenVINO (pip install openvino==2026.4.1):

import numpy as np
import openvino as ov

core = ov.Core()
if "NPU" not in core.available_devices:
    raise SystemExit(f"no Intel NPU visible to OpenVINO: {core.available_devices}")
with open("npu/rtmpose_s_fp16.blob", "rb") as f:
    compiled = core.import_model(f.read(), "NPU")  # precompiled: no compile at load
# or compile the IR on this machine: compiled = core.compile_model("openvino/rtmpose_s_fp16.xml", "NPU")
# replace the zeros with your preprocessed input (float32, the shapes printed by compiled.inputs)
feeds = {i.get_any_name(): np.zeros(list(i.shape), np.float32) for i in compiled.inputs}
outputs = compiled(feeds)
print({o.get_any_name(): outputs[o].shape for o in compiled.outputs})

ONNX Runtime with the OpenVINO EP (pip install onnxruntime==1.31.1 onnxruntime-ep-openvino==1.8.1):

import numpy as np
import onnxruntime as ort
import onnxruntime_ep_openvino as ov_ep

ort.register_execution_provider_library(ov_ep.get_ep_name(), ov_ep.get_library_path())
npu = [d for d in ort.get_ep_devices()
       if d.ep_name == ov_ep.get_ep_name() and d.ep_metadata.get("ov_device") == "NPU"]
if not npu:
    raise SystemExit("no Intel NPU visible to the OpenVINO EP")
so = ort.SessionOptions()
so.add_provider_for_devices(npu, {})
sess = ort.InferenceSession("rtmpose_s_fp16.onnx", sess_options=so)  # compiles for the NPU here
# replace the zeros with your preprocessed input (float32)
feeds = {i.name: np.zeros(i.shape, np.float32) for i in sess.get_inputs()}
outputs = sess.run(None, feeds)
print([o.shape for o in outputs])

Licence

Apache-2.0, the licence of litert-community/RTMPose-s-LiteRT. The source card names the upstream model as open-mmlab/mmpose (not a Hugging Face repo).

Downloads last month

-

Downloads are not tracked for this model. How to track
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Model tree for mlboydaisuke/RTMPose-s-OpenVINO

Quantized
(1)
this model

Collection including mlboydaisuke/RTMPose-s-OpenVINO