Image Rotation Angle Estimation: Comparing Circular-Aware Methods
Paper • 2603.25351 • Published
Try the interactive demo | GitHub | Paper
Predicts the rotation angle of an image using the Circular Gaussian Distribution (CGD) method with a MambaOut Base backbone.
The model outputs a probability distribution over 360 angle bins (1 degree resolution) and extracts the predicted angle via argmax. It handles the full 360 degree range with no boundary discontinuities.
| Checkpoint | Dataset | MAE | Median Error |
|---|---|---|---|
cgd_mambaout_base_coco2017.ckpt |
COCO 2017 | 2.84° | 0.55° |
cgd_mambaout_base_coco2014.ckpt |
COCO 2014 | 3.71° | 0.68° |
Download the inference code from this Hub repo (model_cgd.py, architectures.py, rotation_utils.py), then:
from model_cgd import CGDAngleEstimation
from PIL import Image
# Load model (defaults to COCO 2017 checkpoint)
model = CGDAngleEstimation.from_pretrained("maxwoe/image-rotation-angle-estimation")
# Or load a specific checkpoint
# model = CGDAngleEstimation.from_pretrained(
# "maxwoe/image-rotation-angle-estimation",
# model_name="cgd_mambaout_base_coco2014.ckpt",
# )
image = Image.open("your_image.jpg")
angle = model.predict_angle(image)
print(f"Predicted rotation: {angle:.1f}°")
predict_angle accepts a PIL Image, numpy array, or file path.
| Metric | Value |
|---|---|
| MAE | 2.84° |
| Median Error | 0.55° |
| RMSE | 8.45° |
| P90 Error | 3.54° |
| P95 Error | 12.00° |
| Accuracy at 2° | 90.2% |
| Accuracy at 5° | 97.5% |
| Accuracy at 10° | 98.1% |
mambaout_base.in1k), pretrained on ImageNet-1KMIT