基於NAS的GCN網絡設計(AAAI2020)

知乎同步發佈:https://www.zhihu.com/people/ikerpeng/activities

介紹下我們 AAAI2020的工作:Learning Graph Convolutional Network for Skeleton-based Human Action Recognition by Neural Searching

 

動作識別(Action recognition) 是計算機視覺領域中一個非常熱門的研究話題。它具有很多有價值的應用,例如 安全監控,行爲分析, 以及人機交互等等。 但是,這個研究課題同時也是一個很有挑戰的問題,尤其是對於背景極其複雜,或是存在遮擋的情況。Skeleton 數據的出現,很大程度上解決了這一類的問題。 Skeleton數據當中包含和運動直接相關的信息,對背景具有更好的魯棒性,同時也能夠有效的改善遮擋以及自遮擋的問題。因此,基於skeleton數據的動作識別也是一個非常具有吸引力的研究課題。

但是對於skeleton這種不規則的具有圖結構的數據,相對於image或者是video這種規整數據,使用經典的CNN 等神經網絡進行特徵提取就要困難很多了。 但是,從2018年起,不斷出現使用圖卷積(Graph Convolutional Networks,GCN)來處理這個問題的工作。 基於前面的工作,本文也是想要通過改善GCN來進一步的提升基於骨架信息的動作識別的性能。

雖然GCN極大的提高了動作識別的性能, 但是還是存在很多需要改進的地方。這裏我們主要從以下的兩個方面去改善現有的GCN。首先, 在這個任務當中大多數的GCN都是提供一個固定的矩陣(Embedding Matrix, EM)來編碼數據節點之間的鄰接關係,並且這個矩陣從第一層到最後一層一直都用。其次,在這個任務上,大部分的GCN都是基於ICLR2017 Max [2]他們的工作做的。也就是說這一類的GCN都是通過一階的 切比雪夫多項式(Chebshev polynomial)進行估計的。而我們認爲,將高層的特徵表示限制是底層的拓撲結構當中是不合理的一種做法。此外,一階的多項式估計並不能很好的捕捉到高階的鄰接關係。

我們設計的8種EM生成的模塊。下面三種根據特徵表示進行投影,然後通過自相關矩陣得到。上面五個表示各個階數的切比雪夫多項式。

那麼如何根據各個網絡層的特點提供自動的EM,以及如何提供更加高階的EM就是本文要解決的問題了。我們一個一個問題來看。首先, 如何提供一種自動化的EM生成機制。實際上,在CVPR2019的一篇工作[1]當中,已經提出了一種自適應生成EM的方式。 但是在此工作當中,他們對每一層都採用同樣的機制來自動的構建這個矩陣,而並沒有去探究不同的生成機制,也沒有探討不同的層是否應該採用相同的矩陣的生成機制。基於此,我們提出了三種動態生成此EM的方式。基本的原理就是通過求解某一層 的特徵表示的自相關矩陣,歸一化此矩陣用作EM矩陣。但是,在求解該矩陣之前,對該層的特徵表示先進行了投影以抽取和該矩陣更加相關的一種特徵表示。 而此處我們設計的三種EM的生成模塊就是根據三種不同的投影方式構造的。具體如圖1的下半部分當中的三個模塊。

其次,我們來看如何捕捉更加高階的圖節點關係。 其實,很簡單。當前的GCN不能夠很好的捕捉到該信息,是因爲GCN採用的乃是一階的切比雪夫多項式進行估計的。 那麼我們只需要引入高階的切比雪夫多項式就可以捕捉到這種信息。 然而新的問題是,各層都應該採用高階的多項式估計嗎? 這顯然會增加計算量,同時我們也不確定是不是每一層都要這樣做。因爲,我們知道通過網絡的堆疊實際上是類似於增大了網絡的感受野,因此也可以捕捉到高階的節點關係。此外,多項式當中的每一項的貢獻是一樣的嗎?可以減少嗎?帶着這樣的疑問,我們構建了一個四階的多項式,然後對於最高階的輸出還做一個規範化。並且我們將這總共五個部分,作爲五個模塊來生成不同階數的矩陣。

因此,對於每一GCN層來講,如圖1所示,都有8種生成一個EM矩陣的方式可供選擇。同時處在不同層級的特徵表示的抽象程度不一樣,因此我們認爲應該提供一種layer-wise的 解決方案。顯然,這將會有8的十次方(由於在這個任務當中通常會有10個GCN層)這麼多種可能。通過手工的調節和尋找顯然是不行的。因此,我們藉助於自動網絡搜索(NAS)的方式來解決這個問題。

具體來講,我們將這裏設計的8種功能模塊作爲NAS搜索空間當中的8種操作子,也就是將其看作是一個類似於卷積核一樣的操作,然後基於這8個功能模塊,構建一個搜索空間。類似於著名的NAS算法DARTS [3],我們可以將所有的功能模塊放到每一層,然後給每一個功能模塊賦一個權重,將該權重看作是待搜索的網絡的架構。然後, 基於此交替的在訓練的數據集上面訓練這個超級網絡,在驗證集上面更新架構的參數。最終得到一個性能最優的結構就可以了。

但是DARTS這種基於梯度的算法最大的問題就是耗內存,你需要在每一個時刻把架構所有的模塊放到內存當中。但是,在我們的任務當中,我們並不想像圖像識別當中NAS一樣,在一個小的數據集(CIFAR10)上面搜索,然後到自己的目標數據集上面去訓練。這種操作有幾個問題:1.會引入domain shift的問題(你怎麼知道在小數據集上面好使,在大的上面就好使啊?),2. 在自己的任務上不一定存在一個合適的代理數據集(proxy dataset),類似於CIFAR10。在我們這個任務說我們想直接在目標任務數據集上搜索,而不在額外的花精力去構建一個合理的代理數據集。

