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.

Read this before using any number here. These are collected published figures, not measurements taken on one rig. They come from different GPUs, TensorRT/CUDA versions, batch sizes, input resolutions, datasets and even different years. A row is only comparable to another row when the device, precision and input size match. Cross-model "X is faster than Y" claims are only safe inside a single table where those columns are identical, and even then the upstream authors, not this page, chose the measurement conditions. Where a device/model combination has no published figure, the cell says not published rather than an estimate.

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

GPUArchitectureMemoryBoard powerRole 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/s250–400 W (PCIe/SXM) Ultralytics' YOLOv8 reference device; DINOv2's training cluster. Datacenter part — an upper bound, not a vehicle target.
T4Turing TU104, 2nd-gen tensor cores16 GB GDDR6, 320 GB/s 70 W, passiveUltralytics' YOLO11 reference device. Low power for a server card, so its numbers sit far below A100.
RTX 3090Ampere GA102, consumer24 GB GDDR6X, 936 GB/s350 W The device for the published PyTorch BEVFusion figure.
RTX 6000 AdaAda Lovelace, workstation48 GB GDDR6 ECC, 960 GB/s300 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:

ModuleStated AI performanceGPUCPUMemory / bandwidth
AGX Thor (T5000)2070 FP4 TFLOPS2560-core Blackwell, 96 tensor cores, 1.57 GHz 14-core Arm Neoverse-V3AE128 GB LPDDR5X, 273 GB/s
AGX Orin 64GB275 TOPS2048-core Ampere, 64 tensor cores, 1.3 GHz 12-core Cortex-A78AE64 GB LPDDR5, 204.8 GB/s
Orin NX 16GB100 TOPS1024-core Ampere, 32 tensor cores, 918 MHz 8-core Cortex-A78AE16 GB LPDDR5, 102.4 GB/s
Orin Nano Super67 TOPS1024-core Ampere, 32 tensor cores, 1020 MHz 6-core Cortex-A78AE8 GB LPDDR5, 102 GB/s
AGX Xavier32 TOPS512-core Volta, 64 tensor cores, 1377 MHz 8-core Carmel32 GB LPDDR4x, 136.5 GB/s
Xavier NX21 TOPS384-core Volta, 48 tensor cores, 1100 MHz 6-core Carmel8 GB LPDDR4x, 59.7 GB/s
Jetson Nano (legacy)472 GFLOPS128-core Maxwell, no tensor cores, 921 MHz 4-core Cortex-A574 GB LPDDR4, 25.6 GB/s
Three consequences that matter for the original question.
  1. 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.
  2. 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.
  3. 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)ParamsGFLOPsWeights fileCOCO box mAPMask mAP
SSDlite320 MobileNetV3-Large3.44 M0.5813.4 MB21.3—
Faster R-CNN MobileNetV3-L 320 FPN19.4 M0.7274.2 MB22.8—
Faster R-CNN MobileNetV3-L FPN19.4 M4.4974.2 MB32.8—
SSD300 VGG1635.6 M34.9136.0 MB25.1—
Faster R-CNN ResNet50-FPN41.8 M134.4159.7 MB37.0—
Faster R-CNN ResNet50-FPN v243.7 M280.4167.1 MB46.7—
Mask R-CNN ResNet50-FPN44.4 M134.4169.8 MB37.934.6
Mask R-CNN ResNet50-FPN v246.4 M333.6177.2 MB47.441.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.

The design point this table makes. Mask R-CNN v2 needs roughly 570× the multiply-accumulates of SSDlite for about 2.2× the mAP. Two-stage R-CNN detectors with per-proposal heads were never intended for a 10 Hz embedded budget; they are the accuracy reference that single-stage and BEV models are measured against.

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:

ModelParamsGFLOPsCOCO mAP50-95A100 TensorRT (ms)≈ FPS (1/latency)CPU ONNX (ms)
YOLOv8n3.2 M8.737.30.99≈101080.4
YOLOv8s11.2 M28.644.91.20≈833128.4
YOLOv8m25.9 M78.950.21.83≈546234.7
YOLOv8l43.7 M165.152.92.39≈418375.2
YOLOv8x68.2 M257.853.93.53≈283479.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.

