Repository navigation
Releases: ortusaitech/rightwayup
Release list
RightWayUp 1.0.0
RightWayUp 1.0.0
RightWayUp estimates how far an image is rotated from upright, over the full 360° at 1° resolution, and abstains when
an image has no clear "up". Open weights and code under Apache-2.0, commercial use allowed.
Six tiers
| Tier | Model | Parameters | Input | Laptop CPU, one image | GPU, one image |
|---|---|---|---|---|---|
| Pico | ViT-S/14, fill-drop | 23M | 70 px | 3.21 ms | 0.55 ms |
| Nano | ViT-S/14, fill-drop | 23M | 112 px | 7.73 ms | 0.55 ms |
| Fast | ViT-S/14, fill-drop | 23M | 224 px | 29.7 ms | 0.68 ms |
| Balanced | Fast → Max for ~10% | 23M + 306M | 224 → 280 px | 62.2 ms (derived) | 1.77 ms (derived) |
| Pro | Fast → Max for ~20% | 23M + 306M | 224 → 280 px | 94.8 ms (derived) | 2.29 ms (derived) |
| Max | ViT-L/14 on every image | 306M | 280 px | 326 ms | 5.19 ms |
Laptop CPU: Intel Core i7-1260P, ONNX Runtime INT8, 4 threads. GPU: NVIDIA RTX PRO 4500, TensorRT FP16. Single image =
batch 1; Balanced and Pro derived at the 10% / 20% calibration route share. Max is the accurate tier, not the fast
one: per image it is slower than Woehrer 2026 (MambaOut-base CGD by Maximilian Woehrer, arXiv:2603.25351, code, MIT licence) on CPUs and most GPUs.
Results
Model size and training data: Woehrer 2026 has 83M parameters and was trained on COCO 2017 (about 118k training images). Max has 306M
(ViT-L/14); Pico, Nano and Fast have 23M each (ViT-S/14); Balanced and Pro run Fast, then Max on part of the images.
Max, Fast and Pico were trained on about 1.24 million images, Nano on 705,075.
- New photos, sealed holdout (4,706 COCO and Open Images photos never used in training or model choice; weights
frozen first, then opened and scored once): Max 93.0% within 10° vs 88.4% for Woehrer 2026, with 33 vs 185
upside-down answers. With simulated CCTV degradation: 88.2% vs 49.3%. - Two unseen thermal cameras (224 images, small sample): Max 87.5% vs 50.9%.
- Four unseen CCTV cameras incl. a thermal one (380 views; 24 Sep held-out set re-used once for the release): Max
100.0% vs 75.0% for Woehrer 2026 and 82.4% for Deep-OAD. - RotBench (independent benchmark with a human baseline): Max and Pro score 1.00 at every rotation on
RotBench-Small and -Large, with no upside-down answers. On RotBench-Small (50 photos) that is above the published human baseline
(0.99 / 0.99 / 0.99 / 0.97), where GPT-5, Gemini 2.5 Pro and o3 score 0.40–0.81 on the turned images (as
published by RotBench). Woehrer 2026: 0.90 / 0.97 mean (Small / Large). Pre-registered and scored once. - Woehrer 2026's own benchmark (five-seed mean): Max 98.8% vs 98.0%. Re-saved once as JPEG q90: Woehrer 2026
30.2%, RightWayUp 95.9–98.4% (Nano to Max; Pico 92.2%). The rotated source JPEG grid is only a hypothesised
mechanism. - Nano and Fast trail Woehrer 2026 on clean COCO photos; their strength is degraded CCTV and thermal footage.
- Abstention thresholds are fixed on calibration data only, per file format. At the standard setting Max answers 91%
of the new COCO photos with 2.1% wrong. Confidence is not reliable on thermal cameras.
What's in the release
- ONNX FP32 / FP16 / INT8 for every model, batch-capable files for Pico, Nano and Fast, a Pico build for web browsers
(ONNX Runtime Web), and Core ML packages (batch 1 and 16): 47 files on
Hugging Face, withSHA256SUMSandtiers.json. pip install rightwayup(1.0.0): Python API and CLI with the cascade, per-format thresholds,--batchand
abstention built in.- Every tier was retrained so it does not rely on JPEG-grid or resampling traces of digital rotation; every shipped
file passes that check in its own runtime. Method in full:TECHNICAL-REPORT.md. - Training data: about 1.24 million distinct images with a recorded source and licence: 1.22 million photos plus
DIODE scans, MEVA CCTV frames and Poly Haven 3D renders (Max, Fast, Pico: 1,244,222 distinct images in 1,245,604
training rows; Nano: 705,075 training rows). 629,551 Flickr photo rows were re-checked against their current
licence; PASS photos carry the PASS dataset licence record. Per-image manifests with a standard-library checker:
manifests/training/. No customer data.
Changes since the private release candidate of 24 Sep 2026
- New weights for every tier (grid fix, more data), new tiers Pro and Pico, Max now runs the ViT-L/14 on every image
at 280 px, per-format thresholds, batch-capable files. - Pico was updated on 30 Sep so that images turned with black or white corners are no longer misread (same speed and
file sizes).
Model card: MODEL-CARD.md · Results: RESULTS.md, results/heldout-rescore/RESULTS.md,
results/rotbench/RESULTS.md · Data: DATA-CARD.md ·
Recipe: RECIPE.md.