Guida ai dataset per il rilevamento dei droni: addestra Ultralytics YOLO sui piccoli UAV
Confronta i dataset DUT Anti-UAV, Drone-vs-Bird e per il rilevamento termico dei droni, poi addestra Ultralytics YOLO26 per individuare i droni minuscoli e ridurre i falsi allarmi.

Il benchmark per il rilevamento e il tracciamento degli UAV riporta che nel dataset Drone-vs-Bird i droni hanno una dimensione media di 34 x 23 pixel. Immagina un drone di quelle dimensioni in un ipotetico fotogramma di 3840 x 2160: ridimensionato ai 640 pixel usati per impostazione predefinita da un rilevatore, si ridurrebbe a circa 5,7 x 3,8 pixel.
I team anti-drone devono mantenere visibile l’oggetto, dal dataset scelto al modello distribuito. Questa guida illustra le quattro decisioni che determinano il risultato con Ultralytics YOLO26: su quale dataset di rilevamento dei droni addestrare, quale dimensione immagine usare, quando aggiungere l’inferenza a tasselli SAHI e come valutare il modello in base alle dimensioni degli oggetti, così che un buon mAP complessivo non nasconda i droni distanti mancati.

La maggior parte dei «dataset per il rilevamento dei droni» risponde alla domanda sbagliata#
Chi cerca un dataset per il rilevamento dei droni di solito intende uno di questi due compiti:
- Rilevare i droni (anti-UAV o counter-UAV): una telecamera a terra o in volo cerca un piccolo velivolo sullo sfondo di cielo, alberi o edifici. Servono immagini di droni, idealmente insieme a uccelli e altri elementi simili.
- Rilevare oggetti dalle riprese dei droni: una telecamera montata sul drone riprende dall’alto persone, auto ed edifici. VisDrone è il benchmark standard per questo compito. Contiene 8.629 immagini aeree in 10 classi, dal pedone all’autobus, e non include una classe drone.
VisDrone è comunque utile ai team anti-UAV, perché gli oggetti sono piccoli e numerosi. È quindi un buon dataset pubblico per testare configurazioni per oggetti piccoli, come la dimensione delle immagini e il ritaglio in tasselli, prima che i tuoi dati siano pronti. Per le applicazioni aeree vere e proprie, consulta la nostra panoramica sulla visione artificiale nelle operazioni con i droni. Il resto di questo articolo tratta il primo compito: rilevare i droni.
Scegli un dataset adatto alla telecamera e al punto di vista#
Il dataset pubblico più adatto dipende dal fatto che la telecamera sia a terra o in aria, che registri luce visibile o infrarossi termici e dalla distanza a cui vola il tuo oggetto:
| Dataset | Immagini | Dimensioni | Ideale per |
|---|---|---|---|
| Drone-vs-Bird | Video RGB, da 720 x 576 a 3840 x 2160 | 77 sequenze di addestramento annotate | Telecamere a terra, droni con uccelli nella scena |
| DUT Anti-UAV | Immagini RGB, da 240 x 160 a 5616 x 3744 | 10.000 immagini (5.200 per l’addestramento / 2.600 per la validazione / 2.200 per il test), più 20 video di tracciamento | Una prima baseline per la luce visibile |
| Det-Fly | RGB, 3840 x 2160 | 13.271 immagini | Riprese aria-aria di un DJI Mavic |
| Anti-UAV | Video RGB e termici abbinati | 318 coppie di video | Tracciamento diurno e notturno con entrambe le modalità |
| Anti-UAV410 | Video a infrarossi termici | 410 video (200 per l’addestramento / 90 per la validazione / 120 per il test) | Rilevamento e tracciamento termici |
| LRDDv3 | RGB 4K e IR 640 x 512, con etichette di distanza | 102.532 immagini RGB; 29.630 immagini IR abbinate | Valutazione dei droni distanti basata sulla distanza |
Il conteggio di Drone-vs-Bird si riferisce al set di addestramento di 77 sequenze distribuito per le edizioni 2021 e ICASSP 2023 della competizione, le cui risoluzioni sono riportate dalla rassegna SynDroneVision. La rassegna tratta anche Det-Fly e Anti-UAV, mentre l’articolo su LRDDv3 descrive il proprio dataset. Le licenze e le condizioni di accesso variano da un dataset all’altro, quindi verificale prima di qualsiasi uso commerciale.
Addestra su più dataset e tienine uno da parte per il test#
Un modello che ottiene buoni risultati sul dataset di addestramento può comunque avere difficoltà con un altro dataset. Gli autori di LRDDv3 hanno addestrato modelli Ultralytics YOLO11m su dataset diversi e li hanno testati su Det-Fly. Il modello addestrato su Drone-vs-Bird ha raggiunto un mAP50 di 0,484, mentre quello addestrato su DUT Anti-UAV ha raggiunto 0,431.
Combina quindi due o tre fonti adatte alla tua telecamera e alla distanza di rilevamento, poi convertili tutti nel formato di rilevamento YOLO. Rimappa quindi gli ID delle classi in modo coerente, completa le annotazioni mancanti degli uccelli e suddividi i dati per volo o video prima di estrarre i fotogrammi o i tasselli. Una suddivisione per fotogramma può collocare nel set di addestramento e in quello di test fotogrammi quasi identici dello stesso volo, gonfiando i punteggi. Escludi dall’addestramento un intero dataset o le riprese del tuo sito da usare come set di test e includi riprese con soli uccelli e cielo vuoto per misurare i falsi allarmi.
Etichetta gli uccelli oltre ai droni#
Gli uccelli sono una causa comune di falsi allarmi nel rilevamento dei droni basato sulla visione. Drone-vs-Bird contiene uccelli come elementi di disturbo, ma non li etichetta come classe: in un dataset a due classi devi quindi aggiungere i relativi riquadri. Uno studio del 2025 sui piccoli droni ha addestrato YOLO11m con le classi drone e uccello, ignorando le predizioni degli uccelli durante l’inferenza. In quell’esperimento, il modello a due classi ha rilevato i droni leggermente meglio di un modello addestrato solo sui droni.
I dati pubblici ti danno una baseline, mentre le tue riprese ti portano alla produzione. L’annotazione in Ultralytics Platform ti permette di etichettare i riquadri di droni e uccelli nei fotogrammi delle tue telecamere, mentre i dati sintetici possono aggiungere sfondi e angolazioni rare. La soluzione arrivata prima all’AVSS 2021 Drone-vs-Bird usava un rilevatore Ultralytics YOLOv5 ottimizzato con immagini reali e sintetiche, insieme a un tracker con filtro di Kalman che aumentava la confidenza per i droni deboli e distanti.
La dimensione dell’immagine determina se il drone sopravvive al ridimensionamento#
YOLO26 ridimensiona ogni immagine in modo che il lato più lungo corrisponda a imgsz, che per impostazione predefinita è 640. Se dopo il ridimensionamento restano pochissimi pixel del drone, qualsiasi rilevatore avrà poco su cui lavorare. Aumentare imgsz è la prima soluzione: sia la documentazione sull’addestramento sia la guida all’ottimizzazione raccomandano imgsz=1280 per i dataset con oggetti piccoli.
Il costo cresce all’incirca in proporzione al numero di pixel, quindi 1280 richiede circa quattro volte la potenza di calcolo di 640. Per avere un riferimento, la documentazione di YOLO26 riporta per YOLO26n 1,7 ms e per YOLO26s 2,5 ms su una NVIDIA T4, con TensorRT 10, batch 1 e nms=False, a 640 pixel su COCO val2017. Non sono misurazioni relative ai droni né a 1280 pixel, quindi misura la tua configurazione.

