Skip to content

Eakempreet/ATAS_Project

Repository files navigation

ATAS

Aerial Threat Assessment System

ATAS Demo

ATAS is an end to end ML threat assessment pipeline that identifies aircraft from images, simulates engagement scenarios, predicts evasion survivability, and generates cockpit style tactical recommendations.

Live Demo on Hugging Face Spaces


Pipeline overview

       Aircraft Image
              ↓
       [1] EfficientNetV2 L Aircraft Classifier
              ↓
       [2] Aircraft Metadata Lookup
              ↓
       [3] Physics Based Scenario Generation
              ↓
 ┌───────────────────────────────────────┐
 ↓                                       ↓
[4] ETA Regressor                      [5] Hit Classifier
 ↓                       ↓
 └────────── Threat Assessment ──────────┘
                    ↓
        [6] Tactical Decision Layer
                    ↓
        [7] FastAPI Backend + HUD

Why this exists

ATAS was inspired by fighter jet Radar Warning Receiver systems where pilots need fast threat interpretation under incomplete information.

The project combines computer vision, physics simulation, structured ML, and tactical logic into a single end to end inference pipeline.

It is not a real military system and does not attempt to simulate classified avionics behavior. The goal was building a complete end to end ML system where an aircraft image becomes a tactical recommendation through multiple independent subsystems working together.


Inspiration

One of the biggest inspirations behind ATAS was the F-35 Distributed Aperture System (DAS).

DAS is a real world sensor fusion system that combines infrared cameras around the aircraft to give the pilot full spherical threat awareness and automatic warning cues directly inside the cockpit.

ATAS is obviously not attempting to recreate that system. The scale and complexity are completely different.

What fascinated me was the idea of multiple independent subsystems working together to help a pilot interpret a threat quickly under pressure. That became the core design idea behind this project.


Screenshots


Idle state

Target acquired

Safe state (C 130, green)

Critical threat (Su 57 vs F 22, red)

Tech stack

Category Technology
Deep Learning TensorFlow, EfficientNetV2 L
Structured ML XGBoost, scikit learn
Hyperparameter Tuning Optuna
Backend FastAPI, uvicorn
Frontend HTML, CSS, JavaScript
Containerization Docker
Deployment Hugging Face Spaces
Data Processing pandas, numpy
Version Control Git, GitHub, Git LFS

Model metrics

Model Algorithm Key Metric Score
Aircraft Classifier EfficientNetV2 L Top 1 Accuracy 78.08%
Aircraft Classifier EfficientNetV2 L Top 5 Accuracy 92.02%
ETA Regressor XGBoost Regressor 0.9939
ETA Regressor XGBoost Regressor MAE 0.4552 seconds
Hit Classifier XGBoost Classifier Recall 0.9966
Hit Classifier XGBoost Classifier ROC AUC 0.9999

Supported aircraft classes

The classifier supports 101 military aircraft classes including fighters, bombers, transport aircraft, helicopters, UAVs, and experimental platforms across multiple generations.

Examples include: F22, F35, Su57, Rafale, J20, Mig29, B2, SR71, Tejas, KAAN, MQ9, AH64, C17, Tu160

Full 101 aircraft class list

A10, A400M, AG600, AH64, AKINCI, AV8B, An124, An22, An225, An72, B1, B2, B21, B52, Be200, C1, C130, C17, C2, C390, C5, CH47, CH53, CL415, E2, E7, EF2000, EMB314, F117, F14, F15, F16, F18, F2, F22, F35, F4, FCK1, H6, Il76, J10, J20, J35, J36, J50, JAS39, JF17, JH7, KAAN, KC135, KF21, KIZILELMA, KJ600, Ka27, Ka52, MQ20, MQ25, MQ28, MQ9, Mi24, Mi26, Mi28, Mi8, Mig29, Mig31, Mirage2000, NH90, P3, RQ4, Rafale, SR71, Su24, Su25, Su34, Su47, Su57, T50, TB001, TB2, Tejas, Tornado, Tu160, Tu22M, Tu95, U2, UH60, US2, V22, V280, Vulcan, WZ10, WZ7, WZ9, X29, X32, XB70, XQ58, Y20, YF23, Z10, Z19, Z21


