[CVPR 2026] Official implementation of Fourier Angle Alignment for Oriented Object Detection in Remote Sensing
The paper is available at arxiv.
Interested readers are also referred to a Note about this work in Zhihu.
In remote sensing rotated object detection, mainstream methods suffer from two bottlenecks, directional incoherence at detector neck and task conflict at detecting head. Ulitising fourier rotation equivariance, we introduce Fourier Angle Alignment, which analyses angle information through frequency spectrum and aligns the main direction to a certain orientation. Then we propose two plug and play modules : FAAFusion and FAA Head. FAAFusion works at the detector neck, aligning the main direction of higher-level features to the lower-level features and then fusing them. FAA Head serves as a new detection head, which pre-aligns RoI features to a canonical angle and adds them to the original features before classification and regression. Experiments on DOTA-v1.0, DOTA-v1.5 and HRSC2016 show that our method can greatly improve previous work. Particularly, our method achieves new state-of-the-art results of 78.72% mAP on DOTA-v1.0 and 72.28% mAP on DOTA-v1.5 datasets with single scale training and testing, validating the efficacy of our approach in remote sensing object detection.
MMRotate depends on PyTorch, MMCV and MMDetection. Below are quick steps for installation. Please refer to Install Guide for more detailed instruction.
conda create --name faa python=3.9 -y
conda activate faa
pip install torch==1.13.0+cu116 torchvision==0.14.0+cu116 torchaudio==0.13.0 --extra-index-url https://download.pytorch.org/whl/cu116
pip install -U openmim
mim install mmcv-full
mim install mmdet
git clone https://github.com/gcy0423/Fourier-Angle-Alignment.git
cd Fourier-Angle-Alignment
pip install -v -e .
pip install -r requirements.txtPlease see get_started.md for the basic usage of MMRotate.
Here we provide the configuration files for FAA applied to different baseline detectors.
| Model | mAP | Angle | lr schd | Config | Download |
|---|---|---|---|---|---|
| Oriented R-CNN + FAA | 76.55 (+0.68) | le90 | 1x | config | checkpoint |
| LSKNet-S + FAA | 78.49 (+1.00) | le90 | 1x | config | - |
| Strip R-CNN-S + FAA | 78.72 (+0.63) | le90 | 1x | config | checkpoint |
| Model | mAP | Angle | lr schd | Config |
|---|---|---|---|---|
| Oriented R-CNN + FAA | 67.14 (+0.37) | le90 | 1x | config |
| LSKNet-S + FAA | 72.28 (+2.02) | le90 | 1x | config |
| Strip R-CNN-S + FAA | 71.57 (+1.73) | le90 | 1x | config |
| Model | mAP(07) | mAP(12) | Angle | lr schd | Config |
|---|---|---|---|---|---|
| Oriented R-CNN + FAA | 66.94 (+2.17) | 69.52 (+1.72) | le90 | 3x | config |
| LSKNet-S + FAA | 70.74 (+1.96) | 74.71 (+2.34) | le90 | 3x | config |
| Strip R-CNN-S + FAA | 70.41 (+1.23) | 72.99 (+0.43) | le90 | 3x | config |
Specifically, we also provide the configurations that only apply the FAA Head.
| Model | mAP | Angle | lr schd | Config | Download |
|---|---|---|---|---|---|
| Oriented R-CNN + FAA Head | 76.18 (+0.31) | le90 | 1x | config | checkpoint |
| LSKNet-S + FAA Head | 78.27 (+0.78) | le90 | 1x | config | checkpoint |
| Strip R-CNN-S + FAA Head | 78.52 (+0.43) | le90 | 1x | config | - |
Our proposed modules are designed to be lightweight and highly extensible. You can easily integrate them into your own custom detectors by simply copying the corresponding files.
File: mmrotate/models/necks/faafusion.py
FAAFusion serves as a plug-and-play module for the feature pyramid network. It dynamically aligns the orientation of the high-level feature map to match the low-level feature map before fusion.
model = dict(
type='OrientedRCNN',
......
neck=dict(
type='FAAFusionFPN',
in_channels=[256, 512, 1024, 2048],
out_channels=256,
num_outs=5,
fusion_modes=['add', 'add', 'faa'], # P5βP4: add, P4βP3: add, P3βP2: faa
start_level=0,
end_level=-1,
add_extra_convs='on_input',
fam_cfg=dict(m=7, c_mid=64)),
......
}Note: We also provide FAAFusionFPN in the same file, which is a ready-to-use FPN variant integrating FAAFusion.
File: mmrotate/models/roi_heads/bbox_heads/faa_head.py
FAAHead can directly replace standard RoI heads. It explicitly aligns the 7x7 RoI features to a canonical direction using frequency spectrum analysis, effectively alleviating the task conflict between classification and regression.
model = dict(
type='OrientedRCNN',
......
roi_head=dict(
type='OrientedStandardRoIHead',
......
bbox_head=dict(
type='FAAHead',
in_channels=256,
fc_out_channels=1024,
roi_feat_size=7,
num_classes=15,
......),
......),
......
}If you find this work useful for your research, please consider citing our paper:
@InProceedings{gcy2026faa,
title={Fourier Angle Alignment for Oriented Object Detection in Remote Sensing},
author={Gu, Changyu and Chen, Linwei and Gu, Lin and Fu, Ying},
booktitle={Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition},
month={June},
year={2026},
pages={42225-42235}
}
This project is based on MMRotate and LSKNet. We thank the authors for their wonderful open-source efforts.