Una regola pratica iniziale viene dalla lezione sulla latenza di Ultralytics Academy: vale la pena provare una dimensione se, a quella risoluzione, il tuo oggetto importante più piccolo occupa ancora circa 10 pixel. Se hai un budget limitato, confronta un modello più piccolo a risoluzione più alta con un modello più grande a risoluzione più bassa sullo stesso set di validazione dei droni e scegli quello che individua più droni piccoli rispettando il tuo obiettivo di latenza.
YOLO26 mantiene gli oggetti minuscoli nella selezione dei candidati#
Anche con una dimensione d’immagine sufficiente, il modello deve imparare da riquadri minuscoli. Qui è utile la Small-Target-Aware Label Assignment (STAL) di YOLO26. Nei modelli YOLO26 standard da P3 a P5 di v8.4.199, STAL amplia a 16 pixel i lati dei riquadri usati per la selezione dei candidati quando misurano meno di 16 pixel, mantenendo invariati i target di regressione originali; così è meno probabile che i droni minuscoli restino senza ancore candidate.
Per gli oggetti più piccoli puoi anche modificare l’architettura. YOLO26 include una variante yolo26-p2.yaml che aggiunge un livello di output con stride 4 alla piramide delle caratteristiche, oltre ai livelli da P3 a P5. Con input di 640 x 640, aumenta il calcolo non fuso di YOLO26n da 6,1 a 9,5 GFLOPs. P2 è rilasciato come architettura YAML senza pesi P2 preaddestrati, quindi lo crei con YOLO("yolo26n-p2.yaml") e lo addestri sui tuoi dati.
L’inferenza a tasselli SAHI mantiene tutti i dettagli dei fotogrammi 4K#
Anche a 1280 pixel, un fotogramma 4K perde due terzi della larghezza prima che il modello possa elaborarlo. SAHI (Slicing Aided Hyper Inference) si integra con Ultralytics YOLO26 per evitare questa perdita. Suddivide il fotogramma in tasselli sovrapposti, esegue il modello su ogni tassello e riporta i riquadri sull’immagine completa, in modo che un drone diviso tra tasselli adiacenti venga contato una sola volta. L’articolo su SAHI descrive il metodo e la sua variante di ottimizzazione con ritagli.

