AeroNova β€” Aerial Person Detection for Drone Disaster Relief

Single-class (person) YOLO detector for humans seen from 50–100 m flight altitude at a slant angle. Built for the SIH problem statement "AI based automatic alarm generation and dropping of payload at a particular object through a drone."

The problem this solves

A 1.7 m human at 100 m altitude is 9–34 px tall depending on camera angle. Feeding a 2304Γ—1296 frame to YOLO at imgsz=640 downscales that person to ~5 px β€” below the stride-8 detection head. The target is destroyed before the first forward pass, and no amount of training recovers it.

This model is trained on 640 px tiles cut from full frames at native resolution, so a 20 px person stays 20 px. You must slice at inference with the same tile size and overlap or recall collapses β€” measured at 15Γ— worse in the 16–32 px bucket when the scales do not match.

Results

Target size β‰ˆ altitude / angle GT Found Recall
< 16 px ~100 m nadir 2,493 1,334 0.535
16-32 px ~100 m slant / 50 m nadir 6,210 4,178 0.673
32-64 px ~50 m slant 3,878 3,158 0.814
>= 64 px < 30 m 330 300 0.909

Overall @ IoU 0.25: recall 0.695, AP 0.617, precision 0.636 on 541 held-out frames (12,911 persons).

Precision is deliberately traded for recall (conf=0.15): a false alarm costs a wasted payload, a miss costs a life. False positives are suppressed downstream by temporal confirmation in ground coordinates β€” 3 sightings at a consistent GPS position β€” rather than by a threshold that would discard real 20 px victims.

Usage

from huggingface_hub import hf_hub_download
from ultralytics import YOLO

model = YOLO(hf_hub_download("Siddh10/sih-aerial-person", "best.pt"))
# Do NOT run full-frame on large images -- slice at 640/0.2 to match training.

Full pipeline, including sliced inference and pixel→GPS projection: https://github.com/SiddhPatel0424/AeroNova

Training data

VisDrone2019-DET, converted to a single person class (pedestrian + people merged β€” a rescue drone does not care whether the victim is upright). ignored-regions are pixel-masked rather than dropped, and boxes with occlusion == 2 are removed as label noise. 27,488 tiles / 199,891 boxes.

Limitations β€” read these before quoting the model

  • VisDrone is urban drone footage, not disaster footage. There is a real domain gap to flood and earthquake scenes.
  • Below ~16 px, recall is poor. That is optics, not model quality. The fix is a longer lens, lower altitude, or a thermal camera β€” not more epochs.
  • This is yolo11n (nano), chosen so a Raspberry Pi can run it, trained for 35 effective epochs on a laptop GPU. A larger model with a full schedule has headroom above these numbers.
  • Altitude claims are inferred from box pixel size, not measured β€” VisDrone has no altitude labels. The honest claim is performance at the box sizes corresponding to 50–100 m, per the GSD calculation in the repo.

Licence

AGPL-3.0, inherited from Ultralytics YOLO.

Downloads last month
50
Inference Providers NEW
This model isn't deployed by any Inference Provider. πŸ™‹ Ask for provider support