Back to Explore
Giải mã kiến trúc PANet: Khi các tháp đặc trưng (Feature Pyramids) vận hành theo hướng Bottom-Up

Giải mã kiến trúc PANet: Khi các tháp đặc trưng (Feature Pyramids) vận hành theo hướng Bottom-Up

Khám phá PANet - kiến trúc đột phá cải thiện luồng thông tin trong các mô hình nhận diện vật thể. Bài viết đi sâu vào cách PANet khắc phục hạn chế của FPN bằng cách bổ sung đường dẫn 'bottom-up' để truyền tải thông tin không gian, kèm hướng dẫn triển khai chi tiết với PyTorch.

Website
Upvote this postSign in to upvote this article.

Giải mã kiến trúc PANet: Khi các tháp đặc trưng (Feature Pyramids) vận hành theo hướng Bottom-Up

Trong bài viết trước, chúng ta đã tìm hiểu về kiến trúc FPN (Feature Pyramid Network) - một trong những "cổ máy" (neck) có ảnh hưởng nhất được áp dụng cho các mô hình backbone. FPN được giới thiệu nhằm tăng cường khả năng phát hiện các vật thể nhỏ. Tuy nhiên, Liu và cộng sự vào năm 2018 đã nhận thấy luồng thông tin của FPN vẫn còn dư địa để cải thiện. Họ đã quyết định giải quyết vấn đề này bằng cách đề xuất PANet trong bài báo nghiên cứu "Path Aggregation Network for Instance Segmentation".

Tổng quan về FPN

PANet được xây dựng dựa trên kiến trúc FPN. Trong một mô hình backbone dựa trên CNN, các bản đồ đặc trưng (feature maps) sâu hơn có đặc điểm khác biệt so với các lớp nông hơn. Các lớp sâu chứa nhiều thông tin ngữ nghĩa (semantic) nhưng lại thiếu thông tin không gian (spatial). Ngược lại, các lớp nông chứa nhiều thông tin không gian nhưng lại thiếu thông tin ngữ nghĩa. Điều này có nghĩa là chúng ta nên sử dụng các bản đồ đặc trưng sâu để dự đoán vật thể lớn và bản đồ nông để dự đoán vật thể nhỏ.

FPN giải quyết vấn đề này bằng cách kết hợp các bản đồ đặc trưng từ lớp sâu và lớp nông, giúp "tiêm" thông tin ngữ nghĩa vào các lớp nông.

Minh họa luồng thông tin trong FPN

Vấn đề mà FPN chưa giải quyết được

Mặc dù FPN rất hiệu quả, nhưng các tác giả của PANet nhận thấy một vấn đề về luồng thông tin. Trong FPN, các bản đồ đặc trưng sâu vẫn thiếu thông tin không gian. Việc truyền tải thông tin qua hàng trăm lớp trong backbone khiến thông tin không gian bị suy giảm (degradation). PANet giải quyết điều này bằng cách tạo ra các "đường dẫn tắt" (shortcut paths) để truyền tải thông tin không gian từ các lớp nông lên các lớp sâu hơn.

Cách PANet giải quyết vấn đề

Các tác giả PANet đã đề xuất thêm một chồng các lớp tích chập (convolution layers) đặt trên đỉnh của FPN hiện có, cùng với các kết nối ngang (lateral connections). Điều này cho phép các bản đồ đặc trưng nông truyền tải thông tin không gian tới các lớp sâu một cách liền mạch hơn.

Nếu không có PANet, thông tin từ tensor C2 phải đi qua toàn bộ backbone (hơn 100 lớp). Với PANet, con đường này được rút ngắn xuống chỉ còn khoảng 10 lớp, giúp bảo tồn thông tin không gian tốt hơn đáng kể.

Chi tiết kiến trúc PANet

Trong PANet, các tensor P5, P4, P3, P2 từ FPN được chuyển tiếp vào con đường tăng cường "bottom-up" để tạo ra các tensor N5, N4, N3, N2. Các tensor N này chính là cơ sở để đầu dò (detection head) thực hiện dự đoán.

Triển khai PANet với PyTorch

Dưới đây là cách triển khai PANet từ đầu:

import torch
import torch.nn as nn

class PANet(nn.Module):
    def __init__(self):
        super().__init__()
        self.downsample_n2 = nn.Conv2d(256, 256, kernel_size=3, stride=2, padding=1)
        self.downsample_n3 = nn.Conv2d(256, 256, kernel_size=3, stride=2, padding=1)
        self.downsample_n4 = nn.Conv2d(256, 256, kernel_size=3, stride=2, padding=1)
        
        self.conv_n2down_p3 = nn.Conv2d(256, 256, kernel_size=3, padding=1)
        self.conv_n3down_p4 = nn.Conv2d(256, 256, kernel_size=3, padding=1)
        self.conv_n4down_p5 = nn.Conv2d(256, 256, kernel_size=3, padding=1)
        
        self.relu = nn.ReLU()

    def forward(self, p2, p3, p4, p5):
        n2 = p2
        n2down = self.relu(self.downsample_n2(n2))
        n2down_p3 = n2down + p3
        n3 = self.relu(self.conv_n2down_p3(n2down_p3))
        # Tương tự cho các lớp tiếp theo...
        return n2, n3, n4, n5

Các lưu ý quan trọng:

  1. Activation: Khác với FPN (thường bỏ qua ReLU trong neck), PANet sử dụng ReLU sau mỗi lớp tích chập trong con đường bottom-up.
  2. Channels: Tất cả các tensor trong cấu trúc PANet đều duy trì 256 kênh, giúp việc cộng phần tử (element-wise summation) diễn ra thuận lợi.

Kết luận

Bằng cách kết hợp FPN (top-down) và PANet (bottom-up), chúng ta tạo ra một luồng thông tin hai chiều: làm giàu thông tin ngữ nghĩa cho các lớp nông và làm giàu thông tin không gian cho các lớp sâu. Đây là một đóng góp cốt lõi đã được áp dụng rộng rãi trong các kiến trúc hiện đại ngày nay. Bạn có thể tìm thấy mã nguồn đầy đủ tại GitHub của tác giả.

Discussion (0)

You need to log in to post comments. Log In

No comments yet. Start the discussion!

Do you like this post?

Upvote to push this post higher on the community feed

Details

Posted by: @admin
Categories: Libraries & Frameworks
Date posted: 8 tháng 7, 2026