Imposta separatamente la dimensione dei tasselli e quella dell’input del modello, poi verifica la scala risultante dei droni su riprese non usate per l’addestramento. Un modello addestrato su fotogrammi 4K completi ridimensionati a 1280 ha imparato a riconoscere droni tre volte più piccoli di quelli che appaiono in tasselli a risoluzione nativa di 1280 pixel. Se questa differenza di scala penalizza i risultati, prova a ottimizzare il modello su ritagli estratti dai fotogrammi di addestramento a piena risoluzione, come nell’articolo su SAHI, e confrontalo con il modello a fotogramma intero sullo stesso set di test. Inizia con una sovrapposizione del 20% tra tasselli adiacenti e controlla gli errori ai bordi dei tasselli.
Il carico di lavoro è prevedibile. A 1280 x 1280 con sovrapposizione di 0,2, un fotogramma di 3840 x 2160 richiede quattro colonne e due righe, quindi otto passaggi in avanti invece di uno, purché disattivi la predizione aggiuntiva sull’immagine intera di SAHI. È una soluzione adatta a riprese registrate, revisione degli allarmi e GPU edge potenti. Per una telecamera che deve elaborare ogni fotogramma alla massima frequenza, ritaglia solo la regione di cielo oppure esegui scansioni a tasselli periodiche o attivale tramite un altro sensore, come un radar.
Valuta il rilevatore per dimensione e classe#
La precisione media media (mAP) complessiva calcola la media dell’AP delle classi. In questo dataset a due classi, le prestazioni sugli uccelli possono nascondere un rilevamento debole dei droni; inoltre, all’interno della classe drone, un buon punteggio complessivo può nascondere un richiamo basso nelle fasce di dimensione più piccole. Prima di fidarti del risultato, suddividi il punteggio per classe e dimensione.
La validazione con save_json=True aggiunge l’AP per oggetti piccoli, medi e grandi nei dataset di rilevamento, calcolata con faster-coco-eval sulle fasce di COCO: area del riquadro inferiore a 32 x 32 pixel, fino a 96 x 96 e superiore. Questi valori includono entrambe le classi. La rassegna SynDroneVision riporta che la maggior parte dei droni annotati in Drone-vs-Bird è più piccola di 32 x 32, quindi controlla l’AP_small e il richiamo della sola classe drone.
Per ottenere questi valori, valuta predictions.json rispetto alle annotazioni di riferimento corrispondenti, usando l’area dei riquadri in pixel dell’immagine originale. Ultralytics scrive i riquadri nelle coordinate dell’immagine originale, usa il nome base del file immagine come ID dell’immagine e numera le classi personalizzate a partire da 1: in questo caso, drone è la categoria 1 e uccello la categoria 2. Converti quindi le etichette di test in un JSON in formato COCO con gli stessi ID immagine e ID categoria, poi limita la valutazione a catIds=[1].
La fascia piccola di COCO è approssimativa per le applicazioni a lunga distanza, perché include sia un drone di 12 pixel sia uno di 30 x 30. Definisci fasce di area più precise allo stesso modo, ad esempio sotto i 64 pixel di area (8 x 8), da 64 a 256 (16 x 16) e da 256 a 1.024 (32 x 32), quindi leggi AP e richiamo dei droni per ciascuna fascia. Se le tue etichette includono la distanza, come quelle di LRDDv3, riporta anche il richiamo in funzione della distanza. Affianca la precisione, indicando separatamente il numero di predizioni di droni sui fotogrammi con soli uccelli e su quelli con cielo vuoto.

