Segmentação por instância

O que é segmentação por instância?

Segmentação por instância (instance segmentation) é uma tarefa de visão computacional (computer vision) que detecta e delimita cada instância individual de objeto no nível de pixel. A saída normalmente é um conjunto de objetos, em que cada objeto tem:

  • um rótulo de classe (por exemplo, pessoa, carro)
  • uma máscara binária indicando quais pixels pertencem àquele objeto específico
  • frequentemente também uma caixa delimitadora (bounding box) (útil para treinamento, avaliação e velocidade)

A ideia-chave é que dois objetos da mesma classe devem ser separados em máscaras diferentes. Por exemplo, em uma cena de rua com cinco pessoas, a segmentação por instância produz cinco máscaras distintas de pessoa, e não uma única região “pessoa” mesclada.

A segmentação por instância é amplamente usada quando você precisa tanto do que são os objetos quanto de exatamente onde cada um está, até os limites no nível de pixel.

Como ela difere de tarefas relacionadas de visão

A segmentação por instância fica entre (e parcialmente se sobrepõe a) duas tarefas centrais: Detecção de Objetos e Segmentação Semântica. Entender as diferenças esclarece quando a segmentação por instância é necessária.

Detecção de objetos vs segmentação por instância

Detecção de objetos prediz um conjunto de caixas delimitadoras + rótulos de classe. Ela diz “há um cachorro aqui”, localizado aproximadamente por um retângulo.

Segmentação por instância vai além e prediz uma máscara precisa no nível de pixel para cada objeto. Isso é importante quando a forma importa (por exemplo, imagens médicas, preensão robótica).

Exemplo prático:

  • Detecção: “Há uma bicicleta em (x1, y1, x2, y2).”
  • Segmentação por instância: “Aqui estão os pixels exatos da bicicleta, incluindo os raios finos.”

Sistemas de segmentação por instância frequentemente ainda incluem componentes de detecção, como predição de caixas e pós-processamento como Supressão Não Máxima (Non-Maximum Suppression, NMS), embora alguns sistemas modernos baseados em transformadores evitem NMS via predição de conjuntos.

Segmentação semântica vs segmentação por instância

Segmentação semântica atribui um rótulo de classe a cada pixel, mas não distingue entre instâncias separadas da mesma classe.

Se uma imagem tem três carros:

  • A segmentação semântica produz uma região única “carro” (possivelmente com buracos/oclusões).
  • A segmentação por instância produz três máscaras separadas — uma por carro.

Uma forma comum de lembrar a distinção:

  • Segmentação semântica: classe por pixel
  • Segmentação por instância: objeto por pixel

Para uma visão mais ampla, veja Segmentação de Imagens.

Segmentação panóptica (conceito relacionado)

Segmentação panóptica (panoptic segmentation) combina os dois mundos: ela atribui a cada pixel ou:

  • uma instância de “coisa” (objetos contáveis como pessoas, carros), ou
  • uma classe de “matéria” (regiões amorfas como céu, estrada, grama)

A segmentação por instância foca principalmente em “coisas” e, em geral, deixa o fundo/matéria sem rótulo ou ignorado.

Formulação formal do problema

Dada uma imagem (I), a segmentação por instância prediz um conjunto de (N) instâncias:

[ {(c_i, m_i, b_i)}_{i=1}^N ]

Onde:

  • (c_i) é o rótulo de classe
  • (m_i) é uma máscara binária (mesma resolução da imagem ou uma grade subamostrada)
  • (b_i) é uma caixa delimitadora opcional (comum em muitas famílias de modelos)

Ao contrário da segmentação semântica, as máscaras (m_i) não são mutuamente exclusivas em princípio (oclusões podem causar ambiguidade), mas a maioria dos benchmarks assume máscaras da região visível e resolve sobreposições via ordenação por confiança.

Representações de máscara usadas na prática

Diferentes sistemas e conjuntos de dados armazenam máscaras de formas diferentes:

  • Máscaras raster (bitmap): uma imagem binária por instância (simples, mas pesada em memória).
  • Polígonos: usados nas anotações do COCO para muitos objetos; eficientes e editáveis.
  • Codificação por Comprimento de Execução (Run-Length Encoding, RLE): comprime máscaras binárias; comum em APIs do COCO e no Kaggle.
  • Máscaras implícitas/paramétricas: preditas via coeficientes aprendidos (por exemplo, protótipo + pesos) ou convolução dinâmica, trocando precisão por velocidade.

A escolha afeta os pipelines de anotação, armazenamento e, às vezes, a avaliação.

Famílias comuns de modelos

