CoolFace
Modelpublic

maxwoe/image-rotation-angle-estimation

sourceHugging Facemitupdated 6mo agoView on Hugging Face
1likes594downloads
Model Card

Image Rotation Angle Estimation

[Try the interactive demo](https://huggingface.co/spaces/maxwoe/image-rotation-angle-estimation) | [GitHub](https://github.com/maxwoe/image-rotation-angle-estimation) | [Paper](https://arxiv.org/abs/2603.25351)

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.

Available Checkpoints

CheckpointDatasetMAEMedian Error
cgd_mambaout_base_coco2017.ckptCOCO 20172.84°0.55°
cgd_mambaout_base_coco2014.ckptCOCO 20143.71°0.68°

Usage

Download the inference code from this Hub repo (model_cgd.py, architectures.py, rotation_utils.py), then:

python
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.

Evaluation Results (COCO 2017, 5 seeds)

MetricValue
MAE2.84°
Median Error0.55°
RMSE8.45°
P90 Error3.54°
P95 Error12.00°
Accuracy at 2°90.2%
Accuracy at 5°97.5%
Accuracy at 10°98.1%

Model Details

  • Method: Circular Gaussian Distribution (CGD), 360 bins, sigma = 6.0°
  • Backbone: MambaOut Base (mambaout_base.in1k), pretrained on ImageNet-1K
  • Input size: 224 x 224 pixels
  • Output: Probability distribution over 360 angle bins, converted to angle via argmax
  • Loss: KL Divergence with soft Gaussian labels
  • Optimizer: AdamW with ReduceLROnPlateau scheduler

License

MIT