Due accorgimenti aiutano a mantenere attendibili i risultati:
- Esegui la validazione alla dimensione usata in distribuzione. Un modello addestrato a 1280 e validato a 640 vede droni grandi la metà rispetto all’addestramento, quindi i suoi punteggi calano per ragioni non legate al modello.
- Interpreta con cautela mAP50-95. Uno spostamento di 2 pixel su un riquadro di 10 pixel incide molto sull’IoU, quindi le soglie rigorose penalizzano gli oggetti minuscoli. Tieni traccia del richiamo per i droni mancati e dell’AP50 per i rilevamenti classificati correttamente con IoU pari a 0,5.
Addestra, suddividi in tasselli e valuta un rilevatore di droni YOLO26#
Questi passaggi ti portano da un dataset unificato di droni e uccelli al confronto tra inferenza sull’immagine intera e inferenza a tasselli sullo stesso set di test escluso dall’addestramento.
-
Installa i pacchetti con
pip install -U ultralytics sahi. -
Scrivi un file YAML del dataset con gli uccelli come seconda classe e un set di test escluso dall’addestramento:
path: datasets/drones
train: images/train
val: images/val
test: images/test
names:
0: drone
1: bird- Addestra a 1280 partendo da pesi preaddestrati.
batch=-1consente ad AutoBatch di scegliere una dimensione del batch che utilizzi circa il 60% della memoria GPU:
from ultralytics import YOLO
model = YOLO("yolo26s.pt")
model.train(data="drones.yaml", epochs=100, imgsz=1280, batch=-1, name="drone_1280")- Valuta la baseline sull’immagine intera sul set di test alla stessa risoluzione. Il comando salva
predictions.jsonnella cartella dell’esecuzione:
best = YOLO("runs/detect/drone_1280/weights/best.pt")
metrics = best.val(data="drones.yaml", split="test", imgsz=1280, save_json=True)- Esporta le predizioni a tasselli per le stesse immagini di test nelle coordinate dell’immagine originale, disattivando il passaggio aggiuntivo sull’immagine intera di SAHI:
import json
from pathlib import Path
from sahi import AutoDetectionModel
from sahi.predict import get_sliced_prediction
detector = AutoDetectionModel.from_pretrained(
model_type="ultralytics",
model_path="runs/detect/drone_1280/weights/best.pt",
confidence_threshold=0.001,
image_size=1280,
device="cuda:0",
)
preds = []
for img in sorted(Path("datasets/drones/images/test").glob("*.jpg")):
result = get_sliced_prediction(
str(img),
detector,
slice_height=1280,
slice_width=1280,
overlap_height_ratio=0.2,
overlap_width_ratio=0.2,
perform_standard_pred=False,
)
image_id = int(img.stem) if img.stem.isnumeric() else img.stem
for p in result.to_coco_predictions(image_id=image_id):
p["category_id"] += 1 # corrispondenza con gli ID a partire da 1 in predictions.json
preds.append(p)
Path("sahi_predictions.json").write_text(json.dumps(preds))- Valuta entrambi i file di predizioni rispetto allo stesso ground truth, considerando solo la classe drone:
from faster_coco_eval import COCO, COCOeval_faster
gt = COCO("test_coco.json") # le tue etichette di test in formato COCO
for name in ["runs/detect/val/predictions.json", "sahi_predictions.json"]:
ev = COCOeval_faster(gt, gt.loadRes(name), "bbox")
ev.params.catIds = [1] # drone
ev.evaluate()
ev.accumulate()
ev.summarize()Confronta l’AP dei droni per dimensione, le predizioni di droni sui fotogrammi con soli uccelli e su quelli con cielo vuoto, e la latenza end-to-end per fotogramma sull’hardware di distribuzione. Mantieni il ritaglio a tasselli solo se il miglioramento sui droni piccoli giustifica i passaggi aggiuntivi.
-
Esegui il tracciamento tra i fotogrammi come esempio separato sull’immagine intera:
best.track(source="perimeter.mp4", imgsz=1280, tracker="bytetrack.yaml")usa la modalità di tracciamento e non utilizza le predizioni SAHI precedenti. ByteTrack può riattivare una traccia persa se una rilevazione successiva vi corrisponde prima della sua scadenza. -
Esporta per l’edge. Se usi una NVIDIA Jetson accanto alla telecamera, esporta in TensorRT con
best.export(format="engine", imgsz=1280, half=True)e segui la guida per Jetson. Misura la latenza sul dispositivo alla risoluzione di distribuzione.
Se la tua GPU non riesce a gestire l’addestramento a 1280 pixel, puoi usare lo stesso dataset e gli stessi argomenti per l’addestramento cloud in Ultralytics Platform.
Chi dovrebbe realizzare un rilevatore di droni con questo approccio#
Questo flusso di lavoro è adatto ai team che proteggono un sito fisso, come il perimetro di un aeroporto, un carcere, uno stadio o un’infrastruttura critica, con telecamere RGB o termiche rivolte verso il cielo. È adatto anche agli integratori che aggiungono la visione artificiale a sensori radar o RF nelle installazioni di sicurezza. In entrambi i casi, la telecamera deve riconoscere un drone a distanze alle quali occupa solo poche decine di pixel.
Inizia con DUT Anti-UAV e Drone-vs-Bird per creare una baseline, aggiungi etichette per gli uccelli e le tue riprese, addestra YOLO26 a 1280 e valuta ogni modifica con AP_small e richiamo della sola classe drone, oltre ai falsi allarmi causati dagli uccelli. Aggiungi SAHI quando i fotogrammi sono in 4K o più grandi e la valutazione a tasselli mostra un miglioramento sui droni piccoli. Per un quadro più ampio, consulta la nostra guida al rilevamento di oggetti piccoli e la lista di controllo mAP per oggetti piccoli.
Domande frequenti
Dipende dalla telecamera e dal punto di vista. DUT Anti-UAV, con 10.000 immagini RGB, è una pratica baseline iniziale per la luce visibile. Drone-vs-Bird aggiunge video da telecamere a terra con uccelli nella scena, Det-Fly copre riprese aria-aria a 3840 x 2160, Anti-UAV410 copre gli infrarossi termici e LRDDv3 aggiunge etichette di distanza. Addestra su più dataset e tienine uno da parte per il test.
No. VisDrone contiene immagini riprese dai droni, annotate con 10 classi come pedone, auto e autobus, e non include una classe drone. È utile per testare configurazioni per oggetti piccoli, come la dimensione delle immagini e il ritaglio a tasselli SAHI, ma per rilevare i droni ti serve un dataset anti-UAV come DUT Anti-UAV o Drone-vs-Bird.
Prova
imgsz=1280se i tuoi droni scendono sotto circa 10 pixel con l’impostazione predefinita di 640. YOLO26 ridimensiona il lato più lungo di ogni immagine aimgsz, quindi un valore più alto mantiene più pixel di ogni drone, richiedendo circa quattro volte la potenza di calcolo rispetto a 640. Esegui la validazione e la distribuzione alla dimensione usata per l’addestramento.Sì. SAHI carica i pesi di YOLO26 tramite
AutoDetectionModel.from_pretrained(model_type="ultralytics", image_size=1280, ...)ed esegue il modello su tasselli sovrapposti prima di unire i riquadri. Conperform_standard_pred=False, un fotogramma di 3840 x 2160 suddiviso in tasselli da 1280 pixel con sovrapposizione di 0,2 richiede otto passaggi in avanti. Valuta l’output a tasselli rispetto alla baseline sull’immagine intera usando lo stesso set di test.Esegui la validazione con
save_json=Truesu un dataset di rilevamento per ottenere l’AP per oggetti piccoli, medi e grandi, aggregato su tutte le classi. Per i risultati relativi ai soli droni, valuta il file salvatopredictions.jsonrispetto al ground truth in formato COCO con ID immagine e categoria corrispondenti, limita la valutazione alla categoria drone e usa le aree dei riquadri in pixel dell’immagine originale per eventuali fasce più precise.Sì, come classe annotata e come parte del test sui falsi allarmi. Gli uccelli sono una causa comune di falsi allarmi e, in un esperimento del 2025 con YOLO11m, un modello per droni e uccelli ha rilevato i droni leggermente meglio di un modello addestrato solo sui droni. Drone-vs-Bird non etichetta gli uccelli, quindi aggiungi tu i relativi riquadri e ignora le predizioni degli uccelli durante l’inferenza se ti servono solo gli allarmi relativi ai droni.
Scritto da
Commenti
Fai una domanda, condividi i tuoi risultati o aiuta qualcun altro.










