PIDNet

Trójgałęziowa sieć segmentacji semantycznej, która dodaje dedykowaną gałąź granic do projektu inspirowanego regulatorem proporcjonalno-całkująco-różniczkującym, z myślą o inferencji czasu rzeczywistego. LibreYOLO udostępnia ją wyłącznie do segmentacji semantycznej.

Zadania
semantic
Rozmiary
s, m, l at 1024 px
Instalacja
pip install libreyolo
Poziom obsługi
Tylko inferencja, od wersji v. Tylko predykcja, walidacja i eksport. Funkcje trenowania nie mają zastosowania.
Projekt źródłowy
PIDNet, autorzy: Jiacong Xu, licencja: MIT. Publikacja, kod źródłowy
Licencje
Kod: MIT, wagi: MIT. Użycie komercyjne

Instalacja

PIDNet nie wymaga żadnego opcjonalnego dodatku. Wszystkie importowane elementy znajdują się w instalacji podstawowej.

bash
pip install libreyolo

Predykcja

Przy pierwszym użyciu wagi są pobierane z Hugging Face i zapisywane w lokalnej pamięci podręcznej. Sufiks nazwy pliku -sem jest wymagany dla tej rodziny.

Python
from libreyolo import LibreYOLO, SAMPLE_IMAGE model = LibreYOLO("LibrePIDNets-sem.pt")result = model(SAMPLE_IMAGE, save=True) mask = result.semantic_maskprint(mask.data.shape)   # (H, W), identyfikatory klasprint(mask.classes)      # posortowane identyfikatory klas obecnych na obrazie
CLI
libreyolo predict model=LibrePIDNets-sem.pt source=https://raw.githubusercontent.com/LibreYOLO/libreyolo/release/libreyolo/assets/parkour.jpg save=True

Segmentacja semantyczna zwraca jeden identyfikator klasy na piksel, a nie ramki. Dlatego result.semantic_mask zawiera tablicę (H, W) w polu .data oraz listę identyfikatorów klas obecnych na obrazie w .classes. Argumenty conf, iou i max_det są przyjmowane dla zgodności API, ale nie mają wpływu na wynik. Model przypisuje klasę każdemu pikselowi przez argmax, bez progu pewności ani etapu NMS. Więcej informacji o źródłach, streamingu i obsłudze wyników zawiera strona predykcji.

Warianty

Dostępne są trzy rozmiary, wszystkie ze stałym wejściem 1024 px. Opublikowane checkpointy są konwersjami oficjalnych wag PIDNet wytrenowanych na Cityscapes z 19 klasami.

LibreYOLO nie trenuje PIDNet: train() zgłasza NotImplementedError dla tej rodziny, którą powyższy poziom obsługi oznacza jako przeznaczoną wyłącznie do inferencji.

Walidacja

val() zwraca metrics/mIoU i metrics/pixel_accuracy, zmierzone względem dowolnego zbioru danych w formacie użytym do trenowania.

Python
from libreyolo import LibreYOLO model = LibreYOLO("LibrePIDNets-sem.pt")metrics = model.val(data="my-dataset.yaml") print(metrics["metrics/mIoU"])print(metrics["metrics/pixel_accuracy"])
CLI
libreyolo val model=LibrePIDNets-sem.pt data=my-dataset.yaml

Eksport

ZadanieONNXTorchScriptExecuTorchTensorRTOpenVINOPaddleMNNRKNNncnnTFLiteCoreMLCore AI
semanticsemantic to ONNX: obsługiwanesemantic to TorchScript: obsługiwanesemantic to ExecuTorch: obsługiwanesemantic to TensorRT: obsługiwanesemantic to OpenVINO: obsługiwanesemantic to Paddle: brak obsługisemantic to MNN: brak obsługisemantic to RKNN: brak obsługisemantic to ncnn: obsługiwanesemantic to TFLite: obsługiwanesemantic to CoreML: brak obsługisemantic 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 checkpoint i zwraca ten sam obiekt Results. Strona eksportu wymienia argumenty obsługiwane przez każdy format.

Python
from libreyolo import LibreYOLO model = LibreYOLO("LibrePIDNets-sem.pt")model.export(format="onnx")model.export(format="tensorrt", half=True)
CLI
libreyolo export model=LibrePIDNets-sem.pt format=onnxlibreyolo export model=LibrePIDNets-sem.pt format=tensorrt half=True
Użycie wyeksportowanego pliku
from libreyolo import LibreYOLO, SAMPLE_IMAGE # Fabryka wybiera ścieżkę na podstawie rozszerzenia pliku, więc wyeksportowany artefakt# ładuje się jak każdy checkpoint i zwraca ten sam obiekt Results.model = LibreYOLO("LibrePIDNets-sem.onnx")result = model(SAMPLE_IMAGE) print(result.semantic_mask.data.shape)

Checkpointy

Wszystkie opublikowane pliki wag dla tej rodziny.

PlikWejście (px)Licencja wag
semantic
LibrePIDNets-sem.pt1024mit
LibrePIDNetm-sem.pt1024mit
LibrePIDNetl-sem.pt1024mit

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

Licencja

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
PIDNet, Jiacong Xu
Licencja projektu źródłowego
MIT
Kod źródłowy projektu
github.com/XuJiacong/PIDNet
Kod LibreYOLO
MIT
Wagi
MIT, ponownie opublikowane w huggingface.co/LibreYOLO
Interpretacja
MIT is a permissive license, so this code and these weights can be used in commercial and closed-source products. It asks only that you keep the copyright and license notice with any copy you redistribute. LibreYOLO's checkpoints are conversions of the official PIDNet Cityscapes weights, which upstream licenses as MIT. The Cityscapes dataset itself carries separate research-oriented terms and is not redistributed by LibreYOLO.

Cytowanie

@misc{xu2022pidnet,
      title={PIDNet: A Real-time Semantic Segmentation Network Inspired from PID Controller}, 
      author={Jiacong Xu and Zixiang Xiong and Shankar P. Bhattacharyya},
      year={2022},
      eprint={2206.02066},
      archivePrefix={arXiv},
      primaryClass={cs.CV}
}

Skopiowano z bloku cytowania autorów w github.com/XuJiacong/PIDNet#bibtex-citation.

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.