## Diverse Human Motion Prediction Guided by Multi-Level Spatial-Temporal AnchoRS [github](https://github.com/Sirui-Xu/STARS) ### 概述 該研究提出 **STARS(Spatial-Temporal Anchor-based Sampling)方法**,透過將潛變量分解為 **「可學習的決定性錨點」** 與 **「隨機噪聲」** ,並結合**時空分解**與 **IE-STGCN 網路**,成功同時**提升了人體動作預測的多樣性與準確性**,克服了傳統生成模型的 **mode collapse** 與**長期預測困難** 的問題。 ### 內容 1. **提出 STARS(Spatial-Temporal Anchor-based Sampling)方法**:將潛變量分解為隨機噪聲與可學習的決定性「錨點」,避免僅依賴隨機取樣,促進多樣性並捕捉不同模式。 2. **時空分解**:進一步將錨點拆解為「空間錨點」與「時間錨點」,分別控制動作的空間差異與時間差異,提供更直觀且可解釋的控制能力。 3. **設計 IE-STGCN(Interaction-Enhanced Spatial-Temporal Graph Convolutional Network)**:在骨架序列的圖卷積網路中引入錨點,並利用空間鄰近性與跨層交互共享來提升預測能力。 4. **統一框架**:兼顧隨機預測與確定性預測,在多樣性與準確性上均優於現有方法,提供一個統一且更高效的動作預測框架。 ![image](https://hackmd.io/_uploads/rySL7w3cgx.png) ### 資料集 --- | 名稱 | 主體/頻率 | 關節數(V) | 任務 | |:----------:|:-------------------------------:|:------:|:-------------------------------------------:| | Human3.6M | 11 位受試者,約 360 萬幀,50 Hz/s | 17 | 給定過去 25 幀(0.5秒),預測未來 100 幀(2秒) | | HumanEva-I | 3 位受試者,60 Hz/s | 15 | 給定過去 15 幀(0.25秒),預測未來 60 幀(1秒) | | 參數 | 設定 | |:-----------:|:----------------------------------------:| | epoch | 500 | | batch size | 16 | | 每個 epoch 處理的訓練樣本 | Human3.6M:5000,HumanEva-I:2000 | | DCT 係數(M) | Human3.6M:前 20 個,HumanEva-I:前 8 個 | | 各層通道數 𝐶^(𝑙)^ | C^(0)^=3, 128, 64, 128, 64, 128, 64, 128, C^(8)^=3 | ### 架構圖 --- [維度計算](https://hackmd.io/@q_bRZRi5Q2iTv2zdBQYQHg/rkqWvcnqgg) ![image](https://hackmd.io/_uploads/ByrKf2Yqxx.png) #### 1. 過去動作序列輸入及 DCT 前處理。 * 輸入一段長度為 𝑇~ℎ~ 的過去動作序列 𝑋。 ![image](https://hackmd.io/_uploads/HJm6xDjqxe.png) ![image](https://hackmd.io/_uploads/B1VQywsclx.png =30%x) ![image](https://hackmd.io/_uploads/SyruxPi5xe.png =25%x) * X:是一個長度為 𝑇~ℎ~ 的序列(時間維度) * 𝑥~𝑖~:第 𝑖 個時間點的人體姿態 * V:關節數 * C^(0)^:每個關節的座標維度,通常是 3。 * DCT 前處理: 將最後一幀姿態 𝑥~𝑇ℎ~ 重複 𝑇~𝑝~ 次補到序列後面以補足序列長度。 ![image](https://hackmd.io/_uploads/ryxUERK9ll.png =60%x) ![image](https://hackmd.io/_uploads/BJPEE7o9ge.png =40%x) >因為 DCT 需要固定長度的輸入 施以離散餘弦轉換(DCT)將時間序列轉換到頻率域。 ![image](https://hackmd.io/_uploads/HJmJDY29xe.png =60%x) * C:一個事先定義好、固定的DCT「基底函數」,用來把時間域的序列 𝑋 轉換到頻率域。 * 𝑀:選擇的 DCT 頻率分量數,通常不需要保留所有頻率,因為高頻部分大多是雜訊或細微擾動 → 只取前 𝑀 個頻率分量(低頻),丟掉其餘的高頻 得到**張量**形式的頻率域特徵。 ![image](https://hackmd.io/_uploads/H1qNLRFqee.png =30%x) #### 2. 時空圖卷積編碼初步特徵。 * 將頻率域特徵作為 ST-GCN(Spatial Temporal Graph Convolutional Network)時空圖卷積網絡的輸入,構建「關節-頻率」的圖結構(Graph)。 >轉成圖結構之後,ST-GCN 就能同時利用「空間關係」和「頻率關係」來學習,對應到人體動作的物理結構與時間變化。 ![image](https://hackmd.io/_uploads/BkZsOAtqlg.png =40%x) * **節點 (Nodes)** 每個「頻率–關節」的組合(𝑓~𝑖~,𝑣~𝑗~)對應一個**節點**,總共有 𝑀×𝑉 個節點,其中: * 𝑀:DCT 保留的頻率數量 * 𝑉:關節數量 * **邊 (edges)** 邊 (i, j) 的權重由 鄰接矩陣 (adjacency matrix) Adj^(𝑙)^[i][j] 來表示,維度是MV×MV。 代表節點之間的連結關係,為了簡化學習, adjacency 被拆成 空間部分 和 頻率部分: ![image](https://hackmd.io/_uploads/SkTXkk59gx.png =40%x) * Adj~s~^(𝑙)^:空間 adjacency(只連結「同一頻率下,不同關節」) * Adj~f~^(𝑙)^:頻率 adjacency(只連結「同一關節,不同頻率」)。 * 頻率域特徵經由 ST-GCN 層的圖卷積運算,對這些**節點**進行特徵提取,從而初步編碼出動作的時空特徵表徵。 #### 3. ST-GCN 基本運算 ST-GCN 的每一層都透過圖卷積運算將輸入特徵 𝐻^(𝑙)^ 投影到下一層: ![image](https://hackmd.io/_uploads/rk4aW69qeg.png =90%x) 1. 通道重組:把每個節點的 𝐶^(𝑙)^ 維特徵映到 𝐶^(𝑙+1)^。 ![image](https://hackmd.io/_uploads/HJ-_M659gx.png =20%x) 2. 頻率聚合(同關節、跨頻率):第 𝑖 個節點會按 𝐴𝑑𝑗~𝑓~[𝑖,𝑗] 權重,累積所有頻率鄰居 𝑗 的信息。 ![image](https://hackmd.io/_uploads/rkajzp9qgg.png =20%x) 3. 空間聚合(同頻率、跨關節):再沿骨架拓撲(相鄰/對稱關節)收集訊息,得到同一頻率下的空間融合結果。 ![image](https://hackmd.io/_uploads/ryoz7pc5ex.png =20%x) 5. 非線性:去噪/稀疏/增加表達力。 ![image](https://hackmd.io/_uploads/rJBWXT59ex.png =20%x) #### 4. Spatial-Temporal Anchor 注入與隨機噪聲融合 * Anchor-Based Sampling 過去的動作生成模型通常直接用**隨機噪聲取樣** 𝑧∼𝑝(𝑧) 來增加多樣性。 引入一組可學習的錨點參數 𝐴={𝑎~𝑘~}^𝐾^~𝑘=1~ 代表**確定性 (deterministic) 成分**,用來捕捉不同模態的「大方向」;隨機噪聲 𝑧 則作為**隨機性 (stochastic) 成分**,用來表現模態內部的細節差異。 * **Anchor 𝑎~𝑘~∈𝐴** 128 維的可學習向量,每個 Anchor 在訓練過程中透過損失函數學得(PyTorch),逐漸對應到一種「主要模式」。不同 Anchor 的分佈會自動調整,確保能覆蓋多種未來動作類型。 * 空間錨點 𝐴~𝑠~={𝑎^𝑠^~𝑖~}:在 latent space 裡代表一種「空間上的動作傾向」。 * 時間錨點 𝐴~𝑡~={𝑎^𝑡^~𝑗~}:在 latent space 裡代表一種「時間上的動作特徵」。 把一組空間錨點與一組時間錨點兩兩配對,就會形成 𝐾 = 𝐾~𝑠~ x 𝐾~𝑡~ 個「時空組合錨點」。 * **隨機噪聲取樣 𝑧∼𝑝(𝑧)** 64維的向量,從先驗分佈 𝑝(𝑧) 取樣,常用設為標準高斯分佈 𝑁(0,𝐼)。在固定某個 Anchor 的情況下,增加 細微隨機變化(micro-level 差異),避免模型在同一模態下產生完全一樣的動作序列。 * 在指定的卷積網絡層會引入 **空間–時間錨點** ,用於控制動作的空間模式與時間頻率模式,使模型聚焦於不同的動作模式。 * 在一般情況下,模型預測為: ![image](https://hackmd.io/_uploads/B1FNZxc5xe.png =90%x) * 在 **多層級 (multi-level)** 設計下,會有兩層 Anchor 注入(第 4 、 6 層): ![image](https://hackmd.io/_uploads/By22Zgq9xg.png) * 新的 multi-modal 生成分布 綜合所有「不同模式 (Anchor)」和「模式內的隨機變化 (Noise)」後模型能生成所有可能的未來動作的機率分布。 ![image](https://hackmd.io/_uploads/Hypm5Z9qxe.png =70%x) #### 5. ST-GCN 層特徵提取與約束 這些機制讓模型能持續提取更高階的時空特徵,同時保留骨架結構的物理合理性。 1. **空間交互剪枝**:只保留骨架中相鄰關節與左右對稱關節的連接,將不合理的關聯權重設為 0,避免網絡學習到不合理的依賴關係。 其中,M~s~ 是一個「只允許合理空間連邊」的 0/1 遮罩矩陣,形狀和空間鄰接相同。 ![image](https://hackmd.io/_uploads/rkDytQocee.png =50%x) ![image](https://hackmd.io/_uploads/HJX94Qoqex.png =70%x) ![image](https://hackmd.io/_uploads/HkbJSmiceg.png =70%x) 2. **跨層交互共享**:相鄰或間隔的卷積層共用部分鄰接矩陣參數,避免在不同層中重複學習相同的關節關聯模式,降低參數量並強化一致性。 實驗中發現每隔一層共享鄰接矩陣是一種有效做法。 ![image](https://hackmd.io/_uploads/H1HuKmo9lg.png =60%x) #### 6. 輸出預測係數並重建未來動作序列 經過最終一層 ST-GCN 圖卷積後,模型模型先把最終特徵 𝐻^(𝐿)^∈𝑅^(𝑀𝑉)×𝐶^ reshape 成 𝑌∈𝑅^𝑀×𝑉×𝐶^(仍在頻率域),並輸出 𝐾 組預測的 DCT 係數。 ![image](https://hackmd.io/_uploads/rk9CBlq5le.png =30%x) 對這些頻率域係數進行反向離散餘弦轉換 (IDCT),將它們還原回時間域的動作序列。 ![image](https://hackmd.io/_uploads/Bk66Tms5gg.png =60%x) ![image](https://hackmd.io/_uploads/S15h6Qs9le.png =30%x) 取出最後 𝑇~𝑝~ 幀,作為模型的未來動作預測。 ![image](https://hackmd.io/_uploads/BJnxcEi9gl.png =50%x) ![image](https://hackmd.io/_uploads/ByyBRmjqeg.png =30%x) ### 指標 --- 1. **APD(Average Pairwise Distance)**:測量預測樣本之間的平均距離(↑) ![image](https://hackmd.io/_uploads/BJYg9Usqeg.png =40%x) * 𝐾:候選條數;預設𝐾=50 * ![image](https://hackmd.io/_uploads/HkdIdLiqel.png =4%x):第 𝑘 條候選預測序列(長度 𝑇𝑝) * ∥⋅∥~2~:歐氏(ℓ2)距離,單位是公尺。 2. **ADE(Average Displacement Error)**:測量預測位置和真實位置之間的平均距離(↓) ![image](https://hackmd.io/_uploads/B1pAKUsqel.png =30%x) * 𝑇𝑝:預測長度 * min~k~:在 𝑘=1,…,𝐾 的候選中,取距離最小的那一條 * ![image](https://hackmd.io/_uploads/HkdIdLiqel.png =4%x):第 𝑘 條候選預測序列(長度 𝑇𝑝) * Y:單一真值未來序列(長度 𝑇𝑝) * ∥⋅∥~2~:歐氏(ℓ2)距離,單位是公尺。 3. FDE(Final Displacement Error):測量預測的最後位置與真實位置之間的距離(↓) ![image](https://hackmd.io/_uploads/rJYX58oqxg.png =35%x) * min~k~:在 𝑘=1,…,𝐾 的候選中,取距離最小的那一條 * ![image](https://hackmd.io/_uploads/HkdIdLiqel.png =4%x):第 𝑘 條候選預測序列(長度 𝑇𝑝) * [𝑇~𝑝~]:表示預測長度的最後一幀 * Y:單一真值未來序列(長度 𝑇𝑝) * ∥⋅∥~2~:歐氏(ℓ2)距離,單位是公尺。 4. MMADE(Multi-Modal ADE):針對每個真實軌跡,選擇最接近的候選預測來計算平均誤差(↓) ![image](https://hackmd.io/_uploads/S1K4sLoqex.png =35%x) * N:真實軌跡的多模態數量 * 𝑇𝑝:預測長度 * min~k~:在 𝑘=1,…,𝐾 的候選中,取距離最小的那一條 * ![image](https://hackmd.io/_uploads/HkdIdLiqel.png =4%x):第 𝑘 條候選預測序列(長度 𝑇𝑝) * ![image](https://hackmd.io/_uploads/rkjI3Uoqee.png =10%x):多模態真值集合 * ∥⋅∥~2~:歐氏(ℓ2)距離,單位是公尺 5. MMFDE(Multi-Modal FDE):針對每個真實軌跡,選擇最接近的候選預測終點來計算平均誤差(↓) ![image](https://hackmd.io/_uploads/SkeLoIj9lg.png =40%x) * N:真實軌跡的多模態數量 * min~k~:在 𝑘=1,…,𝐾 的候選中,取距離最小的那一條 * ![image](https://hackmd.io/_uploads/HkdIdLiqel.png =4%x):第 𝑘 條候選預測序列(長度 𝑇𝑝) * [𝑇~𝑝~]:表示預測長度的最後一幀 * ![image](https://hackmd.io/_uploads/rkjI3Uoqee.png =10%x):多模態真值集合 * ∥⋅∥~2~:歐氏(ℓ2)距離,單位是公尺 ### 論文結果 --- 1. 量化比較實驗(K = 50):在 Human3.6M 和 HumanEva-I 資料集上,與 GMVAE, DeLiGAN, DSF, DLow, GSPS 等基準方法比較。Human3.6M 和 HumanEva-I 均在五項指標勝出。 ![image](https://hackmd.io/_uploads/B1lasSiqgg.png) 2. 多層級時空錨點的消融實驗:探討多樣性與準確率的 trade-off。證明了多層級錨點有助於捕捉更多模式,但多樣性與準確率之間存在 trade-off。 ![image](https://hackmd.io/_uploads/rJXeAHoclx.png) 3. 錨點數量與樣本數量的影響:更多錨點與樣本數能帶來更好表現,但樣本數過多會增加計算成本。 ![image](https://hackmd.io/_uploads/HkMGABjqgx.png) 4. 泛化能力測試:把 anchor-based sampling 植入到 GSPS 與 IE-STGCN,檢驗是否能帶來一致改進。證明錨點機制是通用的 plug-and-play 模組,能提升不同模型的表現。 ![image](https://hackmd.io/_uploads/SJ2ynrsqxx.png) 5. 質化比較實驗:視覺化多個樣本的起始姿態、最終姿態與中間序列,展示了 STARS 的可控性與合理性。 ![image](https://hackmd.io/_uploads/SkihABjqxe.png) ![image](https://hackmd.io/_uploads/Sy_p0Bi5ex.png) ![image](https://hackmd.io/_uploads/SJwR0Si9lx.png) 6. 確定性預測實驗(K = 1):重新訓練 IE-STGCN-Short(短期) 與 IE-STGCN-Long(長期)並與 LTD, STS-GCN, MSR-GCN 比較。在短期與長期預測上都優於基準方法,STARS 不僅適用於多樣性預測,也能在確定性預測上達到 SOTA 水準。 ![image](https://hackmd.io/_uploads/ByBJkUo5gl.png)