前言:
transformer在視頻理解方向的應用主要有如下幾種實現方式:Joint Space-Time Attention,Sparse Local Global Attention 和Axial Attention。這幾種方式的共同點是采用ViT中的方式將圖像進行分塊,而它們之間的區別在於如何用self attention來處理這些塊。
在本文提出了一種新的處理方式--Divided Space-Time Attention,在大規模行為分類數據集上,通過對以上幾種方式與Divided Space-Time Attention的評估,作者發現使用Divided attention的方式是用於處理這些塊的最好設計。
TimeSformer在幾個主流的行為識別benchmarks上實現了SOTA結果,包括在Kinetics-400和Kinetics-600上取得最高准確度。此外,TimeSformer對比與其它模型訓練速度更快,且有更高的測試效率。
論文:Is Space-Time Attention All You Need for Video Understanding?
代碼:https://github.com/lucidrains/TimeSformer-pytorch
代碼尚未完全開源,但模型已經放出來了。代碼比較簡單。
論文思路
視頻理解與NLP有很多的相似的地方。首先,視頻和語句都具有序列性;而且,一個字只能與語句中其它字聯系才能理解,在視頻行為中一個片段也需要與視頻的上下文相關聯。於是,我們期望NLP中這種long-range self-attention模型可以在視頻模型中也有很高的表現。
在視頻領域,2D或3D卷積是用來提取時空特征的主流操作,但卷積操作比較明顯的一個問題是感受野是有限的,若要獲得全局感受野,需要堆疊很多層卷積層,它們的信息傳播路徑比較長。而self-attention這種操作可以很輕松地獲得全局感受野,捕獲局部和長范圍的依賴關系。
卷積操作的另一個問題是受到內存的限制,特別是視頻領域,往往需要在高分辨率和長范圍幀之間權衡。而最近幾年一些研究者的工作指出Transformer可以比CNN獲得更快的訓練和推理,因此在同樣計算量預算下,transformer可以使用更大學習容量。
標准的self-attention需要計算所有tokens相互之間的相似性,這樣的做法就是計算量比較大,因此需要考慮如何利用self-attention來處理圖像塊。論文比較了這方面的幾種處理方式,提出Divided attention的方式具有最好的表現。
在本文將主要介紹這幾種方式。
一些細節
這幾種方式的通用部分是將視頻幀分成大小為PxP的塊,每一幀可以分成N=HW/(P*P)塊。
它們的區別就是以什么樣的方式來選擇哪些塊放一起進行self-attention。
Space Attention是只對同一幀的所有塊放一起進行self-attention。這種方式明顯沒有考慮不同幀之間的時序信息。
Joint Space-Time Attention是將圖像的所有塊都進行self-attention,這種方式最明顯的問題是計算量太大。
Sparse Local Global Attention分為兩步,選擇局部區域的塊進行self-attention提取局部信息,按一定的步長選擇塊進行self-attention提取全局信息,這種方式具有一定的稀疏性,特點就是計算量減少。
Axial Attention是分為三步,先對不同幀同位置的塊進行time attention,再按橫向和縱向分別選擇同一幀中同一橫和同一豎的塊進行space attention。
本文提出的Divided Space-Time Attention分為兩步,先對不同幀同位置的塊進行time attention,再將同一幀中所有塊進行space attention。
具體的示意圖如下。
實驗結論
這幾種方式的參數量和准確度的對比。
本文來源於公眾號CV技術指南的論文分享系列,更多內容請掃描文末二維碼關注公眾號。
最近把公眾號(CV技術指南)所有的技術總結打包成了一個pdf,在公眾號中回復關鍵字“技術總結”可獲取。