Mask R-CNN

O Mask R-CNN (He et al., 2017) é a extensão natural do faster-r-cnn, criado não apenas para detectar objetos (desenhar caixas), mas para realizar Segmentação de Instância (Instance Segmentation) — identificando os pixels exatos que pertencem a cada objeto de forma individualizada.

Como Funciona

A genialidade do Mask R-CNN foi manter o fluxo veloz do Faster R-CNN e adicionar uma pequena rede paralela (branch) encarregada exclusivamente de predizer uma máscara binária (pixel a pixel) para o objeto delimitado pela região proposta.

  1. Backbone e RPN: Idêntico ao faster-r-cnn. Extrai features da imagem e gera propostas de região (Region Proposals).
  2. RoI Align: Onde antes se usava roi-pooling (que sofria com erros de quantização severos para alinhamento em nível de pixel), o Mask R-CNN introduziu o RoIAlign. O RoIAlign usa interpolação bilinear espacial para calcular com precisão de sub-pixel o valor exato no mapa de features, mantendo o alinhamento perfeito sem arredondamentos destrutivos.
  3. Cabeças Paralelas (Heads): A região extraída alimenta dois caminhos independentes:
    • Branch Principal: O caminho clássico para classificação e bounding box regression.
    • Branch de Máscara: Uma pequena rede totalmente convolucional (FCN) que gera máscaras binárias independentes para cada uma das KK classes possíveis.

🧮 Fundamentação Matemática (Loss Tripartite)

O treinamento ocorre otimizando simultaneamente três tarefas distintas através de uma função de perda global combinada:

L=Lcls+Lbox+LmaskL = L_{cls} + L_{box} + L_{mask}

Eq. 1: Função de perda tripartite do Mask R-CNN.

Onde:

  • LL: perda total da rede.
  • LclsL_{cls}: perda de classificação da ROI (o que é o objeto).
  • LboxL_{box}: perda de regressão da bounding box (onde estão os limites estritos da caixa).
  • LmaskL_{mask}: perda média de entropia cruzada binária (BCE) focada especificamente em predizer a máscara correta para a região.

A Matemática da Branch de Máscara

A branch de máscara gera uma saída de dimensão K×m×mK \times m \times m, indicando KK máscaras binárias de resolução m×mm \times m (uma máscara autônoma para cada uma das KK classes conhecidas).

Ao contrário da segmentação semântica tradicional (onde todas as classes competem pelo mesmo pixel em um Softmax global multinomial), o Mask R-CNN desacopla completamente a classificação da máscara, aplicando Sigmoid isoladamente.

Lmask=1m2i,j[yi,jlogy^i,jk+(1yi,j)log(1y^i,jk)]L_{mask} = - \frac{1}{m^2} \sum_{i,j} \left[ y_{i,j} \log \hat{y}_{i,j}^k + (1 - y_{i,j}) \log (1 - \hat{y}_{i,j}^k) \right]

Eq. 2: Entropia cruzada binária (BCE) por pixel isolada para a classe verdadeira.

Onde:

  • kk: a classe real (ground truth) do objeto (identificada na marcação de treino).
  • yi,jy_{i,j}: rótulo real binário do pixel (11 se o pixel for do objeto, 00 se for fundo).
  • y^i,jk\hat{y}_{i,j}^k: probabilidade (saída do ativador Sigmoid) de o pixel (i,j)(i,j) pertencer ao objeto na máscara da classe kk.
  • m2m^2: número total de pixels na grade da máscara gerada (m×mm \times m).

Apenas a máscara associada à classe verdadeira do objeto (kk) contribui ativamente para a perda LmaskL_{mask}, ignorando totalmente as máscaras geradas para as outras K1K-1 classes. Esse desacoplamento evita interferências matemáticas e foi o segredo dos resultados espetaculares de segmentação do modelo.


Relacionadas: faster-r-cnn · roi-pooling · roi-align

Construído com Eleventy · busca por Lunr.js