Mask R-CNN
O Mask R-CNN acrescenta ao Faster R-CNN um ramo de máscara por região, prevendo uma máscara de segmentação junto de cada box que detecta. O LibreYOLO porta a implementação do torchvision para detecção e segmentação de instâncias.
- Tarefas
- detection, instance segmentation
- Tamanhos
- r50 at 800 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
- Mask R-CNN por PyTorch, BSD-3-Clause. Artigo, código-fonte
- Licenças
- Código BSD-3-Clause, pesos BSD-3-Clause. Uso comercial
Instalação
O Mask R-CNN 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 localmente.
from libreyolo import LibreYOLO, SAMPLE_IMAGE model = LibreYOLO("LibreMaskRCNNr50.pt")result = model(SAMPLE_IMAGE, save=True) print(result.masks.data.shape)for box in result.boxes: print(box.cls, box.conf, box.xyxy)libreyolo predict model=LibreMaskRCNNr50.pt source=https://raw.githubusercontent.com/LibreYOLO/libreyolo/release/libreyolo/assets/parkour.jpg save=Truefrom libreyolo import LibreYOLO, SAMPLE_IMAGE # task="detect" pula a cabeça de máscaras e retorna os boxes do mesmo# checkpoint, sem máscaras no resultado.model = LibreYOLO("LibreMaskRCNNr50.pt", task="detect")result = model(SAMPLE_IMAGE) print(result.boxes.xyxy)O objeto Results retornado é o mesmo que todas as famílias retornam, então
trocar por outro detector é uma mudança de uma linha. Carregar o checkpoint sem
o argumento task retorna máscaras de instância, já que a segmentação é a
tarefa padrão desta família; result.masks então as carrega junto dos boxes.
Passar task="detect" carrega os mesmos pesos sem a cabeça de máscaras e
retorna só os boxes. conf e iou definem os limiares de confiança e de NMS;
o Mask R-CNN mantém a etapa de NMS do upstream, diferente de um detector
baseado em queries. Veja predição para fontes, streaming e
tratamento de resultados.
Variantes
Um backbone: ResNet-50 com uma pirâmide de características, usando o builder v2 de Mask R-CNN do torchvision. O checkpoint publicado tem licença BSD-3-Clause e serve às duas tarefas desta família, então não há tamanho nenhum para escolher.
Validação
val() retorna um dicionário de chaves metrics/. Na tarefa de segmentação
padrão deste checkpoint, a chave metrics/mAP50-95 pura contém a pontuação das
máscaras, e a mesma execução reporta os boxes sob o sufixo (B), então as duas
ficam disponíveis em uma única passada.
from libreyolo import LibreYOLO model = LibreYOLO("LibreMaskRCNNr50.pt")metrics = model.val(data="my-dataset.yaml") print(metrics["metrics/mAP50-95"]) # máscarasprint(metrics["metrics/mAP50-95(B)"]) # boxeslibreyolo val model=LibreMaskRCNNr50.pt data=my-dataset.yamlExportação
| Tarefa | ONNX | TorchScript | ExecuTorch | TensorRT | OpenVINO | Paddle | MNN | RKNN | ncnn | TFLite | CoreML | Core AI |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Detection | Detection to ONNX: compatível | Detection to TorchScript: incompatível | Detection to ExecuTorch: incompatível | Detection to TensorRT: incompatível | Detection to OpenVINO: incompatível | Detection to Paddle: incompatível | Detection to MNN: incompatível | Detection to RKNN: incompatível | Detection to ncnn: incompatível | Detection to TFLite: incompatível | Detection to CoreML: incompatível | Detection to Core AI: incompatível |
| Instance segmentation | Instance segmentation to ONNX: compatível | Instance segmentation to TorchScript: incompatível | Instance segmentation to ExecuTorch: incompatível | Instance segmentation to TensorRT: incompatível | Instance segmentation to OpenVINO: incompatível | Instance segmentation to Paddle: incompatível | Instance segmentation to MNN: incompatível | Instance segmentation to RKNN: incompatível | Instance segmentation to ncnn: incompatível | Instance segmentation to TFLite: incompatível | Instance segmentation to CoreML: incompatível | Instance segmentation to Core AI: incompatível |
O Mask R-CNN exporta só para ONNX, com tamanho de batch 1. O grafo exportado
mantém dentro dele as etapas de redimensionamento e de colagem de máscaras do
upstream, então o LibreYOLO força dynamic=True independentemente do que for
passado, para manter o grafo válido para fontes que não são quadradas. Um
arquivo .onnx exportado é recarregado por LibreYOLO() pelo sufixo do arquivo
e retorna o mesmo Results.
from libreyolo import LibreYOLO model = LibreYOLO("LibreMaskRCNNr50.pt")model.export(format="onnx", imgsz=800)libreyolo export model=LibreMaskRCNNr50.pt format=onnx imgsz=800from libreyolo import LibreYOLO, SAMPLE_IMAGE # A factory decide o caminho pelo sufixo do arquivo, então um artefato# exportado carrega como qualquer checkpoint e retorna o mesmo Results.model = LibreYOLO("LibreMaskRCNNr50.onnx")result = model(SAMPLE_IMAGE) print(result.masks.data.shape)Checkpoints
Todos os arquivos de pesos publicados desta família. O único checkpoint abaixo
aparece listado sob detect, mas o mesmo arquivo carrega para segmentação
também: não passe o argumento task e ele retorna máscaras por padrão.
| Arquivo | Entrada (px) | Licença dos pesos |
|---|---|---|
| Detection | ||
| LibreMaskRCNNr50.pt | 800 | bsd-3-clause |
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
- Mask R-CNN, PyTorch
- Licença original
- BSD-3-Clause
- Código-fonte original
- github.com/pytorch/vision
- Código do LibreYOLO
- MIT
- Pesos
- BSD-3-Clause, republicado em huggingface.co/LibreYOLO
- Interpretação
- BSD-3-Clause is a permissive license, so this code can be used in commercial and closed-source products with no obligation on your own application code. It asks only that you keep the copyright notice and disclaimer with any copy you redistribute, and it carries no patent grant. The published checkpoint used for parity testing is not distributed in the LibreYOLO source tree: torchvision's own documentation notes that a pretrained model's terms may depend on its training data, so the Hugging Face mirror ships the BSD text on that implied basis and repeats the caveat rather than issuing an explicit checkpoint-specific grant.
O Mask R-CNN é construído como uma subclasse do wrapper de Faster R-CNN do LibreYOLO: compartilha a mesma fonte do torchvision e a mesma licença BSD-3-Clause, e adiciona o preditor de máscaras e a cabeça RoI de máscaras do mesmo commit portado.