Métodos modernos de segmentação por instância podem ser agrupados em algumas famílias principais. A maioria compartilha uma espinha dorsal (backbone) comum (frequentemente uma Rede Neural Convolucional (Convolutional Neural Network, CNN) ou uma espinha dorsal baseada em transformador) além de cabeças específicas da tarefa.

Modelos de dois estágios, baseados em propostas (família Mask R-CNN)

Mask R-CNN é o baseline clássico e continua sendo uma abordagem forte e amplamente usada.

Pipeline em alto nível:

  1. Uma espinha dorsal + pirâmide de características (frequentemente FPN) extrai características em múltiplas escalas.
  2. Uma Rede de Propostas de Região (Region Proposal Network, RPN) gera regiões candidatas de objeto (“propostas”).
  3. Para cada proposta, o modelo prediz:
    • pontuações de classe
    • coordenadas refinadas da caixa delimitadora (ver Regressão de Caixa Delimitadora)
    • uma máscara por instância via uma pequena cabeça totalmente convolucional

Inovação-chave: RoIAlign, que melhora o alinhamento espacial em comparação ao RoIPool mais antigo, levando a melhores contornos de máscara.

Perdas típicas:

  • perda de classificação (entropia cruzada ou variantes focais)
  • perda de regressão de caixa (Smooth L1 / L1 + perdas baseadas em IoU)
  • perda de máscara (entropia cruzada binária por pixel; às vezes variantes de perda Dice)

Extensões notáveis:

  • Cascade Mask R-CNN: refinamento multiestágio de caixa/máscara
  • Hybrid Task Cascade (HTC): intercala refinamento de caixa e máscara ao longo dos estágios
  • PointRend: refina contornos de máscara amostrando pontos incertos

Quando usar:

  • Quando você precisa de alta precisão e pode arcar com computação moderada.
  • Quando você quer um baseline estável, bem compreendido, com muitas implementações (Detectron2, MMDetection).

Modelos CNN de um estágio / sem propostas

Essas abordagens visam velocidade e simplicidade ao evitar propostas explícitas de região.

Padrões comuns:

  • Máscaras baseadas em protótipos (por exemplo, estilo YOLACT):

    • predizem um pequeno conjunto de máscaras protótipo globais
    • predizem coeficientes por instância para combinar linearmente protótipos em cada máscara de instância
      Isso pode ser muito rápido para casos de uso em tempo real.
  • Atribuição de instâncias baseada em grade/centro (por exemplo, estilo SOLO/SOLOv2):

    • dividem a imagem (ou mapa de características) em uma grade
    • cada célula prediz se corresponde a uma instância e produz uma máscara
  • Convolução dinâmica / máscaras condicionais (por exemplo, ideias do estilo CondInst):

    • predizem pesos de convolução por instância
    • aplicam esses pesos a características compartilhadas para gerar a máscara

Quando usar:

  • Quando você precisa de desempenho em tempo real (robótica, AR, dispositivos de borda).
  • Quando você pode trocar um pouco da precisão máxima por vazão.

Modelos baseados em transformadores e consultas (MaskFormer/Mask2Former, estilo DETR)

A segmentação por instância baseada em transformadores se tornou proeminente devido à sua formulação limpa como predição de conjuntos (set prediction).

Ideia central:

  • O modelo produz um conjunto de tamanho fixo de predições via consultas aprendidas (learned queries) (semelhante em espírito ao DETR).
  • Cada consulta prediz:
    • probabilidades de classe
    • uma máscara (frequentemente via embeddings de máscara aplicados a características de pixel)
  • O treinamento usa pareamento bipartido (bipartite matching) (algoritmo húngaro) para associar instâncias preditas ao ground truth sem depender de NMS.

Abordagens representativas:

  • Variantes de segmentação estilo DETR: estendem consultas de detecção para produzir máscaras.
  • MaskFormer / Mask2Former: unificam segmentação semântica/por instância/panóptica via atenção mascarada e fortes características multiescala.

Vantagens:

  • Frequentemente sem NMS, pós-processamento conceitualmente mais simples
  • Forte desempenho quando combinado com espinhas dorsais poderosas (por exemplo, Swin Transformer) e características multiescala
  • Uma visão mais unificada das tarefas de segmentação

Trade-offs:

  • Pode ser mais complexo de treinar bem (projeto do custo de pareamento, perdas auxiliares, treinamento multiescala)
  • Computação/memória podem ser maiores dependendo da arquitetura

Para fundamentos de transformadores, veja Arquitetura Transformer.

Segmentação fundacional e orientada por prompts (contexto)

Modelos como sistemas “segmentar qualquer coisa” orientados por prompts podem produzir máscaras de alta qualidade dadas instruções (pontos/caixas/texto). Eles nem sempre são treinados ou avaliados no cenário clássico de “benchmark de segmentação por instância” (predizer todas as instâncias com classes), mas cada vez mais servem como:

  • fortes geradores de máscara para anotação
  • componentes em pipelines que adicionam classificação + rastreamento

