The reComputer RK3576 carries its own NPU and has one M.2 slot for an accelerator module. We ran the same YOLO26n (80 COCO classes, 640×640, INT8) on all three — the built-in NPU, a Hailo-8 module and an RK182x module — and compared single-stream against 8-stream FPS. All three see the same 394-frame 640×640 clip, and decode plus NMS run in one shared host implementation.
Quick deployment
What you need: a reComputer RK3576 (or a sibling board). Hailo-8 and RK182x share the same M.2 slot, so one module at a time; the built-in NPU needs no extra hardware. The install scripts create separate offline Python environments from the bundled dependencies without installing or replacing kernel drivers. Hailo-8 and RK182x still require their matching host driver and hardware module.
1. Get the code
All three models ship with the repository, so nothing has to be converted:
git clone https://github.com/inteintegrity/rk3576-hailo8-vs-rk182x
cd rk3576-hailo8-vs-rk182x2. One stream
Hailo-8 (module in the M.2 slot):
bash scripts/install-hailo8.sh
bash scripts/run-hailo8.shRK3576 built-in NPU:
bash scripts/install-rk3576.sh
bash scripts/run-rk3576.shRK182x (module in the M.2 slot):
bash scripts/install-rk182x.sh
bash scripts/run-rk182x.shInstall once. To run another clip, append its path to the run command, for example
bash scripts/run-rk3576.sh /path/to/clip.mp4.
3. Eight streams
Hailo-8:
.venvs/hailo8/bin/python Hailo/Hailo8/run_streams_aggregate.py \
--hef model/Hailo/yolo26n_hailo8_official.hef \
--video video/test.mp4 --streams 8 --frames 200 --json out/hailo8_8stream.jsonRK3576 built-in NPU:
.venvs/rk3576/bin/python common/run_video_streams_benchmark.py \
--backend rk3576 --model model/rk3576/yolo26n_rk3576_int8.rknn \
--video video/test.mp4 --instances 1,2,4,8 --frames 200 --json out/rk3576_multi.jsonRK182x:
.venvs/rk182x/bin/python common/run_video_streams_benchmark.py \
--backend rk1820 --model model/rk1820/yolo26n_rk1820_int8.rknn \
--weight model/rk1820/yolo26n_rk1820_int8.weight \
--video video/test.mp4 --instances 1,2,4,8 --frames 200 --json out/rk1820_multi.json4. Where the results land
One stream writes an annotated out/<backend>/annotated.mp4 plus a JSON with the per-frame detections and the FPS
of each stage; eight streams writes a JSON whose aggregate_fps is the total throughput shown in the
tables above. The terminal prints the live FPS while it runs.
Any clip works - any resolution, the scripts letterbox to 640x640 themselves. The measurements here used a 394-frame 640x640 traffic clip.
One stream: Hailo-8 leads
| Accelerator | Where it lives | Single-stream FPS |
|---|---|---|
| Hailo-8 | M.2 module | 49.2 |
| RK3576 built-in NPU | on-die | 23.5 |
| RK182x | M.2 module | 17.5 |
On a single stream the Hailo-8 is 2.1× the built-in NPU, and it also has the lowest latency at 13.9 ms per inference.
Eight streams: RK182x takes the lead
| Concurrent streams | Hailo-8 | RK3576 built-in NPU | RK182x |
|---|---|---|---|
| 1 | 50.3 | 21.2 | 16.2 |
| 2 | 51.3 | 43.2 | 34.4 |
| 4 | 51.6 | 52.3 | 57.0 |
| 8 | 51.6 | 69.7 | 88.6 |
- Hailo-8 is flat: 1 stream or 8 streams, the total stays around 50 FPS, so at 8 streams each stream gets 6.4 FPS.
- The built-in NPU grows with concurrency: 21.2 → 69.7 FPS (8.7 FPS per stream at 8 streams).
- RK182x climbs to 88.6 FPS: 11.1 FPS per stream at 8 streams — 1.27× the built-in NPU and 1.7× the Hailo-8.
The three, on screen
The same frame of the same clip, from each accelerator:
Left to right: Hailo-8, RK3576 built-in NPU, RK182x.
Which one to pick
| Use case | Choice | Why |
|---|---|---|
| One camera / one stream | Hailo-8 | 49.2 FPS, 13.9 ms per inference |
| One stream, no module wanted | RK3576 built-in NPU | 23.5 FPS, free, keeps the slot empty |
| Multi-camera, 4+ streams | RK182x | 88.6 FPS at 8 streams vs 69.7 (NPU) and 51.6 (Hailo-8) |
| Lowest single-frame latency | Hailo-8 | 13.9 ms per inference |
In one line: Hailo-8 for one stream, RK182x for many, and the built-in NPU as the free fallback. At 8 streams the on-die NPU already matches a Hailo-8 module (69.7 against 51.6); the module earns its slot when you need more than that and want to keep the SoC's own NPU free.
Source and data
- Code, model artefacts (HEF / RKNN / RKNN3),
results/summary.jsonand the two comparison charts: https://github.com/inteintegrity/rk3576-hailo8-vs-rk182x - Per-frame detection records, the multi-stream raw records, the runtime captures and the report: the
v1.0.0 release asset
rk3576-hailo8-vs-rk182x-benchmark-artifacts-v1.0.0.ziphttps://github.com/inteintegrity/rk3576-hailo8-vs-rk182x/releases/tag/v1.0.0