Ultralytics YOLO27:
Get Started

RT-DETR di Baidu: un rilevatore di oggetti in tempo reale basato su Transformer visivo#

Panoramica#

Real-Time Detection Transformer (RT-DETR), sviluppato da Baidu, è un rilevatore di oggetti end-to-end all'avanguardia che offre prestazioni in tempo reale mantenendo un'elevata accuratezza. Si basa sull'idea di DETR (il framework senza NMS) e introduce al contempo un backbone basato su convoluzioni e un encoder ibrido efficiente per raggiungere velocità in tempo reale. RT-DETR elabora in modo efficiente le feature multiscala separando l'interazione tra le scale dalla fusione tra le scale. Il modello è altamente adattabile e supporta la regolazione flessibile della velocità di inferenza tramite diversi livelli del decoder, senza riaddestramento. RT-DETR eccelle sui backend accelerati come CUDA con TensorRT, superando molti altri rilevatori di oggetti in tempo reale.



Guarda: Come usare RT-DETR di Baidu per il rilevamento di oggetti | Inferenza e benchmark con Ultralytics 🚀

Panoramica dell'architettura del modello Baidu RT-DETR Panoramica di RT-DETR di Baidu. Il diagramma dell'architettura del modello RT-DETR mostra le ultime tre fasi del backbone {S3, S4, S5} come input dell'encoder. L'encoder ibrido efficiente trasforma le feature multiscala in una sequenza di feature dell'immagine mediante l'interazione delle feature intrascala (AIFI) e il modulo di fusione delle feature tra le scale (CCFM). La selezione delle query basata su IoU viene usata per selezionare un numero fisso di feature dell'immagine da usare come query iniziali degli oggetti per il decoder. Infine, il decoder con teste di predizione ausiliarie ottimizza iterativamente le query degli oggetti per generare box e punteggi di confidenza (fonte).

Funzionalità principali#

  • Encoder ibrido efficiente: RT-DETR di Baidu utilizza un encoder ibrido efficiente che elabora le feature multiscala separando l'interazione tra le scale dalla fusione tra le scale. Questo design esclusivo basato su Vision Transformer riduce i costi computazionali e consente il rilevamento degli oggetti in tempo reale.
  • Selezione delle query basata su IoU: RT-DETR di Baidu migliora l'inizializzazione delle query degli oggetti utilizzando la selezione delle query basata su IoU. In questo modo il modello può concentrarsi sugli oggetti più rilevanti nella scena, migliorando l'accuratezza del rilevamento.
  • Velocità di inferenza adattabile: RT-DETR di Baidu supporta la regolazione flessibile della velocità di inferenza mediante diversi livelli del decoder, senza dover riaddestrare il modello. Questa adattabilità ne facilita l'applicazione pratica in vari scenari di rilevamento degli oggetti in tempo reale.
  • Framework senza NMS: Basato su DETR, RT-DETR elimina la necessità della post-elaborazione di soppressione non massima, semplificando la pipeline di rilevamento e migliorando potenzialmente l'efficienza.
  • Rilevamento senza anchor: In quanto rilevatore senza anchor, RT-DETR semplifica il processo di rilevamento e può migliorare la generalizzazione tra dataset diversi.

Modelli preaddestrati#

L'API Python di Ultralytics offre modelli RT-DETR PaddlePaddle preaddestrati con scale diverse:

  • RT-DETR-L: 53.0% AP su COCO val2017, 114 FPS su GPU T4
  • RT-DETR-X: 54.8% AP su COCO val2017, 74 FPS su GPU T4

Inoltre, Baidu ha rilasciato RTDETRv2 a luglio 2024, che migliora ulteriormente l'architettura originale con metriche di prestazione superiori.

Esempi d'uso#

Questo esempio illustra semplici esempi di addestramento e inferenza con RT-DETR. Per la documentazione completa su queste e altre modalità, consulta le pagine della documentazione Predict, Train, Val ed Export. Puoi anche addestrare i modelli su GPU cloud tramite Ultralytics Platform.

Esempio
from ultralytics import RTDETR

# Carica un modello RT-DETR-l preaddestrato su COCO
model = RTDETR("rtdetr-l.pt")

# Visualizza le informazioni sul modello (facoltativo)
model.info()

# Addestra il modello sul dataset di esempio COCO8 per 100 epoche
results = model.train(data="coco8.yaml", epochs=100, imgsz=640)

