RT-DETR

Transformer detekcyjny przeznaczony do wnioskowania w czasie rzeczywistym. Dekoduje stały zestaw zapytań zamiast gęstej siatki, dlatego nie wykonuje NMS. LibreYOLO zawiera trzy jego wersje rozróżniane przez ładowany punkt kontrolny, a wersja 2 obsługuje także ramki zorientowane.

Zadania
detection, oriented boxes
Rozmiary
rtdetr: r18, r34, r50, r50m, r101, l, x at 640 px; rtdetrv2: r18, r34, r50, r50m, r101 for detection at 640 px, n, s, m, l, x for oriented boxes at 1024 px; rtdetrv4: s, m, l, x at 640 px
Instalacja
pip install "libreyolo[rtdetr]"
Poziom obsługi
Główny, od wersji v1.1.0. Główne trenowalne detektory: otrzymują funkcje po modelach flagowych w tej samej fali wydań.
Projekt źródłowy
RT-DETR, RT-DETRv2 and RT-DETRv4, autorzy: Baidu (versions 1 and 2), Peking University and Tsinghua University (version 4), licencja: Apache-2.0. Publikacja, kod źródłowy
Licencje
Kod: Apache-2.0, wagi: Apache-2.0. Użycie komercyjne

Instalacja

RT-DETR nie wymaga opcjonalnych dodatków. Wszystkie importowane przez niego elementy znajdują się w instalacji podstawowej, a dodatek rtdetr jest stabilną nazwą, która niczego do niej nie dodaje.

bash
pip install libreyolo

Dostrajanie adaptera z lora=True jest wyjątkiem i wymaga dodatku lora.

bash
pip install "libreyolo[lora]"

Predykcja

Przy pierwszym użyciu wagi są pobierane z Hugging Face i zapisywane w lokalnej pamięci podręcznej.

Python
from libreyolo import LibreYOLO, SAMPLE_IMAGE model = LibreYOLO("LibreRTDETRr18.pt")result = model(SAMPLE_IMAGE, save=True) for box in result.boxes:    print(box.cls, box.conf, box.xyxy)
CLI
libreyolo predict model=LibreRTDETRr18.pt save=True \  source=https://raw.githubusercontent.com/LibreYOLO/libreyolo/release/libreyolo/assets/parkour.jpg
Wideo
from libreyolo import LibreYOLO # Wersja jest częścią nazwy pliku, a fabryka wybiera ścieżkę według# punktu kontrolnego, dlatego wszystkie trzy ładują się tak samo.model = LibreYOLO("LibreRTDETRv4s.pt") # Dowolne źródło akceptowane przez bibliotekę: plik, folder, URL, indeks kamery,# strumień RTSP albo lista .streamsfor result in model.predict("clip.mp4", stream=True, save=True):    print(len(result.boxes))
Ramki zorientowane
from libreyolo import LibreYOLO # Tylko wersja 2. Przyrostek -obb wybiera zadanie, a punkt kontrolny# jest rozpoznawany jako zorientowany na podstawie własnych tensorów,# dlatego argument task nie jest potrzebny. Te wagi to DOTA v1.0,# 15 klas lotniczych w rozdzielczości 1024 px.model = LibreYOLO("LibreRTDETRv2n-obb.pt")result = model("aerial.png", save=True) obb = result.obbprint(obb.xywhr)     # (N, 5): cx, cy, w, h, radianyprint(obb.xyxyxyxy)  # te same wiersze jako cztery punkty narożneprint(result.boxes.xyxy)  # otaczające ramki wyrównane do osi
Ramki zorientowane, CLI
libreyolo predict model=LibreRTDETRv2n-obb.pt source=aerial.png save=True

Zwracany obiekt Results jest taki sam dla każdej rodziny, więc zamiana na inny detektor wymaga zmiany jednego wiersza. Parametry conf i max_det filtrują dekodowanie top-k dla zapytań i klas. Nie ma etapu NMS do dostrojenia, a iou jest przyjmowane, lecz nieużywane. Zorientowany punkt kontrolny natywnie wypełnia result.obb, a także result.boxes otaczającymi prostokątami wyrównanymi do osi. Informacje o źródłach, strumieniowaniu i obsłudze wyników znajdziesz w sekcji predykcja.

Warianty

