HRNet (High-Resolution Network) thay đổi tư duy thiết kế backbone: thay vì hạ độ phân giải dần rồi khôi phục lại, mạng giữ biểu diễn độ phân giải cao xuyên suốt và chạy song song nhiều nhánh ở các độ phân giải khác nhau. Nhờ vậy biểu diễn cuối vừa giàu ngữ nghĩa, vừa chính xác về vị trí — lý tưởng cho các bài toán cần định vị chính xác như ước lượng tư thế người (pose estimation) và phân vùng ảnh (segmentation).
Phần lớn backbone kinh điển — VGG, ResNet, GoogLeNet — được thiết kế cho bài toán phân loại ảnh. Triết lý của chúng là hạ độ phân giải dần (high resolution → low resolution) qua các tầng pooling và strided convolution. Mỗi lần giảm kích thước không gian, mạng đánh đổi chi tiết vị trí để lấy đặc trưng ngữ nghĩa giàu hơn và trường tiếp nhận (receptive field) rộng hơn. Với phân loại, điều này hợp lý: ta chỉ cần biết "trong ảnh có con mèo", không cần biết con mèo nằm ở pixel nào.
Gọi đầu vào có kích thước \(H \times W\). Sau bốn lần giảm độ phân giải, bản đồ đặc trưng tụt xuống còn \(\tfrac{1}{32}\) kích thước — tức \(\tfrac{H}{32} \times \tfrac{W}{32}\). Với ảnh \(512 \times 512\), feature map chỉ còn \(16 \times 16\): mỗi điểm trên đó tương ứng với cả một vùng \(32 \times 32\) pixel của ảnh gốc. Thông tin vị trí ở mức pixel gần như đã biến mất.
Vấn đề nảy sinh khi ta chuyển sang bài toán dự đoán dày đặc (dense prediction) — segmentation, pose estimation, depth estimation — nơi cần một nhãn (hoặc tọa độ) cho từng pixel. Lúc này phải khôi phục lại độ phân giải đã mất, theo kiểu encoder–decoder (U-Net): encoder hạ dần độ phân giải, decoder upsample dần để dựng lại bản đồ \(H \times W\).
Nhưng quá trình low → high này chỉ là tái tạo thông tin không gian đã bị nén mất, chứ không hồi sinh được độ chính xác gốc. Dù U-Net dùng skip connection để bơm chi tiết từ encoder sang decoder, biểu diễn ở "đáy chữ U" vẫn rất thô về không gian. Kết quả: biên đối tượng trong segmentation bị nhòe, tọa độ keypoint trong pose estimation bị lệch vài pixel — sai số nhỏ nhưng tai hại với các bài toán đòi hỏi vị trí pixel chuẩn.
HRNet lật ngược tư duy bằng hai nguyên tắc đơn giản nhưng mạnh mẽ:
Gọi nhánh đầu tiên có độ phân giải \(\tfrac{1}{4}\). Qua mỗi stage, HRNet thêm một nhánh mới có độ phân giải bằng một nửa nhánh thấp nhất hiện có, tạo ra dãy độ phân giải \(\tfrac{1}{4}, \tfrac{1}{8}, \tfrac{1}{16}, \tfrac{1}{32}\) chạy song song. Số kênh (channels) tăng dần khi độ phân giải giảm — đúng tinh thần "không gian nhỏ thì ngữ nghĩa dày".
Ý nghĩa: nhánh high-res giữ vị trí chính xác; các nhánh low-res nhìn rộng và trừu tượng hơn nên giàu ngữ nghĩa. Thay vì ép một biểu diễn duy nhất gánh cả hai vai trò ở hai thời điểm khác nhau, HRNet để chúng cùng tồn tại và bổ trợ lẫn nhau.
Nếu các nhánh chỉ chạy song song mà không "nói chuyện" với nhau thì mỗi nhánh sẽ phiến diện: nhánh cao thiếu ngữ nghĩa, nhánh thấp thiếu chi tiết. Bí quyết của HRNet là repeated multi-scale fusion — các nhánh trao đổi thông tin nhiều lần dọc theo mạng, chứ không chỉ gộp một lần ở cuối.
Tại mỗi module fusion, mọi nhánh nhận đóng góp từ mọi nhánh khác. Cụ thể, để đưa đặc trưng từ độ phân giải này sang độ phân giải kia, cần khớp kích thước không gian và số kênh:
| Hướng | Phép biến đổi | Mục đích |
|---|---|---|
| Cao → thấp (downsample) | Strided convolution \(3 \times 3\) (lặp lại để giảm \(\times 2, \times 4, \dots\)) | Bơm chi tiết không gian từ nhánh cao xuống nhánh thấp |
| Thấp → cao (upsample) | Bilinear upsampling + convolution \(1 \times 1\) | Bơm ngữ nghĩa từ nhánh thấp lên nhánh cao |
| Cùng độ phân giải | Đường nối thẳng (identity) | Giữ nguyên đặc trưng của chính nhánh đó |
Conv \(1 \times 1\) sau khi upsample dùng để chỉnh số kênh cho khớp (nhánh thấp có nhiều kênh hơn nhánh cao). Sau khi tất cả các luồng đã được biến đổi về cùng kích thước của nhánh đích, chúng được cộng lại (element-wise sum). Có thể viết gọn đặc trưng của nhánh \(r\) sau fusion là:
$$ Y_r = \sum_{s} \mathcal{T}_{s \to r}\big(X_s\big) $$
trong đó \(X_s\) là đặc trưng đầu vào của nhánh nguồn \(s\), còn \(\mathcal{T}_{s \to r}\) là phép biến đổi tương ứng (downsample nếu \(s \lt r\), upsample nếu \(s \gt r\), identity nếu \(s = r\)). Vì fusion lặp lại nhiều lần, sau vài stage mỗi nhánh đã hấp thụ thông tin của tất cả các độ phân giải.
Hệ quả quan trọng: biểu diễn high-res cuối cùng của HRNet vừa giàu ngữ nghĩa (đã hút từ các nhánh thấp) vừa chính xác về không gian (chưa từng bị nén mất). Đây chính là điều mà encoder–decoder không đạt được.
HRNet được tổ chức thành các stage. Mỗi stage chứa các khối residual để học đặc trưng trong từng nhánh, kết thúc bằng một (hoặc nhiều) module multi-scale fusion. Số nhánh tăng dần qua từng stage:
| Stage | Số nhánh | Các độ phân giải | Ghi chú |
|---|---|---|---|
| Stem | — | \(\tfrac{1}{4}\) | 2 conv stride-2 đưa ảnh về \(\tfrac{1}{4}\) trước khi vào nhánh chính |
| Stage 1 | 1 | \(\tfrac{1}{4}\) | Chỉ có nhánh high-res |
| Stage 2 | 2 | \(\tfrac{1}{4}, \tfrac{1}{8}\) | Thêm 1 nhánh thấp + fusion |
| Stage 3 | 3 | \(\tfrac{1}{4}, \tfrac{1}{8}, \tfrac{1}{16}\) | Thêm 1 nhánh thấp + nhiều fusion |
| Stage 4 | 4 | \(\tfrac{1}{4}, \tfrac{1}{8}, \tfrac{1}{16}, \tfrac{1}{32}\) | Đủ 4 nhánh, fusion dày đặc |
Khi chuyển sang stage mới, một transition layer sinh nhánh phân giải thấp mới bằng strided conv (lấy độ phân giải bằng một nửa nhánh thấp nhất hiện có), đồng thời giữ lại tất cả các nhánh cũ. Trong mỗi stage, các nhánh chạy song song qua các block residual rồi gặp nhau ở module fusion. Cuối mạng, các độ phân giải được tổng hợp đa độ phân giải để tạo biểu diễn đầu ra.
Cùng một backbone, nhưng cách tổng hợp đầu ra ở cuối mạng quyết định phiên bản:
| Phiên bản | Cách lấy đầu ra | Phù hợp |
|---|---|---|
| HRNetV1 | Chỉ dùng đặc trưng của nhánh high-res (\(\tfrac{1}{4}\)) làm output, bỏ qua các nhánh thấp | Human pose estimation — nơi định vị keypoint là tất cả |
| HRNetV2 | Ghép (concatenate) tất cả các nhánh: upsample mọi nhánh thấp về \(\tfrac{1}{4}\) rồi nối kênh, tạo biểu diễn đa tỉ lệ phong phú | Semantic segmentation, facial landmark |
| HRNetV2p | Từ output V2, downsample tạo pyramid đa cấp kiểu FPN | Object detection (làm backbone cho detector) |
Nói cách khác: V1 tin rằng nhánh high-res sau nhiều vòng fusion đã đủ giàu ngữ nghĩa để định vị keypoint; còn V2/V2p khai thác triệt để cả bốn độ phân giải để phục vụ các bài toán cần cả vùng lẫn biên. Việc chọn phiên bản chỉ là thay đầu ra, phần thân backbone giữ nguyên.
HRNet đặc biệt mạnh ở các bài toán cần định vị chính xác:
So sánh ba triết lý giữ/khôi phục độ phân giải cho dense prediction:
| Tiêu chí | Encoder–Decoder (U-Net) | Dilated Conv (DeepLab) | HRNet |
|---|---|---|---|
| Cách giữ độ phân giải | Hạ xuống rồi upsample khôi phục; skip connection bơm chi tiết | Bỏ pooling cuối, dùng atrous/dilated conv giữ độ phân giải mà vẫn tăng receptive field | Luôn giữ nhánh high-res song song, không nén rồi giải nén |
| Thông tin vị trí | Mất một phần ở đáy chữ U, dựng lại gần đúng | Giữ tốt hơn, nhưng feature thường ở \(\tfrac{1}{8}\) ảnh | Giữ tốt nhất ở \(\tfrac{1}{4}\), không qua nén |
| Ngữ nghĩa | Tốt (từ đáy encoder) | Tốt (receptive field rộng nhờ dilation) | Tốt nhờ fusion lặp lại với các nhánh thấp |
| Chi phí tính toán | Trung bình | Cao (dilated conv ở độ phân giải lớn tốn FLOPs/bộ nhớ) | Cao (nhiều nhánh song song) |
HRNet đã pretrained trên ImageNet/COCO làm backbone (có sẵn trong timm, mmpose, mmsegmentation), gắn thêm head theo bài toán rồi fine-tune — vừa nhanh hội tụ vừa đỡ tốn tài nguyên.