ICCV2021-《GroupFormer》-商湯&港理工提出基於聚類的聯合建模時空關係的GroupFormer用於解決群體活動識別問題,效能SOTA
作者 | 小馬
編輯 | CV君
報道 | 我愛計算機視覺(微信id:aicvml)
【寫在前面】
群體活動識別是一個關鍵而又具有挑戰性的問題,其核心在於
充分探索個體之間的時空互動,產生合理的群體表徵
。然而,以前的方法要麼分別建模空間和時間資訊,要麼直接聚合個體特徵形成群體特徵。為了解決這些問題,作者提出了一種新的群體活動識別網路,稱為
GroupFormer
。它
聯合建模
時空上下文資訊,透過
聚類
時空Transformer,有效地增強個體和群體的表徵。具體來說,GroupFormer有三個的優點:
(1)聚類時空Transformer(Clustered Spatial-Temporal Transformer)能夠
增強個體表徵和群體的表徵
;
(2)GroupFormer
對時空依賴關係進行綜合建模
,並利用解碼器建立時空資訊之間的聯絡。
(3)利用聚類注意機制動態地
將個體劃分為多個聚類
,以更高效地學習具有活動感知能力的語義表徵。
此外,實驗結果表明,該框架在Volleyball資料集和 Collective Activity資料集上優於SOTA的方法。
0. K-Means聚類演算法
本文在演算法實現的時候用到k-means演算法,因此,在介紹這篇文章之前,先和大家一起來複習k-means演算法吧!
首先我們來看K-Means的名字,K和means分別是什麼?K是指
類的數量
(是一個超引數),means是指
均值
(指的是演算法的特性)。
K-means演算法主要有步驟可以分為四步:
第一步:初始化聚類中心,這一步就是根據K的數量,來隨機初始化K個聚類中心;
第二步:給聚類中心分配樣本;
第三步:移動聚類中心;
第四步:判斷是否達到終止條件,決定是否停止移動。
聚類之後的效果如下(K=4):
完整程式碼:
import numpy as np
def distance(p1,p2):
return np。sqrt((p1[0]-p2[0])**2+(p1[1]-p2[1])**2)
def kmeans(nums,k,tolerance=1e-4,max_iter=100):
centers={} #聚類中心
#初始化中心點
for i in range(k):
centers[i]=np。random。randint(low=0,high=500,size=2)
for iter in range(max_iter):
print(‘this is’,iter,‘epoch’)
clusters={} #每個類包含那些點
#初始化每個類的點
for i in range(k):
clusters[i]=[]
#計算所有點所屬的類
for item in nums:
all_dis=[]
for i in range(k):
all_dis。append(distance(item,centers[i]))
clusters[np。argmin(all_dis)]。append(item)
#計算新的聚類中心
pre_centers=centers。copy()
for i in range(k):
centers[i]=np。mean(clusters[i],axis=0)
#判斷是否還需要繼續更新
ok=True
for i in range(k):
if(abs(np。sum((centers[i]-pre_centers[i])**2))>tolerance):
ok=False
break
if(ok==True):
break
return centers,clusters
input=np。random。randint(low=0,high=500,size=(500,2))
center,cluster=kmeans(input,k=4)
print(center)
import matplotlib。pyplot as plt
colors=[‘r’,‘g’,‘b’,‘y’]
for k,points in cluster。items():
for p in points:
plt。scatter(p[0],p[1],color=colors[k])
for k,point in center。items():
plt。scatter(point[0],point[1],color=colors[k],marker=‘*’)
plt。show()
1. 論文和程式碼地址
GroupFormer: Group Activity Recognition with Clustered Spatial-Temporal Transformer
論文地址:
https://arxiv.org/abs/2108.12630
程式碼地址:
https://github.com/xueyee/GroupFormer
(未開源)
2. Motivation
由於其在監控系統、影片分析和社會行為分析中的廣泛應用,群體活動識別目前是一個重要的研究問題。與傳統的動作識別不同,群體活動識別需要理解多個個體的場景。群體活動識別的直觀策略是模擬個體之間的相關關係,並推斷他們的群體活動。然而,利用個體關係來推斷群體活動是非常具有挑戰性的,特別是在未修剪的場景中,空間和時間上場景變化都非常複雜。
為了解決群體活動識別的問題,研究人員也一直致力於尋找高效的方法來捕捉影片中的關係上下文,目前也有一些基於RNN、attention、圖卷積、Transformer的方法來捕獲時空關係。然而,目前的方法仍然面臨兩個挑戰:
(1)
建立了一個綜合建模時空上下文資訊的橋樑
(以前的方法大多是將時間和空間維度分開建模);
(2)
根據個體的相互關係將這些個體分組,以便更好地推斷全域性的活動上下文
。
在挑戰(1)下,以往的方法很少能聯合考慮模型中的時空依賴性,但是
不同的時間序列資訊具有很強的空間依賴性
,如上圖所示。因此,共同捕獲時空依賴關係對於推理群體活動是至關重要的。
在挑戰(2)下,以前的方法
建立全部個體的連通關係是次優的
,因為引入了無關個體的連線會成為干擾資訊。換句話說,並非所有個體在多人場景中的關係都會對推斷群體活動產生關鍵影響。如上圖所示,在排球場景中,“spiking”和“blocking”的運動員之間的互動遠遠高於有“spiking”和“standing”的運動員之間的互動,因此“spiking”和“standing”的運動員之間的關係對群體活動的推斷貢獻更大。換句話說,
群體活動通常是由一組具備潛在互動關係的關鍵群體決定的
。
在本文中,作者提出了一個端到端可訓練的框架,稱為GroupFormer,它利用Transformer來建模個體和群體的特徵表示。首先,作者設計了一個
群體表示生成器(Group Representation Generator,GRG)
,透過合併個體上下文和場景上下文來生成一個初始的群體表示。
然後利用多個堆疊的
時空Transformer(STT)
來增強個體和群體的特徵表示。具體來說,作者使用
兩個編碼器
(時間和空間)進行時空特徵的embed,然後利用
兩個交叉解碼器
構建時空互動,綜合建模時空上下文資訊。此外,作者還利用
群體解碼器(Group Decoder)
獲取個體的上下文表示,以增強群體特徵。
此外,與現有Transformer中的全注意(全注意指每個位置都會和其他所有位置進行互動)方式相比,STT透過
聚類注意機制
進一步增強。具體實現上,作者動態地將所有個體劃分為C個聚類,其中同一個聚類中的個體通常具有相關的語義資訊。透過在每個聚類內進行資訊傳播,可以生成個體的緊湊動作特徵。不同聚類之間的attention是充分建聚類之間的關係,以促進群體活動感知表徵學習。最後,實驗結果表明,該網路在Volleyball和Collective Activity資料集上優於SOTA的方法。
3. 方法
上圖為Groupformer的網路圖,主要由三個結構組成:1)提取影片clip的特徵表示的
CNN主幹
;2)用於個體和場景特徵初始化的
群體表示生成器(Group Representation Generator,GRG)
;3)用於建模時空關係,細化群體表示和個體表示的
聚類時空Transformer(CSTT)
。
3.1.特徵提取器
對於特徵提取器,作者使用了Kinetics預訓練的3D網路(I3D)作為Backbone。首先切割以標註幀為中心的t幀,記為
。作者從最後一個卷積層中提取特徵圖,並將大小調整為
,這可以看做整個影片clip的場景特徵。
然後,作者還從中間的
層中生成了更高解析度的特徵圖
,並將個可學習的位置編碼新增到特徵圖
中。然後用RoIAlign提取每個影片幀中給定N個邊界框的個體特徵,每個個體的姿勢資訊由AlphaPose獲得,將個體特徵和姿勢資訊進行concat,得到最終的個體特徵。最後採用全連線層將對齊的個體特徵的通道維度投影到D維,該個體特徵表示為
。
3.2.群體表示生成器
群體表示生成器(GRG)是一個在模型中用於初始化群體表示的預處理元件。作者將場景特徵和個體特徵分別轉換為視覺token,然後將它們聚合以生成群體表示。對於場景特徵
,作者將時間維度視為Batch維度,並應用二維卷積將
通道維度轉換為
。然後,作者將其flatten為
,並用softmax操作,生成空間注意矩陣
。
接著,作者採用二維卷積將場景特徵的通道維度embed到D中,用A計算每個畫素的加權和,生成K個視覺場景token,然後進行Avgpool操作,實現形狀為
的場景token。對於個體特徵
,作者將
的可學習query和個體特徵輸入解碼器,以生成個體token。最後,作者將個體token和場景token融合,形成一個初始化群體token,記為
。
3.3.聚類時空Transformer
3.3.1 標準Transformer
標準的Transformer是用於序列到序列的NLP任務,它包含編碼器和解碼器,兩者都由多頭注意層(multi-head attention layer)和前饋網路(feed-forward network)組成。多頭注意力透過比較一個特徵和其他特徵之間的兩兩相似性來計算權重。
簡而言之,首先將維度為d的l個向量序列,表示為
,分別使用線性投影對映到query、key和value。attention矩陣是由query和key的縮放點積得到的。輸出特徵被計算為基於attention權重的value的加權和。此外,Transformer還利用由線性變換和非線性啟用函式組成的前饋網路(FFN)來embed這些特徵。
3.3.2 時空Transformer(SST)
為群體活動識別而設計的時空Transformer(STT)增強了個體表徵和群體表徵。它包括兩個並行的編碼器(一個
空間編碼器
和
時間編碼器
),分別生成空間和時間特徵。並引入交叉的
個體解碼器
來解碼時空上下文資訊。最後,用一個
群體解碼器
來增強群體的表示。(具體結構如上圖所示)
Encoders
儘管每個個體都已經被準確定位了,但仍然缺乏對語義時空上下文的資訊增強。因此,作者採用了兩個並行編碼器來embed上下文特徵。在一個分支中,作者採用了一個基於Transformer的
空間編碼器
來學習個體的上下文資訊。給定輸入的個體表示
,作者將時間維度視為Batch維度,並應用一個編碼器來建模所有幀的空間上下文。第t幀的空間上下文的embed過程可以表述為:
其中
、
、
是可學習的引數;
表示第t幀中的個體特徵圖。FFN是標準Transformer中的前饋網路。所有時間步的特徵圖被
打包之後變成
。
另一種並行
時間編碼器
利用時間動態線索增強輸入特徵,透過突出每個個體沿時間維度的資訊特徵來豐富時間上下文。時間編碼器遵循空間編碼器的操作。與上述空間編碼器的不同之處在於,時間編碼器將空間維度視為一個Batch維度。將第n個個體的輸出時間特徵表示為
,最後將生成的特徵圖
組合在一起,表示為
。
Individual Decoders
上面的兩個Encoder中分別對時間和空間維度的個體特徵進行了建模。然後,作者提出了
個體解碼器
來綜合考慮空間和時空上下文資訊。個體解碼器遵循標準Transformer的解碼器的設計,來互補利用時空上下文。
對於
空間解碼器
,空間編碼器的輸出結果
被視為 actor query,時間編碼器輸出結果的embedding
被視為key和value。actor query和key、value進行cross-attention,捕獲時間動態,並輸出更新後的上下文特徵。
同樣的,對於
時間解碼器
,空間編碼器的輸出結果
將時間維度與空間維度進行轉換,可以看作是解碼器使用的key和value。解碼器將時間上下文
視為time query,然後進行cross-attention的過程,時間解碼器有助於查詢影片中感興趣的幀。
最後,將這兩個交叉解碼器的輸出embedding進行融合,生成增強的個體表示
。這兩種交叉解碼器是利用了基於
空間上下文
和
時間上下文
的語義關聯來增強個體表徵。
Group Decoder
在多人場景中總結個體互動對於群體活動推斷至關重要,因此,作者引入了一個
群體解碼器
(Group Decoder)來透過個體表示來增強群體表示。群體解碼器也遵循Transformer的解碼器設計。與原Transformer的區別在於,群體解碼器只包含多頭交叉注意機制和一個前饋網路,不包含Self-Attention。
它以增強的個體表示
和群體表示
作為輸入。作者將群體特徵作
為query(記為group query),將增強的個體特徵
作為key。這樣group query就能從增強的個體特徵
中總結了整體上下文,更新後的group query能夠實現群體活動預測。
3.3.3 Clustered Attention Mechanism
雖然基於全連線注意機制的時空Transformer(STT)能夠建模個體的關係,但它包含了許多不相關個體的關係。為了使模型能夠關注關鍵的群體關係,作者將全連線的注意力替換為聚類的注意力,並將整個模組稱之為
聚類時空Transformer(Clustered Spatial-Temporal Transformer,CSTT)
。它可以對個體進行分組,並利用組內和組間的關係來捕獲全域性活動上下文。
首先將個體分組為C個聚類,然後計算一下兩種型別的注意:
(1)
組內注意(intra-group attention)
:只有來自同一個聚類內的query和key才會被考慮。
(2)
組間注意(inter-group attention)
:考慮了聚類之間成對的加權連線。
在實現上,作者將一組聚類中心向量定義為
,利用
mini-batch k-means聚類演算法
將所有query自適應地分組為C個聚類,並根據K-means演算法不斷的更新聚類中心。
組內注意
是透過提取同一組內的個體資訊來完善每個個體的動作感知特徵。
組間注意
是充分建模不同組之間的關係,以促進群體活動感知表徵學習。
3.4.網路最佳化
本文提出的CSTT以端到端的方式進行訓練。在CSTT中,可以直接從群體表示生成群體活動分數
。同樣,採用另一個分類器,使用CSTT生成的個體表示來預測個體的動作得分
。對於這兩個任務,作者都選擇了交叉熵損失函式來指導最佳化過程:
其中
和
表示交叉熵損失。
和
是群體活動得分和個體動作得分,而
和
代表群體活動和個體動作的 ground truth標籤。λ是平衡這兩項的超引數。
4.實驗
4.1.與SOTA的比較
Volleyball dataset
上表比較了本文方法在Volleyball 資料集上和SOTA方法的比較,CSTT在效能上相比於其他的SOTA方法具有明顯的效能優勢。
Collective dataset
上表比較了本文方法在Collective 資料集上和SOTA方法的比較,在相同的Backbone下,本文的方法能夠比其他方法的效能更高。
4.2.消融研究
時空關係建模
從上表可以看出,採用時空並行方式將效能從91。0%提高到92。2%。CSTT使用單個解碼器,以交叉方式聯合利用時空上下文資訊,與Baseline相比,效能顯著提高了3。1%。
聚類注意力方式
作者還研究了不同聚類數量對結果的影響,在沒有聚類的情況下,能夠達到93。4%,隨著聚類數量的增加,效能先上升,後下降。
CSTT Block的數量
作者還研究CSTT Block的數量對實驗結果的影響,隨著CSTT Block的增加,效能先上升,後下降。block數量為3時達到了最好的效能。
4.3.視覺化
Feature Embedding視覺化
上圖顯示了由GroupFormer不同變種學習到的影片表示的t-SNE視覺化。(1)base:用簡單的FC層替換CSTT。(2)ST:使用堆疊的時空Transformer。(3)STT:無聚類注意機制的時空Transformer。(4)CSTT:本文的聚類時空Transformer。可以看出CSTT使得不同特徵的距離更遠,達到最好的結果。
聚類視覺化
上圖可視化了幾個聚類個體的示例。透過聚類注意機制,個體被分成一組節點,每一組節點在內部緊密相連。透過利用組內和組間的關係,模型更容易捕獲關鍵的互動資訊並學習具有活動感知能力的語義表示。
5. 總結
在本文中,作者提出了一種新的基於Transformer的結構,稱為GroupFormer,它聯合建模了時空上下文表示來推斷群體活動。此外,作者還引入了聚類注意機制來對個體進行分組,並利用組內和組間的關係獲得更好的群體特徵表示。作者在兩個資料集上進行了廣泛的實驗。結果表明,GroupFormer的表現超過了大多數目前的SOTA方法。