ModelPrecisionAGX ThorAGX Orin 64GBOrin NX 16GBOrin Nano SuperEngine MBmAP after export
YOLO26nFP321.904.18—7.53~11.5–13.90.479
FP161.392.624.134.57~7.6–8.10.480
INT81.522.303.493.80~5.3–6.50.427–0.464
YOLO26sFP322.956.82—13.60~38–390.566
FP161.773.766.417.17~210.565
INT81.752.984.785.25~12.5–13.50.501–0.547
YOLO26mFP325.5612.60—28.19~80–820.622
FP162.586.2411.6613.59~420.621–0.623
INT82.494.728.229.30~23–240.560–0.582
YOLO26lFP326.7415.90—35.88~97–990.625
FP163.347.9314.7717.42~510.624
INT83.245.9710.4911.83~29–300.571–0.592
YOLO26xFP3212.2928.43—67.17~215–2170.659
FP165.1613.5026.7632.60~110–1120.657–0.664
INT84.729.3317.3219.99~59–600.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.

What these numbers actually tell you.
  • 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

ModelPublished speedDevice / conditions as statedCaveat
PointNet (2017)No standard FPS in the abstractClassification/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 abstractHierarchical 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 FPSSwin-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

ConfigurationFrameworkPrecisionnuScenes mAPNDSFPSDevice
Swin-Tiny BEVFusion-BasePyTorchFP32+FP1668.5271.388.4RTX 3090
ResNet50PyTorchFP32+FP1667.9370.97not published—
ResNet50TensorRTFP1667.8970.9818Jetson Orin
ResNet50-PTQTensorRTFP16+INT867.6670.8125Jetson 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.

This is the single most instructive row-set on the page. Going from the research checkpoint on a 350 W desktop GPU (8.4 FPS) to a partially-quantized TensorRT engine on an embedded module (25 FPS) is a ~3× speedup on far less power, for 0.86 mAP and 0.57 NDS. Unlike the YOLO INT8 rows, this quantization was done carefully (partial/PTQ, camera backbone only) — which is exactly the difference between "we quantized it" and "we quantized it and checked what it cost". It is also the measurement that makes the ROS 2 stack's 10 Hz target credible on Orin.

5 · DINOv2 and transformer backbones

ModelParamsImageNet k-NNImageNet linear
ViT-S/14 distilled21 M79.0 %81.1 %
ViT-B/14 distilled86 M82.1 %84.5 %
ViT-L/14 distilled300 M83.5 %86.3 %
ViT-g/141,100 M83.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 / resolutionAccuracyJetson NanoJetson XavierXavier ÷ Nano
Cityscapes 512×25683.3 %48 FPS480 FPS10×
Cityscapes 1024×51287.3 %12 FPS175 FPS15×
Cityscapes 2048×102489.6 %3 FPS47 FPS16×
Pascal VOC 320×32085.9 %45 FPS508 FPS11×
DeepScene 864×48096.9 %14 FPS190 FPS14×

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.

Resolution costs more than the accuracy it buys. Cityscapes 512×256 → 2048×1024 is 16× the pixels for +6.3 accuracy points, and on the Nano it takes the model from 48 FPS to 3 FPS. On a vehicle the relevant question is not the accuracy number but whether small distant objects survive downscaling — see the range-stratified critique.

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:

  1. Fix and report device, power mode, clocks, JetPack/TensorRT/CUDA versions, input size, batch size and precision. On Jetson, set nvpmodel and jetson_clocks explicitly, and say which you used.
  2. Build the engine on the target device, and calibrate INT8 there with representative data.
  3. 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.
  4. 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.
  5. 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.
The honest summary. There is no single table that ranks these models fairly, because no one has published them on common hardware under common conditions. What the sourced numbers do support is the shape of the design space: single-stage 2D detectors run in single-digit milliseconds on Orin-class hardware; two-stage R-CNNs cost hundreds of GFLOPs and have no published embedded latency; camera+LiDAR BEV fusion reaches 25 FPS on Orin only after deliberate TensorRT quantization; and large SSL backbones like DINOv2 are feature extractors whose inference cost you must measure yourself.