Dostępne są trzy wersje i łącznie dwa zadania, a kody rozmiarów nie tworzą jednej serii. Wersja 1 nazywa rozmiary według backbone, ResNet lub HGNetv2. Wersja 2 ponownie wykorzystuje tylko nazwy ResNet: wersja 1 zawiera już dwa rozmiary HGNetv2, a wyniki wersji 2 były dla nich na tyle zbliżone, że LibreYOLO nie publikuje zduplikowanych wag. Wersja 4 używa zwykłej serii literowej, która koliduje z nazwami HGNetv2 z wersji 1, dlatego sam kod rozmiaru nie identyfikuje modelu. Wersja jest zapisana w nazwie pliku punktu kontrolnego.

Checkpoint modeluWejście (px)mAP 50-95Parametry (mln)
LibreRTDETRl64055.832.93
LibreRTDETRr10164056.876.56
LibreRTDETRr1864049.720.18
LibreRTDETRr3464052.231.44
LibreRTDETRr5064055.942.89
LibreRTDETRr50m64053.836.59
LibreRTDETRx64057.967.37
LibreRTDETRv2r10164056.876.56
LibreRTDETRv2r1864050.820.18
LibreRTDETRv2r3464053.231.44
LibreRTDETRv2r5064055.742.89
LibreRTDETRv2r50m64054.836.59
LibreRTDETRv4l64057.831.24
LibreRTDETRv4m64056.519.59
LibreRTDETRv4s64052.810.32
LibreRTDETRv4x64060.062.62

COCO val2017, 500 images. Wyniki zmierzono za pomocą zestawu benchmarkowego LibreYOLO i opublikowano w Vision Analysis, gdzie porównywane są opóźnienia na różnych urządzeniach i w różnych środowiskach uruchomieniowych oraz znajdują się pełne zapisy przebiegów.

Wersja 2 zachowuje architekturę i układ słownika stanu wersji 1, a zmienia sposób próbkowania uwagi deformowalnej. Dlatego są rozróżniane na podstawie metadanych w punkcie kontrolnym, a nie kształtu. Wersja 4 pochodzi z innej linii: ponownie wykorzystuje architekturę i trenera D-FINE, a jej wagi powstały przez destylację bazowego modelu wizyjnego DINOv3 z nauczyciela do ucznia HGNetv2. W LibreYOLO LibreRTDETRv4 jest podklasą LibreDFINE z trwale wyłączoną głowicą masek, dlatego obsługuje wyłącznie detekcję.

Ramki zorientowane w wersji 2

Wersja 2 jako jedyna zawiera drugie zadanie. Obsługuje detect i obb, które nie korzystają ze wspólnego grafu ani serii rozmiarów. Detekcja używa rozmiarów ResNet przy 640 px. Detekcja zorientowana korzysta z serii HGNetv2, n, s, m, l i x, przy 1024 px, a rozmiar wejścia jest ustalany według zadania, nie rodziny. Punkt kontrolny jest rozpoznawany jako zorientowany na podstawie własnych tensorów, pięciowspółrzędnych głowic ramek i parametrów próbkowania wersji 2. Dzięki temu wagi -obb ładują się do grafu zorientowanego bez argumentu task, a niezgodność obu wariantów powoduje jawny błąd zamiast cichej reinterpretacji.

Opublikowane pliki mają nazwy od LibreRTDETRv2n-obb.pt do LibreRTDETRv2x-obb.pt. Są to oficjalne jedno­skalowe punkty kontrolne DOTA v1.0 przekonwertowane do formatu LibreYOLO, z 15 klasami lotniczymi od samolotu i statku po port i śmigłowiec. Nazwy klas są zapisane w punkcie kontrolnym. W przeciwieństwie do detekcji zadanie zorientowane obsługuje wyłącznie wnioskowanie: działają predykcja, walidacja i eksport, a train() na modelu zorientowanym zgłasza błąd. Śledzenie i augmentacja podczas testowania również nie obsługują ramek zorientowanych. Sekcja detekcja zorientowana opisuje zadanie, format etykiet i metryki.

Trenowanie