Key design decisions

Why ML exists alongside physics

Physics equations require complete and clean inputs. Real inference environments rarely provide that.

The physics generator creates structured ground truth engagement data. The ML models learn the non linear patterns from those scenarios and later generalize from partial inputs during inference.


Why two models instead of one

The ETA regressor predicts when the pilot needs to react.

The hit classifier predicts whether evasion is likely to succeed.

Neither answer is useful alone. Together they answer the actual cockpit question:

Do I have enough time and will evasion work?


Why XGBoost

XGBoost consistently produced the best MAE across all tested regressors.

It also provided:

  • GPU accelerated Optuna tuning
  • Large hyperparameter search space
  • Stable inference behavior
  • SHAP explainability support

The final Optuna search stopped around 944 trials once validation MAE improvements became marginal.


Why the decision layer is rule based

The tactical recommendation layer is intentionally deterministic in V1.

This keeps the system:

  • Explainable
  • Easy to debug
  • Easy to validate
  • Fast to iterate on

A natural V2 upgrade would be replacing this layer with a reinforcement learning policy agent.


Why the .keras model lives on Hugging Face

The final EfficientNetV2 L classifier model is approximately 898MB.

That exceeds practical GitHub LFS usage limits, so the production weights are hosted separately on Hugging Face instead.

This became a real deployment constraint during the project rather than a theoretical architecture choice.


Possible V2 directions

ATAS was intentionally built in a modular way so different parts of the system can improve independently.

Some possible upgrade paths:

  • Real radar or telemetry inputs instead of synthetic scenarios
  • Reinforcement learning based tactical decision system
  • Video based tracking instead of single image inference
  • Multi target threat prioritization
  • Live streaming inference
  • Multi sensor fusion instead of image only input
  • More interactive HUD controls

The current system is intentionally focused on proving the full end-to-end pipeline first before increasing realism and complexity.


Repository structure

ATAS_Project/
├── app/
│   ├── main.py
│   ├── test_pipeline.py
│   └── README.md
│
├── src/
│   ├── classifier.py
│   ├── metadata.py
│   ├── physics_generator.py
│   ├── models.py
│   ├── decision.py
│   ├── schemas.py
│   ├── analysis_for_physics_generator.ipynb
│   └── README.md
│
├── notebooks/
│   ├── 01_aircraft_classifier_v1.ipynb
│   ├── 02_aircraft_classifier_v2.ipynb
│   ├── 02_eta_regressor.ipynb
│   ├── 03_hit_classifier.ipynb
│   └── README.md
│
├── frontend/
│   └── atas_hud_v11.html
│
├── release_models/
│   ├── aircraft_classifier/
│   ├── eta/
│   └── hit/
│
├── assets/
│   └── demonstration/
│
├── data/
│   └── aircraft_metadata.csv
│
├── Dockerfile
├── requirements.txt
└── README.md

How to run locally

Docker

git clone https://github.com/Eakempreet/ATAS_Project.git
cd ATAS_Project
docker build -t atas .
docker run -p 7860:7860 atas

Open:

http://localhost:7860

Manual uvicorn

pip install -r requirements.txt
uvicorn app.main:app --host 0.0.0.0 --port 8000

Open:

http://localhost:8000

Dataset and model weights

Resource Link
Dataset https://kaggle.com/datasets/a2015003713/militaryaircraftdetectiondataset
Live Demo https://huggingface.co/spaces/Eakempreet/ATAS
Model Weights Backup https://huggingface.co/Eakempreet/ATAS-models
GitHub Repository https://github.com/Eakempreet/ATAS_Project

Sub README navigation

Folder README What it covers
notebooks/ notebooks/README.md Model training pipelines and experiments
src/ src/README.md Core inference modules and data flow
app/ app/README.md FastAPI backend and API endpoints