如此,基於以上的搜索空間,我們想同時提出一種內存高效的搜索算法。這種算法,他不侷限於一個連續的搜索空間,當你有足夠的卡的時候可以全部模塊都激活,當你沒有的時候,只激活其中的一個。因此,我們選擇了一種不是基於梯度的搜索算法,其實是一種基於採樣的演化算法策略。但是,一般的演化算法效率都非常的低,因此我們使用的是一種高效採樣的演化策略。

具體來講,我們算法叫做CEIM: Cross-Entropy method with Importance-Mixing. 這種搜索算法通過一種分佈(這裏高斯分佈)來建模待搜索架構的分佈,然後通過更新這個分佈來更新架構搜索的過程。於此同時,該算法通過混合當前迭代和上一次迭代的樣本來提高採樣的效率。具體的步驟如下圖:

 

CEIM 算法示意

總的來講, 在CEIM算法當中,主要有四個步驟。首先,對架構參數用高斯分佈建模;接下來,從架構的分佈當中採樣一組樣本(New samples),並且和上一輪迭代當中的樣本共同組成候選的樣本;然後,通過這些樣本在當前分佈以及在上一個迭代的分佈當中的概率密度進行選擇,採樣一組樣本(Importance-Mixing);最後,計算每一個樣本的性能表現,由此對這一組樣本分配不同的權重,然後加權來更新架構的分佈。由於該算法是基於採樣的一種算法,不需要對架構的參數進行求導。因此,在更新網絡的過程中,完全可以通過多項式採樣的方式只激活部分的架構,通過這種方式來減少內存的消耗。具體的算法如下:

OK這就是本文的核心思想,一些具體的細節可以參考文章。這裏,我們來看一些實驗結果。實驗中使用的數據集是當前最大規模的兩個數據集,一個是NTU-RGB D,另一個是Kinetics-Skeleton(這個是用Open Pose提的)。首先,我們來看一下搜索的結果。這裏我們保留了權重大於0.1的模塊。

這裏我們可以發現,的確在不同的層GCN傾向於使用不同的EM的生成方式。我們看最右邊的三列,我們發現在底層的時候,由於特徵還比較低層GCN更喜歡使用更多的模塊來生成這個矩陣。同時我們還發現,基於空間信息的投影主要出現在較底層的GCN,而基於時間的卷積投影卻出現在了每一層,甚至在高層的時候只出現了後者。然後,我們再來看高階的估計(左邊的5列),我們會發現二階的估計在中間的幾層出現。然後到了最後一層,實際上是不需要任何一種多項式估計的。同時,我們還發現,原始的(手動設計的)矩陣並沒有在任何一層被選中,這個給我了我們一些在設計GCN時候的新啓發。

接下來我們看一下性能方面的比較。首先是Ablation study相關的實驗。我們想驗證我們採用這種方式的有效性。這部分的實驗是在 NTU-RGB D數據集上的Corss-view 測評下進行的。首先,我們將本文當中設計的模塊,手動的加到GCN網絡當中。我們發現,他們幾乎都能夠提升baseline的表現,這證明我們設計的模塊是合理的。 同時,我們也發現,將所有的模塊同時添加到GCN當中並不能保證得到最好的性能。這也證明了通過NAS進行自動設計的必要性。我們可以從最終的結果發現,使用我們的NAS算法,可以得到最好的性能,幾乎都能夠得到1%左右的提升。最後, 我們在這兩個數據集上面和當前的State-of-the-art 方法進行比較。結果如下,在不同的測試協議和不同的數據庫上面,我們都能夠得到當前最好的性能。

 

接下來我們看一下性能方面的比較。首先是Ablation study相關的實驗(Table 2)。我們想驗證我們採用這種方式的有效性。這部分的實驗是在 NTU-RGB D數據集上的Corss-View 測評下進行的。首先,我們將本文當中設計的模塊,手動的加到GCN網絡當中。我們發現,他們幾乎都能夠提升baseline的表現,這證明我們設計的模塊是合理的。 同時,我們也發現,將所有的模塊同時添加到GCN當中並不能保證得到最好的性能。這也證明了通過NAS進行自動設計的必要性。我們可以從最終的結果發現,使用我們的NAS算法,可以得到最好的性能,幾乎都能夠得到1%左右的提升。最後, 我們在這兩個數據集上面和當前的State-of-the-art 方法進行比較。結果如下Table3 4,在不同的測試協議和不同的數據庫上面,我們都能夠得到當前最好的性能。

結論

我們這篇文章應該是第一個嘗試採用NAS來設計GCN的工作吧(據我所知)。由於GCN並沒有很多的算子(operations),並且這個EM矩陣對於GCN來說更加的重要。因此,我們嘗試設計一系列的EM生成模塊,然後基於這些模塊來構建一個NAS的搜索空間。同時,我們也爲這個搜索空間提出一種新的,基於高效的演化策略的搜索算法。最終,我們在動作識別上,通過搜索得到一個最優的架構,同時在當前最大的兩個數據集上面得到最好的性能。

[1] Two-stream adaptive graph convolutional networks for skeleton-based action recognition. CVPR2019.

[2] Semi-supervised classification with graph convolutional networks. ICLR2017.

[3] Darts: Differentiable architecture search. ICLR2019.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章