Receptive Field
O campo recetivo é a região da imagem de entrada que pode afetar uma unidade de uma rede neuronal. Como cresce com a profundidade, o stride e a dilatação, com código.
O campo receptivo de uma unidade em uma rede neural convolucional (CNN) é a região da imagem de entrada que pode influenciar o valor dessa unidade. Uma unidade na primeira camada de convolução 3 × 3 da rede vê um recorte de pixels de 3 × 3, e as unidades em camadas mais profundas veem regiões progressivamente maiores porque cada camada combina saídas vizinhas da camada anterior. O campo receptivo determina quanto contexto uma característica pode usar: uma unidade que reconhece um ônibus inteiro precisa enxergar o ônibus inteiro. O termo vem da neurociência, onde designa a área do campo visual que ativa um único neurônio.
Como o campo receptivo cresce#
Cada camada acrescenta (k − 1) × j pixels ao campo receptivo, em que k é o tamanho do kernel e j, o salto, é a distância em pixels da entrada entre unidades vizinhas da camada de entrada, igual ao produto de todos os strides anteriores. Disso decorrem três consequências:
- Empilhamento de kernels pequenos: Três camadas 3 × 3 com stride 1 enxergam um recorte de 7 × 7, o mesmo que uma camada 7 × 7, com 27C² pesos em vez de 49C² para C canais; esse foi o argumento usado pelas redes VGG para construir pilhas profundas de convoluções 3 × 3.
- Strides e pooling: Cada camada com stride 2 ou etapa de pooling dobra o salto, então as camadas posteriores ampliam o campo receptivo duas vezes mais rápido. É assim que as CNNs alcançam campos receptivos de centenas de pixels enquanto reduzem seus mapas de características.
- Dilatação: Uma convolução 3 × 3 dilatada (atróusa), com dilatação d, espaça seus pontos de amostragem em d pixels e cobre 2d + 1 pixels, ampliando o campo receptivo sem reduzir a resolução, o que é adequado para tarefas densas por pixel, como a segmentação semântica.
A medição direta do campo receptivo confirma essas regras: faça a retropropagação a partir de um valor de saída e veja quais pixels de entrada recebem gradiente diferente de zero.
import torch
from torch import nn
# Three stacked 3x3 convolutions in three configurations: (stride, dilation)
for name, stride, dilation in (("plain", 1, 1), ("strided", 2, 1), ("dilated", 1, 2)):
convs = [nn.Conv2d(1, 1, 3, stride, padding=dilation, dilation=dilation, bias=False) for _ in range(3)]
for conv in convs:
nn.init.ones_(conv.weight) # positive weights, so no input pixel's gradient cancels out
layers = nn.Sequential(*convs)
# Backpropagate from the central output value; input pixels with nonzero gradient form its receptive field
image = torch.zeros(1, 1, 64, 64, requires_grad=True)
output = layers(image)
output[0, 0, output.shape[2] // 2, output.shape[3] // 2].backward()
rows = image.grad[0, 0].sum(dim=1).nonzero()
size = rows.max().item() - rows.min().item() + 1
print(f"{name}: {size}x{size} pixels")Ele imprime 7 × 7 para a pilha simples, 15 × 15 para a pilha com strides, em que o salto cresce de 1 para 2 e para 4, e 13 × 13 para a pilha dilatada, em que cada camada acrescenta 4 pixels.
Campo receptivo teórico versus efetivo#
A fórmula fornece o campo receptivo teórico, ou seja, todos os pixels que podem afetar uma unidade. O campo receptivo efetivo mede quanto cada pixel realmente contribui: sua influência tem formato aproximadamente gaussiano, concentrado no centro, e ocupa apenas uma fração da área teórica. Kernels maiores o ampliam; a RepLKNet usou kernels depthwise de até 31 × 31 e relatou campos receptivos efetivos muito maiores que os das CNNs de kernels pequenos. Nos transformers de visão, a atenção própria permite que cada recorte da imagem use todos os outros desde a primeira camada, então o campo receptivo teórico cobre a imagem inteira em todas as profundidades.
Campo receptivo versus termos relacionados#
- Tamanho do kernel: A janela que uma convolução lê de sua própria entrada, como 3 × 3. O campo receptivo é a área acumulada na imagem original, e três kernels 3 × 3 empilhados já resultam em 7 × 7.
- Mapa de características: A grade de saída de uma camada. O campo receptivo descreve a região de entrada correspondente a uma única posição nessa grade.
- Janela de contexto: O número de tokens que um modelo de linguagem lê de uma vez, o equivalente em sequências ao campo receptivo de uma grade de imagem.
Campos receptivos na detecção de objetos#
Os detectores preveem objetos pequenos usando mapas de características finos e objetos grandes usando mapas grosseiros e profundos com campos receptivos amplos; uma rede de pirâmide de características (FPN) combina o contexto profundo com os mapas finos. Um campo receptivo menor que o objeto só enxerga parte dele, e objetos minúsculos ainda precisam de um nível fino, pois, em um mapa com stride 32, um objeto de 20 pixels ocupa menos de uma célula da grade. YOLO26 faz previsões em mapas com strides 8, 16 e 32; no fim de seu backbone, aplica um bloco SPPF, que faz max pooling no mapa com stride 32 usando janelas equivalentes a 5 × 5, 9 × 9 e 13 × 13 células, seguido por um bloco de atenção própria cujo alcance abrange todo o mapa com stride 32.










