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.
pip install libreyoloPredykcja
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("LibrePICODETs.pt")result = model(SAMPLE_IMAGE, save=True) for box in result.boxes: print(box.cls, box.conf, box.xyxy)libreyolo predict model=LibrePICODETs.pt source=https://raw.githubusercontent.com/LibreYOLO/libreyolo/release/libreyolo/assets/parkour.jpg save=TrueZwracany 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 modelu | Wejście (px) | mAP 50-95 | Parametry (mln) |
|---|---|---|---|
| LibrePICODETs | 320 | 29.5 | 0.99 |
| LibrePICODETm | 416 | 37.6 | 2.15 |
| LibrePICODETl | 640 | 44.2 | 3.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
from libreyolo import LibreYOLO model = LibreYOLO("LibrePICODETs.pt")model.train( data="my-dataset.yaml", epochs=300, batch=16, lr0=0.01,)# 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.01Skł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.
from libreyolo import LibreYOLO model = LibreYOLO("LibrePICODETs.pt")metrics = model.val(data="my-dataset.yaml") print(metrics["metrics/mAP50-95"])print(metrics["metrics/mAP50"])libreyolo val model=LibrePICODETs.pt data=my-dataset.yamlEksport
| 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: brak obsługi | Detection to RKNN: obsługiwane | Detection to ncnn: obsługiwane | Detection to TFLite: brak obsługi | Detection to CoreML: brak obsługi | Detection 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.
from libreyolo import LibreYOLO model = LibreYOLO("LibrePICODETs.pt")model.export(format="onnx", imgsz=320)model.export(format="tensorrt", imgsz=320, half=True)libreyolo export model=LibrePICODETs.pt format=onnx imgsz=320libreyolo export model=LibrePICODETs.pt format=tensorrt imgsz=320 half=Truefrom 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.
| Plik | Wejście (px) | Licencja wag |
|---|---|---|
| Detection | ||
| LibrePICODETs.pt | 320 | apache-2.0 |
| LibrePICODETm.pt | 416 | apache-2.0 |
| LibrePICODETl.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.
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 źródłowy projektu
- github.com/PaddlePaddle/PaddleDetection
- 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.