Dome-DETR
Specjalista od bardzo małych obiektów zbudowany na D-FINE: głowica gęstości decyduje, gdzie znajdują się obiekty, uwaga enkodera jest ograniczona do okien, które je zawierają, a liczba zapytań jest ustalana na podstawie tej gęstości zamiast być stała. LibreYOLO obsługuje to dla detekcji.
- Zadania
- detection
- Rozmiary
- s, m, l at 800 px
- Instalacja
pip install libreyolo- Poziom obsługi
- Obsługiwany, od wersji v1.5.0. Dodatkowe trenowalne modele: testy CI pozostają zielone, a funkcje są dodawane w miarę możliwości.
- Projekt źródłowy
- Dome-DETR, autorzy: The Dome-DETR Authors, licencja: unclear, not redistributed. Publikacja, kod źródłowy
- Licencje
- Kod: Apache-2.0, wagi: unclear, not redistributed. Użycie komercyjne
Instalacja
Dome-DETR nie potrzebuje żadnych dodatkowych opcji. Wszystko, co importuje, znajduje się w instalacji bazowej.
pip install libreyoloPredykcja
Nie ma nic do automatycznego pobrania. LibreYOLO nie udostępnia tych wag, więc przebieg jest następujący: pobierz checkpoint upstream, przekonwertuj go raz, a następnie załaduj przekonwertowany plik za pomocą ścieżki. Licencja wyjaśnia dlaczego.
# Żadne wagi Dome-DETR nie są hostowane przez LibreYOLO, więc checkpoint to# pobrano z repozytorium upstream i przetworzono raz.hf download RicePasteM/Dome-DETR --include 'best_ckpts_dome_2026/*' \ --local-dir dome-ckpts python weights/convert_domedetr_weights.py \ dome-ckpts/best_ckpts_dome_2026/dome-s-visdrone_converted.pth \ LibreDOMEDETRs-visdrone.pt --size s --variant visdronefrom libreyolo import LibreYOLO # Lokalna ścieżka, nie sama nazwa: nic nie jest pobierane dla tej rodziny.model = LibreYOLO("LibreDOMEDETRs-visdrone.pt")result = model("drone-frame.jpg", save=True) for box in result.boxes: print(result.names[int(box.cls)], box.conf, box.xyxy)libreyolo predict model=LibreDOMEDETRs-visdrone.pt source=drone-frame.jpg save=Truefrom libreyolo import LibreYOLO # Nie ma checkpointu COCO, więc klasy pochodzą z zbioru danych# Wagi były trenowane i są odczytywane z metadanych checkpointu.aitod = LibreYOLO("LibreDOMEDETRs-aitod.pt")print(aitod.model.names) # 9 klas AI-TOD-V2 visdrone = LibreYOLO("LibreDOMEDETRs-visdrone.pt")print(visdrone.model.names) # 12 klas VisDroneZwrócony obiekt Results jest tym, który zwraca każda rodzina, więc zamiana na inny detektor to zmiana jednej linii. conf i max_det filtrują wybór zapytania; iou jest akceptowany dla zgodności z API, ale nie ma efektu, ponieważ dekoder jest przewidującym zestaw, który nie ma kroku NMS. Zobacz predykcja dla źródeł, streaming i obsługi wyników.
Dwie funkcje są wyłączone dla tej rodziny. Przechwytywanie grafu CUDA jest wyłączone, ponieważ liczba zapytań PAQI zależy od danych, a przekaz w przód zmienia kształt w zależności od obrazu, co dokładnie jest tym, czego przechwytywanie grafu nie może obsłużyć. Augmentacja w czasie testu działa przy jednym ustalonym kwadratowym rozmiarze, więc żądanie wieloskalowe TTA nie ma efektu.
Warianty
Trzy rozmiary, s, m i l, wszystkie w wymiarach 800 na 800. Rozmiar wybiera backbone, a zbiór danych, z którego pochodzą wagi, wybiera głębokość dekodera i budżet zapytań, więc sam kod rozmiaru nie identyfikuje wykresu. Wagi AI-TOD-V2 wybierają między 300 a 1500 zapytań na obraz, wagi VisDrone między 250 a 500, a duży model uruchamia cztery warstwy dekodera na AI-TOD-V2 w porównaniu do sześciu na VisDrone.
Dome-DETR to D-FINE z trzema dodatkami. DeFE przewiduje mapę gęstości. MWAS używa tej mapy, aby ograniczyć uwagę enkodera do okien, które faktycznie zawierają obiekty, zamiast zwracać uwagę wszędzie. PAQI dobiera rozmiar zestawu zapytań z tej samej gęstości zamiast dekodować stałe 300. Zysk koncentruje się tam, gdzie obiekty są najmniejsze, i zawęża się w miarę ich wzrostu: własna ablacja upstream przesuwa AP na bardzo małych obiektach z 14,0 do 17,8, podczas gdy AP na średnich obiektach przesuwa się tylko z 45,4 do 46,4. Traktuj to jako uzupełnienie do D-FINE dla obrazów lotniczych, z dronów i zdalnego wykrywania, a nie jako jego zamiennik.
LibreYOLO nie publikuje żadnych wierszy referencyjnych dla tej rodziny, ponieważ nie publikuje żadnych checkpointów do porównania.
Trenowanie
Dome-DETR jest możliwy do trenowania. Trening uruchamia pełny cel upstream: straty D-FINE plus nadzór nad gęstością i liczbą DeFE, z zapytaniami wypełniającymi wyłączonymi z terminów klasyfikacji oraz maskami uwagi do odszumiania na obraz, tak aby wypełnienie jednego obrazu nie przenikało do innego.
from libreyolo import LibreYOLO model = LibreYOLO("LibreDOMEDETRs-visdrone.pt")model.train(data="my-dataset.yaml", epochs=160, imgsz=800, batch=4, lr0=2e-4)libreyolo train model=LibreDOMEDETRs-visdrone.pt data=my-dataset.yaml \ epochs=160 imgsz=800 batch=4 lr0=2e-4libreyolo train model=LibreDOMEDETRs-visdrone.pt data=my-dataset.yaml \ epochs=160 device=0,1 batch=4Konfiguracja dziedziczy przepis D-FINE i zmienia to, czego wymaga MWAS. imgsz wynosi 800, lr0 to 2e-4, grupa parametrów backbone jest skalowana przez backbone_lr_mult=0.1, a multi_scale jest wyłączone, ponieważ okna MWAS potrzebują, aby wejście pozostało podzielne przez krok 8. batch domyślnie wynosi 4, a nie 16 jak w D-FINE: PAQI dopełnia każdą partię do najszerszego elementu, tak aby pamięć śledziła najbardziej zajętą grafikę w partii, a nie przeciętną.
Jedno szczere zastrzeżenie dotyczące dokładności. Pociągi w górę trenują przez 160 epok na MultiStepLR(milestones=[80, 120], gamma=0.8), podczas gdy te domyślne ustawienia uruchamiają harmonogram flat-cosine D-FINE przez te same 160 epok. Ten harmonogram nie został tutaj odtworzony, a liczby z AP z artykułu również nie zostały odtworzone, więc należy je traktować jako wyniki autorów upstream, a nie jako obietnicę, że ta receptura je osiąga. Dostarcz harmonogram upstream, jeśli celem jest dopasowanie się do artykułu.
Zobacz trenowanie dotyczące zbiorów danych, augmentacji, multi-GPU i loggerów.
Walidacja
val() zwraca słownik kluczowany nazwą metryki i drukuje wyniki dla każdej klasy, gdy verbose jest włączony.
from libreyolo import LibreYOLO model = LibreYOLO("LibreDOMEDETRs-visdrone.pt")metrics = model.val(data="my-dataset.yaml") print(metrics["metrics/mAP50-95"])print(metrics["metrics/mAP50"])libreyolo val model=LibreDOMEDETRs-visdrone.pt data=my-dataset.yamlWalidacja odbywa się na twoim własnym zbiorze danych w formacie, na którym trenowałeś. Bramka walidacyjna COCO biblioteki nie ma tutaj zastosowania, ponieważ nie istnieje żaden checkpoint COCO dla tej rodziny, względem którego można by dokonać pomiaru.
Eksport
Eksport nie jest obsługiwany dla żadnego formatu, a jego żądanie powoduje błąd zamiast wygenerowania pliku.
Powodem jest PAQI. Decyduje on o liczbie zapytań na obraz, na podstawie propozycji przefiltrowanych pod względem gęstości oraz zachłannej pętli tłumienia adaptacyjnego do gęstości, więc długość wyjścia dekodera jest cechą danych wejściowych, a nie samego grafu. Śledzenie wprasowuje w to liczbę, którą wygenerował obraz śledzenia, co powoduje artefakt, który cicho zwraca błędne wyniki dla każdego innego obrazu. Formulacja statyczna musiałaby rozwijać to tłumienie dla wszystkich 250 do 1500 kandydatów, a sprowadzenie do stałego top-k usunęłoby dokładnie ten malutki obiekt recall, dla którego rodzina istnieje. Jeśli potrzebujesz eksportowalnego transformera detekcji, D-FINE jest tym, do którego warto sięgnąć.
Checkpointy
Nie ma żadnych do wymienienia. LibreYOLO nie publikuje żadnych wag Dome-DETR, a żadna nazwa w formie LibreDOMEDETR<size>-<dataset>.pt nie prowadzi do pobrania.
Upstream publikuje sześć checkpointów, s, m i l dla każdego z dwóch zbiorów danych: AI-TOD-V2 z 9 klasami i VisDrone z 12. Nie ma checkpointu COCO, więc kanoniczna nazwa pliku zawsze zawiera sufiks zbioru danych, a nazwy klas znajdują się w metadanych checkpointu, zamiast pochodzić z stałej rodziny. Próba użycia samego LibreDOMEDETRs.pt powoduje natychmiastowy błąd z komunikatem podającym dwie rzeczywiste nazwy plików i polecenie konwersji, zamiast próby pobrania, która skutkowałaby błędem 404.
weights/convert_domedetr_weights.py wykonuje konwersję. Odbudowuje graf LibreYOLO, ładuje do niego tensory upstream i odmawia zapisania czegokolwiek, jeśli brakuje choćby jednego klucza, jest on nieoczekiwany lub ma niewłaściwy kształt, więc przekonwertowany plik jest albo dokładnie taki sam, albo nie istnieje. Wskaż go na upstream .pth i przekaż rozmiar oraz wariant:
python weights/convert_domedetr_weights.py \
dome-ckpts/best_ckpts_dome_2026/aitod-s-best.pth \
LibreDOMEDETRs-aitod.pt --size s --variant aitodPod kątem wierności numerycznej, weights/parity_domedetr.py porównuje ten port z implementacją upstream we wszystkich sześciu punktach kontrolnych i raportuje max_abs_diff == 0.0 zarówno na pred_logits, jak i pred_boxes, po uprzednim sprawdzeniu bit po bicie maski okna MWAS, a osobno porównuje każdy termin straty z kryterium upstream. Bądźmy jasni: jest to ręczny skrypt, który wymaga upstream checkout i opublikowanych checkpointów na dysku, uruchamiany ręcznie. Nie jest częścią ciągłej integracji i żaden job CI go nie odtwarza.
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
- Dome-DETR, The Dome-DETR Authors
- Licencja projektu źródłowego
- unclear, not redistributed
- Kod źródłowy projektu
- github.com/RicePasteM/Dome-DETR
- Kod LibreYOLO
- MIT
- Wagi
- unclear, not redistributed, rozpowszechniane przez autorów. LibreYOLO ich nie hostuje ani nie udostępnia kopii.
- Interpretacja
- The code and the weights part company here. The upstream repository is Apache-2.0, permissive and safe for commercial and closed-source use, and LibreYOLO's own port is MIT, so nothing restricts the architecture or the training code. The weights are the unresolved part: the upstream model card carries no license field in its metadata, and its prose states that the project is Apache-2.0 while also restricting the material to academic research purposes only. Those two readings do not agree, and the stricter one is not a grant to redistribute, so LibreYOLO mirrors nothing for this family and hosts no checkpoint. Download the six upstream checkpoints yourself and convert them with weights/convert_domedetr_weights.py, and read the upstream terms before using them for anything commercial. Weights you train yourself on your own data derive from no upstream checkpoint and are yours.
Wagi są powodem, dla którego ta rodzina nie jest lustrzana. Karta modelu upstream nie zawiera pola licencji w swojej metadanej, a jej opis stwierdza, że projekt to Apache-2.0, jednocześnie ograniczając materiały wyłącznie do celów badań akademickich. Te dwa odczyty się nie zgadzają, a ten bardziej restrykcyjny nie jest przyznaniem prawa do redystrybucji, więc LibreYOLO linkuje repozytorium upstream zamiast kopiować pliki, oczekując na wyjaśnienie. Ta sama logika obowiązuje w przypadku YOLO-NAS tutaj.
Kod to osobne pytanie i jaśniejsze. Repozytorium upstream to Apache-2.0, port LibreYOLO to MIT, a wagi, które trenujesz samodzielnie na swoich danych, należą do ciebie.
Cytowanie
Dome-DETR został opublikowany w ACM Multimedia 2025 jako „Dome-DETR: DETR z manipulacją cechowej kwerendy zorientowanej na gęstość dla efektywnego wykrywania małych obiektów”. Preprint jest dostępny na arxiv.org/abs/2505.05741. Autorzy nie publikują żadnego bloku BibTeX w swoim repozytorium, więc żaden z nich nie jest tu odtworzony, a raczej złożony ręcznie.