Spatial Pyramid Pooling
SPP-net
O Spatial Pyramid Pooling (SPP) foi um marco evolucionário nas redes neurais que pavimentou o caminho arquitetural para o fast-r-cnn.
Introduzido no artigo “Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition” (He et al., 2014), foi revolucionário por eliminar a restrição de “tamanho fixo de entrada” nas Redes Neurais Convolucionais clássicas.
O Gargalo do Tamanho Fixo
Antes do SPP-net, redes famosas (como AlexNet e VGG) exigiam que a imagem de entrada tivesse sempre dimensões estritas (ex: ). Isso acontecia não por causa das camadas convolucionais (que aceitam qualquer tamanho), mas sim devido às Camadas Totalmente Conectadas (FCs) no final da rede, que exigem vetores de tamanho matematicamente engessado.
Para contornar isso, usava-se cropping (cortar partes da imagem) ou warping (esticar e deformar), o que causava distorções severas de proporção e perda de geometria, degradando a acurácia de modelos de detecção de objetos.
A Solução: SPP
O SPP é uma camada adicionada logo após a última camada convolucional, antes das camadas FC. O seu funcionamento consiste em:
-
Receber um mapa de features de tamanho arbitrário (seja o tamanho do mapa).
-
Dividir esse mapa em várias resoluções independentes do tamanho absoluto (ex: uma grade , outra e outra ). Para um nível da pirâmide com uma grade de bins, o tamanho da janela (window) e o passo (stride) de pooling são calculados dinamicamente:
Eq. 1: Cálculo dinâmico do tamanho da janela e passo no SPP.
Onde:
- : tamanho da janela quadrada de pooling.
- : passo (stride) que a janela percorre no feature map.
- : dimensão atual (largura ou altura) do feature map recebido.
- : número de bins espaciais naquele nível específico da pirâmide.
- e : operações de arredondamento teto (cima) e piso (baixo).
-
Aplicar Max Pooling dentro de cada um desses bins e concatenar os resultados.
Independentemente do tamanho da imagem de entrada, o SPP sempre extrairá um vetor de tamanho fixo (neste exemplo, features por filtro convolucional), satisfazendo a exigência restrita das camadas FC posteriores.
Uma observação importante: o nível mais grosseiro da pirâmide () é equivalente a um Global Pooling — um ancestral do Global Average Pooling usado hoje para substituir camadas FC inteiras em redes modernas (ex: ResNet, GoogLeNet).
Treinamento Multi-tamanho
Na prática, as implementações de GPU da época (cuda-convnet, Caffe) exigiam lotes de tamanho fixo. O artigo contorna isso aproximando uma rede de tamanho variável por várias redes de tamanho fixo que compartilham todos os pesos: treina-se uma época inteira com imagens , troca-se para a rede (mantendo os pesos) na época seguinte, e assim alternadamente. Como as saídas do SPP têm sempre o mesmo comprimento, os parâmetros das camadas FC servem para qualquer resolução.
Esse multi-size training age como aumento de dados na dimensão de escala: melhora a acurácia de teste (o erro top-1 do Overfeat-7 cai de 30.36% para 29.68%) sem custo extra de inferência, e foi, segundo os autores, o primeiro método a treinar uma única rede com imagens de múltiplos tamanhos.
Legado no R-CNN
Ao invés de passar region proposals independentes pela rede (como no R-CNN original), o SPP-net permitiu rodar a imagem inteira pela CNN apenas uma vez, e então extrair o pool de features de cada região proposta diretamente desse mapa convolucional gigante. Isso acelerou a detecção de objetos em 24x–102x sobre o R-CNN (com acurácia comparável ou superior no Pascal VOC 2007), pavimentando o caminho para o Fast R-CNN e faster-r-cnn.
RoI Pooling como caso degenerado do SPP
O RoI Pooling do Fast R-CNN é um caso especial do SPP: uma pirâmide de um único nível (ex: apenas a grade , sem os níveis e ). O SPP-net já resolvia em 2014 os dois problemas centrais que o Fast R-CNN (2015) ficou famoso por atacar — projeção de propostas no feature map e pooling de tamanho fixo.
A diferença decisiva não foi arquitetural, mas de treinamento: no SPP-net, o fine-tuning ajustava apenas as camadas FC (as convoluções ficavam congeladas e os features eram pré-computados em disco); o Fast R-CNN tornou o ajuste end-to-end via SGD através da camada de pooling, simplificando o pipeline em estágio único. A lição histórica: uma técnica pode estar matematicamente pronta anos antes, mas só “pegar” quando o treinamento fica simples o bastante.
Referências e ferramentas
- He, K., Zhang, X., Ren, S., Sun, J. “Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition” (2014). arXiv:1406.4729 — artigo original do SPP-net (TPAMI 2015, preliminar no ECCV 2014).
Relacionadas: fast-r-cnn · faster-r-cnn · roi-pooling · ortogonalidade-arquitetural