Receptive Field
수용 영역은 신경망의 한 유닛에 영향을 줄 수 있는 입력 이미지의 영역입니다. 깊이, 스트라이드 및 팽창에 따라 수용 영역이 커지는 방식과 코드를 살펴봅니다.
합성곱 신경망(CNN)에서 유닛의 수용 영역은 입력 이미지 중 해당 유닛의 값에 영향을 줄 수 있는 영역입니다. 네트워크의 첫 번째 3 × 3 합성곱 계층의 유닛은 3 × 3 픽셀 패치를 보고, 더 깊은 계층의 유닛은 각 계층이 이전 계층의 인접 출력을 결합하므로 점차 더 넓은 영역을 봅니다. 수용 영역은 특성이 사용할 수 있는 문맥의 범위를 정합니다. 버스 전체를 인식하려면 유닛의 시야에 버스 전체가 들어와야 합니다. 이 용어는 단일 뉴런을 활성화하는 시야의 영역을 가리키는 신경과학에서 유래했습니다.
수용 영역의 확장 방식#
각 계층은 수용 영역에 (k − 1) × j 픽셀을 더합니다. 여기서 k는 커널 크기이고 j는 입력 픽셀 기준으로 해당 계층 입력의 인접 유닛 사이 거리인 점프입니다. 점프는 이전 모든 스트라이드의 곱과 같습니다. 이에 따라 세 가지 결과가 나타납니다.
- 작은 커널 쌓기: 스트라이드 1을 사용하는 3 × 3 계층 세 개는 7 × 7 패치를 봅니다. 이는 7 × 7 계층 하나와 같지만, 채널 수가 C일 때 가중치가 49C²개가 아닌 27C²개입니다. VGG 네트워크는 이를 근거로 3 × 3 합성곱을 여러 계층으로 쌓았습니다.
- 스트라이드 및 풀링: 스트라이드 2 계층이나 풀링 단계마다 점프가 두 배가 되므로 이후 계층에서는 수용 영역이 두 배 빠르게 확장됩니다. CNN은 이 방식으로 특성 맵을 축소하면서 수백 픽셀 크기의 수용 영역을 확보합니다.
- 팽창: 팽창 계수 d를 사용하는 팽창 합성곱(아트러스 합성곱)의 3 × 3 커널은 샘플링 지점 사이 간격을 d픽셀로 두어 2d + 1픽셀을 포함합니다. 다운샘플링 없이 수용 영역을 넓히므로 시맨틱 분할과 같은 픽셀 단위 밀집 예측 작업에 적합합니다.
수용 영역을 직접 측정하면 이러한 규칙을 확인할 수 있습니다. 하나의 출력값에서 역전파하고 어떤 입력 픽셀에 0이 아닌 기울기가 전달되는지 살펴보면 됩니다.
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")기본 스택에서는 7 × 7, 스트라이드가 있는 스택에서는 점프가 1에서 2, 4로 커지면서 15 × 15, 팽창 스택에서는 각 계층이 4픽셀을 더해 13 × 13이 출력됩니다.
이론적 수용 영역과 유효 수용 영역#
수식으로 계산하는 이론적 수용 영역은 유닛에 영향을 줄 수 있는 모든 픽셀을 포함합니다. 유효 수용 영역은 각 픽셀이 실제로 미치는 영향의 크기를 나타냅니다. 영향은 대략 가우시안 형태로 중앙에 집중되며 이론적 영역의 일부만 차지합니다. 큰 커널은 유효 수용 영역을 넓힙니다. RepLKNet은 최대 31 × 31 크기의 깊이별 커널을 사용해 작은 커널을 쓰는 CNN보다 훨씬 큰 유효 수용 영역을 보고했습니다. 비전 Transformer에서는 셀프 어텐션을 통해 첫 번째 계층부터 모든 이미지 패치가 다른 모든 패치를 참조하므로 이론적 수용 영역이 모든 깊이에서 이미지 전체를 포함합니다.
수용 영역과 관련 용어 비교#
- 커널 크기: 하나의 합성곱이 자체 입력에서 읽는 윈도우 크기입니다(예: 3 × 3). 수용 영역은 원본 이미지에서 누적된 영역을 의미하며, 3 × 3 커널 세 개를 쌓으면 이미 7 × 7 수용 영역을 얻습니다.
- 특성 맵: 계층의 출력 그리드입니다. 수용 영역은 해당 그리드의 한 위치에 대응하는 입력 영역을 나타냅니다.
- 컨텍스트 윈도우: 언어 모델이 한 번에 읽는 토큰 수로, 이미지 그리드에서 수용 영역에 대응하는 시퀀스 개념입니다.
객체 탐지에서의 수용 영역#
탐지기는 세밀한 특성 맵에서 작은 객체를, 큰 수용 영역을 가진 거칠고 깊은 특성 맵에서 큰 객체를 예측하며, 특성 피라미드 네트워크(FPN)는 깊은 계층의 문맥 정보를 세밀한 맵으로 다시 전달합니다. 객체보다 수용 영역이 작으면 일부만 보게 되며, 작은 객체에는 여전히 세밀한 수준의 맵이 필요합니다. 스트라이드 32 맵에서는 20픽셀 객체가 그리드 셀 하나보다 작은 크기로 표현되기 때문입니다. YOLO26은 스트라이드 8, 16, 32의 맵에서 예측하며, 백본 끝부분에 SPPF 블록을 적용합니다. 이 블록은 스트라이드 32 맵에 5 × 5, 9 × 9, 13 × 13 셀에 해당하는 윈도우로 최대 풀링을 적용한 뒤, 스트라이드 32 맵 전체를 다루는 셀프 어텐션 블록을 적용합니다.










