ROI Pooling

Region of Interest Pooling

Técnica fundamental da arquitetura de detecção de objetos, popularizada por modelos clássicos como o Fast R-CNN.

O que é e Contexto Prático

ROI Pooling (Region of Interest Pooling) é uma operação crucial em redes neurais. Seu objetivo é extrair mapas de características (feature maps) de tamanho fixo a partir de regiões de interesse (ROIs) que possuem tamanhos variados.

Em detecção de objetos baseada em regiões (Region-Based CNNs), uma imagem passa primeiro por uma rede convolucional (backbone) que gera um mapa de características global. Paralelamente, algoritmos sugerem “caixas” (ROIs) onde objetos podem estar. Como essas ROIs têm proporções e tamanhos diferentes, elas não podem ser diretamente alimentadas a camadas totalmente conectadas (Fully Connected Layers), que exigem entradas de tamanho fixo. O ROI Pooling resolve isso dividindo a ROI projetada em um grid fixo (ex: 7×77 \times 7) e extraindo o valor máximo (Max Pooling) de cada subdivisão.

🧮 Fundamentação Matemática (Densa)

Seja um mapa de características FRC×H×WF \in \mathbb{R}^{C \times H \times W} e uma região de interesse delimitada pelas coordenadas contínuas (x1,y1,x2,y2)(x_1, y_1, x_2, y_2) projetadas no mapa de características a partir da imagem original (com um fator de escala SS).

A projeção sofre um primeiro arredondamento (quantização) para obter coordenadas discretas no feature map:

x1=x1/S,y1=y1/Sx'_1 = \lfloor x_1 / S \rfloor, \quad y'_1 = \lfloor y_1 / S \rfloor

x2=x2/S,y2=y2/Sx'_2 = \lceil x_2 / S \rceil, \quad y'_2 = \lceil y_2 / S \rceil

Eq. 1: Projeção das coordenadas contínuas para a malha discreta do feature map.

Onde:

  • x1,y1,x2,y2x_1, y_1, x_2, y_2: coordenadas contínuas da região de interesse na imagem original.
  • SS: fator de escala (stride) entre a imagem original e o feature map.
  • x1,y1,x2,y2x'_1, y'_1, x'_2, y'_2: coordenadas quantizadas projetadas no feature map.
  • \lfloor \cdot \rfloor e \lceil \cdot \rceil: operações de arredondamento para baixo (piso) e para cima (teto), respectivamente. O tamanho da ROI quantizada no feature map é hr=y2y1h_r = y'_2 - y'_1 e wr=x2x1w_r = x'_2 - x'_1.

O objetivo é obter uma saída de dimensão fixa Hout×WoutH_{out} \times W_{out} (ex: 7×77 \times 7). Para isso, dividimos a ROI em um grid de tamanho fixo. Cada bin (i,j)(i, j) (onde 0i<Hout0 \le i < H_{out} e 0j<Wout0 \le j < W_{out}) abrange uma sub-janela cujas coordenadas limites sofrem um segundo arredondamento:

ystart(i)=y1+ihrHout,yend(i)=y1+(i+1)hrHouty_{start}(i) = y'_1 + \lfloor i \cdot \frac{h_r}{H_{out}} \rfloor, \quad y_{end}(i) = y'_1 + \lceil (i+1) \cdot \frac{h_r}{H_{out}} \rceil

xstart(j)=x1+jwrWout,xend(j)=x1+(j+1)wrWoutx_{start}(j) = x'_1 + \lfloor j \cdot \frac{w_r}{W_{out}} \rfloor, \quad x_{end}(j) = x'_1 + \lceil (j+1) \cdot \frac{w_r}{W_{out}} \rceil

Eq. 2: Cálculo dos limites verticais e horizontais para cada sub-janela (bin) do ROI.

Onde:

  • Hout,WoutH_{out}, W_{out}: dimensões fixas desejadas para a saída.
  • hr,wrh_r, w_r: altura e largura da ROI quantizada no feature map.
  • i,ji, j: índices da sub-janela na grade de saída.
  • xstart,xend,ystart,yendx_{start}, x_{end}, y_{start}, y_{end}: coordenadas dos limites de cada sub-janela no feature map.

A operação de Max Pooling é então aplicada para produzir o valor da saída no canal cc:

Yc,i,j=maxystart(i)y<yend(i) maxxstart(j)x<xend(j)Fc,y,xY_{c, i, j} = \max_{y_{start}(i) \le y < y_{end}(i)} \ \max_{x_{start}(j) \le x < x_{end}(j)} F_{c, y, x}

Eq. 3: Operação de Max Pooling aplicada a cada bin do ROI para gerar a saída fixa.

Onde:

  • Yc,i,jY_{c, i, j}: valor do pixel de saída no canal cc e posição (i,j)(i, j) do grid.
  • Fc,y,xF_{c, y, x}: valor do pixel no feature map original no canal cc e coordenadas espaciais (y,x)(y, x).
  • max\max: operação matemática que seleciona o valor máximo dentro dos limites da sub-janela.

🎯 Quando usar

  • Parte inerente da construção de modelos clássicos two-stage como Fast R-CNN.
  • Extração de representações vetoriais de regiões específicas de uma imagem.

⚠️ Trade-offs e Armadilhas: Como visto na matemática acima, as operações de \lfloor \cdot \rfloor e \lceil \cdot \rceil introduzem erros de quantização (misalignment). A posição real da bounding box e a posição dos pixels agrupados perdem o alinhamento sub-pixel. Para tarefas de alta precisão (ex: segmentação de instâncias), o roi-align substitui esses arredondamentos por amostragem via interpolação bilinear.


Relacionadas: object-detection · fast-r-cnn

Construído com Eleventy · busca por Lunr.js