Skip to content

Releases: ortusaitech/rightwayup

Release list

RightWayUp 1.0.0

Choose a tag to compare

@ortusaitech ortusaitech released this 30 Sep 11:05

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, with SHA256SUMS and tiers.json.
  • pip install rightwayup (1.0.0): Python API and CLI with the cascade, per-format thresholds, --batch and
    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.