Perception › ROS 2 implementation › Model size & hardware · Acronym glossary
Model size, throughput and the hardware it runs on
Published parameter counts, engine sizes and measured latency for the detection, LiDAR and backbone models used across this site, together with the GPUs and Jetson modules they were measured on. Every number below is copied from a primary source and labelled with the device, precision, input size and dataset it belongs to, because a figure without those four labels is not a benchmark.
1 · The hardware, and why the same model changes speed on it
A perception model's frame rate is set as much by the silicon as by the network. Three properties dominate: tensor-core throughput at the precision you actually deploy, memory bandwidth (BEV and voxel workloads move large feature maps), and the power/thermal envelope, which on an embedded module is the difference between a datasheet number and a sustained one.
1.1 Data-center and desktop GPUs
| GPU | Architecture | Memory | Board power | Role in these tables |
|---|---|---|---|---|
| A100 (40/80 GB) | Ampere GA100, 3rd-gen tensor cores, no RT cores | 40 or 80 GB HBM2e, ~1.6–2.0 TB/s | 250–400 W (PCIe/SXM) | Ultralytics' YOLOv8 reference device; DINOv2's training cluster. Datacenter part — an upper bound, not a vehicle target. |
| T4 | Turing TU104, 2nd-gen tensor cores | 16 GB GDDR6, 320 GB/s | 70 W, passive | Ultralytics' YOLO11 reference device. Low power for a server card, so its numbers sit far below A100. |
| RTX 3090 | Ampere GA102, consumer | 24 GB GDDR6X, 936 GB/s | 350 W | The device for the published PyTorch BEVFusion figure. |
| RTX 6000 Ada | Ada Lovelace, workstation | 48 GB GDDR6 ECC, 960 GB/s | 300 W | The card used for this site's own BEVFusion inference run. |
1.2 NVIDIA Jetson modules (the actual deployment targets)
Specifications as published in the Ultralytics Jetson guide's comparison table:
| Module | Stated AI performance | GPU | CPU | Memory / bandwidth |
|---|---|---|---|---|
| AGX Thor (T5000) | 2070 FP4 TFLOPS | 2560-core Blackwell, 96 tensor cores, 1.57 GHz | 14-core Arm Neoverse-V3AE | 128 GB LPDDR5X, 273 GB/s |
| AGX Orin 64GB | 275 TOPS | 2048-core Ampere, 64 tensor cores, 1.3 GHz | 12-core Cortex-A78AE | 64 GB LPDDR5, 204.8 GB/s |
| Orin NX 16GB | 100 TOPS | 1024-core Ampere, 32 tensor cores, 918 MHz | 8-core Cortex-A78AE | 16 GB LPDDR5, 102.4 GB/s |
| Orin Nano Super | 67 TOPS | 1024-core Ampere, 32 tensor cores, 1020 MHz | 6-core Cortex-A78AE | 8 GB LPDDR5, 102 GB/s |
| AGX Xavier | 32 TOPS | 512-core Volta, 64 tensor cores, 1377 MHz | 8-core Carmel | 32 GB LPDDR4x, 136.5 GB/s |
| Xavier NX | 21 TOPS | 384-core Volta, 48 tensor cores, 1100 MHz | 6-core Carmel | 8 GB LPDDR4x, 59.7 GB/s |
| Jetson Nano (legacy) | 472 GFLOPS | 128-core Maxwell, no tensor cores, 921 MHz | 4-core Cortex-A57 | 4 GB LPDDR4, 25.6 GB/s |
- The original Jetson Nano has no tensor cores and 25.6 GB/s of bandwidth. It cannot run any of the BEV or transformer models on this page at a useful rate, and its FP16 advantage over FP32 is small. It is also stuck on JetPack 4 — modern TensorRT and the current Ultralytics stack do not target it — which is why no current YOLO/BEVFusion numbers exist for it.
- TOPS ratings are not comparable across precisions. Thor's headline 2070 figure is FP4 on a Blackwell GPU; Orin's 275 is INT8. They do not divide into a speed ratio.
- A TensorRT engine is built for one GPU and one runtime. NVIDIA's guidance is explicit that engines are profiled on the build GPU and must be rebuilt and re-validated per target; even two Orin SKUs are not an automatic port. INT8 calibration should be done on the target device.
2 · 2D detectors: parameters, FLOPs and accuracy
Parameter counts, multiply-accumulate cost and COCO box mAP straight from the
torchvision pretrained-weight metadata (num_params, _ops,
_file_size, _metrics). These are the reference implementations of Faster R-CNN,
Mask R-CNN and SSD, all evaluated on COCO val2017.
| Model (torchvision weights) | Params | GFLOPs | Weights file | COCO box mAP | Mask mAP |
|---|---|---|---|---|---|
| SSDlite320 MobileNetV3-Large | 3.44 M | 0.58 | 13.4 MB | 21.3 | — |
| Faster R-CNN MobileNetV3-L 320 FPN | 19.4 M | 0.72 | 74.2 MB | 22.8 | — |
| Faster R-CNN MobileNetV3-L FPN | 19.4 M | 4.49 | 74.2 MB | 32.8 | — |
| SSD300 VGG16 | 35.6 M | 34.9 | 136.0 MB | 25.1 | — |
| Faster R-CNN ResNet50-FPN | 41.8 M | 134.4 | 159.7 MB | 37.0 | — |
| Faster R-CNN ResNet50-FPN v2 | 43.7 M | 280.4 | 167.1 MB | 46.7 | — |
| Mask R-CNN ResNet50-FPN | 44.4 M | 134.4 | 169.8 MB | 37.9 | 34.6 |
| Mask R-CNN ResNet50-FPN v2 | 46.4 M | 333.6 | 177.2 MB | 47.4 | 41.8 |
Source: torchvision detection weight metadata. GFLOPs there are for the model's default input transform, and these two-stage models are resolution-dependent — cost scales with the resized image, so a single GFLOPs figure is not a fixed budget. torchvision publishes no per-GPU latency, so there is no honest A100 or Jetson FPS column for these rows; the ratio of GFLOPs to YOLO's is the only comparison available, and it is a weak proxy.
3 · YOLO: the one family with device-by-device published latency
3.1 YOLOv8 on A100, with CPU baseline
COCO val, 640 px input, TensorRT on A100 and ONNX on CPU:
| Model | Params | GFLOPs | COCO mAP50-95 | A100 TensorRT (ms) | ≈ FPS (1/latency) | CPU ONNX (ms) |
|---|---|---|---|---|---|---|
| YOLOv8n | 3.2 M | 8.7 | 37.3 | 0.99 | ≈1010 | 80.4 |
| YOLOv8s | 11.2 M | 28.6 | 44.9 | 1.20 | ≈833 | 128.4 |
| YOLOv8m | 25.9 M | 78.9 | 50.2 | 1.83 | ≈546 | 234.7 |
| YOLOv8l | 43.7 M | 165.1 | 52.9 | 2.39 | ≈418 | 375.2 |
| YOLOv8x | 68.2 M | 257.8 | 53.9 | 3.53 | ≈283 | 479.1 |
Source: Ultralytics YOLOv8 model card. The FPS column is my arithmetic 1/latency and is single-stream inference only: it excludes decode, letterboxing, NMS and any host transfer, so a deployed pipeline will be slower. Ultralytics does not state batch size for the A100 column. Note YOLOv8 is compared on A100 while YOLO11 is compared on T4 — those two tables cannot be read against each other.
3.2 YOLO26 across four Jetson modules and three precisions
This is the most useful table on the page: one model family, one input size (640), one benchmark run, four devices, FP32/FP16/INT8. Latency is ms per image; engine size is on-disk MB; mAP is COCO mAP50-95 as measured by Ultralytics after export.
| Model | Precision | AGX Thor | AGX Orin 64GB | Orin NX 16GB | Orin Nano Super | Engine MB | mAP after export |
|---|---|---|---|---|---|---|---|
| YOLO26n | FP32 | 1.90 | 4.18 | — | 7.53 | ~11.5–13.9 | 0.479 |
| FP16 | 1.39 | 2.62 | 4.13 | 4.57 | ~7.6–8.1 | 0.480 | |
| INT8 | 1.52 | 2.30 | 3.49 | 3.80 | ~5.3–6.5 | 0.427–0.464 | |
| YOLO26s | FP32 | 2.95 | 6.82 | — | 13.60 | ~38–39 | 0.566 |
| FP16 | 1.77 | 3.76 | 6.41 | 7.17 | ~21 | 0.565 | |
| INT8 | 1.75 | 2.98 | 4.78 | 5.25 | ~12.5–13.5 | 0.501–0.547 | |
| YOLO26m | FP32 | 5.56 | 12.60 | — | 28.19 | ~80–82 | 0.622 |
| FP16 | 2.58 | 6.24 | 11.66 | 13.59 | ~42 | 0.621–0.623 | |
| INT8 | 2.49 | 4.72 | 8.22 | 9.30 | ~23–24 | 0.560–0.582 | |
| YOLO26l | FP32 | 6.74 | 15.90 | — | 35.88 | ~97–99 | 0.625 |
| FP16 | 3.34 | 7.93 | 14.77 | 17.42 | ~51 | 0.624 | |
| INT8 | 3.24 | 5.97 | 10.49 | 11.83 | ~29–30 | 0.571–0.592 | |
| YOLO26x | FP32 | 12.29 | 28.43 | — | 67.17 | ~215–217 | 0.659 |
| FP16 | 5.16 | 13.50 | 26.76 | 32.60 | ~110–112 | 0.657–0.664 | |
| INT8 | 4.72 | 9.33 | 17.32 | 19.99 | ~59–60 | 0.522–0.617 |
Source: Ultralytics
NVIDIA Jetson guide, parsed with tools/parse_jetson_tables.py so each latency keeps its
device and model attribution. Thor/Orin tables were run on JetPack 7.2, Orin Nano on JP6.1, Orin NX on
JP6.0/JP5.1.3 — different JetPack and TensorRT versions per column. Engine size and post-export mAP
vary slightly per device, so a range is shown. Ultralytics' table publishes no FP32 row for Orin NX; the
cell is left empty rather than interpolated. One upstream value is clearly a typo (AGX Orin YOLO26n FP16
mAP is listed as 0.0450 where every other device gives ≈0.479) and is excluded from the range shown.
- FP16 is the free win; INT8 is a trade. FP16 costs ≈0–0.2 mAP points and roughly halves both latency and engine size. INT8 buys a further 20–40 % but costs 3–14 mAP points here (YOLO26x on Thor drops 0.661→0.522). An accuracy loss that large is a safety argument, not a deployment detail — and it is calibration-dependent, so it must be re-measured per target.
- Scaling across Jetson tiers is roughly bandwidth/core-count ordered. For YOLO26m FP16: Thor 2.58 ms → AGX Orin 6.24 → Orin NX 11.66 → Orin Nano 13.59. Same engine, ~5× spread.
- Headroom for a real stack. A 10 Hz perception loop has 100 ms. YOLO26m FP16 on an Orin Nano uses ~14 ms for one camera; six cameras is ~82 ms of GPU before any BEV fusion, tracking or NMS. That arithmetic is why the latency budget puts the camera branch on its own stream and treats sensor count as a design variable.
4 · LiDAR and BEV models
4.1 What the original papers claimed, and on what
| Model | Published speed | Device / conditions as stated | Caveat |
|---|---|---|---|
| PointNet (2017) | No standard FPS in the abstract | Classification/segmentation on ModelNet40 / S3DIS | A shape-level backbone, not a driving detector. Its cost depends entirely on the sampled point count (commonly 1024–4096). |
| PointNet++ (2017) | No standard FPS in the abstract | Hierarchical set abstraction on the same benchmarks | Slower than PointNet by construction (nested grouping); published as accuracy work. |
| VoxelNet (2017) | ≈4.4 Hz (225 ms) | As reported by the PointPillars authors when comparing runtimes | Dense 3D convolution. The figure is a 2018-era competitor measurement, not a VoxelNet-team benchmark. |
| PointPillars (2019) | 62 Hz, and 105 Hz for a faster variant | KITTI 3D/BEV benchmark, as stated in the paper abstract | 2019 hardware and a KITTI-sized single-LiDAR scene. Not transferable to a 6-camera nuScenes BEV stack. |
| BEVFusion (2023) | 8.4 FPS | Swin-Tiny BEVFusion-Base, PyTorch FP32+FP16, on RTX 3090 | mAP 68.52 / NDS 71.38 on nuScenes. A desktop GPU, in Python, unoptimized. |
Sources: PointPillars (the 62/105 Hz and the 225 ms
VoxelNet comparison), BEVFusion,
PointNet /
PointNet++. I checked
mmdetection3d's
PointPillars model zoo for per-config throughput: its Inf time (fps) column is
empty for every row, so no FPS can be cited from there. It does publish accuracy and training
memory (e.g. nuScenes SECFPN mAP 34.33 / NDS 49.1 at 16.4 GB; the FP16 variant mAP 35.19 / NDS 50.27
at 8.37 GB), which is a useful note that mixed precision here changed memory and accuracy, not a
published frame rate.
4.2 BEVFusion optimized for Orin — the quantization story end to end
| Configuration | Framework | Precision | nuScenes mAP | NDS | FPS | Device |
|---|---|---|---|---|---|---|
| Swin-Tiny BEVFusion-Base | PyTorch | FP32+FP16 | 68.52 | 71.38 | 8.4 | RTX 3090 |
| ResNet50 | PyTorch | FP32+FP16 | 67.93 | 70.97 | not published | — |
| ResNet50 | TensorRT | FP16 | 67.89 | 70.98 | 18 | Jetson Orin |
| ResNet50-PTQ | TensorRT | FP16+INT8 | 67.66 | 70.81 | 25 | Jetson Orin |
Source: NVIDIA CUDA-BEVFusion, measured with TensorRT 8.6 / CUDA 11.4 / cuDNN 8.6 and averaged over the 6019 nuScenes validation samples. NVIDIA notes the figure is sensitive to LiDAR point count, so scene density moves it.
5 · DINOv2 and transformer backbones
| Model | Params | ImageNet k-NN | ImageNet linear |
|---|---|---|---|
| ViT-S/14 distilled | 21 M | 79.0 % | 81.1 % |
| ViT-B/14 distilled | 86 M | 82.1 % | 84.5 % |
| ViT-L/14 distilled | 300 M | 83.5 % | 86.3 % |
| ViT-g/14 | 1,100 M | 83.5 % | 86.5 % |
Source: DINOv2 repository model table (the with-registers variants have identical parameter counts and slightly different scores). DINOv2 publishes no inference latency for any GPU — the repository's A100 references are to training on 4–12 nodes of A100-80GB, which is not an inference benchmark. Any "DINOv2 FPS" figure would therefore have to be measured locally, and at ViT-L/ViT-g sizes it is a feature extractor you budget per-frame, not a real-time detector.
For deployed detection the relevant derived model on this site is RF-DETR, which puts a DINOv2-Small backbone in front of an RT-DETR decoder. Its notebook series quotes ~29 M parameters at 53.3 COCO mAP and ~60 FPS on A100, with RF-DETR-large at ~128 M and 56.5 mAP. Those figures come from the tutorial's own comparison table rather than from a first-party Roboflow benchmark page, so treat them as indicative — and as the same kind of single-stream number as the YOLO column.
6 · Segmentation on older Jetson hardware
The only published Nano-class numbers I could source are NVIDIA's jetson-inference
FCN-ResNet18 segmentation benchmarks — useful because they show how hard resolution hits a small module.
FP16, JetPack 4.2.1, nvpmodel 0 (MAX-N):
| Dataset / resolution | Accuracy | Jetson Nano | Jetson Xavier | Xavier ÷ Nano |
|---|---|---|---|---|
| Cityscapes 512×256 | 83.3 % | 48 FPS | 480 FPS | 10× |
| Cityscapes 1024×512 | 87.3 % | 12 FPS | 175 FPS | 15× |
| Cityscapes 2048×1024 | 89.6 % | 3 FPS | 47 FPS | 16× |
| Pascal VOC 320×320 | 85.9 % | 45 FPS | 508 FPS | 11× |
| DeepScene 864×480 | 96.9 % | 14 FPS | 190 FPS | 14× |
Source: jetson-inference. For a rough sense of peak small-model throughput on Volta-class hardware, NVIDIA's separate jetson_benchmarks sample output for Xavier NX lists ssd-mobilenet-v1 at 887.6 FPS and ResNet50 224×224 at 824.02 FPS — those are TensorRT throughput benchmarks with batching, not per-frame pipeline latency.
7 · Reproducing and extending these tables
Two scripts in tools/ fetch and attribute the figures, so the page can be re-checked when upstream changes:
python3 tools/fetch_model_specs.py # saves filtered primary sources to /tmp/specs/
python3 tools/parse_jetson_tables.py # device|model|format|size|mAP|ms rows
python3 tools/fetch_backbone_specs.py # DINOv2 param table, OpenPCDet metrics
To measure your own model rather than cite someone else's, the minimum honest protocol is:
- Fix and report device, power mode, clocks, JetPack/TensorRT/CUDA versions, input size, batch size and precision.
On Jetson, set
nvpmodelandjetson_clocksexplicitly, and say which you used. - Build the engine on the target device, and calibrate INT8 there with representative data.
- Warm up, then report a latency distribution (p50/p99/p99.9), not a mean — and measure sustained throughput long enough to hit thermal steady state, because an embedded module throttles.
- Report end-to-end age (capture → result), not just the inference kernel: decode, H2D copy, preprocessing and NMS are part of the vehicle's reaction time.
- Re-measure accuracy after every optimization, on the same split, and publish the delta. A speed number without its accuracy cost is not a result.