PicoDet

PicoDet to jednoetapowy detektor przeznaczony do procesorów urządzeń mobilnych i brzegowych: backbone ESNet, moduł neck CSP-PAN oraz współdzielona głowica Generalized Focal Loss. LibreYOLO obsługuje go do detekcji.

Zadania
detection
Rozmiary
s, m, l at 320 to 640 px
Instalacja
pip install libreyolo
Poziom obsługi
Obsługiwany, od wersji v. Dodatkowe trenowalne modele: testy CI pozostają zielone, a funkcje są dodawane w miarę możliwości.
Projekt źródłowy
PP-PicoDet, autorzy: PaddlePaddle (Baidu), licencja: Apache-2.0. Publikacja, kod źródłowy
Licencje
Kod: Apache-2.0, wagi: Apache-2.0. Użycie komercyjne

Instalacja

PicoDet nie wymaga niczego poza pakietem podstawowym.

bash
pip install libreyolo

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("LibrePICODETs.pt")result = model(SAMPLE_IMAGE, save=True) for box in result.boxes:    print(box.cls, box.conf, box.xyxy)
CLI
libreyolo predict model=LibrePICODETs.pt source=https://raw.githubusercontent.com/LibreYOLO/libreyolo/release/libreyolo/assets/parkour.jpg save=True

Zwracany obiekt Results jest taki sam dla każdej rodziny, więc zamiana na inny detektor wymaga zmiany jednego wiersza. Parametr conf ustawia próg pewności, a iou próg NMS. Informacje o źródłach, strumieniowaniu i obsłudze wyników znajdziesz w sekcji predykcja.

Warianty

Dostępne są trzy rozmiary, każdy z własną stałą rozdzielczością wejściową: s jest najmniejszy, a l największy. Rozdzielczość rośnie wraz z rozmiarem, więc większe punkty kontrolne nie tylko mają więcej parametrów, lecz również wymagają więcej obliczeń na obraz.

Checkpoint modeluWejście (px)mAP 50-95Parametry (mln)
LibrePICODETs32029.50.99
LibrePICODETm41637.62.15
LibrePICODETl64044.23.31

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.

Trenowanie

Python
from libreyolo import LibreYOLO model = LibreYOLO("LibrePICODETs.pt")model.train(    data="my-dataset.yaml",    epochs=300, batch=16, lr0=0.01,)
CLI
# Warto ustawić imgsz: interfejs CLI domyślnie używa 640, podczas gdy# natywna wartość punktu kontrolnego s to 320.libreyolo train model=LibrePICODETs.pt data=my-dataset.yaml imgsz=320 epochs=300 batch=16 lr0=0.01

Składniki funkcji straty i metoda przypisywania odpowiadają konfiguracji źródłowej: VFL, DFL, GIoU i SimOTA, z ważeniem jakością klasyfikacji oraz dynamicznymi celami VFL opartymi na IoU. Wnioskowanie na tym samym punkcie kontrolnym jest bitowo równoważne z projektem źródłowym.

Zgodnie z docstringiem samej metody train() nie sprawdzono pełnej zbieżności na całym zbiorze danych, działania z wieloma GPU ani żadnej augmentacji poza odbiciem poziomym. Punkt kontrolny s w natywnej rozdzielczości 320 również nie przekraczał niezawodnie progu dokładności LibreYOLO na zestawie testowym obejmującym 30 obrazów i dwie klasy, używanym przez bibliotekę do testowania małych procesów dostrajania. Ten rozmiar lepiej pasuje do pełnej skali COCO.

Metoda train() przyjmuje także argument pretrained, ale jego wartość nie jest nigdzie odczytywana wewnątrz metody: trenowanie zawsze jest kontynuowane z wag, z którymi utworzono model, więc pretrained=False nie inicjalizuje sieci ponownie. Jeśli imgsz nie zostanie ustawione w Pythonie, przyjmowana jest natywna rozdzielczość załadowanego punktu kontrolnego: 320 dla s, 416 dla m i 640 dla l. Interfejs CLI zawsze przekazuje imgsz, domyślnie 640, dlatego należy ustawić ten parametr tak, aby odpowiadał punktowi kontrolnemu.

Przy pozostałych ustawieniach domyślnych trener wykonuje 300 epok z optymalizatorem SGD, lr0=0.01, pędem 0,9, zanikiem wag 4e-5 i jedną epoką rozgrzewki w harmonogramie cosinusowym. Odbicie poziome jest jedyną stosowaną augmentacją.

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("LibrePICODETs.pt")metrics = model.val(data="my-dataset.yaml") print(metrics["metrics/mAP50-95"])print(metrics["metrics/mAP50"])
CLI
libreyolo val model=LibrePICODETs.pt data=my-dataset.yaml

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: brak obsługiDetection to RKNN: obsługiwaneDetection to ncnn: obsługiwaneDetection to TFLite: brak obsługiDetection to CoreML: brak obsługiDetection to Core AI: obsługiwane

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. Obsługiwane jest także uruchamianie grafu w samym środowisku uruchomieniowym bez zainstalowanego LibreYOLO, ale wówczas samodzielnie trzeba zaimplementować przetwarzanie wstępne i końcowe.

Python
from libreyolo import LibreYOLO model = LibreYOLO("LibrePICODETs.pt")model.export(format="onnx", imgsz=320)model.export(format="tensorrt", imgsz=320, half=True)
CLI
libreyolo export model=LibrePICODETs.pt format=onnx imgsz=320libreyolo export model=LibrePICODETs.pt format=tensorrt imgsz=320 half=True
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("LibrePICODETs.onnx")result = model(SAMPLE_IMAGE) print(result.boxes.xyxy)

Punkty kontrolne

Wszystkie opublikowane pliki wag dla tej rodziny.

PlikWejście (px)Licencja wag
Detection
LibrePICODETs.pt320apache-2.0
LibrePICODETm.pt416apache-2.0
LibrePICODETl.pt640apache-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
PP-PicoDet, PaddlePaddle (Baidu)
Licencja projektu źródłowego
Apache-2.0
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. LibreYOLO's port follows Bo396543018/Picodet_Pytorch, a PyTorch re-implementation of PaddleDetection's original PP-PicoDet, and both carry the same Apache-2.0 terms as the paper's authors.

Port w LibreYOLO bazuje na Bo396543018/Picodet_Pytorch, implementacji oryginalnego PP-PicoDet z PaddleDetection w PyTorch, z usuniętym mmcv i dokładnie dopasowanymi wszystkimi aktywacjami. Dzięki temu punkty kontrolne PaddlePaddle przekonwertowane za pomocą procesu Bo ładują się bez dryfu numerycznego. Oba źródła podlegają tym samym warunkom Apache-2.0 co autorzy publikacji.

Cytowanie

@misc{yu2021pppicodet,
      title={PP-PicoDet: A Better Real-Time Object Detector on Mobile Devices},
      author={Guanghua Yu and Qinyao Chang and Wenyu Lv and Chang Xu and Cheng Cui and Wei Ji and Qingqing Dang and Kaipeng Deng and Guanzhong Wang and Yuning Du and Baohua Lai and Qiwen Liu and Xiaoguang Hu and Dianhai Yu and Yanjun Ma},
      year={2021},
      eprint={2111.00902},
      archivePrefix={arXiv},
      primaryClass={cs.CV}
}

Skopiowano z bloku cytowania autorów w github.com/PaddlePaddle/PaddleDetection/blob/release/2.8/configs/picodet/README_en.md#cite-pp-picodet.

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.