多視覺任務的全能: HRNet
HRNet是微軟亞洲研究院的王井東老師領導的團隊完成的,打通圖像分類、圖像分割、目標檢測、人臉對齊、姿態識別、風格遷移、Image Inpainting、超分、optical flow、Depth estimation、邊緣檢測等網絡結構。
王老師在ValseWebinar《物體和關鍵點檢測》中親自講解了HRNet,講解地非常透徹。以下文章主要參考了王老師在演講中的解讀,配合論文+代碼部分,來為各位讀者介紹這個全能的Backbone-HRNet。
1. 引入
網絡結構設計思路
在人體姿態識別這類的任務中,需要生成一個高分辨率的heatmap來進行關鍵點檢測。這就與一般的網絡結構比如VGGNet的要求不同,因為VGGNet最終得到的feature map分辨率很低,損失了空間結構。
傳統的解決思路
獲取高分辨率的方式大部分都是如上圖所示,采用的是先降分辨率,然后再升分辨率的方法。U-Net、SegNet、DeconvNet、Hourglass本質上都是這種結構。
雖然看上去不同,但是本質是一致的
2. 核心
普通網絡都是這種結構,不同分辨率之間是進行了串聯
不斷降分辨率
王井東老師則是將不同分辨率的feature map進行並聯:
並聯不同分辨率feature map
在並聯的基礎上,添加不同分辨率feature map之間的交互(fusion)。
具體fusion的方法如下圖所示:
同分辨率的層直接復制。
·
需要升分辨率的使用bilinear upsample + 1x1卷積將channel數統一。
·
需要降分辨率的使用strided 3x3 卷積。
·
三個feature map融合的方式是相加。
至於為何要用strided 3x3卷積,這是因為卷積在降維的時候會出現信息損失,使用strided 3x3卷積是為了通過學習的方式,降低信息的損耗。所以這里沒有用maxpool或者組合池化。
HR示意圖
另外在讀HRNet的時候會有一個問題,有四個分支的到底如何使用這幾個分支呢?論文中也給出了幾種方式作為最終的特征選擇。
三種特征融合方法
(a)圖展示的是HRNetV1的特征選擇,只使用分辨率最高的特征圖。
(b)圖展示的是HRNetV2的特征選擇,將所有分辨率的特征圖(小的特征圖進行upsample)進行concate,主要用於語義分割和面部關鍵點檢測。
(c)圖展示的是HRNetV2p的特征選擇,在HRNetV2的基礎上,使用了一個特征金字塔,主要用於目標檢測網絡。
再補充一個(d)圖
HRNetV2分類網絡后的特征選擇
(d)圖展示的也是HRNetV2,采用上圖的融合方式,主要用於訓練分類網絡。
總結一下HRNet創新點:·
將高低分辨率之間的鏈接由串聯改為並聯。在整個網絡結構中都保持了高分辨率的表征(最上邊那個通路)。·
在高低分辨率中引入了交互來提高模型性能。
3. 效果
3.1 消融實驗
1. 對交互方法進行消融實驗,證明了當前跨分辨率的融合的有效性。
交互方法的消融實現
2. 證明高分辨率feature map的表征能力
1x代表不進行降維,2x代表分辨率變為原來一半,4x代表分辨率變為原來四分之一。W32、W48中的32、48代表卷積的寬度或者通道數。
3.2 姿態識別任務上的表現
以上的姿態識別采用的是top-down的方法。
COCO驗證集的結果
可以看到上圖用紅色箭頭串起來的是不是和SELayer很相似。為什么說SENet是HRNet的一個特例,但從這個結構來講,可以這么看:
· SENet沒有像HRNet這樣分辨率變為原來的一半,分辨率直接變為1x1,比較極端。變為1x1向量以后,SENet中使用了兩個全連接網絡來學習通道的特征分布;但是在HRNet中,使用了幾個卷積(Residual block)來學習特征。
· SENet在主干部分(高分辨率分支)沒有安排卷積進行特征的學習;HRNet在主干部分(高分辨率分支)安排了幾個卷積(Residual block)來學習特征。
· 特征融合部分SENet和HRNet區分比較大,SENet使用的對應通道相乘的方法,HRNet則使用的是相加。之所以說SENet是通道注意力機制是因為通過全局平均池化后沒有了空間特征,只剩通道的特征;HRNet則可以看作同時保留了空間特征和通道特征,所以說HRNet不僅有通道注意力,同時也有空間注意力。
HRNet團隊構建了分類、分割、檢測、關鍵點檢測等庫,工作量非常大,而且做了很多扎實的實驗證明了這種思路的有效性。所以是否可以認為HRNet屬於SENet之后又一個更優的backbone呢?還需要自己實踐中使用這種想法和思路來驗證。
4. 參考
https://arxiv.org/pdf/1908.07919
https://www.bilibili.com/video/BV1WJ41197dh?t=508
https://github.com/HRNet