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 at 640 px; rtdetrv4: s, m, l, x at 640 px
- Instalacja
pip install libreyolo- 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.
pip install libreyoloDostrajanie adaptera z lora=True jest wyjątkiem i wymaga dodatku lora.
pip install "libreyolo[lora]"Predykcja
Przy pierwszym użyciu wagi są pobierane z Hugging Face i zapisywane w lokalnej pamięci podręcznej.
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)libreyolo predict model=LibreRTDETRr18.pt save=True \ source=https://raw.githubusercontent.com/LibreYOLO/libreyolo/release/libreyolo/assets/parkour.jpgfrom 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))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 osilibreyolo predict model=LibreRTDETRv2n-obb.pt source=aerial.png save=TrueZwracany 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 modelu | Wejście (px) | mAP 50-95 | Parametry (mln) |
|---|---|---|---|
| LibreRTDETRl | 640 | 55.8 | 32.93 |
| LibreRTDETRr101 | 640 | 56.8 | 76.56 |
| LibreRTDETRr18 | 640 | 49.7 | 20.18 |
| LibreRTDETRr34 | 640 | 52.2 | 31.44 |
| LibreRTDETRr50 | 640 | 55.9 | 42.89 |
| LibreRTDETRr50m | 640 | 53.8 | 36.59 |
| LibreRTDETRx | 640 | 57.9 | 67.37 |
| LibreRTDETRv2r101 | 640 | 56.8 | 76.56 |
| LibreRTDETRv2r18 | 640 | 50.8 | 20.18 |
| LibreRTDETRv2r34 | 640 | 53.2 | 31.44 |
| LibreRTDETRv2r50 | 640 | 55.7 | 42.89 |
| LibreRTDETRv2r50m | 640 | 54.8 | 36.59 |
| LibreRTDETRv4l | 640 | 57.8 | 31.24 |
| LibreRTDETRv4m | 640 | 56.5 | 19.59 |
| LibreRTDETRv4s | 640 | 52.8 | 10.32 |
| LibreRTDETRv4x | 640 | 60.0 | 62.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 jednoskalowe 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.
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)libreyolo train model=LibreRTDETRr18.pt data=coco128.yaml \ epochs=50 batch=4 lr0=1e-4# Wymaga dodatku lora: pip install "libreyolo[lora]"from libreyolo import LibreYOLO model = LibreYOLO("LibreRTDETRr18.pt")model.train(data="coco128.yaml", epochs=50, lora=True)libreyolo train model=LibreRTDETRr18.pt data=coco128.yaml \ epochs=50 device=0,1Najważ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.
RT-DETRv4 domyślnie włącza amp=True z amp_dtype="float16". Aby używać FP32, należy przekazać amp=False.
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.
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"])libreyolo val model=LibreRTDETRr18.pt data=coco128.yaml# 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=Truefrom 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
| Zadanie | ONNX | TorchScript | ExecuTorch | TensorRT | OpenVINO | Paddle | MNN | RKNN | ncnn | TFLite | CoreML | Core AI |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Detection | Detection to ONNX: obsługiwane | Detection to TorchScript: obsługiwane | Detection to ExecuTorch: obsługiwane | Detection to TensorRT: obsługiwane | Detection to OpenVINO: obsługiwane | Detection to Paddle: brak obsługi | Detection to MNN: obsługiwane | Detection to RKNN: brak obsługi | Detection to ncnn: brak obsługi | Detection to TFLite: brak obsługi | Detection to CoreML: brak obsługi | Detection to Core AI: obsługiwane |
| Oriented boxes | Oriented boxes to ONNX: obsługiwane | Oriented boxes to TorchScript: obsługiwane | Oriented boxes to ExecuTorch: obsługiwane | Oriented boxes to TensorRT: obsługiwane | Oriented boxes to OpenVINO: obsługiwane | Oriented boxes to Paddle: brak obsługi | Oriented boxes to MNN: brak obsługi | Oriented boxes to RKNN: brak obsługi | Oriented boxes to ncnn: brak obsługi | Oriented boxes to TFLite: brak obsługi | Oriented boxes to CoreML: brak obsługi | Oriented 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.
# Wymaga dodatku onnx: pip install "libreyolo[onnx]"from libreyolo import LibreYOLO model = LibreYOLO("LibreRTDETRr18.pt")path = model.export(format="onnx")print(path)libreyolo export model=LibreRTDETRr18.pt format=onnx# 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=1024from 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)Wejścia i wyjścia ONNX
LibreRTDETR and LibreRTDETRv2
| Tensor | images float32 [batch, 3, height, width] |
|---|---|
| Kolor | RGB |
| Skalowanie | piksel / 255 |
| Normalizacja | brak |
| Zmiana rozmiaru | rozciągnij do szerokości x wysokości (bez wypełnienia, proporcje nie są zachowane), bilinear |
Square input only. Export rejects a non-square imgsz, and height equals width, 640 by default.
LibreRTDETR also exports at other square sizes, such as 512. LibreRTDETRv2 exports at 640 only: any other imgsz fails during export with a tensor size mismatch.
Stretch the whole image to width x height with cv2.resize and INTER_LINEAR on the 8-bit RGB image. There is no letterbox and no padding, so the aspect ratio is not kept.
Then divide by 255. There is no mean or std normalization.
Detection, eksport domyślny
| Wyjście | Kształt | Znaczenie |
|---|---|---|
pred_logits | [batch, queries, nc] | Raw class logits per query, sigmoid not applied. 300 queries and 80 classes for the COCO checkpoints. |
pred_boxes | [batch, queries, 4] | Boxes as cx, cy, w, h, normalized 0 to 1 of the input. |
Przetwarzanie końcowe
- Apply sigmoid to pred_logits.
- Flatten the scores to queries x nc and take the top max_det (300 by default) over all queries x classes. For flat index k, the query is k // nc and the class is k % nc. One query can yield several classes.
- Keep the entries whose score is strictly above the confidence threshold (0.25 by default). There is no NMS, so the IoU threshold is not used.
- Convert the query's box to x1, y1, x2, y2 with x1 = cx - w / 2, y1 = cy - h / 2, x2 = cx + w / 2, y2 = cy + h / 2.
- Map boxes back to the original image: multiply x by the original width and y by the original height. The input was stretched, so no pad offset applies. LibreYOLO does not clip these boxes.
- nms=True is not available for this family: export raises NotImplementedError.
LibreRTDETRv2 OBB
| Tensor | images float32 [batch, 3, height, width] |
|---|---|
| Kolor | RGB |
| Skalowanie | piksel / 255 |
| Normalizacja | brak |
| Zmiana rozmiaru | custom, Pillow bilinear |
Jak odtworzyć dwuliniowe skalowanie Pillow
LibreYOLO skaluje filtrem BILINEAR z Pillow (Image.resize). To nie jest OpenCV INTER_LINEAR ani INTER_AREA: przy zmniejszaniu Pillow poszerza filtr o współczynnik zmniejszenia, a skalowania OpenCV zmieniają detekcje i przesuwają ramki o kilka pikseli. Aby odtworzyć to bez Pillow, przeskaluj jedną oś, zaokrąglij do 8 bitów, potem przeskaluj drugą oś i zaokrąglij ponownie. Dla każdej osi niech s = in_size / out_size oraz f = max(s, 1). Piksel wyjściowy i ma środek c = (i + 0.5) * s i czyta piksele źródłowe j od int(c - f + 0.5) do int(c + f + 0.5) - 1, przycięte do obrazu, każdy z wagą max(0, 1 - |j + 0.5 - c| / f), podzieloną przez sumę wag. Pillow liczy w arytmetyce stałoprzecinkowej i wybiera kolejność osi na podstawie kształtu obrazu, więc wagi zmiennoprzecinkowe mogą się od niego różnić o jeden poziom na kilku pikselach. To nie zmienia wyników w naszych sprawdzeniach.
Square input only, 1024 x 1024. Export rejects a non-square imgsz, and any other square size fails during export with a tensor size mismatch.
Scale by r = min(height / h, width / w) and resize to (round(w * r), round(h * r)). This rounds to the nearest integer instead of truncating. An exact half goes to the even integer, as Python round does.
Paste the resized image in the top-left corner of a canvas filled with 0. The padding is on the right and bottom only.
On the test image, cv2.resize with INTER_LINEAR or INTER_AREA changes the detection count and moves boxes by more than 2 px.
Pillow computes each pass in fixed point: it rounds every weight to an integer with 22 fractional bits (round half away from zero), sums weight x pixel in integers, adds 2^21, shifts right by 22 and clips to 0 to 255.
Use that integer arithmetic for this model. Float weights differ from Pillow by a level on a few pixels, and on the test image that turns one box by 0.2 rad.
Divide the whole canvas by 255 after the resize. There is no mean or std normalization.
Oriented boxes, eksport domyślny
| Wyjście | Kształt | Znaczenie |
|---|---|---|
pred_logits | [batch, queries, nc] | Raw class logits per query, sigmoid not applied. 300 queries and 15 DOTA classes for the released checkpoints. |
pred_boxes | [batch, queries, 5] | Rotated boxes as cx, cy, w, h, a. cx and w are normalized 0 to 1 of the input width, cy and h of the input height, both on the padded canvas. a is the angle divided by pi, 0 to 1. |
Przetwarzanie końcowe
- Apply sigmoid to pred_logits.
- Flatten the scores to queries x nc and take the top max_det (300 by default) over all queries x classes. For flat index k, the query is k // nc and the class is k % nc. One query can yield several classes.
- Keep the entries whose score is strictly above the confidence threshold (0.25 by default). There is no NMS, rotated or axis-aligned, so the IoU threshold is not used.
- Map boxes back to the original image: multiply cx and w by the input width, cy and h by the input height, then divide all four by r. The padding is on the right and bottom, so no offset applies. LibreYOLO does not clip these boxes.
- The angle in radians is a x pi. LibreYOLO reports each box as cx, cy, w, h, angle in original-image pixels and radians.
- The corners are (cx + dx cos(angle) - dy sin(angle), cy + dx sin(angle) + dy cos(angle)) for (dx, dy) = (-w / 2, -h / 2), (w / 2, -h / 2), (w / 2, h / 2), (-w / 2, h / 2). With y pointing down, a positive angle turns the box clockwise on screen.
- LibreYOLO's axis-aligned box for a detection is the smallest box that encloses its four corners.
- nms=True is not available for this family: export raises NotImplementedError.
LibreRTDETRv4
| Tensor | images float32 [batch, 3, height, width] |
|---|---|
| Kolor | RGB |
| Skalowanie | piksel / 255 |
| Normalizacja | brak |
| Zmiana rozmiaru | rozciągnij do szerokości x wysokości (bez wypełnienia, proporcje nie są zachowane), Pillow bilinear |
Jak odtworzyć dwuliniowe skalowanie Pillow
LibreYOLO skaluje filtrem BILINEAR z Pillow (Image.resize). To nie jest OpenCV INTER_LINEAR ani INTER_AREA: przy zmniejszaniu Pillow poszerza filtr o współczynnik zmniejszenia, a skalowania OpenCV zmieniają detekcje i przesuwają ramki o kilka pikseli. Aby odtworzyć to bez Pillow, przeskaluj jedną oś, zaokrąglij do 8 bitów, potem przeskaluj drugą oś i zaokrąglij ponownie. Dla każdej osi niech s = in_size / out_size oraz f = max(s, 1). Piksel wyjściowy i ma środek c = (i + 0.5) * s i czyta piksele źródłowe j od int(c - f + 0.5) do int(c + f + 0.5) - 1, przycięte do obrazu, każdy z wagą max(0, 1 - |j + 0.5 - c| / f), podzieloną przez sumę wag. Pillow liczy w arytmetyce stałoprzecinkowej i wybiera kolejność osi na podstawie kształtu obrazu, więc wagi zmiennoprzecinkowe mogą się od niego różnić o jeden poziom na kilku pikselach. To nie zmienia wyników w naszych sprawdzeniach.
Square input only. Export rejects a non-square imgsz, and height equals width, 640 by default. Other square sizes, such as 512, also export.
Batch size 1 only. The graph declares a dynamic batch axis, but batches of 2 or more fail in 1.7.0.
Divide by 255 after the resize. There is no mean or std normalization.
Detection, eksport domyślny
| Wyjście | Kształt | Znaczenie |
|---|---|---|
pred_logits | [batch, queries, nc] | Raw class logits per query, sigmoid not applied. 300 queries and 80 classes for the COCO checkpoints. |
pred_boxes | [batch, queries, 4] | Boxes as cx, cy, w, h, normalized 0 to 1 of the input. |
Przetwarzanie końcowe
- Apply sigmoid to pred_logits.
- Flatten the scores to queries x nc and take the top max_det (300 by default) over all queries x classes. For flat index k, the query is k // nc and the class is k % nc. One query can yield several classes.
- Keep the entries whose score is strictly above the confidence threshold (0.25 by default). There is no NMS, so the IoU threshold is not used.
- Convert the query's box to x1, y1, x2, y2 with x1 = cx - w / 2, y1 = cy - h / 2, x2 = cx + w / 2, y2 = cy + h / 2.
- Map boxes back to the original image: multiply x by the original width and y by the original height. The input was stretched, so no pad offset applies. LibreYOLO does not clip these boxes.
- nms=True is not available for this family: export raises NotImplementedError.
Aby sprawdzić własną implementację, uruchom ten sam plik w LibreYOLO: LibreYOLO("model.onnx").predict("image.jpg") zwraca wyniki wzorcowe. Zweryfikowano w LibreYOLO 1.7.0.
Punkty kontrolne
Wszystkie opublikowane pliki wag dla tej rodziny.
| Plik | Wejście (px) | Licencja wag |
|---|---|---|
| Detection | ||
| LibreRTDETRr34.pt | 640 | apache-2.0 |
| LibreRTDETRr18.pt | 640 | apache-2.0 |
| LibreRTDETRr50.pt | 640 | apache-2.0 |
| LibreRTDETRr50m.pt | 640 | apache-2.0 |
| LibreRTDETRr101.pt | 640 | apache-2.0 |
| LibreRTDETRl.pt | 640 | apache-2.0 |
| LibreRTDETRx.pt | 640 | apache-2.0 |
| LibreRTDETRv2r18.pt | 640 | apache-2.0 |
| LibreRTDETRv2r34.pt | 640 | apache-2.0 |
| LibreRTDETRv2r50m.pt | 640 | apache-2.0 |
| LibreRTDETRv2r50.pt | 640 | apache-2.0 |
| LibreRTDETRv2r101.pt | 640 | apache-2.0 |
| LibreRTDETRv4s.pt | 640 | apache-2.0 |
| LibreRTDETRv4m.pt | 640 | apache-2.0 |
| LibreRTDETRv4l.pt | 640 | apache-2.0 |
| LibreRTDETRv4x.pt | 640 | apache-2.0 |
| Oriented boxes | ||
| LibreRTDETRv2n-obb.pt | apache-2.0 | |
| LibreRTDETRv2s-obb.pt | 640 | apache-2.0 |
| LibreRTDETRv2m-obb.pt | 640 | apache-2.0 |
| LibreRTDETRv2l-obb.pt | 640 | apache-2.0 |
| LibreRTDETRv2x-obb.pt | 640 | apache-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ę.