# Esegui l'inferenza con il modello RT-DETR-l sull'immagine 'bus.jpg'
results = model("path/to/bus.jpg")
Addestramento deterministico

Imposta deterministic=False quando addestri RT-DETR su CUDA con PyTorch 2.0 o versioni successive. La sua attenzione deformabile usa F.grid_sample, che non dispone di un backward CUDA deterministico, quindi deterministic=True non può rendere riproducibile l'esecuzione e può ridurre il throughput di addestramento. seed continua a controllare l'inizializzazione dei pesi, l'ordine dei dati e il campionamento delle augmentation.

Compromessi per un'inferenza più veloce

I pesi RT-DETR preaddestrati supportano due impostazioni in fase di inferenza per ridurre la latenza senza riaddestramento:

  • eval_idx: interrompi anticipatamente la decodifica. Per il decoder predefinito a 6 livelli, usa un indice a base zero (0–5). eval_idx=5 usa tutti i livelli; eval_idx=3 ne usa 4. Su una GPU T4 con TensorRT v10.11, RT-DETR-L passa da 8.0 ms / 52.7 mAP a 7.4 ms / 52.5 mAP con 4 livelli.
  • num_queries: riduci le query degli oggetti (predefinito: 300). Riducendole a 100 si possono raggiungere 7.4 ms / 51.7 mAP su COCO nella stessa configurazione. Nei dataset con meno oggetti per immagine, il calo di mAP è in genere più contenuto, ma mantieni il valore superiore al numero massimo previsto di oggetti per immagine.

Entrambe le impostazioni possono ridurre mAP: convalida il compromesso sul tuo dataset prima della distribuzione.

from ultralytics import RTDETR

rtdetr = RTDETR("rtdetr-l.pt")
head = rtdetr.model.model[-1]

# Scegli una o entrambe le impostazioni dopo aver convalidato il compromesso tra velocità e accuratezza.
head.decoder.eval_idx = 3  # Usa 4 dei 6 livelli del decoder.
head.num_queries = 100  # Usa meno query degli oggetti.

results = rtdetr("path/to/image.jpg")

# L'esportazione usa le stesse impostazioni del decoder e delle query, incluse le esportazioni TensorRT.
rtdetr.export(format="engine", device=0, quantize=16)

Attività e modalità supportate#

Questa tabella presenta i tipi di modello, i relativi pesi preaddestrati specifici, le attività supportate da ciascun modello e le varie modalità (Train, Val, Predict, Export) supportate, indicate con emoji ✅.

Tipo di modelloPesi preaddestratiAttività supportateAddestramentoValidazioneInferenzaEsporta
RT-DETR Largertdetr-l.ptRilevamento di oggetti✅✅✅✅
RT-DETR Extra-Largertdetr-x.ptRilevamento di oggetti✅✅✅✅
Varianti solo architetturali

rtdetr-resnet50.yaml e rtdetr-resnet101.yaml sono distribuiti solo come architetture YAML. Ultralytics rilascia pesi preaddestrati solo per rtdetr-l e rtdetr-x. Istanzia le varianti ResNet da YAML (ad esempio, RTDETR("rtdetr-resnet50.yaml")) e addestrale o perfezionale secondo necessità.

Casi d'uso ideali#

RT-DETR è particolarmente adatto alle applicazioni che richiedono sia un'elevata accuratezza sia prestazioni in tempo reale:

Citazioni e ringraziamenti#

Se utilizzi RT-DETR di Baidu nelle tue attività di ricerca o sviluppo, cita il paper originale:

Citazione
@misc{lv2023detrs,
      title={DETRs Beat YOLOs on Real-time Object Detection},
      author={Wenyu Lv and Shangliang Xu and Yian Zhao and Guanzhong Wang and Jinman Wei and Cheng Cui and Yuning Du and Qingqing Dang and Yi Liu},
      year={2023},
      eprint={2304.08069},
      archivePrefix={arXiv},
      primaryClass={cs.CV}
}

Per RTDETRv2, puoi citare il paper del 2024:

Citazione
@misc{lv2024rtdetrv2,
      title={RTDETRv2: All-in-One Detection Transformer Beats YOLO and DINO},
      author={Wenyu Lv and Yian Zhao and Qinyao Chang and Kui Huang and Guanzhong Wang and Yi Liu},
      year={2024},
      eprint={2407.17140},
      archivePrefix={arXiv},
      primaryClass={cs.CV}
}

