PIDNet
Uma rede de segmentação semântica de três ramos que acrescenta um ramo dedicado a bordas a um projeto inspirado no controle proporcional-integral-derivativo, voltada para inferência em tempo real. O LibreYOLO a inclui apenas para segmentação semântica.
- Tarefas
- semantic
- Tamanhos
- s, m, l at 1024 px
- Instalação
pip install libreyolo- Nível de suporte
- Somente inferência, desde a v. Somente predição, validação e exportação. Os recursos de treinamento não se aplicam.
- Origem
- PIDNet por Jiacong Xu, MIT. Artigo, código-fonte
- Licenças
- Código MIT, pesos MIT. Uso comercial
Instalação
O PIDNet não precisa de nenhum extra opcional. Tudo o que ele importa está na instalação base.
pip install libreyoloPredição
Os pesos são baixados do Hugging Face no primeiro uso e ficam em cache local.
O sufixo -sem no nome do arquivo é obrigatório para esta família.
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) ids de classeprint(mask.classes) # ids de classe presentes na imagem, ordenadoslibreyolo predict model=LibrePIDNets-sem.pt source=https://raw.githubusercontent.com/LibreYOLO/libreyolo/release/libreyolo/assets/parkour.jpg save=TrueA segmentação semântica devolve um id de classe por pixel, não boxes, então
result.semantic_mask traz um array (H, W) em .data e a lista de ids de
classe presentes na imagem em .classes. conf, iou e max_det são aceitos
por paridade de API, mas não têm efeito: o modelo atribui uma classe a cada
pixel por argmax, sem limiar de confiança nem etapa de NMS. Veja
predição para fontes, streaming e tratamento de resultados.
Variantes
Três tamanhos, todos com entrada fixa de 1024 px. Os checkpoints publicados são conversões dos pesos oficiais do PIDNet para o Cityscapes, com 19 classes.
O LibreYOLO não treina o PIDNet: train() levanta NotImplementedError para
esta família, que o nível de suporte acima marca como somente
inferência.
Validação
val() devolve metrics/mIoU e metrics/pixel_accuracy, medidos sobre
qualquer dataset no formato em que você treinou.
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"])libreyolo val model=LibrePIDNets-sem.pt data=my-dataset.yamlExportação
| Tarefa | ONNX | TorchScript | ExecuTorch | TensorRT | OpenVINO | Paddle | MNN | RKNN | ncnn | TFLite | CoreML | Core AI |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| semantic | semantic to ONNX: compatível | semantic to TorchScript: compatível | semantic to ExecuTorch: compatível | semantic to TensorRT: compatível | semantic to OpenVINO: compatível | semantic to Paddle: incompatível | semantic to MNN: incompatível | semantic to RKNN: incompatível | semantic to ncnn: compatível | semantic to TFLite: compatível | semantic to CoreML: incompatível | semantic to Core AI: compatível |
Um artefato exportado é carregado de volta por LibreYOLO() pelo sufixo do
arquivo, então um arquivo .onnx ou .engine se comporta como um checkpoint e
devolve o mesmo Results. Exportação lista os argumentos que
todo formato aceita.
from libreyolo import LibreYOLO model = LibreYOLO("LibrePIDNets-sem.pt")model.export(format="onnx")model.export(format="tensorrt", half=True)libreyolo export model=LibrePIDNets-sem.pt format=onnxlibreyolo export model=LibrePIDNets-sem.pt format=tensorrt half=Truefrom libreyolo import LibreYOLO, SAMPLE_IMAGE # A factory roteia pelo sufixo do arquivo, então um artefato exportado# carrega como qualquer checkpoint e devolve o mesmo objeto Results.model = LibreYOLO("LibrePIDNets-sem.onnx")result = model(SAMPLE_IMAGE) print(result.semantic_mask.data.shape)Checkpoints
Todos os arquivos de pesos publicados desta família.
| Arquivo | Entrada (px) | Licença dos pesos |
|---|---|---|
| semantic | ||
| LibrePIDNets-sem.pt | 1024 | mit |
| LibrePIDNetm-sem.pt | 1024 | mit |
| LibrePIDNetl-sem.pt | 1024 | mit |
Todos os arquivos acima existem hoje na organização LibreYOLO e são baixados no primeiro uso.
Licenciamento
Confira a licença no repositório do Hugging Face correspondente aos pesos que você baixar. Cada checkpoint na organização LibreYOLO tem uma licença, e ela nem sempre é a mesma em toda a família. Esse repositório é a fonte oficial. O resumo abaixo descreve o que se aplicava na última verificação desta página.
Esta é uma descrição das licenças envolvidas, não uma orientação jurídica. Se a resposta tiver importância comercial, leia as licenças e procure sua própria assessoria.
- Trabalho original
- PIDNet, Jiacong Xu
- Licença original
- MIT
- Código-fonte original
- github.com/XuJiacong/PIDNet
- Código do LibreYOLO
- MIT
- Pesos
- MIT, republicado em huggingface.co/LibreYOLO
- Interpretação
- 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.
Citação
@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}
}Copiado do bloco de citação dos autores em github.com/XuJiacong/PIDNet#bibtex-citation.