DEIM

Transformator detekcji trenowany z gęstym dopasowaniem jeden-do-jednego, który zbiega w znacznie mniejszej liczbie epok niż przepisy DETR, na których się opiera. LibreYOLO zawiera dwie jego wersje, rozróżniane przez checkpoint, który wczytujesz.

Zadania
detection
Rozmiary
deim: n, s, m, l, x at 640 px
Instalacja
pip install libreyolo
Poziom obsługi
Główny, od wersji v1.2.0. Główne trenowalne detektory: otrzymują funkcje po modelach flagowych w tej samej fali wydań.
Projekt źródłowy
DEIM and DEIMv2, autorzy: Intellindust AI Lab, licencja: Apache-2.0; the DEIMv2 DINOv3 backbone adds Meta's DINOv3 License. Publikacja, kod źródłowy
Licencje
Kod: Apache-2.0, wagi: Apache-2.0; the DEIMv2 DINOv3 backbone adds Meta's DINOv3 License. Użycie komercyjne

Instalacja

Żadna z wersji nie potrzebuje opcjonalnego dodatku. Wszystko, co importują, jest w podstawowej instalacji.

bash
pip install libreyolo

Dostrajanie adaptera za pomocą lora=True jest wyjątkiem i wymaga dodatkowego lora.

bash
pip install "libreyolo[lora]"

Predykcja

Wagi są pobierane z Hugging Face przy pierwszym użyciu i są przechowywane w pamięci podręcznej lokalnie.

Python
from libreyolo import LibreYOLO, SAMPLE_IMAGE model = LibreYOLO("LibreDEIMn.pt")result = model(SAMPLE_IMAGE, save=True) for box in result.boxes:    print(box.cls, box.conf, box.xyxy)
CLI
libreyolo predict model=LibreDEIMn.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 kieruje na# checkpoint, więc oba ładują się w ten sam sposób.model = LibreYOLO("LibreDEIMv2pico.pt") # Dowolne źródło akceptowane przez bibliotekę: plik, folder, URL, indeks kamery internetowej,# Strumień RTSP lub lista .streamsfor result in model.predict("clip.mp4", stream=True, save=True):    print(len(result.boxes))

Zwrócony obiekt Results jest tym, który zwraca każda rodzina, więc wymiana na inny detektor to zmiana w jednej linii. conf i max_det filtrują dekodowanie top-k dla zapytań i klas; nie ma kroku NMS do regulacji, a iou jest akceptowany, ale nieużywany. Zobacz prediction dla źródeł, streaming i obsługi wyników.

Warianty

Wersja 1 oferuje pięć rozmiarów, wszystkie przy tym samym rozmiarze wejściowym. Wersja 2 zachowuje te pięć nazw i dodaje trzy mniejsze, atto, femto i pico, z których dwa pierwsze są natywne przy mniejszym rozmiarze wejściowym niż pozostałe. W obu wersjach istnieje więc pięć kodów rozmiarów i oznaczają różne modele; wersja jest zapisana w nazwie pliku checkpointu.

Checkpoint modeluWejście (px)mAP 50-95Parametry (mln)
LibreDEIMl64057.831.24
LibreDEIMm64055.419.59
LibreDEIMn64046.83.78
LibreDEIMs64052.110.32
LibreDEIMx64059.662.62
LibreDEIMv2atto32027.50.51
LibreDEIMv2femto41634.50.98
LibreDEIMv2l64058.632.55
LibreDEIMv2m64056.018.36
LibreDEIMv2n64046.73.6
LibreDEIMv2pico64042.21.54
LibreDEIMv2s64053.09.78
LibreDEIMv2x64061.351.21

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 1 zachowuje architekturę D-FINE i zastępuje jej cel klasyfikacji funkcją straty uwzględniającą możliwość dopasowania z gęstego przepisu jeden-do-jednego. Obie rodziny współdzielą więc niemal wszystkie klucze słownika stanu, a odróżniają je metadane checkpointu. Wersja 2 zachowuje ten kontrakt trenowania i łączy różne backbone: HGNetv2 w rozmiarach mniejszych niż s oraz transformer wizyjny DINOv3 z adapterem dostrajania przestrzennego w rozmiarze s i większych. Ten backbone powoduje objęcie czterech checkpointów drugą licencją, dlatego przed ich wdrożeniem należy przeczytać sekcję Licencjonowanie.

Trenowanie

Trenowanie zaczyna się od opublikowanego checkpointu. pretrained nigdy nie dociera do trenera: wersja 1 ostrzega, że klucz jest nieznany i go ignoruje, wersja 2 go usuwa. Żadna z nich nie daje losowo zainicjowanego modelu.

Python
from libreyolo import LibreYOLO model = LibreYOLO("LibreDEIMn.pt") # coco128.yaml pobiera próbkę 128 obrazów przy pierwszym użyciu. Punkt `data`# na własnym zbiorze danych YAML do rzeczywistego uruchomienia.model.train(data="coco128.yaml", epochs=50, batch=8, lr0=1e-4)
CLI
libreyolo train model=LibreDEIMn.pt data=coco128.yaml \  epochs=50 batch=8 lr0=1e-4
DEIMv2
from libreyolo import LibreYOLO # Jeżeli nie zostaną ustawione, epochs, batch, imgsz i lr0 pochodzą z wydanej wersji# przepis na rozmiar, który został załadowany.model = LibreYOLO("LibreDEIMv2pico.pt")model.train(data="coco128.yaml", epochs=50)
LoRA
# Wymaga dodatkowego lora: pip install "libreyolo[lora]"from libreyolo import LibreYOLO model = LibreYOLO("LibreDEIMn.pt")model.train(data="coco128.yaml", epochs=50, lora=True)
Multi-GPU
libreyolo train model=LibreDEIMn.pt data=coco128.yaml \  epochs=50 device=0,1

Dla wersji 1 należy samodzielnie podać lr0. Sygnatura metody train() w Pythonie ma wartość domyślną 4e-4, pochodzącą z opublikowanego przepisu COCO. Konfiguracja trenowania rodziny ustawia natomiast 1e-4 jako domyślną wartość dostrajania i właśnie tę niższą wartość wybiera CLI, gdy argumentu nie podano. Konfiguracja rejestruje wynik pomiaru uzasadniającego ten wybór: przy rozmiarach batcha używanych podczas dostrajania na małych zbiorach danych współczynnik z przepisu COCO wyraźnie pogarszał transfer.

Wersja 2 sama rozwiązuje te ustawienia domyślne. Pozostawienie epochs, batch, imgsz i lr0 nieustawionych powoduje, że program odczytuje każdy z nich z opublikowanego przepisu dla wczytanego rozmiaru, dzięki czemu małe rozmiary trenują w swojej własnej rozdzielczości wejściowej bez konieczności jej podawania, a wartość, którą podasz, nadpisuje przepis. imgsz to argument, który ogranicza: musi być dodatnią wielokrotnością 32, a wersja 2 zgłasza błąd przed rozpoczęciem działania w przeciwnym razie.

Zobacz trenowanie dotyczące zbiorów danych, augmentacji, multi-GPU i loggerów.

Walidacja

val() zwraca słownik kluczy metrics/ obejmujących precyzję, czułość, mAP 50 oraz mAP 50-95, mierzone względem dowolnego zbioru danych w formacie, na którym trenowałeś.

Python
from libreyolo import LibreYOLO model = LibreYOLO("LibreDEIMn.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=LibreDEIMn.pt data=coco128.yaml
Przeciwko COCO
# coco-val-only.yaml pobiera 5000 obrazów val2017 i pomija# zbiór treningowy. Zawiera osadzony skrypt pobierania, więc wymaga# wyraźna zgoda, chyba że zbiór danych jest już lokalny.libreyolo val model=LibreDEIMn.pt data=coco-val-only.yaml \  allow_download_scripts=True

Wiersze w powyższej tabeli benchmarkowej pochodzą z zestawu testowego LibreYOLO; nota pod tą tabelą zapisuje, który zbiór danych je wygenerował i łączy z zapisami uruchomień.

Eksport

ZadanieONNXTorchScriptExecuTorchTensorRTOpenVINOPaddleMNNRKNNncnnTFLiteCoreMLCore AI
DetectionDetection to ONNX: obsługiwaneDetection to TorchScript: obsługiwaneDetection to ExecuTorch: brak obsługiDetection to TensorRT: obsługiwaneDetection to OpenVINO: obsługiwaneDetection to Paddle: obsługiwaneDetection 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

Macierz obejmuje obie wersje jako jedną stronę: tam, gdzie nie zgadzają się co do formatu, komórka pokazuje słabszą z obu, więc nic tutaj nie jest przesadnie promowane dla którejkolwiek wersji, którą załadujesz.

Eksportowany artefakt ładuje się ponownie przez LibreYOLO() na swoim rozszerzeniu pliku, więc plik .onnx lub .engine działa jak checkpoint i zwraca ten sam Results.

Python
# Wymaga dodatkowego onnx: pip install "libreyolo[onnx]"from libreyolo import LibreYOLO model = LibreYOLO("LibreDEIMn.pt")path = model.export(format="onnx")print(path)
CLI
libreyolo export model=LibreDEIMn.pt format=onnx
Użyj wyeksportowanego pliku
from libreyolo import LibreYOLO, SAMPLE_IMAGE # Fabryka kieruje na podstawie sufiksu pliku, więc eksportowany artefakt się ładuje# jak każdy checkpoint i zwraca ten sam obiekt Results.model = LibreYOLO("LibreDEIMn.onnx")result = model(SAMPLE_IMAGE) print(result.boxes.xyxy)

Checkpointy

Wszystkie opublikowane pliki wag dla tej rodziny.

PlikWejście (px)Licencja wag
Detection
LibreDEIMn.pt640apache-2.0
LibreDEIMs.pt640apache-2.0
LibreDEIMm.pt640apache-2.0
LibreDEIMl.pt640apache-2.0
LibreDEIMx.pt640apache-2.0
LibreDEIMv2n.pt640apache-2.0
LibreDEIMv2s.pt640other
LibreDEIMv2m.pt640other
LibreDEIMv2l.pt640other
LibreDEIMv2x.pt640other
LibreDEIMv2atto.ptapache-2.0
LibreDEIMv2femto.ptapache-2.0
LibreDEIMv2pico.ptapache-2.0

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

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
DEIM and DEIMv2, Intellindust AI Lab
Licencja projektu źródłowego
Apache-2.0; the DEIMv2 DINOv3 backbone adds Meta's DINOv3 License
Kod źródłowy projektu
github.com/Intellindust-AI-Lab/DEIM
Kod LibreYOLO
MIT
Wagi
Apache-2.0; the DEIMv2 DINOv3 backbone adds Meta's DINOv3 License, 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. DEIM is Apache-2.0 throughout, and so are the DEIMv2 sizes below S, which use an HGNetv2 backbone. The DEIMv2 S, M, L and X sizes take their backbone from DINOv3, so both their weights and the backbone source vendored in LibreYOLO are additionally governed by Meta's DINOv3 License Agreement, which is not an OSI license: redistribution has to carry the agreement with it, and it forbids use for military or warfare purposes, weapons development, espionage, nuclear industries and anything subject to ITAR. Their Hugging Face repositories declare both licenses, and DEIMv2 is also cited separately (arXiv 2509.20787).
Cztery rozmiary DEIMv2 od S wzwyż korzystają z backbone DINOv3, dlatego ich repozytoria wag są objęte zarówno licencją Apache-2.0, jak i licencją DINOv3 firmy Meta. LibreYOLO udostępnia kod źródłowy backbone DINOv3 na tych samych warunkach. Pozostała część rodziny, w tym wszystkie rozmiary DEIMv2 mniejsze niż S, jest objęta wyłącznie licencją Apache-2.0.

Cytowanie

@misc{huang2024deim,
      title={DEIM: DETR with Improved Matching for Fast Convergence},
      author={Shihua, Huang and Zhichao, Lu and Xiaodong, Cun and Yongjun, Yu and Xiao, Zhou and Xi, Shen},
      booktitle={Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition},
      year={2025},
}

Skopiowano z bloku cytowania autorów w github.com/Intellindust-AI-Lab/DEIM#5-citation.

DEIMv2 to odrębny artykuł i ma własny blok cytowań na github.com/Intellindust-AI-Lab/DEIMv2; cytuj go, jeśli używałeś checkpointu wersji 2.

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.