Em produção, é comum combinar:

  • um detector ou modelo de grounding → prompts
  • um modelo forte de máscara → máscaras por instância

Treinamento e inferência: o que importa na prática

Dados e custo de anotação

A segmentação por instância exige máscaras por instância, que são mais caras de anotar do que caixas. Estratégias comuns para reduzir custo:

  • rótulos fracos/parciais (rabiscos, polígonos em vez de máscaras densas)
  • ferramentas de anotação interativa (modelo-no-loop)
  • dados sintéticos para domínios especializados (inspeção industrial)

Aumento de dados e robustez

A segmentação por instância é sensível a:

  • objetos pequenos (poucos pixels)
  • oclusão e cenas congestionadas
  • mudança de domínio (iluminação, tipo de câmera)

Aumentos típicos:

  • variação de escala / treinamento multiescala
  • recortes aleatórios
  • variação de cor
  • mixup/cutmix (mais comum em detecção; às vezes adaptado)

Etapas de inferência

Dependendo da família do modelo, a inferência pode incluir:

  • limiarização de pontuação para confiança de instância
  • (às vezes) NMS em caixas ou máscaras
  • redimensionar máscaras de volta à resolução da imagem
  • resolver máscaras sobrepostas (por ordenação de confiança ou regras aprendidas)

Métricas de avaliação (COCO mask AP e além)

COCO Mask AP (o padrão)

A métrica mais comum é Precisão Média (Average Precision, AP) no estilo COCO calculada a partir de máscaras, frequentemente reportada como:

  • AP (máscara): média sobre limiares de IoU 0.50 a 0.95 em passos de 0.05
  • AP50: AP em IoU = 0.50 (tolerante)
  • AP75: AP em IoU = 0.75 (mais rigoroso)
  • AP_S / AP_M / AP_L: AP para objetos pequenos / médios / grandes

Isso é normalmente o que as pessoas querem dizer com “COCO mask AP”.

Por que é útil:

  • Recompensa tanto classificação correta quanto forma de máscara precisa
  • Usar múltiplos limiares de IoU penaliza contornos descuidados mais do que apenas AP50

Outras métricas que você verá

  • AR (Average Recall): revocação em múltiplos limiares de IoU e número máximo de detecções
  • Pontuações focadas em contorno (menos padrão no COCO): enfatizam precisão do contorno (útil em medicina/sensoriamento remoto)
  • PQ (Panoptic Quality): usada para segmentação panóptica; combina qualidade de detecção e de segmentação em uma pontuação

Um ponto-chave: métricas como mIoU (mean Intersection over Union) são primariamente para segmentação semântica e, em geral, não capturam a qualidade de separação de instâncias.

Conjuntos de dados comuns

COCO (benchmark mais comum)

MS COCO é o benchmark padrão para pesquisa em segmentação por instância:

  • 80 classes de “coisa”
  • cenas desafiadoras com oclusão e muitos objetos pequenos
  • a avaliação inclui AP de máscara (como descrito acima)

As anotações do COCO incluem máscaras em polígono/RLE e são suportadas por ferramental padrão.

LVIS (segmentação por instância com cauda longa)

LVIS estende a rotulagem no estilo COCO com:

  • muito mais categorias (distribuição de cauda longa)
  • uma ênfase maior em classes raras
    Ele estressa comportamento quase de mundo aberto e desempenho na cauda.

Cityscapes e conjuntos de dados de direção

Para direção autônoma e cenas urbanas:

  • Cityscapes inclui rótulos em nível de instância para categorias-chave (carros, pedestres etc.)
  • outros conjuntos de dados de direção frequentemente suportam variantes de segmentação/rastreamento por instância ou multiobjetos

Eles são importantes para aplicações críticas de segurança, onde a separação de instâncias (por exemplo, pedestres) importa.

Conjuntos de dados específicos de domínio

  • Imagem médica: segmentação por instância de células/núcleos (histopatologia), lesões, órgãos
  • Inspeção industrial: instâncias de defeitos em peças
  • Sensoriamento aéreo/remoto: edifícios, veículos, copas de árvores

Nesses domínios, a contagem de classes pode ser pequena, mas a precisão de contorno e a calibração frequentemente são críticas.

Aplicações práticas

A segmentação por instância é usada sempre que você precisa de entendimento em nível de objeto mais geometria precisa:

  • Direção autônoma: separar pedestres/ciclistas próximos, entender espaço dirigível + objetos dinâmicos
  • Robótica: planejamento de preensão e manipulação — conhecer a extensão exata do objeto ajuda a evitar colisões
  • Imagem médica: contar e medir células, tumores, estruturas anatômicas com separação em nível de instância
  • Varejo e logística: contar itens em prateleiras, separar produtos sobrepostos, checkout automatizado
  • Edição de imagem / criação de conteúdo: selecionar objetos individuais para remoção, recoloração ou substituição de fundo
  • Agricultura: contar frutos, segmentar culturas vs ervas daninhas no nível de instância