Trenowanie rozpoczyna się od opublikowanego punktu kontrolnego. Parametr pretrained jest przyjmowany, a następnie odrzucany we wszystkich trzech wersjach, więc pretrained=False nie daje losowo zainicjalizowanego modelu. Cała ta sekcja dotyczy detekcji. Zadanie zorientowane wersji 2 obsługuje wyłącznie wnioskowanie i nie ma ścieżki przenoszenia wag detekcji, ponieważ oba zadania używają innych backbone'ów.

Python
from libreyolo import LibreYOLO model = LibreYOLO("LibreRTDETRr18.pt") # coco128.yaml pobiera próbkę 128 obrazów przy pierwszym użyciu. Dla# rzeczywistego przebiegu ustaw `data` na własny plik YAML zbioru danych.model.train(data="coco128.yaml", epochs=50, batch=4, lr0=1e-4)
CLI
libreyolo train model=LibreRTDETRr18.pt data=coco128.yaml \  epochs=50 batch=4 lr0=1e-4
LoRA
# Wymaga dodatku lora: pip install "libreyolo[lora]"from libreyolo import LibreYOLO model = LibreYOLO("LibreRTDETRr18.pt")model.train(data="coco128.yaml", epochs=50, lora=True)
Wiele GPU
libreyolo train model=LibreRTDETRr18.pt data=coco128.yaml \  epochs=50 device=0,1

Najważniejszym argumentem jest szybkość uczenia, a każda wersja ma własną wartość domyślną zamiast wartości wspólnej dla biblioteki. Sygnatura train() w Pythonie odczytuje ją z konfiguracji trenowania tej wersji, a CLI ustala tę samą wartość, gdy lr0 nie zostanie przekazane. Wersje 1 i 2 przyjmują również lr_backbone i domyślnie ustawiają je na jedną dwudziestą lr0, zgodnie z oryginalną konfiguracją. Wersja 4 korzysta z trenera D-FINE, który skaluje grupę parametrów backbone za pomocą backbone_lr_mult.

Pozostaw imgsz w natywnym rozmiarze punktu kontrolnego, chyba że istnieje powód, by go zmienić. Walidacja i predykcja w innych rozmiarach działają, z jednym zastrzeżeniem: rozmiar prostokątny, którego liczba tokenów odpowiada rozmiarowi natywnemu, nadal używa osadzenia zbudowanego dla niewłaściwych proporcji.

Informacje o zbiorach danych, augmentacji, wielu GPU i loggerach znajdziesz w sekcji trenowanie.

Walidacja

Metoda val() zwraca słownik kluczy metrics/ obejmujących precyzję, czułość, mAP 50 i mAP 50-95, mierzone na dowolnym zbiorze danych w formacie użytym do trenowania.

Python
from libreyolo import LibreYOLO model = LibreYOLO("LibreRTDETRr18.pt") # val() zwraca zwykły słownik, a nie obiektmetrics = model.val(data="coco128.yaml") print(metrics["metrics/mAP50-95"])print(metrics["metrics/mAP50"])print(metrics["metrics/precision"], metrics["metrics/recall"])
CLI
libreyolo val model=LibreRTDETRr18.pt data=coco128.yaml
Walidacja na COCO
# coco-val-only.yaml pobiera 5000 obrazów val2017 i pomija zestaw# treningowy. Zawiera osadzony skrypt pobierania, dlatego wymaga# jawnego zezwolenia, chyba że zbiór danych jest już dostępny lokalnie.libreyolo val model=LibreRTDETRr18.pt data=coco-val-only.yaml \  allow_download_scripts=True
Ramki zorientowane
from libreyolo import LibreYOLO # Walidacja zorientowana dopasowuje za pomocą obróconego IoU, dlatego predykcja# we właściwym miejscu, lecz pod złym kątem, jest liczona jako chybienie.model = LibreYOLO("LibreRTDETRv2n-obb.pt")metrics = model.val(data="my-obb-dataset.yaml") print(metrics["metrics/mAP50-95(OBB)"])print(metrics["metrics/mAP50(OBB)"])

Wiersze w powyższej tabeli benchmarków pochodzą z zestawu benchmarkowego LibreYOLO. Uwaga pod tabelą wskazuje zbiór danych, który je wygenerował, i zawiera odnośniki do zapisów przebiegów.

Walidacja zorientowana korzysta z tego samego wywołania i raportuje te same klucze oraz cztery powtórzone z przyrostkiem (OBB). Dopasowanie używa obróconego IoU zamiast IoU otaczających prostokątów, dlatego błąd kąta jest liczony jako chybienie. Ustawienie augment=True jest odrzucane w tym zadaniu.

Eksport

ZadanieONNXTorchScriptExecuTorchTensorRTOpenVINOPaddleMNNRKNNncnnTFLiteCoreMLCore AI
DetectionDetection to ONNX: obsługiwaneDetection to TorchScript: obsługiwaneDetection to ExecuTorch: obsługiwaneDetection to TensorRT: obsługiwaneDetection to OpenVINO: obsługiwaneDetection to Paddle: brak obsługiDetection to MNN: obsługiwaneDetection to RKNN: brak obsługiDetection to ncnn: brak obsługiDetection to TFLite: brak obsługiDetection to CoreML: brak obsługiDetection to Core AI: obsługiwane
Oriented boxesOriented boxes to ONNX: obsługiwaneOriented boxes to TorchScript: obsługiwaneOriented boxes to ExecuTorch: obsługiwaneOriented boxes to TensorRT: obsługiwaneOriented boxes to OpenVINO: obsługiwaneOriented boxes to Paddle: brak obsługiOriented boxes to MNN: brak obsługiOriented boxes to RKNN: brak obsługiOriented boxes to ncnn: brak obsługiOriented boxes to TFLite: brak obsługiOriented boxes to CoreML: brak obsługiOriented boxes to Core AI: brak obsługi

Macierz obejmuje całą linię na jednej stronie. Jeśli trzy wersje różnią się obsługą formatu, komórka pokazuje najsłabszy poziom spośród nich, więc możliwości żadnej ładowanej wersji nie są zawyżane. Wiersz zorientowany dotyczy wyłącznie wersji 2. ONNX i TorchScript zostały dla niej zwalidowane w FP32, z partią 1 i stałym płótnem 1024 na 1024. OpenVINO, TensorRT i ExecuTorch konwertują i ładują ponownie model, ale nie osiągnęły zgodności surowych wyników dla całego zestawu zapytań. Najlepsze ramki zgadzają się z dokładnością do ułamka piksela, natomiast ogon wyników się rozbiega.

Wyeksportowany artefakt jest ponownie ładowany przez LibreYOLO() na podstawie rozszerzenia pliku, więc plik .onnx lub .engine zachowuje się jak punkt kontrolny i zwraca ten sam obiekt Results.

Python
# Wymaga dodatku onnx: pip install "libreyolo[onnx]"from libreyolo import LibreYOLO model = LibreYOLO("LibreRTDETRr18.pt")path = model.export(format="onnx")print(path)
CLI
libreyolo export model=LibreRTDETRr18.pt format=onnx
Ramki zorientowane
# ONNX i TorchScript są zwalidowanymi formatami docelowymi dla zadania# zorientowanego, w FP32, z partią 1 i stałym płótnem 1024 na 1024.libreyolo export model=LibreRTDETRv2n-obb.pt format=onnx imgsz=1024libreyolo export model=LibreRTDETRv2n-obb.pt format=torchscript imgsz=1024
Użycie wyeksportowanego pliku
from libreyolo import LibreYOLO, SAMPLE_IMAGE # Fabryka wybiera ścieżkę na podstawie rozszerzenia pliku, dlatego# artefakt ładuje się jak punkt kontrolny i zwraca ten sam obiekt Results.model = LibreYOLO("LibreRTDETRr18.onnx")result = model(SAMPLE_IMAGE) print(result.boxes.xyxy)

Punkty kontrolne

Wszystkie opublikowane pliki wag dla tej rodziny.

PlikWejście (px)Licencja wag
Detection
LibreRTDETRr34.pt640apache-2.0
LibreRTDETRr18.pt640apache-2.0
LibreRTDETRr50.pt640apache-2.0
LibreRTDETRr50m.pt640apache-2.0
LibreRTDETRr101.pt640apache-2.0
LibreRTDETRl.pt640apache-2.0
LibreRTDETRx.pt640apache-2.0
LibreRTDETRv2r18.pt640apache-2.0
LibreRTDETRv2r34.pt640apache-2.0
LibreRTDETRv2r50m.pt640apache-2.0
LibreRTDETRv2r50.pt640apache-2.0
LibreRTDETRv2r101.pt640apache-2.0
LibreRTDETRv4s.pt640apache-2.0
LibreRTDETRv4m.pt640apache-2.0
LibreRTDETRv4l.pt640apache-2.0
LibreRTDETRv4x.pt640apache-2.0
Oriented boxes
LibreRTDETRv2n-obb.pt1024apache-2.0
LibreRTDETRv2s-obb.pt1024apache-2.0
LibreRTDETRv2m-obb.pt1024apache-2.0
LibreRTDETRv2l-obb.pt1024apache-2.0
LibreRTDETRv2x-obb.pt1024apache-2.0

