In modern warfare, the sky is no longer just a tactical vantage point, it is an intelligence goldmine.
During the recent conflict between the US and Iran, a striking geopolitical revelation came to light: Iran’s Islamic Revolutionary Guard Corps (IRGC) had secretly acquired a Chinese-built spy satellite named TEE-01B (developed by Earth Eye Co.). Delivering a razor-sharp ~0.5-meter resolution, this orbital asset gave Iranian commanders the capability to track US military movements, capture pre- and post-strike imagery, and map out precision drone and missile operations across West Asia.

Seeing how commercial-grade space hardware could be pivoted for high-stakes military intelligence
Can we replicate this type of tracking technology on the ground using consumer machine learning?
In this post, I walk through my project, SAT-TRACK, where I built an orbital computer vision pipeline capable of detecting and classifying 20 different types of military aircraft across both US/Allied and Russian air forces.
The Core Challenge: Why Standard Object Detection Fails
If you’ve ever worked with standard object detection (like traditional YOLO), you are probably used to Horizontal Bounding Boxes (HBB). HBB works fine for everyday objects, but it is deeply flawed for satellite imagery.
When looking straight down at an airfield, aircraft are parked at arbitrary, tightly packed angles. If you draw a standard square box around a diagonally parked fighter jet, the box ends up containing mostly empty runway or overlapping neighboring planes.
To solve this, I used Oriented Bounding Boxes (OBB) via YOLO11n-OBB. OBB captures the exact rotation and orientation angle () of the aircraft. This is crucial for precise counting, fleet tracking, and assessing exactly which direction an aircraft is facing.
Dataset & Technical Setup
To build this, I relied on the MAR20 dataset, an excellent dataset of satellite imagery for aircraft recognition
https://pure.nwpu.edu.cn/en/publications/mar20遥感图像军用飞机目标识别数据集/
| Property | Value |
|---|---|
| Total Images | 3,842 satellite images |
| Resolution | ~0.3–0.5 m/px |
| Annotations | Oriented Bounding Boxes (DOTA format) |
| Train / Val Split | 1,331 / 2,511 (Strict split with zero airfield overlap) |
The model handles 20 distinct classes, divided heavily across two major global alignments:
- US / Allied Fleets: Fighter jets (F-15, F-16, F-22, F/A-18), Bombers (B-52, B-1B), Transports/Tankers (C-5, C-17, C-130, KC-135, KC-10), and specialized AWACS (E-3, E-8).
- Russian Fleets: Fighters/Interceptors (SU-35, SU-34, SU-24) and Strategic Bombers (TU-160, TU-95, TU-22).
Overview
https://github.com/tcpfin-dev/SAT-TRACK/tree/main
SAT-TRACK detects and classifies military aircraft in satellite images using oriented bounding boxes (OBB). Unlike horizontal bounding boxes, OBB captures the exact orientation of parked aircraft, critical for airbase monitoring, fleet counting, and activity assessment.
20 classes spanning US, Russian, and allied air forces: fighters (F-15, F-16, F-22, F/A-18, SU-34, SU-35), bombers (B-52, B-1B, TU-95, TU-160, TU-22), transports (C-5, C-17, C-130), tankers (KC-135, KC-10), AWACS (E-3, E-8), and maritime patrol (P-3C).
YOLO11-OBB
For this project, I chose YOLO11n-OBB, the nano variant of Ultralytics’ latest oriented object detection model. The choice of nano was deliberate, I wanted to establish a performance baseline with the smallest, fastest variant before scaling up.
Why Oriented Bounding Boxes Matter
Standard object detection draws axis-aligned rectangles around objects. On satellite imagery of airfields, this falls apart quickly. Aircraft park at arbitrary angles, sometimes nose-to-tail in revetments, sometimes staggered on aprons, and often in tight clusters. A horizontal box around a diagonally parked F-16 captures as much empty tarmac as it does aircraft. Worse, overlapping boxes between adjacent planes create ambiguity that degrades both classification and counting.
Overall Performance
| Metric | Value |
|---|---|
| mAP@0.5 | 0.858 |
| mAP@0.5:0.95 | 0.741 |
| Precision | 0.836 |
| Recall | 0.801 |
Examples
A fleet of F-15s

A fleet of Su-34s

A fleet of C-17 and KC-10

