SpineNet : 重新思考特徵抽取時的降解析度操作
SpineNet : 重新思考特徵抽取時的降解析度操作
從convolution neural network (CNN) 的發展來看,抽取特徵時隨著網路的深度降低特徵層解析度是一個很標準的作法。不過近年不少研究指出,這樣降解析度的行為對於位置敏感的任務 (detection、segmentation等等) 是有害的。因此相關的研究都會試圖導入、混和高解析度特徵,常見的作法有feature pyramid network (FPN) 、Hourglass 、high-resolution netowrk (HRNet) 等等。
今年2020年,Google研究團隊在CVPR上發表了SpineNet ,重新探討了在特徵層升降解析度的操作。他們認為帶有空間資訊的有效特徵是可以在解析度上自由地縮放,並藉由近年發光發熱的neural architecture search (NAS),完成了SpineNet的設計。SpineNet在與ResNet + FPN相近甚至更少的運算量下,繳出更好的偵測與辨識成果。
Tip
文章難度:★★★☆☆
閱讀建議:本篇文章討論的內容屬於相當新、涵蓋細節多的研究,需要先認識 CNN在尺度與解析度上的操作 (stride & pooling)、高解析度與低解析度特徵的混和 (FPN等),再閱讀本文會收益更多。
推薦背景知識: convolution neural network, image classification、object detection、feature pyramid network、neural architecture search。
Scale-decrease Model
在CNN發展的一路過程中,大部分的CNN架構都是屬於scale-decrease model,即隨著通過越多層網路,特徵層的解析度會不斷下降,通常作為補償會加大網路的寬度 (channels or filters)。
對於這樣的設計,LeCun等人在1989年的一篇論文 [6]中給過這樣的解釋:
High resolution may be needed to detect the presence of a feature, while its exact position need not to be determined with equally high precision.
這樣的方法在整全觀的問題 (holistic problem),如image classification,是沒什麼爭議的,不過當遇到與圖像位置有關的問題,如object detection、segmentation,似乎就是有害的。因為隨著解析度的下降、receptive field的拉大,類神經網路學到了圖像的大方向,卻也容易因此忽視小地方的細節。因此在位置相關的問題,通常都會試圖融合高解析度或是淺層網路資訊。最知名的方法之一就是feature pyramid network (FPN) [1]。
FPN這系列的方法 (包含Hourglass [2]、DeepLabv3+ [7]等等) 都是把原本的降解析度架構視為encoder,再配合額外的decoder融合高解析度特徵,並產生高解析度的預測輸出。
不過有不少研究認為這種encoder-decoder的過程中低解析度的特徵已經在降解析度的過程中喪失空間尺度特徵,不見得可以在高解析度的環境提供有效的資訊。另一個問題則是淺層網路使用的shortcut路線可能不夠深,使得網路表述能力不夠強。為了修正這兩個問題,其中一派聲勢浩大的方法就是high-resolution representation的高解析度網路HR-Net [3]。HR-Net的架構沒有特別切割encoder或decoder,而是透過永遠高解析度的通道,在深度加深的過程不斷做高低解析度特徵融合。
關於特徵層的思考
SpineNet [4] 論文認為一個來自影像的特徵層應該要可以隨時縮小或是放大。因此,在連接時也不一定要同解析度之間融合,任兩個不同的特徵層可以任意跨越解析度、跳過任意的排序。而這個排序,就交給網路自己學吧!
通常類神經網路的設計是搭配一些理論概念,再相當地依靠經驗法則完成。NAS的想法則是既然深度學習已經在很多領域超越了人為的知識,那是不是也可以讓機器自己設計類神經網路的架構呢?這個問題的答案在現在 (2020年) 已經可以說是個肯定的答案,畢竟已經有這麼多的網路架構是由NAS搜尋出來的了,比如說在去年各種刷榜的EfficentNet 。
NAS的實作一般需要定義三個元素:
- Search Space: 定義可以選擇的網路基本元素 (如convolution、batch normalization)、與可以調整的內容 (如kernel size、filter number)。
- Search strategy: 定義搜尋的方法,如reinforcement learning是其中一個常見的方法。
- Performance estimation: 定義如何評估一個架構的好壞,如準確度、運算量等等。
SpineNet的搜尋空間分為三大部分:第一個部分為尺度排列的順序,也就是不同尺度convolution block的排序。第二個部分為尺度間的連結,定義不同convolution block之間的連接方式。第三個部分為convolution block內的架構與尺度調整。
- Scale permutations: 排序的搜尋是從ResNet的四種基本block開始,即Stage 2–5,共四種block (論文稱L2-L5) 的排序。假設是ResNet-50,就會有3個L2、4個L3、6個L4、3個L5需要考慮排序。
- Cross-scale connections: 每個排序較後的block可以連接到兩個排序較前的block。若有任何block沒有被連接到輸出的block,會自動往後連接到同scale的block。
- Block Adjustments: block內部的調整有兩種,第一種是尺度的調整,可以自行向下兩個尺度或向上一個尺度 (即 {-1, 0, 1, 2} 四個選項)。第二種是block內網路架構的調整,這邊只有基本的residual block與bottleneck block兩個選項。
SpineNet
所謂的SpineNet,就是Google研究團隊用NAS搜出來效果最好的網路架構。SpineNet最終使用RNN based controller的reinforcement learning [9],在COCO train2017的資料集上,最佳化proxy task的AP。
SpineNet的架構視覺上很繁雜,真不愧是NAS找出來的 (如下圖)。大致補充一下這張圖的圖例定義: (1) 裡面的每個block橫向長度即代表他的解析度,最大的是L2,最小的是L7。(2) 在一樣的解析度內,寬度 (channels & filters數) 是一樣的,解析度越低的寬度越大。(3) 裡面使用的building block有兩種,長方形代表三層的residual bottleneck,菱形代表普通的兩層residual。 (4) 紅色框框代表這個block的輸出會是最終backbone的輸出之一。
只能說這個架構真的很繁雜,可以參考以下這個表格閱讀,會比較清楚。
由於每個block向前連接時,並不一定會連到一樣解析度的block,所以論文也設計了resampling並融合的方法,輸入一個特徵層 (filter數為C):
- 首先先做1x1的convolution調整filter到αC。
- 再依照輸入解析度與目標解析度的差異調整,使用up-sampling提升解析度或是使用stride為2的convolution與max pooling降低解析度。
- 最終再用一組1x1的convolution調整filter到目標filter數。
SpineNet的網路變形大體上有四種,SpineNet-49S為SpineNet-49輕量化的版本,而SpineNet-96、SpineNet-143、SpineNet-190則是加大加深的版本。主要的差異來自網路的寬度 (filter數)、resample時的alpha值 (也是影響filter數)與網路的深度。這邊的block repeat就是很簡單地再架構圖中的每個block內,重複擺設k個同解析度的block。
SpineNet在個別任務中提供的實驗數據主要有三塊:one-stage detection、two-stage detection與image classification。從以下節錄的實驗數據中可以看出來,SpineNet在相似或是更小的運算量與參數量下,確實整體表現的AP都會比較高一些。
另外,論文中還有一個有趣的小實驗,論文在兩個常用的固定解析度排序的網路架構Hourglass與Fish,固定block之間的排序,用NAS重新搜尋每個block間最佳的連接方法。這樣的搜尋方法找出來的架構,表現不如可以scale permutation的網路,也間接支持了scale permutation的想法。
好了!這次關於convolution neural network降解析度的問題與SpineNet的介紹就到這邊。事實上,SpineNet會成為下一個常用網路架構的指標嗎?我個人是認為暫時看起來不會,畢竟若需要依照不同任務、輸入格式調整網路架構時,SpineNet比起一般常用的ResNet-FPN或是Hourglass是比較麻煩且不穩定的。
不過論文對於特徵層的理解與看法:一個來自影像的特徵層應該要可以隨時縮小或是放大,依然非常地卓越。相信在不久的未來,會有更多基於這樣想法的研究。
老話一句:Deep Learning領域每年都會有大量高質量的論文產出,說真的要跟緊不是一件容易的事。所以我的觀點可能也會存在瑕疵,若有發現什麼錯誤或值得討論的地方,歡迎回覆文章或來信一起討論 :)
References
[1] Feature Pyramid Networks for Object Detection[CVPR 2017] [2] Stacked Hourglass Networks for Human Pose Estimation [ECCV 2016][3] Deep High-Resolution Representation Learning for Human Pose Estimation[CVPR 2019] [4] SpineNet: Learning Scale-Permuted Backbone for Recognition and Localization[CVPR 2020] [5] ImageNet Classification with Deep Convolutional Neural Networks[NIPS 2012] [6] Backpropagation applied to handwritten zip code recognition[Neural Computation 1989] [7] Encoder-Decoder with Atrous Separable Convolution for Semantic Image Segmentation[ECCV 2018] [8] EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks[ICLR 2019] [9] Neural architecture search withreinforcement learning[ICLR 2017]