一: 本文的目的
如題目所說的,本文的主要工作是提出一個深度逐步改進的強化學習方法來做基於骨架的動作識別。說白了,就是做基於骨架數據的動作識別。
如上圖所示,給定一個輸入:vedio,然後最終目的是輸入一個標籤能判斷這個視頻中的模型在做什麼動作。
思路簡單概括爲:
1. 我們的輸入是一段視頻,視頻中有多個幀。
2. 我們想用RL的算法來選擇關鍵幀(本文是FDNet)
3. 再把選取到的關鍵幀輸入到GCNN網絡,得到這個vedio的標籤
二: 定義問題的決策鏈
由於要用RL來解決問題,那麼就需要先把問題轉化爲一個決策鏈的問題
- 已知輸入的是含有多個幀的一段視頻,但我們不要全部用到全部幀數
- 所以我們想提取關鍵幀,設定提取的關鍵幀數爲 ,把這 個關鍵幀按序號排序,每一個action表示這些關鍵幀是要向左移動,向右移動或是保持當前位置。
- 設定迭代步數,當程序迭代步數達到設定值時,就停止程序
三: State and Action
State
- 針對選關鍵幀這個MDP問題,狀態 可以表示爲:
即它由來兩部分組成,其中 也是由兩部分組成的。 表示整個視頻的信息, 它張量的形狀爲: 。 其中 表示視頻的所有幀數, 表示每一幀中的骨架模型的節點數, 表示每一個骨架節點的3D座標。 如下圖所示是一個拍手動作的其中三幀,每一幀都是用一些骨架信息表示,其中包含了骨架中有多少個關節節點以及它們的3D座標。
對於 就表示所有被提取的關鍵幀信息,用一個形如 的張量表示,其中 表示關鍵幀的數目
- 最後 one-hot, 它對應到整個視頻的每一幀,如果對應的元素值爲1,那麼說明該幀被提取爲關鍵幀,其餘則爲0
Action
action的動作由FDNet輸出
action的定義比較簡單:
1. 幀向左移動
2. 幀向右移動
3. 幀保持不動
現在,我們打開看一下FDNet網絡的結構
上圖的執行流程如下
1. 經過一個全連接層得到一段向量
2. 經過3層卷積後,在經過一層全連接層得到另一段向量
3. 將上面兩個結果合併起來,通過一個全連接層輸出結果
4. 輸出的結果由3個3個神經元組成,每一組神經元表示對應關鍵幀的action分佈
四: Reward function
- 在本文的算法框架下,reward是由GCNN產生的(GCNN是什麼下面說)
- GCNN拿 個關鍵幀作爲一個輸入
初步的reward可以表示爲:
其中 是視頻標籤的ground truth此外,我們還需要對reward做一些改善: 如果預測的action是從不正確的關鍵幀跳到正確的關鍵幀,那麼就會追加一個大的獎勵,如果預測的action是從正確的關鍵幀跳到不正確的關鍵幀,那麼就會給一個大的懲罰。最後reward表示如下
五: GCNN
GCNN 是基於圖的卷積
1.首先,我們看看圖是如何構建出來的:
我們根據上面的公式來構建圖。爲什麼關節不相互連接都要給權重呢?比如看下面這個拍手的動作,左右手雖然沒有相互連接,但是它們之間是有一定的位置關係的,即能體現出拍手這麼個動作信息
圖的卷積
- 首先,給定 T 個關鍵幀,根據上面第一點提到的公式構建圖
- 對每一個圖,都進行卷積操作:
- 卷積過後再用全連接層處理,得到一個輸出向量
- 最後把所有的輸出向量合併起來
GCNN的輸出
對於2的輸出結果,用熵函數作用後,就得到了我們的reward(訓練時作爲reward, 測試時作爲標籤)