Per-Class Breakdown
🟢 Strong (mAP50 ≥ 0.90) – Large, Distinct Airframes
| Class | mAP50 | Precision | Recall | Notes |
|---|---|---|---|---|
| E-3 | 0.978 | 0.932 | 0.941 | AWACS – rotodome unmistakable from above |
| B-1B | 0.976 | 0.869 | 0.977 | Lancer – swing-wing, near-perfect recall |
| TU-95 | 0.964 | 0.931 | 0.925 | Bear – swept wings + 4 turboprops |
| TU-160 | 0.958 | 0.953 | 0.856 | Blackjack – largest combat aircraft |
| P-3C | 0.948 | 0.945 | 0.899 | Orion – long fuselage + 4-engine prop |
| C-5 | 0.936 | 0.918 | 0.824 | Galaxy – massive T-tail airlifter |
| KC-135 | 0.933 | 0.913 | 0.866 | Stratotanker – 707-derived, refueling boom |
| B-52 | 0.928 | 0.933 | 0.848 | Stratofortress – 8 engines, huge wingspan |
| C-17 | 0.924 | 0.813 | 0.952 | Globemaster III – finds nearly all of them |
| C-130 | 0.923 | 0.967 | 0.853 | Hercules – best precision in dataset |
| TU-22 | 0.906 | 0.752 | 0.896 | Backfire – swing-wing bomber |
Bombers, transports, AWACS, and maritime patrol dominate – 11/20 classes above 0.90 mAP50.
🟡 Moderate (0.80–0.90)
| Class | mAP50 | Precision | Recall | Notes |
|---|---|---|---|---|
| E-8 | 0.881 | 0.792 | 0.855 | JSTARS – 707 airframe, good despite fewer examples |
| SU-35 | 0.851 | 0.849 | 0.685 | Flanker-E – large fighter, decent precision, misses some |
| F/A-18 | 0.805 | 0.984 | 0.433 | Hornet – near-perfect precision, misses >50% |
| SU-24 | 0.802 | 0.919 | 0.764 | Fencer – variable-sweep wing |
🟠 Weak (0.75–0.80)
| Class | mAP50 | Precision | Recall | Notes |
|---|---|---|---|---|
| KC-10 | 0.795 | 0.850 | 0.682 | Extender – tri-jet, likely confused with KC-135 |
🔴 Poor (<0.75) – Fighters
| Class | mAP50 | Precision | Recall | Notes |
|---|---|---|---|---|
| SU-34 | 0.742 | 0.596 | 0.861 | Fullback – many false positives, cockpit invisible from above |
| F-16 | 0.735 | 0.637 | 0.834 | Falcon – low precision, over-predicts |
| F-15 | 0.676 | 0.657 | 0.565 | Eagle – weak on both precision and recall |
| F-22 | 0.500 | 0.520 | 0.510 | Raptor – near-random, worst class |
Fighter bottleneck: From top-down satellite, F-15/16/22, F/A-18, SU-34/35 all appear as swept-wing deltas occupying ~30×30 pixels. F/A-18 is too conservative (P=0.984, R=0.433), while SU-34 and F-16 are too aggressive (low precision, conflating other fighters).
Why the Fighter Gap Exists
- Planform similarity: all modern fighters are single/double-seat, swept-wing, single/double-tail. The difference between an F-16 and SU-35 from 800 km up is a few pixels of wing sweep.
- Scale: fighters are 15–20 m long. At 0.3–0.5 m/px, they occupy ~30×30 pixels. Distinguishing subtle airframe features at that resolution is beyond the nano backbone’s capacity.
- Feature asymmetry: The model learns strong features for bombers (wing config, engine count, size) that don’t exist for fighters.
Conclusion
That said, I recognize I am using the nano variant of YOLO11-OBB, the smallest and fastest version optimized for edge deployment. Upgrading to medium or large variants would significantly improve accuracy, particularly for the fighter classes that currently underperform. The fighter bottleneck is the most glaring limitation: F-16, F-15, F-22, F/A-18, and SU-34/35 all struggle from top-down satellite views where they appear as 30×30 pixel swept-wing deltas with near-identical silhouettes. A larger backbone has the capacity to learn the subtle wing-sweep angles, canopy shapes, and tail configurations that distinguish these aircraft, and upgrading to YOLO11m-OBB or YOLO11l-OBB is a direct, proven path to closing this gap.
I also have plans to expand the class coverage to include modern platforms absent from MAR20, including the F-35 Lightning II, B-2 Spirit, A-10 Warthog, and E-2 Hawkeye. The MTARSI-fixed dataset provides a clear path here with 240 F-35 images, 619 B-2 images, and 340 A-10 images. Beyond that, I am exploring a dual-expert architecture that tracks civilian aircraft aka Boeing and Airbus families from FAIR1M,alongside military platforms, creating a comprehensive air picture that respects the fundamental data reality: civilian aircraft have abundant training data while military data is scarce and precious, making separate specialists the optimal approach.
Stay tuned for future posts where I will integrate F-35 and B-2 detection, build the civilian tracking pipeline, compare YOLO11-OBB variants, and explore real-time airbase monitoring. The code and datasets used in this project are publicly available, try it yourself, extend it, and build the next layer of the intelligence stack yourself.
Thats pretty much it for this blog, Good Bye✈️🔭