這裡要特別感謝我們的作者,來自電子科大的研究生凱隱。非常認真全面的總結,希望我們都可以把這種分享的精神、開源的精神傳遞下去,感謝比心!
本文結合現有的文獻和方法以及作者自己的實踐理解,詳細闡述了圖卷積在基於骨架的動作識別方向的應用,內容翔實,值得一讀。
文章的脈絡為:
1. 問題簡述
2. 基本概念介紹
3. 方法和思路分析
4. 文獻解讀
4.1 時空特徵的提取
4.2 更全面的空間特徵抽取策略
4.3 資料增強
4.4 綜合方法
由於篇幅較長,將分為上下進行釋出。
人體動作識別是近年來 CV 領域的熱門研究方向,其對人機互動、智慧監控等應用具有重要意義。骨架動作識別屬於動作識別的一個分支,旨在識別由骨架隨時間變化構成的時間序列所代表的動作型別,即每個樣本由連續的骨架幀構成,維度是 (T,V,C),T 表示時間,V表示關節,C 表示空間位置( XY 或 XYZ),模型需要給出樣本所屬動作類別,因此屬於多分類任務。其另一個分支是 RGB 視訊動作識別。
該任務常用的資料集是 NTU RGB+D 資料集,以及Skeleton-Kinetics(用 openpose 在Kinetics-400視訊資料集中得到 3D 骨架)資料集。
本文主要介紹近兩年來基於圖卷積的骨架動作識別相關工作,圖卷積的標準公式為:
該公式的嚴密推導過程是從圖的傅立葉變換以及譜域分析開始的,不過可以從空域來簡單理解,即鄰接矩陣 A 乘特徵矩陣H可以聚合(sum, mean, max 等)一階鄰域特徵,自環鄰接I 可以將聚合的鄰居特徵與當前節點特徵合併,最後通過權重矩陣 W 完成通道的變換。矩陣是度矩陣,用於對自環鄰接矩陣 (A+I) 進行對稱規範化,此外一些論文也使用隨機遊走規範化。
圖卷積的核心思想是建立圖中不同節點之間的資訊交流,從而學習圖中每個節點的嵌入特徵表示,在只考慮一階鄰域的條件下,隨著網路層數加深,每個節點的感受野都會越來越大,最終覆蓋全圖,實現資訊的完全互動。
對於圖分類任務,在最後一層圖卷積後,通常會經過一層 readout 層,得到整個圖的表示,然後用這個表示來進行分類。對於骨架動作識別任務,每個樣本都由圖序列構成,因此需要在時間和空間維度同時進行 readout,通常是 pooling。
筆者認為該任務可以從三個領域借鑑方法:
1. 骨架通常由關節(joint)和骨骼(bone)相互連線表示,具有天然的圖結構,因此可以藉助 GNN 強大的空間特徵抽取能力,來學習動作的潛在表示。事實上從 18 年開始,絕大部分骨架動作識別相關工作都是基於圖卷積網路的。
2. 骨架序列屬於時間序列,因此可以利用時間序列建模的相關方法來獲取時間特徵,例如 GRU、LSTM、3D 卷積等。
3. 骨架動作識別與視訊動作識別都需要通過模型來提取動作的潛在特徵,特別是時空特徵的提取,因此可以相互借鑑方法。
此外,也有學者提出了其他的方法,例如可以將骨架序列轉化為 RGB 圖片,這樣該問題就轉化為影像分類問題(18 年之前的主流方法),也有基於 KNN 和貝葉斯的相關方法,總之解決問題的思路方法是多元化的,不侷限於某一特定領域。在筆者閱讀相關文獻時,總結出了一些常見的改進(漲分)思路:
資料增強:原始骨架資料反映的骨架位置資訊,如果對相鄰兩幀求差值,便可以得到骨架的一階動態資訊,對相鄰關節求差值亦可以得到骨骼動態資訊。理論上模型也能學習到這些資訊,但提前計算出來並作為輸入,可以在一定程度上提升準確率。
類鄰接矩陣策略:GCN 中使用的鄰接矩陣只包含一階鄰域,每個節點的感受野都非常有限,只有達到足夠深度,網路層才能學習到遠端關節之間的語義資訊。此外,傳統的鄰接矩陣元素只有 0 和 1 兩種值,在多數情況下很難反應關節間的相互關係。因此,設計一種不限於一階鄰域和整數值的鄰接矩陣,是許多工作的探究點。對於骨架動作識別任務,主要建立非骨骼連線的關節之間的聯絡,例如手腕和腳踝。
注意力機制:Self-attention 及其相關變體在最近幾年很火,例如由何愷明團隊提出的 non-local 模組,在視訊行為識別、目標檢測等任務上都取得了不錯的效果。對動作識別而言,每個動作的資訊往往集中在某一個或幾個關節,而且肢節末端的關節由於運動更頻繁,幅度更大,往往具有更多的關鍵資訊,因此空間注意力是值得探究的點。
圖結構擴充:通常在構建圖時,只將關節作為圖的節點,然而骨骼(bones)與關節具有密不可分的關係,雖然視覺上骨骼通常是長條形的,但仍然可以抽象為一個點參與圖卷積。這種做法可以顯著提升圖的解析度以及對空間資訊的表達能力。
區域性劃分(part-based)方法:同一肢節或同一個區域內的關節之間運動相似度會更高,按這個規律可以將骨架分為多個區域(part),在區域內和區域間定義不同的資訊傳播方式,可以有效的提取區域性和全域性特徵。這種方法稱為part-based method。
因此由於水平有限,不能寫得通俗易懂,可能會造成一些內容理解起來困難,因此建議結合原文閱讀,還請諒解。此外,在解讀文獻時,陳述順序和原文的順序會有一些出入,這是因為不同文獻側重點不同,我會盡量按照我認為的合理順序來分析。
此外,我會根據個人理解,從一些簡單,通俗易懂的工作開始介紹,然後再介紹相對複雜的工作,這樣有助於大家理清該領域的研究思路和方向。
時空特徵的提取
圖結構序列與視訊一樣,都兼具時間和空間特徵,因此如何在 GCN 的基礎上,設計對時空特徵的抽取方法,是構造網路時必須考慮的問題。
DPRL: Deep Progressive Reinforcement Learning for Skeleton-based Action Recognition(CVPR,2018)
http://openaccess.thecvf.com/content_cvpr_2018/CameraReady/1736.pdf
通過強化學習幀蒸餾方法(frame distillation)來選擇最具代表性的幀,然後再通過圖卷積網路抽取空間資訊。前者是時間上的類注意力方法,後者則是空間上的特徵抽取方法,整體網路結構如下:
網路結構
深度漸進式強化學習(DPRL)
幀蒸餾網路對應中的 FDNet。樣本中不同幀所含資訊不同,且許多相鄰幀往往具有大量的冗餘資訊,該工作通過強化學習蒸餾方法從原始幀序列中挑選最具代表力,可識別力的幀參與圖卷積,使網路能得到更多的有用資訊,而丟棄哪些混淆度強的無用資訊。具體方法在文獻中有詳細介紹。
基於強化學習的幀蒸餾網路
類鄰接矩陣策略
這篇文章是典型的類鄰接矩陣策略。通過手工構建的非骨骼連線(下圖虛線)來強化節點之間的資訊交流,提高節點的感受野對於某些動作而言,其主要運動關節在原始骨架中並不是直接相連的,例如拍手動作,這就意味著在1鄰域的情況下,需要經過多次卷積兩手之間才會有互相得到對方的資訊,如果讓他們直接相連,可以讓資訊在更淺的網路層得到互動,更深的網路學習到的特徵資訊也更加穩定準確。
人工構建的非骨骼連線
具體地,對於固有骨骼連線,在鄰接矩陣中用一個可學習引數 α 來代表連線權重,對非固有鄰接,用可學習引數 β 來代表連線權重。
此外,在進行圖卷積時,由於輸入是圖序列,因此會對每一幀單獨進行圖卷積,然後在時間維度上進行 concate,從而得到整個圖序列的 feature map 。
實驗結果
在 NTU 資料上的實驗結果,左右兩列分別是 cross subject 和 cross view:
總結
該工作提出的幀蒸餾網路在思想上與注意力機制一致,即挑選出有意義,感興趣的部分,而空間上的非物理連線則能有效的提高特徵聚合速度,此外自學習的鄰接矩陣引數能讓重要關節得到更多的關注。
02
ST-GCN: Spatial Temporal Graph Convolutional Networks for Skeleton-Based Action Recognition(AAAI, 2018)
https://arxiv.org/pdf/1801.07455.pdf
一篇非常具有代表性的文章,其核心思想是通過空域上的圖卷積和時域上的常規卷積,來聚合時間和空間特徵。
時空圖卷積
借鑑了視訊動作識別中對 3D 卷積分解為 (2+1)D 的思想,通過空間上的圖卷積來提取空間資訊,通過前後相鄰幀的常規卷積來提取時間資訊,通過二者的串聯疊加來逐步提取時空資訊。這麼做相當於將每個節點的感受野擴大到的時空範圍。
時空圖卷積示意圖
假設 feature map 維度是(C, T, V)每個 block 由兩部分組成:
1.對每一幀的圖卷積:
2. 在 T 維度進行的常規卷積,卷積核大小是(τ,1)。
此外圖卷積和整個 block 都包含 residual 連線。
鄰域劃分策略
節點鄰域是節點的鄰居節點的集合,體現在鄰接矩陣中。標準 GCN 對所有節點使用同一個權重矩陣,但人體運動過程中,存在關節距離重心越遠,運動幅度越大的規律,即包含的資訊越多,因此本文提出將鄰域分為三個部分:自身,近重心,遠重心,如下圖中的(d):
三種不同的鄰域劃分策略
劃分過後對每個節點而言,其鄰域會分為三個部分,因此圖的鄰接矩陣就分為了三個子鄰接矩陣,每個矩陣單獨享有一個卷積權重,分別進行圖卷積,最後通過加法疊加結果。這樣劃分會導致引數數量增加(擴增 3 倍),但網路對空間特徵細節的刻畫能力也更加強。
鄰接矩陣自學習策略
通過為鄰接矩陣賦予一個等大小的權重矩陣,可以讓網路自動學習邊與邊之間的連線權重:
M 表示待學習的權重矩陣(全 1 初始化),Aj 表示第 j 個鄰域對應的鄰接矩陣,通過二者的 hardmard 乘積得到最終的鄰接矩陣。這種做法可以在一定程度上提高對已有物理連線的刻畫能力,但不能使 A 中的 0 值變為非 0 值,即不能在關節間建立非物理連線。
提出新資料集
本文通過 openpose 從視訊中提取 2D 骨架序列,再將置信度作為 z 軸,從而得到 3D 骨架序列,由此從Kinetics-400視訊行為資料集中得到了Kinetics-skeleton 骨架行為資料集。
實驗結果
在 NTU 資料集上的實驗結果:
在 Kinetics-skeleton 資料集上的實驗結果:
總結
本文通過線性堆疊的 GCN 和 TCN 來間接擴大每個節點的感受野,非常有助於時空資訊的提取。對鄰域的經驗性劃分雖然會增加引數數量,但也能提高網路對不同關節特徵的刻畫能力。此外,自學習的 mask 引數能讓關節連線權重更加平滑,但相較於 DPRL,本文沒有建立非相鄰關節之間的直接連線,因此遠端關節之間的資訊互動會更困難。而對於 DPRL,其使用的是人工定義的非骨骼連線,因此對空間資訊的刻畫能力非常有限。
更全面的空間特徵抽取策略
雖然骨架代表了物理上真實存在的關節連線,但在骨架的基礎上建立更多的非物理連線,甚至是關節的強連通圖,能提高每個節點的感受野,從而讓網路在淺層就能學習到更多的有用資訊。
HCN: Co-occurrence Feature Learning from Skeleton Data for Action Recognition and Detection with Hierarchical Aggregation
https://arxiv.org/pdf/1804.06055.pdf
這篇文章提出的方法在 GCN 相關工作出現之前效果最佳,這裡簡要介紹。
HCN網路結構示意圖
這裡輸入 Input 的大小是 T*V*C,T 是幀長度,V是節點數量,C 是輸入通道。
開始的兩層卷積是常規的通道卷積,然後將 V 和 C 維度對調,這樣接下來的卷積就會將 V作為通道處理,而卷積對通道的操作是全連線,因此任意兩個節點都會進行加權求和。這種做法體現在圖上,相當於建立任意兩個節點之間的可學習權重連線,將圖當成強連通圖對待。因此該方法雖然沒有直接使用圖卷積,卻仍然能取得不錯的效果。
實驗結果
NTU 資料集:
02
2S-AGCN: Two-Stream Adaptive Graph Convolutional Networks for Skeleton-Based Action Recognition(CVPR, 2019)
https://arxiv.org/pdf/1805.07694.pdf
本文在 ST-GCN 的基礎上,提出了更加合理的鄰接矩陣策略,不僅包含自學習的鄰接矩陣,還通過 self-attention 機制為每個樣本計算單獨的鄰接矩陣,大大增強了網路對空間特徵的抽取能力。
資料增強
即將 bones 流作為獨立資料流,獨立於 joint 流進行訓練。預測時結合兩個網路的預測值,得到最終預測結果:
適應性鄰接矩陣策略
這裡的 k 表示三種不同的領域,即 ST-GCN 中的 spatial 鄰域劃分策略。鄰接矩陣由三部分構成:
Ak 是基礎鄰接矩陣,值只有 0 和 1,只包含關節間原有的直接物理連線。
Bk 是權重鄰接矩陣,初始化為 0,由網路自動學習。
Ck 是 attention 鄰接矩陣,計算方式為embedded 高斯函式:
T 表示轉置。這部分主要借鑑了 “non-local neural network” 和 “attention is all you need” 中提出的self-attention 方法,但不同於何愷明的 non-local網路,這裡是用關節的軌跡來計算兩個關節之間的attention 值,時間維度被合併到了 C 中,這麼做可以降低計算量和引數量,防止過擬合。
三個鄰接矩陣的整體計算過程可以用類似於 non-local 網路中的圖例來表示:
實驗結果
在 NTU cross view上的 Ablation 實驗:
個人認為在 cross subject 條件下對比會比較明顯。NTU 資料集:
Kinetics-Skeleton 資料集:
03
DGNN:Skeleton-Based Action Recognition with Directed Graph Neural Networks
https://url.cn/5x6EUs3
在 ST-GCN 和 2S-AGCN 的基礎上進一步提高了抽取空間特徵時的細粒度。
有向圖資訊傳播
在 ST-GCN 中提出的鄰域劃分策略,實際上可以概括為不同的資訊傳播方向區別對待,資訊從末端關節流向中心關節和從中心關節流向末端關節應該區別對待。因此本文用有向圖來處理不同的資訊方向:
此外在,2S-AGCN 中 bones 流和 joints 流相互獨立,然而二者實際上應該具有更加緊密的聯絡,因此本文將 Bones 也作為一種節點參與到資訊流傳播中,這樣可以提高空間特徵的細粒度。這與 Sym-GNN 中的 AGC 部分有一定的相似之處。
結合以上兩點,可以用關聯矩陣(incidence matrix)來表示節點和邊之間的連線關係,關聯矩陣規模是 (Nv , Ne),即節點數和邊數。關聯矩陣中1 表示節點是邊的源節點,-1 表示目標節點。進一步地可以將源節點關聯矩陣和目標節點關聯矩陣分開:
在進行資訊傳播時,先分別以節點和邊為中心聚合特徵,然後再更新節點和邊的值:
g 表示聚合函式,通過關聯矩陣圖卷積進行聚合,h 表示更新函式,這裡是 1*1 卷積(即FC 層)。假設某一層輸入通道是 Cin,輸出通道數是 Cout,則 1*1 卷積的卷積核大小為3*Cin*Cout,要比標準圖卷積中 Cin*Cout 的卷積核大三倍。因此引數數量相對來講要多很多。
資料增強
本文將 motion 流作為另一個獨立訓練的資料流,bone 和 joints 計算 motion 值的方法相同,即計算兩幀差值。
實驗結果
NTU 資料集:
Kinetics-Skeleton 資料集: