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.
pip install libreyoloDostrajanie adaptera za pomocą lora=True jest wyjątkiem i wymaga dodatkowego lora.
pip install "libreyolo[lora]"Predykcja
Wagi są pobierane z Hugging Face przy pierwszym użyciu i są przechowywane w pamięci podręcznej lokalnie.
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)libreyolo predict model=LibreDEIMn.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 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 modelu | Wejście (px) | mAP 50-95 | Parametry (mln) |
|---|---|---|---|
| LibreDEIMl | 640 | 57.8 | 31.24 |
| LibreDEIMm | 640 | 55.4 | 19.59 |
| LibreDEIMn | 640 | 46.8 | 3.78 |
| LibreDEIMs | 640 | 52.1 | 10.32 |
| LibreDEIMx | 640 | 59.6 | 62.62 |
| LibreDEIMv2atto | 320 | 27.5 | 0.51 |
| LibreDEIMv2femto | 416 | 34.5 | 0.98 |
| LibreDEIMv2l | 640 | 58.6 | 32.55 |
| LibreDEIMv2m | 640 | 56.0 | 18.36 |
| LibreDEIMv2n | 640 | 46.7 | 3.6 |
| LibreDEIMv2pico | 640 | 42.2 | 1.54 |
| LibreDEIMv2s | 640 | 53.0 | 9.78 |
| LibreDEIMv2x | 640 | 61.3 | 51.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.
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)libreyolo train model=LibreDEIMn.pt data=coco128.yaml \ epochs=50 batch=8 lr0=1e-4from 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)# Wymaga dodatkowego lora: pip install "libreyolo[lora]"from libreyolo import LibreYOLO model = LibreYOLO("LibreDEIMn.pt")model.train(data="coco128.yaml", epochs=50, lora=True)libreyolo train model=LibreDEIMn.pt data=coco128.yaml \ epochs=50 device=0,1Dla 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ś.
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"])libreyolo val model=LibreDEIMn.pt data=coco128.yaml# 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=TrueWiersze 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
| 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: brak obsługi | Detection to TensorRT: obsługiwane | Detection to OpenVINO: obsługiwane | Detection to Paddle: obsługiwane | 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 |
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.
# Wymaga dodatkowego onnx: pip install "libreyolo[onnx]"from libreyolo import LibreYOLO model = LibreYOLO("LibreDEIMn.pt")path = model.export(format="onnx")print(path)libreyolo export model=LibreDEIMn.pt format=onnxfrom 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.
| Plik | Wejście (px) | Licencja wag |
|---|---|---|
| Detection | ||
| LibreDEIMn.pt | 640 | apache-2.0 |
| LibreDEIMs.pt | 640 | apache-2.0 |
| LibreDEIMm.pt | 640 | apache-2.0 |
| LibreDEIMl.pt | 640 | apache-2.0 |
| LibreDEIMx.pt | 640 | apache-2.0 |
| LibreDEIMv2n.pt | 640 | apache-2.0 |
| LibreDEIMv2s.pt | 640 | other |
| LibreDEIMv2m.pt | 640 | other |
| LibreDEIMv2l.pt | 640 | other |
| LibreDEIMv2x.pt | 640 | other |
| LibreDEIMv2atto.pt | apache-2.0 | |
| LibreDEIMv2femto.pt | apache-2.0 | |
| LibreDEIMv2pico.pt | apache-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).
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.