IAMARS: drone detection, tracking and trajectory prediction

YOLOv8n finds small drones in video, ByteTrack keeps a stable ID for each one, a Kalman filter estimates position and velocity, and a constant-velocity model predicts the next half second. Every number on this page was produced by a script in the repository.

Four drones against open sky

Pipeline output: each drone keeps its ID (1 to 4) for the whole clip. Boxes show track ID and confidence, lines show the recent path, orange marks the predicted path. Input clip supplied by the project author.

Pipeline

Video frame→ YOLOv8n detection→ ByteTrack IDs→ Kalman filter→ Trajectory prediction

Detection

Test setImagesmAP@0.5mAP@0.5:0.95PrecisionRecallSource
VisioDECT held-out test (block split)1,8000.9650.5960.9600.957json
Anti-UAV-RGBT frames, never seen in training3,4240.2910.1430.5710.274json

The second row measures the domain gap: the model was trained only on VisioDECT.

Speed

DeviceMean latency / frame95th percentilePipeline FPSSource
NVIDIA GeForce RTX 205011.3 ms15.16 ms88.5json
13th Gen Intel(R) Core(TM) i5-13420H (CPU only)49.51 ms56.85 ms20.2json

Detect + track + Kalman + predict per frame, batch 1, 1280 × 720 video, laptop on AC power.

Tracking

EvaluationVideosMOTAIDF1ID switchesSource
Anti-UAV-RGBT test, IAMARS detector + ByteTrack910.0670.178452json
Same videos, ground-truth boxes (tracker upper bound)910.9280.4851,384json
MultiUAV swarm videos, ground-truth boxes200.9850.924297json

MOTA and IDF1 from py-motmetrics (match at IoU ≥ 0.5). With perfect boxes the tracker keeps identities well on static-camera swarm videos but not on Anti-UAV, whose pan-tilt camera makes boxes jump.

Second example: 24 drones in formation

Pipeline output on a swarm. Source clip: "MagicLab – 24 Drone Flight" by Marco Tempest, CC BY 3.0, via Wikimedia Commons, trimmed and annotated.

Intercept-point prediction (simulation)

Simulation only. 1,000 trials per pattern; 3D position measured at 30 Hz with 1.0 m noise; after 2.0 s a Kalman filter estimate is used to aim a 80 m/s interceptor. Hit = within 1.0 m of the true position.

Flight patternHit rate (≤ 1 m)Median missHit rate with true state
Straight28.3 %1.36 m100.0 %
Turning1.4 %13.52 m8.2 %
Jinking (random manoeuvres)0.0 %16.65 m0.3 %

Source: results/intercept_simulation.json

Run it yourself

git clone https://github.com/aviraj1805/intelligent-aerial-monitoring.git
cd intelligent-aerial-monitoring
pip install -r requirements.txt
python scripts/download_assets.py
python app.py            # interactive web demo at http://127.0.0.1:7860

This page is static because hosted Python apps on Hugging Face require a paid plan. The interactive Gradio app runs locally with the commands above.