Um exemplo concreto simples: em uma imagem de armazém, a segmentação semântica pode marcar uma região grande como “caixa”, mas a segmentação por instância pode identificar cada caixa individual, permitindo contagem e rastreamento.

Exemplo prático mínimo (PyTorch / torchvision)

Abaixo há um pequeno exemplo de inferência usando uma Mask R-CNN pré-treinada do torchvision. Isto não é estado da arte, mas demonstra as saídas típicas: caixas, rótulos, pontuações e máscaras.

import torch
from torchvision.models.detection import maskrcnn_resnet50_fpn
from torchvision.transforms.functional import to_tensor
from PIL import Image

# Load model
model = maskrcnn_resnet50_fpn(weights="DEFAULT")
model.eval()

# Load image
img = Image.open("image.jpg").convert("RGB")
x = to_tensor(img)  # [3, H, W] in [0,1]

with torch.no_grad():
    out = model([x])[0]

# out contains:
# out["boxes"]: [N, 4]
# out["labels"]: [N]
# out["scores"]: [N]
# out["masks"]: [N, 1, H, W] with probabilities in [0,1]

score_thresh = 0.7
keep = out["scores"] >= score_thresh

boxes = out["boxes"][keep]
labels = out["labels"][keep]
scores = out["scores"][keep]
masks = out["masks"][keep] > 0.5  # binarize masks at 0.5

Em uma aplicação real, você normalmente:

  • mapeia labels para nomes de categorias (por exemplo, mapa de rótulos do COCO)
  • visualiza máscaras com mistura alfa
  • lida com máscaras sobrepostas (por exemplo, desenhar em ordem decrescente de score)
  • potencialmente aplica NMS dependendo do modelo/comportamento da saída

Desafios comuns e dicas práticas

  • Cenas congestionadas: separar instâncias encostando/sobrepostas é difícil; modelos podem mesclar instâncias.
    • Dica: considere arquiteturas projetadas para separação em multidões ou use características em maior resolução.
  • Objetos pequenos: máscaras ficam instáveis quando o objeto tem apenas alguns pixels.
    • Dica: treinamento/inferência multiescala, configurações FPN mais fortes ou técnicas especializadas para objetos pequenos.
  • Qualidade de contorno: alguns modelos produzem máscaras grosseiras.
    • Dica: módulos de refinamento de contorno (por exemplo, ideias tipo PointRend) ou cabeças de máscara em maior resolução.
  • Desbalanceamento de classes e cauda longa: categorias raras frequentemente são perdidas.
    • Dica: reponderação, amostragem por fator de repetição (estilo LVIS) ou pré-treinamento/espinhas dorsais mais fortes.
  • Ruído de anotação: rótulos de máscara podem ser inconsistentes nos contornos.
    • Dica: perdas robustas (Dice), suavização de rótulos, ou pipelines de controle de qualidade.

Tarefas relacionadas e extensões

A segmentação por instância frequentemente é um bloco de construção para sistemas mais avançados:

  • Segmentação por instância em vídeo / rastreamento: adiciona consistência temporal e IDs de instância entre frames.
  • Segmentação por instância amodal: prediz a extensão completa do objeto mesmo quando parcialmente ocluído.
  • Segmentação interativa: cliques/caixas do usuário guiam a predição de máscara (útil para ferramentas de anotação).
  • Sistemas de pontos-chave + instância: por exemplo, pose humana + máscaras por pessoa (ver Detecção de Pontos-Chave).

Ela também se relaciona de perto com:

Resumo

A segmentação por instância produz uma máscara por instância de objeto, permitindo entendimento no nível de pixel de cenas complexas com múltiplos objetos da mesma classe. Ela melhora a detecção de objetos ao fornecer formas precisas e melhora a segmentação semântica ao separar instâncias individuais. Soluções modernas abrangem:

  • métodos de dois estágios baseados em propostas (família Mask R-CNN)
  • abordagens CNN de um estágio e em tempo real
  • métodos baseados em transformadores/consultas com predição de conjuntos (estilo Mask2Former/DETR)

A avaliação é mais comumente feita usando COCO mask AP (AP médio em limiares de IoU 0.50–0.95), com COCO e LVIS servindo como benchmarks principais. Na prática, a segmentação por instância é crítica para robótica, direção autônoma, imagem médica e qualquer aplicação que precise de contagem, contornos precisos e raciocínio por objeto.