Desideriamo ringraziare Baidu e il team PaddlePaddle per aver creato e mantenuto questa preziosa risorsa per la comunità della computer vision. Apprezziamo molto il loro contributo al settore con lo sviluppo del rilevatore di oggetti in tempo reale basato su Vision Transformer, RT-DETR.

Domande frequenti#

  • RT-DETR (Real-Time Detection Transformer) di Baidu è un rilevatore di oggetti avanzato in tempo reale basato sull'architettura Vision Transformer. Elabora in modo efficiente le feature multiscala separando l'interazione tra le scale dalla fusione tra le scale tramite il suo encoder ibrido efficiente. Usando la selezione delle query basata su IoU, il modello si concentra sugli oggetti più rilevanti, migliorando l'accuratezza del rilevamento. La velocità di inferenza adattabile, ottenuta regolando i livelli del decoder senza riaddestramento, rende RT-DETR adatto a vari scenari di rilevamento degli oggetti in tempo reale. Scopri di più sulle funzionalità di RT-DETR nel paper arXiv su RT-DETR.

  • Puoi usare l'API Python di Ultralytics per utilizzare modelli RT-DETR PaddlePaddle preaddestrati. Ad esempio, per caricare un modello RT-DETR-l preaddestrato su COCO val2017 e ottenere un FPS elevato su GPU T4, puoi usare il seguente esempio:

    Esempio
    from ultralytics import RTDETR
    
    # Carica un modello RT-DETR-l preaddestrato su COCO
    model = RTDETR("rtdetr-l.pt")
    
    # Visualizza le informazioni sul modello (facoltativo)
    model.info()
    
    # Addestra il modello sul dataset di esempio COCO8 per 100 epoche
    results = model.train(data="coco8.yaml", epochs=100, imgsz=640)
    
    # Esegui l'inferenza con il modello RT-DETR-l sull'immagine 'bus.jpg'
    results = model("path/to/bus.jpg")
  • RT-DETR di Baidu si distingue per l'encoder ibrido efficiente e la selezione delle query basata su IoU, che riducono drasticamente i costi computazionali mantenendo un'elevata accuratezza. La sua capacità esclusiva di regolare la velocità di inferenza usando diversi livelli del decoder senza riaddestramento offre una notevole flessibilità. Questo lo rende particolarmente vantaggioso per le applicazioni che richiedono prestazioni in tempo reale su backend accelerati come CUDA con TensorRT, superando molti altri rilevatori di oggetti in tempo reale. L'architettura Transformer offre inoltre una comprensione del contesto globale migliore rispetto ai rilevatori tradizionali basati su CNN.

  • RT-DETR di Baidu consente di regolare in modo flessibile la velocità di inferenza usando diversi livelli del decoder senza richiedere un riaddestramento. Questa adattabilità è fondamentale per scalare le prestazioni in varie attività di rilevamento degli oggetti in tempo reale. Che ti serva un'elaborazione più veloce per esigenze di precisione inferiori o rilevamenti più lenti ma più accurati, RT-DETR può essere configurato per soddisfare le tue esigenze specifiche. Questa funzionalità è particolarmente utile quando distribuisci i modelli su dispositivi con capacità computazionali diverse.

  • No. Per RT-DETR, max_det limita il numero di predizioni restituite dopo l'inferenza, ma non aumenta il numero di query degli oggetti generate dal decoder. I checkpoint RT-DETR preaddestrati di Ultralytics usano 300 query degli oggetti, quindi non possono restituire più di 300 rilevamenti per immagine, anche se imposti max_det su un valore maggiore.

    Usa max_det per ridurre i rilevamenti restituiti, ad esempio max_det=100, quando ti servono solo poche predizioni ad alta confidenza. Se il tuo dataset può contenere più di 300 oggetti per immagine, addestra un modello RT-DETR personalizzato con un numero maggiore di query del decoder (nq) nel file YAML del modello; modificare questo valore su un checkpoint preaddestrato dopo l'addestramento non è equivalente e richiede un riaddestramento per apprendere le query aggiuntive.

  • Sì, i modelli RT-DETR sono compatibili con varie modalità di Ultralytics, tra cui addestramento, validazione, predizione ed esportazione. Puoi consultare la documentazione pertinente per istruzioni dettagliate su come usare queste modalità: Train, Val, Predict ed Export. Questo garantisce un workflow completo per sviluppare e distribuire le tue soluzioni di rilevamento degli oggetti. Il framework Ultralytics offre un'API coerente tra diverse architetture di modello, semplificando l'utilizzo dei modelli RT-DETR.

Commenti