Każdy z powyższych plików jest obecnie dostępny w organizacji LibreYOLO i pobierany przy pierwszym użyciu.

Nazwa pliku zawiera wersję, następnie rozmiar i zadanie. Wagi detekcji to LibreRTDETR<size>.pt, LibreRTDETRv2<size>.pt i LibreRTDETRv4<size>.pt, wszystkie w rozdzielczości 640 px. Wagi zorientowane istnieją tylko dla wersji 2 i dodają przyrostek zadania, od LibreRTDETRv2n-obb.pt do LibreRTDETRv2x-obb.pt. Wszystkie działają przy 1024 px i zostały wytrenowane na DOTA v1.0 zamiast COCO.

Licencjonowanie

Sprawdź licencję w repozytorium konkretnych pobieranych wag na Hugging Face. Każdy checkpoint w organizacji LibreYOLO ma licencję, która nie zawsze jest taka sama w całej rodzinie. To repozytorium jest źródłem rozstrzygającym, a poniższe podsumowanie opisuje stan z chwili ostatniej weryfikacji tej strony.

To opis obowiązujących licencji, a nie porada prawna. Jeśli odpowiedź ma znaczenie komercyjne, przeczytaj licencje i zasięgnij własnej porady prawnej.

Oryginalna praca
RT-DETR, RT-DETRv2 and RT-DETRv4, Baidu (versions 1 and 2), Peking University and Tsinghua University (version 4)
Licencja projektu źródłowego
Apache-2.0
Kod źródłowy projektu
github.com/lyuwenyu/RT-DETR
Kod LibreYOLO
MIT
Wagi
Apache-2.0, ponownie opublikowane w huggingface.co/LibreYOLO
Interpretacja
Apache-2.0 is a permissive license, so these weights can be used in commercial and closed-source products. It asks you to keep its license text and attribution notices with any copy of the weights you redistribute, and it grants a patent license. It places no obligation on your own application code, and weights you train yourself on your own data are yours. All three versions carry it, across two repositories and three papers: RT-DETR and RT-DETRv2 at github.com/lyuwenyu/RT-DETR, and RT-DETRv4 at github.com/RT-DETRs/RT-DETRv4, which is cited separately (arXiv 2510.25257). RT-DETRv4 distills from a DINOv3 teacher while training only; the released student weights hold no DINOv3 parameters, and the tensors that fed the teacher are dropped when a checkpoint is converted, so Meta's DINOv3 license does not reach them.

Cytowanie

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

@misc{lv2024rtdetrv2improvedbaselinebagoffreebies,
      title={RT-DETRv2: Improved Baseline with Bag-of-Freebies for Real-Time Detection Transformer}, 
      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},
      url={https://arxiv.org/abs/2407.17140}, 
}

Skopiowano z bloku cytowania autorów w github.com/lyuwenyu/RT-DETR#citation.

Powyższy blok odpowiada cytowaniu publikowanemu przez autorów dla detekcji w wersjach 1 i 2. Wagi zorientowane wersji 2 mają trzecie źródło, repozytorium RiO-DETR na licencji Apache-2.0 pod adresem github.com/RicePasteM/RiO-DETR, z którego pochodzą punkty kontrolne DOTA. Jeśli użyto jednego z nich, należy zacytować ten projekt. Wersja 4 jest osobną publikacją innej grupy i ma własny blok cytowania pod adresem github.com/RT-DETRs/RT-DETRv4. Jeśli użyto punktu kontrolnego wersji 4, należy zacytować tę publikację.

Zweryfikowano z LibreYOLO v1.5.0. Tabele obsługi, checkpointy i wyniki benchmarków na tej stronie są generowane na podstawie wydanej biblioteki i opublikowanych wag, a nie wpisywane ręcznie.