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.

bash
pip install libreyolo

Predição

Os pesos são baixados do Hugging Face no primeiro uso e ficam em cache localmente.

Python
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)
CLI
libreyolo predict model=LibreMaskRCNNr50.pt source=https://raw.githubusercontent.com/LibreYOLO/libreyolo/release/libreyolo/assets/parkour.jpg save=True
Só boxes
from 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.

Python
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)"])   # boxes
CLI
libreyolo val model=LibreMaskRCNNr50.pt data=my-dataset.yaml

Exportação

TarefaONNXTorchScriptExecuTorchTensorRTOpenVINOPaddleMNNRKNNncnnTFLiteCoreMLCore AI
DetectionDetection to ONNX: compatívelDetection to TorchScript: incompatívelDetection to ExecuTorch: incompatívelDetection to TensorRT: incompatívelDetection to OpenVINO: incompatívelDetection to Paddle: incompatívelDetection to MNN: incompatívelDetection to RKNN: incompatívelDetection to ncnn: incompatívelDetection to TFLite: incompatívelDetection to CoreML: incompatívelDetection to Core AI: incompatível
Instance segmentationInstance segmentation to ONNX: compatívelInstance segmentation to TorchScript: incompatívelInstance segmentation to ExecuTorch: incompatívelInstance segmentation to TensorRT: incompatívelInstance segmentation to OpenVINO: incompatívelInstance segmentation to Paddle: incompatívelInstance segmentation to MNN: incompatívelInstance segmentation to RKNN: incompatívelInstance segmentation to ncnn: incompatívelInstance segmentation to TFLite: incompatívelInstance segmentation to CoreML: incompatívelInstance 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.

Python
from libreyolo import LibreYOLO model = LibreYOLO("LibreMaskRCNNr50.pt")model.export(format="onnx", imgsz=800)
CLI
libreyolo export model=LibreMaskRCNNr50.pt format=onnx imgsz=800
Usar o arquivo exportado
from 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.

ArquivoEntrada (px)Licença dos pesos
Detection
LibreMaskRCNNr50.pt800bsd-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.

Verificado com o LibreYOLO v1.5.0. As tabelas de suporte, os checkpoints e os números de benchmark desta página são gerados a partir da biblioteca lançada e dos pesos publicados, não escritos à mão.