〇、前言
雖然在行爲識別領域算是掙扎了好幾個月了,但是其實都像無頭蒼蠅一樣出來一個頂會的論文,就去找關鍵字是action recognition的,然後再看看有沒有的代碼的,雖然知道了這個領域時序建模能力很重要,但是都沒有很好的理解。也一直沒有狠下心從頭開始學習或者從最經典的開始,比如TSN我看完只知道是很多方法的baseline,但是不知道到底爲什麼是baseLine的,裏面的consensus 又是什麼意思?自己 看了一些基於TSN的代碼的方法的consensus type = 'avg'
也不知道是什麼意思,這些都嚴重阻礙進步。諸如此類的還有很多。
所以藉助最近疫情期間的假期,不破不立,自己處理一遍TSN
一、論文提出的依據
TSN的提出主要是爲了解決下面的問題:
- 【問題1】How to effectively learn video representation that captures long range
temporal structure(怎麼有效的學習到能夠捕捉到long-range時序信息的視頻表示) - 【問題2】How to exploit these learned ConvNet models for the more realistic setting of untrimmed videos(怎麼把學習到的網絡模型應用在更爲真實的視頻中,比如沒有裁剪的)
- 【問題3】How to efficiently learn the ConvNet models given limited training samples and apply them on large scale data(當訓練數據很少的時候,用什麼樣的方法才能保證模型的正常訓練並如何應用在大規模的數據上,也就是避免過擬合)
沒錯,這篇文章就是對上面三個問題進行了探索,然後就有TSN了。首先提出的ECCV版本的論文其實主要focus的是問題1和問題3,後面論文擴充成期刊的工作又針對問題2進行了探索和補充。
二、 如何解決上述問題?
【針對問題1】
自然就是經典的TSN了,主要就是之前的工作是沒有辦法進行Long-range的動作信息獲取的(因爲之前的工作都是基於單張的frame或者連續幾幀stack起來的frames的,這就只有那一部分,沒有stack起來的信息就會有所缺失)
所以用下面方法進行Long-Range的temporal information learning!
可以理解爲是:稀疏但全局性的sampling!
給定一個描述動作的視頻
- Step1:將視頻劃分爲K段(K-segment)
- Step2:對於其中的每一個segment,抽取一個snipnet(也就是獲取了視頻的 representation了)
比一個包含踢足球的動作視頻共30幀,那麼就把這個視頻分爲三段,每段就是10幀,這就是上面Step1做的工作,在Step2中在每個Segment裏面只取一幀,這樣原本有30幀的視頻數據,我們現在只需要取其中的3幀進行處理就好了,尤其
(1)取得數據少:所有快
(2)取得幀在整個視頻片段裏分佈均勻,前中後程都有估計到:所以long-range
上面這兩個特點滿足後,那麼就是effectively 的了
- Step3: 把數據送入網絡學習(也就是對上一步得到的視頻的representation送進網絡進行特徵的提取)
也就是後面的雙流網絡結構了,每一個ConvNet都是雙流的,一個分支是snippet的single RGB frame,另一個分支數據是幾種流數據,關於幾種流的數據後面單獨思考一下。 - Step4: 對每個ConvNet中得到的特徵進行Aggregation
上面可以理解爲一個certain動作的視頻數據中的一個Segment就經過一個雙流網絡,那麼比如這個視頻有3個Segment,那這三個segment就要分別經過三個雙流網絡,因此,其中每個Segment經過網絡後都會得到一個自己對動作類別的預測,最後TSN將綜合考慮三個Segment的“提議”,畢竟兼聽則明,多徵求意見,對所有人的意見要進行自己的“判斷”這裏的判斷就可以理解爲是Aggregation Function,在期刊的文章裏考慮了五種:
a)average pooling;
b)max pooling;
c) weighted average;
d) top-K pooling;
e) adaptive attention weighting。
其中最後兩種原文是這麼解釋的:
The latter two are designed to automatically highlight
discriminative snippets while reducing the impact of less
relevant ones during training, thus contribute to a better
learned action model.
這裏其實也就解答了我最開始的疑惑,那就是consensus type = 'avg'
沒錯,原來是對每個segment的aggregation的方式。
最終,每個Segment把自己想法表達之後,經過Aggregation操作後,整個TSN會得到自己對當前視頻中動作類別的判斷,也就是最後的動作類別
到此爲止其實就是TSN的所有算法層面的東西了我覺得,後面的都是偏向工程的trick,但是也是價值很高,當前的很多工作都是在TSN的基礎上進行的,相關的訓練測試策略也都延續了TSN的風格。
【針對問題2】
提出了:Multi-scale Temporal Window Integration
這個我不太關心,原文中的介紹也比較詳細,不多說了
【針對問題3】
主要是在訓練網絡的時候提出了一下策略:
- 交叉輸入模式預訓練:
- 正則化:
- 數據增強:
具體的可以參考這篇博客,自己讀了之後也是受益匪淺:
[行爲識別論文詳解]TSN(Temporal Segment Networks)
三、Input
TSN對輸入部分也進行了探索,之前的方法時域信息部分都是利用光流信息作爲輸入,但是在TSN中,作者進行了如下數據形式的探索:
單一RGB輸入:
僅僅包含靜態信息,缺少frame在時序維度上的聯繫
RGB difference:
兩個連續的RGB frames的差異,可以表達動作的差異,也就是定義出了顯著性的區域,這裏看圖,可以說是強調了動作
Optiacl Flow Field:
由於相機的移動,視頻背景中存在大量的水平運動
Warped Optiacl Flow Field
這個是受到idt(improved dense trajectories)算法的啓發的,通過估計估計單應性矩陣(homography matrix)和補償相機運動來提取扭曲光流場,該方法可以抑制背景的運動,更加專注於視頻中的動作。
四、思考
(1)關於光流:
之前記得有工作Hidden Two Stream的方法利用網絡進行光流的提取,這樣整個訓練的框架就成了end-to-end的了,不知道有沒有可能取學習Warped Optical Flow的產生,因爲扭曲的光流信息更加關注動作本身,沒準可以得到性能的提升。
(2)稀疏採樣的事情
還是和之前一篇文章提到的一樣,面對動作類別粒度比較粗的可以利用稀疏採樣,但是遇到細粒度的數據集,幀幀都有用的?那該怎麼半?long range的信息還將如何獲取??
(3)時序信息建模
其實說白了TSN本身是不具備temporal modeling的能力的,之所以能獲取較好的時序信息還是因爲光流數據本身,那麼該如何進一步探索時序信息建模的方案呢,比如當下只採用RGB作爲輸入的TSM,就是通過shift操作來進行的。這樣的方案還能怎麼改進呢???
(4)時序信息和空間信息的融合
這裏是雙流的,空間信息是單一的RGB stream進行獲取的,時間信息通過光流信息得到的,然後時空之間的聯繫並沒有得到很好的拓展,那麼該怎麼辦呢?
五、關於實驗
關於訓練和測試的實驗部分,待完成。