Receptive Field
Trường tiếp nhận là vùng ảnh đầu vào có thể ảnh hưởng đến một đơn vị trong mạng neural. Tìm hiểu cách trường tiếp nhận tăng theo độ sâu, stride và dilation, cùng mã nguồn.
Receptive field của một đơn vị trong mạng nơ-ron tích chập (CNN) là vùng trong ảnh đầu vào có thể ảnh hưởng đến giá trị của đơn vị đó. Một đơn vị trong lớp tích chập 3 × 3 đầu tiên của mạng quan sát một vùng pixel 3 × 3; các đơn vị trong lớp sâu hơn quan sát vùng ngày càng lớn vì mỗi lớp kết hợp các đầu ra lân cận của lớp trước đó. Receptive field xác định lượng ngữ cảnh mà một đặc trưng có thể sử dụng: đơn vị nhận diện toàn bộ xe buýt phải quan sát được toàn bộ xe buýt. Thuật ngữ này bắt nguồn từ khoa học thần kinh, nơi nó chỉ vùng trong trường thị giác kích hoạt một neuron.
Receptive field mở rộng như thế nào#
Mỗi lớp cộng thêm (k − 1) × j pixel vào receptive field, trong đó k là kích thước kernel, còn j—bước nhảy—là khoảng cách tính bằng pixel đầu vào giữa các đơn vị lân cận trong đầu vào của lớp đó, bằng tích của tất cả stride trước đó. Từ đây có ba hệ quả:
- Xếp chồng kernel nhỏ: Ba lớp 3 × 3 với stride 1 quan sát vùng 7 × 7, tương đương một lớp 7 × 7, nhưng chỉ cần 27C² trọng số thay vì 49C² với C kênh. Đây là lập luận mà các mạng VGG dùng để xây dựng các cụm tích chập 3 × 3 sâu.
- Stride và pooling: Mỗi lớp stride 2 hoặc bước pooling làm bước nhảy tăng gấp đôi, vì vậy các lớp sau mở rộng receptive field nhanh gấp đôi. Nhờ đó CNN đạt receptive field rộng hàng trăm pixel trong khi thu nhỏ feature map.
- Dilation: Phép tích chập 3 × 3 giãn (atrous) với dilation d đặt các điểm lấy mẫu cách nhau d pixel và bao phủ 2d + 1 pixel, mở rộng receptive field mà không giảm độ phân giải; cách này phù hợp với các tác vụ dày đặc theo từng pixel như phân đoạn ngữ nghĩa.
Đo trực tiếp receptive field xác nhận các quy tắc này: lan truyền ngược từ một giá trị đầu ra và kiểm tra pixel đầu vào nào nhận gradient khác 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")Kết quả in ra 7 × 7 cho cụm lớp thông thường, 15 × 15 cho cụm có stride—trong đó bước nhảy tăng từ 1 lên 2 rồi 4—và 13 × 13 cho cụm giãn, trong đó mỗi lớp cộng thêm 4 pixel.
Receptive field lý thuyết và hiệu dụng#
Công thức cho biết receptive field lý thuyết, tức mọi pixel có thể ảnh hưởng đến một đơn vị. Receptive field hiệu dụng đo mức ảnh hưởng thực tế của từng pixel: ảnh hưởng có dạng gần giống Gaussian, tập trung ở trung tâm và chỉ chiếm một phần diện tích lý thuyết. Kernel lớn hơn mở rộng receptive field này; RepLKNet dùng kernel depthwise có kích thước đến 31 × 31 và cho biết receptive field hiệu dụng lớn hơn đáng kể so với CNN dùng kernel nhỏ. Trong vision transformer, self-attention cho phép mỗi patch ảnh khai thác thông tin từ mọi patch khác ngay từ lớp đầu tiên, nên receptive field lý thuyết bao phủ toàn bộ ảnh ở mọi độ sâu.
Receptive field và các thuật ngữ liên quan#
- Kích thước kernel: Cửa sổ mà một phép tích chập đọc từ đầu vào của chính nó, chẳng hạn 3 × 3. Receptive field là vùng tích lũy trong ảnh gốc; ba kernel 3 × 3 xếp chồng đã tạo ra vùng 7 × 7.
- Feature map: Lưới đầu ra của một lớp. Receptive field mô tả vùng đầu vào đứng sau một vị trí duy nhất trên lưới đó.
- Cửa sổ ngữ cảnh: Số token mà một model ngôn ngữ đọc cùng lúc, là thành phần tương ứng với receptive field trên lưới ảnh.
Receptive field trong phát hiện đối tượng#
Detector dự đoán đối tượng nhỏ từ feature map mịn và đối tượng lớn từ map thô, sâu với receptive field lớn; feature pyramid network (FPN) đưa ngữ cảnh sâu trở lại các map mịn. Receptive field nhỏ hơn đối tượng chỉ quan sát được một phần của đối tượng; đối tượng rất nhỏ vẫn cần một mức mịn, vì trên map stride-32, đối tượng 20 pixel chiếm chưa đến một ô lưới. YOLO26 dự đoán từ các map có stride 8, 16 và 32; ở cuối backbone, model áp dụng một khối SPPF để max-pool map stride-32 với các cửa sổ tương đương 5 × 5, 9 × 9 và 13 × 13 ô, sau đó dùng một khối self-attention có vùng tiếp nhận bao phủ toàn bộ map stride-32.










