Feature Pyramid Network (FPN)
Mạng kim tự tháp đặc trưng (FPN) kết hợp đặc trưng ngữ nghĩa sâu với đặc trưng chi tiết, độ phân giải cao để bộ phát hiện tìm được cả đối tượng lớn lẫn nhỏ.
Mạng Kim tự tháp Đặc trưng (FPN) là một kiến trúc neck biến các feature map đa độ phân giải của backbone thành một kim tự tháp, trong đó mỗi cấp mang thông tin ngữ nghĩa mạnh và phù hợp với một dải kích thước vật thể. Được Facebook AI Research giới thiệu trong bài báo Mạng Kim tự tháp Đặc trưng cho Phát hiện Vật thể (CVPR 2017), FPN bổ sung một nhánh từ trên xuống và các kết nối ngang vào mạng nơ-ron tích chập (CNN) tiêu chuẩn, nhờ đó có thể phát hiện vật thể nhỏ ở các cấp độ phân giải cao mà vẫn chứa kiến thức từ các lớp sâu về hình dạng của vật thể. FPN và các kiến trúc kế thừa nằm giữa backbone và đầu phát hiện trong hầu hết kiến trúc phát hiện vật thể hiện đại và các model phân đoạn instance.
Vì sao Detector cần Feature đa tỷ lệ#
CNN backbone giảm kích thước feature map khi đi sâu hơn, vì vậy feature map cuối có ngữ nghĩa mạnh nhưng độ phân giải thô: ở stride 32, vật thể 20 pixel chiếm chưa đến một ô lưới. Các feature map ở lớp đầu giữ được chi tiết không gian nhỏ và chủ yếu phản hồi với cạnh và kết cấu. Trước FPN, detector có ba lựa chọn, mỗi lựa chọn đều có chi phí. Chạy mạng trên kim tự tháp ảnh ở nhiều tỷ lệ cho độ chính xác cao nhưng chậm hơn nhiều lần. Chỉ dự đoán từ map cuối, như Faster R-CNN ban đầu, thì nhanh nhưng xử lý vật thể nhỏ kém. Dự đoán từ nhiều giai đoạn backbone, như SSD, bắt đầu ở vị trí sâu trong mạng để tránh feature cấp thấp yếu, do đó bỏ lỡ các map độ phân giải cao cần thiết cho vật thể nhỏ. FPN cung cấp độ phủ đa tỷ lệ như kim tự tháp ảnh chỉ với một lượt forward pass; Faster R-CNN kết hợp FPN lập kỷ lục mới về hiệu năng của một model đơn trên tác vụ phát hiện COCO, đồng thời chạy ở tốc độ 5 khung hình/giây trên GPU.
Cách FPN hoạt động#
FPN xây dựng kim tự tháp qua ba bước:
- Nhánh từ dưới lên: Forward pass thông thường của backbone. FPN lấy feature map cuối cùng của mỗi giai đoạn, được ký hiệu từ C2 đến C5 với stride 4, 8, 16 và 32 trong ResNet.
- Nhánh từ trên xuống: Bắt đầu từ cấp độ thô nhất, mỗi map được upsample với hệ số 2 bằng phép nội suy láng giềng gần nhất, truyền ngữ nghĩa cấp cao xuống các cấp độ chi tiết hơn.
- Kết nối ngang: Phép tích chập 1×1 đưa mỗi map của backbone về cùng độ rộng 256 channel; kết quả được cộng từng phần tử với map đã upsample từ cấp bên trên, rồi phép tích chập 3×3 làm mượt tổng để giảm hiện tượng nhiễu do upsampling. Các đầu ra từ P2 đến P5 đều có 256 channel, vì vậy một prediction head dùng chung trọng số có thể chạy trên mọi cấp.
Torchvision cung cấp sẵn module FeaturePyramidNetwork, nhận các map của backbone dưới dạng một dictionary có thứ tự.
from collections import OrderedDict
import torch
from torchvision.ops import FeaturePyramidNetwork
# Đầu ra backbone cho ảnh 640x640 tại stride 8, 16 và 32 (số channel của ResNet-50)
features = OrderedDict(
c3=torch.randn(1, 512, 80, 80),
c4=torch.randn(1, 1024, 40, 40),
c5=torch.randn(1, 2048, 20, 20),
)
# Các phép tích chập ngang 1x1 cùng nhánh từ trên xuống giúp mọi cấp có cùng 256 channel
fpn = FeaturePyramidNetwork(in_channels_list=[512, 1024, 2048], out_channels=256)
pyramid = fpn(features)
for name, level in pyramid.items():
print(name, tuple(level.shape))Lệnh in ra c3 (1, 256, 80, 80), c4 (1, 256, 40, 40) và c5 (1, 256, 20, 20): mỗi cấp giữ nguyên kích thước không gian, đồng thời cả ba đều có chung độ rộng channel, nhờ đó một head duy nhất có thể xử lý mọi tỷ lệ.
Ứng dụng#
- Ảnh hàng không và vệ tinh: Xe cộ, người và tòa nhà trong phân tích ảnh vệ tinh và video drone thường chỉ chiếm vài pixel, vì vậy detector dựa vào các cấp stride-4 và stride-8 của kim tự tháp.
- Phân đoạn instance: Mask R-CNN, có trong Detectron2, gán từng vùng cho một cấp kim tự tháp dựa trên kích thước trước khi dự đoán bbox và mask.
- Phân đoạn toàn cảnh: Panoptic FPN bổ sung nhánh phân đoạn ngữ nghĩa vào cùng kim tự tháp, gán nhãn cho các thành phần như đường và bầu trời cùng với những vật thể có thể đếm được.
- Xe tự hành: Một khung hình camera có thể chứa xe tải ở gần chiếm nửa ảnh, cùng người đi bộ và đèn giao thông ở xa chỉ cao vài pixel.
FPN so với PANet, BiFPN và các neck khác#
Nhánh từ trên xuống của FPN là điểm khởi đầu cho một họ neck thay đổi cách thông tin luân chuyển giữa các cấp:
- PANet: Bổ sung nhánh từ dưới lên sau nhánh từ trên xuống của FPN, rút ngắn đường đi từ feature chi tiết, được định vị chính xác đến các cấp trên. PANet đứng đầu thử thách phân đoạn instance COCO 2017.
- BiFPN: Neck của EfficientDet lặp lại nhiều lần quá trình hợp nhất từ trên xuống và từ dưới lên, loại bỏ các node chỉ có một đầu vào và học trọng số cho từng đầu vào được hợp nhất.
- NAS-FPN: Bố cục kim tự tháp được tìm bằng tìm kiếm kiến trúc mạng nơ-ron và xếp chồng nhiều lần.
- U-Net: Cũng hợp nhất feature thô và chi tiết thông qua các skip connection, sau đó dự đoán một lần ở độ phân giải đầy đủ; kiến trúc này phù hợp với phân đoạn từng pixel hơn là phát hiện đa tỷ lệ.
YOLO26 sử dụng neck kết hợp FPN và PAN, hợp nhất các cấp bằng phép nối: hai bước upsampling truyền ngữ cảnh stride-32 xuống cấp stride-8, hai phép tích chập có stride đưa chi tiết trở lên, và head dự đoán từ P3, P4 và P5 ở stride 8, 16 và 32. Biến thể yolo26-p2.yaml mở rộng kim tự tháp với cấp P2 stride-4 cho các vật thể rất nhỏ, khiến lượng tính toán chưa fusion của YOLO26n tăng từ 6.1 lên 9.5 GFLOPs.










