RoI Align
Region of Interest Align
O RoI Align é uma operação avançada de pooling que resolve o desalinhamento espacial em detecção de objetos e segmentação, sendo fundamental para modelos como o Mask R-CNN.
O Problema que o RoI Align Resolve
Antes do RoI Align, a arquitetura padrão (como no Faster R-CNN) utilizava o RoI Pooling. O problema crítico do RoI Pooling era a quantização (arredondamento).
Quando uma rede propõe uma região de interesse (ex: uma caixa com coordenadas flutuantes, como x = 10.4, y = 20.8), o RoI Pooling faz o seguinte:
- Arredonda essas coordenadas para se alinharem à grade de pixels do feature map (ex:
x = 10, y = 21). - Ao dividir essa região em bins (ex: 7x7), arredonda novamente para forçar o encaixe na grade inteira.
⚠️ Esse duplo arredondamento gera um desalinhamento espacial severo. Para classificação funciona, mas para segmentação de instâncias, onde a precisão deve ser ao nível do pixel para gerar máscaras, esse erro destrói as bordas dos objetos.
Como o RoI Align Funciona?
O RoI Align elimina completamente a quantização.
- Coordenadas Flutuantes: Mantém os valores contínuos da região de interesse.
- Divisão Exata: Divide a região em bins mantendo o tamanho fracionado exato.
- Interpolação Bilinear: Para cada bin, o RoI Align amostra 4 pontos regulares, dispostos em uma sub-grade 2×2 dentro do bin. Como não caem num “pixel” inteiro, cada um desses pontos é calculado por interpolação bilinear (valor exato baseado nos 4 pixels vizinhos mais próximos no feature map contínuo).
- Agregação: Os 4 valores interpolados de cada bin são agregados por average pooling (ou max pooling), produzindo o valor final da célula da grade RoIAlign.
Impacto Medido (Ablações do Mask R-CNN)
O artigo original (He et al., 2017) quantificou o efeito do RoIAlign em cenários distintos:
- ResNet-50-C4 (stride 16): +3 pontos de mask AP sobre o RoIPool — com a maior parte do ganho em IoU alto (AP75), confirmando que o alinhamento beneficia exatamente a localização fina.
- ResNet-50-C5 (stride 32): +7.3 pontos de mask AP (+50% relativo). Quanto maior o stride, mais destrutiva é a quantização — e mais o RoIAlign brilha. Com RoIAlign, features de stride 32 (30.9 AP) passam a superar as de stride 16 (30.3 AP), resolvendo um desafio antigo da área.
- Detecção de keypoints: +4.4 pontos de keypoint AP mesmo sobre FPN (strides finos), pois localização de pontos é ainda mais sensível a desalinhamento que máscaras.
- Insensibilidade ao design: os resultados não dependem do número de pontos amostrados nem de max vs. average pooling — contanto que não haja quantização.
⚠️ Detalhe histórico: o RoIWarp (do MNC, Dai et al., 2016) também usava interpolação bilinear, mas mantinha a quantização do RoI — e teve desempenho idêntico ao RoIPool. A lição: o que importa não é a interpolação, é eliminar o arredondamento.
Resumo em Entrevistas
“O RoI Align é uma técnica de extração de features que usa interpolação bilinear em vez de arredondamentos para mapear regiões propostas para um feature map fixo. Evita a perda de alinhamento espacial do RoI Pooling, sendo crucial para tarefas de pixel exato como a segmentação no Mask R-CNN.”
Referências e ferramentas
- He, K., Gkioxari, G., Dollár, P., Girshick, R. “Mask R-CNN” (2017). arXiv:1703.06870 — seção 3 (“RoIAlign”) e ablações da Tabela 2c/2d.
Relacionadas: Mask R-CNN · object-detection · faster-r-cnn