# 論文筆記 # ResNeSt: Split-Attention Networks 這篇論文主要提出一種簡單的架構結合 channel-wise 的 attention 策略與 multi-path network layout。因此命名上以 : Split-Attention Network (ResNeSt) 來表示 ### Split-Attention Networks 我們探討所謂的 Featuremap Group: 我們輸入的 feature 會被分成好幾個 groups,這些 groups會被稱為 cardinal groups。 接著每個 groups 會被分成更小的 radix 切割。 因此總共的特徵群會是 $G = KR$。 然後我們會用使用 transformations 來將我們的 feature $F_1, F_2, ... F_G$ 轉變為 $U_i = F_i(X) i∈1,2,...G$。 ![](https://hackmd.io/_uploads/r1ojzsgr2.png) Split Attention in Cardinal Groups. ![](https://hackmd.io/_uploads/SJf1HolBn.png) 我們的 feature 會通過 R 個 radix 相加後得到 $U^k$ , 接著通過 global average pooling 。 再通過公式: ![](https://hackmd.io/_uploads/r1w8rieS3.png) 得到我們的 weighted fusion $V^k$ 接著就是要把我們的輸出 concat起來 $V = Concat \{V^1, V^2, ... V^K \}$ 最後,因為我們是一個 residual blocks , 因此我們最後的輸出應該要是 $Y = V + X$ 若跨步大小大於1 ,則使用一個適當的 transformation $T$ 來對齊輸出 $Y = V + T(X)$ Instantiation and Computational Costs. 根據圖二可以看到我們的 Split-Attention 是由 1x1 卷積層後跟著一個 3x3 卷積層, 然後我們的 attention參數化是使用兩個 fully connected layers with ReLU 激活函數。這個 Split-Attention Block 的 FLOPS 跟 標準的 residual block 差不多。 觀察圖二的 SE-Net , 假若我們的網路設置 radix = 1,就如同樣的效果。 SK-Net ,我們的網路設置 radix = 2,也是一樣的概念。 這個網路一般化了上述兩個網絡對於 featuremap 的注意力機制實作。 ![](https://hackmd.io/_uploads/r1e-RheH3.png) 論文作者表示雖然使用 2s2x(2 radix 2 cardinal) 效果最好,但在遷移任務上使用 2s1x64d 比較能遷移,因此網絡程式碼裡的 default 是 2 radix 1 cardinal group 的配置。 # PoseFix PoseFix 無關乎模型與姿態樣貌,而是基於統計上認為keypoint 的 quality,共分為 good 、 jitter 、 inverse 、 swap、 miss。 ![](https://hackmd.io/_uploads/r1Byha-Hn.png) Training 的方法則是使用 groundtruth 來合成 pose , 合成模擬的pose需要多樣性與真實性。 ### Model structure **Network architecture** 架構如論文 (Simple Baselines for Human Pose Estimation and Tracking) 。 使用一個 deep backbone network (ResNet) 跟一些 upsampling layers ,最後一層需要 decode 成 heatmaps 接於 softmax 之後。 **Coarse-to-fine estimation** ![](https://hackmd.io/_uploads/Sy_YTTbrh.png) Input 是一個預測的 heatmap。 n 代表是第幾個關節點。 值得一提的是原始圖像會與 heatmap 一起送進 PoseFix。 ![](https://hackmd.io/_uploads/HJUIC6-Hh.png) 我們網路生成的 heatmap $H_n$ 跟預測出來的關節點座標 $C_n$ ,為了使 $H_n$ 更細緻,我們會使用 one-hot vector 來監督學習, 接著透過一個 soft-argmax 將 $H_n$ 變成 $C_n$ 。 soft-argmax 是一個 element-wise 的相乘作用於座標網格與 heatmap (如 Figure 2 所視),最後 summation 起來。 Loss 的定義則是: ![](https://hackmd.io/_uploads/S1eYSe0-r2.png) $L_H$ 是一個交叉傷損失,計算於 softmax 之後。 $H^*_N$ 是一個 Groundtruth heatmaps one hot label。 ![](https://hackmd.io/_uploads/BJf-W0-r2.png) $L_C$ 則是針對座標 $L_1$ losses 。 :::info 為啥需要監督 heatmap 跟真實坐標呢? 論文提到: The $L_H$ forces the PoseFix to select a single grid point in the estimated heatmap, and the $L_C$ enables the PoseFix to localize keypoints more precisely because it is calculated in the continuous space which is free from quantization errors. ::: 可見模型的訓練需要凍結 backbone 再對這個額外的 backbone module 進行訓練。 # Selecttive Kernel Networks ![](https://hackmd.io/_uploads/H1p-F1zr2.png) SK convolution 有三步: 1. split 2. Fuse 3. Select 將輸入的 feature map X 變成 U 透過兩個不同的 transformation , kernel size 為 3 跟 5。 就 split 完成了 Fuse : $U = U_1 + U_2$ ![](https://hackmd.io/_uploads/HyFG5kMSn.png) 接著使用 global average pooling 將空間壓縮。 ![](https://hackmd.io/_uploads/BJK8qJfrn.png) 接著使用一個全連接層, $B$ 為 batch normolization , $δ$ 為 ReLU 。 為了使模型的效能更好,實際上會使用到維度縮減: ![](https://hackmd.io/_uploads/B1yWokzS2.png) Select: 接著為了能夠讓網絡選擇不同的空間尺度資訊,這裡最後做一個 softmax: ![](https://hackmd.io/_uploads/HkzBiyfB3.png) 因此最後這個 module 輸出的 Vector 為: ![](https://hackmd.io/_uploads/r1qPiyfH3.png)