---
# System prepended metadata

title: Multimodal Motion Conditioned Diffusion Model for Skeleton-based Video Anomaly Detection
tags: [Paper Review]

---

# Multimodal Motion Conditioned Diffusion Model for Skeleton-based Video Anomaly Detection

* 論文出處:arXiv/ICCV2023
* 作者:Alessandro Flaborea, Luca Collorone, Guido D'Amely, Stefano D'Arrigo, Bardh Prenkaj, Fabio Galasso
* [原文連結](https://arxiv.org/pdf/2307.07205.pdf)
* [github](https://github.com/aleflabo/MoCoDAD)

**摘要:**
本論文提出了一種骨架擴散的策略，稱為,MoCoDAD(Motion Conditioned Diffusion Anomaly Detection)，主要用於影片的異常偵測(Video Anomaly Detection,VAD)任務，模型的輸入為逐幀人體骨架圖片，輸出為影片中是否存在異常動作，此論文假設正常/異常動作都具有多種函數。MoCoDAD透過歷史運動作為條件，利用擴散過程中的反覆迭代更新來生成未來骨架，當生成的骨架與真實骨架差距過大時，則認定為異常
MoCoDAD包含了兩個模塊:Forward Diffusion和Reverse Diffusion，首先會將影片切分為前後兩段， $X^{1:k}$ 為前段，$X^{k+1:N}$為後段，$X^{1:k}$ 會輸入Encoder $E(一種GCN)$ 得到 $h$ ，同時，時間步 $t$ 也會書入 $τ_θ$，將兩者相加後會得到運動時序訊號。$X^{k+1:N}$則會依照時間步t加入噪音，輸入神經網路$ε_θ$(類似U-Net + STS-GCN)後，再與嵌入模型 $h$ 和 $τ_θ$ 估計噪音並生成預測骨架


![](https://hackmd.io/_uploads/B1dHU9Zka.png)

## 1. Introduction
* VAD任務的挑戰
  * 異常動作無法窮舉，也無法定義異常動作
  * 存在數據不平衡問題
* 通常模型僅會由正常樣本中學習，並在測試集中才出現異常動作，是一種一類分類(One Class Classification,OCC)問題，也稱為半監督式學習
* 目前OCC模型主要是學習輸入的單一重構或預測，或是推論出正常動作的潛在表示，而限制在有限的效果內
* MoCoDAD受到去噪擴散概率模型DDPMs的啟發，是第一種基於骨架擴散的VAD模型


![](https://hackmd.io/_uploads/B1vdIdZy6.png)
紅色和綠色分別代表異常和正常影像。框內的藍點代表50個未來幀的特徵向量，虛線表示輸入影片的分佈，其中的紅點表示與當前預測幀所對應真實幀的特徵向量，在正常情況下，真實幀會處在分佈的中間區域，且預測結果與真實幀是相關的。在異常情況下，真實幀會處於分佈的尾部，這會產生較差的預測，並且可以突顯出異常現象

## 2. Related Work
重點關注兩個主要方面： 視訊異常檢測方法和用於運動合成的擴散模型

視訊異常檢測方法 : 討論了先驅模型，這些作品分析了幀中代理(agents)的軌跡，以區分那些遠離正常值的幀。 近期的模型可分為兩大趨勢：基於潛伏的方法和基於重構的方法。

運動合成擴散模型 : 討論了這些模型相對於傳統生成模型（如 GAN 和 VAE）的優勢，並強調了它們產生多樣化、可信的未來運動的能力。也提到了這些模型中使用的調節策略，它們可以基於不同類型的信息，例如過去的動作、語義標籤或音訊訊號。

## 3. Methodology


![](https://hackmd.io/_uploads/H17fEh-kT.png)
6個骨架序列被分成過去幀（右上角 $X^{1:3}$幀）和未來（左上角 $X^{4:6}$ 幀）。在訓練過程中，Forward Diffusion在未來幀中添加噪聲，通過強度不同($β_t$)的隨機位移來移動每個關節（隨著時間步長 t 而增加）。然後，Reverse Diffusion使用類似於DDPM的架構來學習如何估計噪音。 MoCoDAD 的一個關鍵方面是Conditioning，即如何對過去的 k 個乾淨幀進行編碼，並指導相關未來幀的合成。Conditioning以運動時序訊號 $h+τ_θ(t)$作為條件，該信號是將時間步 $t$ 輸入到函數 $τ_θ$ 和將 $X^{1:3}輸入到Encoder E相加得到的，利用Conditioning對擴散過程進行優化，該函數可預測在訓練過程中添加到輸入樣本中的噪聲。
最後，擴散過程會生成一組可信的未來姿勢，用於檢測基於骨骼的視頻中的異常情況。

![](https://hackmd.io/_uploads/rygRvCL1a.png)


假設 $X= {x_1, ... , x_N}$ 是屬於單人 $N$ 時間內連續的骨架序列。首先將 $X$ 分成兩部分：過去的 $X^{1:k}$ 和未來的 $X^{k+1:N}$
在前向過程 $q$ 中，通過添加隨機平移噪聲來破壞關節坐標。從常態分佈$N(0,I)$ 中採樣隨機位移  $ε^{k+1:N}$ 並將其添加到 $X^{k+1:N}$ 中，以隨機平移其節點的位置。
p.s $I$ 可能是單位協方差矩陣
而添加位移的大小取決於介於0~1之間的 $βt$ 和時間步長 $t ∼ U[1,T]$ 。因此，在每個擴散時間步$t$ 中，$q$ 對關節$x_i$ 的破壞會越來越大（即$x^{i}_{t=1} →... → x^{ i}_{t=T}$），使得$x^{i}_{t=T}$ 與隨機取樣關節空間坐標的姿態無法區分，${L}_{smooth}$是為了將${L}_{disp}$更加平滑，用於比較生成的未來骨架序列和實際未來骨架序列之間的差異


${L}_{disp} = {\mathbb {E}_{t,X,\varepsilon }}\bigg [ \big |\big |\varepsilon^{k+1:N} - \varepsilon _\theta (X^{k+1:N}_t,t, h)\big |\big | \bigg ]$

${L}_{smooth} = \begin {cases} 0.5 \cdot (\mathcal {L}_{disp} )^2 & \text { if } |\mathcal {L}_{disp} | < 1\\ |\mathcal {L}_{disp} |-0.5 & \text { otherwise} \end {cases}$


在反向過程 $p_θ$ 中，神經網路 $ε_θ$ (圖二橘色塊)會逐漸收縮和擴展空間維度，其任務是透過輸入具有噪音的歷史幀來估計雜訊，進而生成未來幀。通過類似 U-Net 的結構並加入STS-GCN層，在輸入帶有噪音的$X^{k+1:N}$後，透過損失函數來訓練網絡
而$X^{1:k}$則會透過Encoder E轉換後得到$h= E(X^{1:k})$，再透過decoding network D得到估計值，${L}_{rec}$ 代表實際值與估計值間的差異

${L}_{rec} = \bigg |\bigg | D(E(X^{1:k})) -X^{1:k} \bigg |\bigg |^2_2$

兩者加權相加可得總損失
${L}_{tot} = \lambda_1\mathcal {L}_{smooth} + \lambda_2\mathcal {L}_{rec}$
其中 $λ1,λ2∈ [0, 1]$ 分別表示每個損失函數的貢獻。 

最後，為了估計 $ε_{k+1:N}$，將 $t$ 輸入MLP後得到 $τ_θ(t)$，將$X^{1:k}$ 輸入encoder E 後得到 $h$，將 $τ_θ(t)$ 和 $h$ 相加稱為運動時序訊號，並將所得的運動時序訊號回饋到網路的每一層 $ε_θ$來優化訓練網路

----

在$ε_θ$訓練過程中，模型會收到一系列骨架 $X^{1:N}$，目標是根據當前姿態 $X_t$ 和 $h$ 預測未來姿態 $X^{(t+1):N}$。 然後使用反向擴散過程產生一組去雜訊姿勢，用於重建輸入姿勢序列。 反向擴散過程以 $h +τ_θ$ 為條件，該訊號是透過使用可學習的嵌入函數將時間步嵌入運動序列而產生的。 對多個姿勢序列重複訓練過程，並在每個序列後使用反向傳播更新模型

在推論過程中，MoCoDAD以過去的 $X^{1:k}$ 幀為條件，通過隨機位移生成未來骨架序列，然後對其進行統計匯總，以檢測異常情況。
對隨機位移 $z∼N(0,I)$ 進行採樣，並將其視為合成過程的起點，通過以下公式生成未來的人體動作，h為 $X^{1:k}$ 透過Encoder $E$轉換後得到。
$X^{k+1:N}_{t-1} = \frac {1}{\sqrt {\alpha _t}}\bigg (X^{k+1:N}_t-\frac {1-\alpha _t}{\sqrt {1-\alpha _t}} \varepsilon _\theta (X^{k+1:N}_t,t, h)\bigg ) + z\sqrt {\beta _t}$

生成 $m$ 個不同的未來骨架 $Z1, . , Zm$後，對於每個 $Z_i$，我們通過訓練中使用的$L_{smooth}$計算誤差
$s_i = L_{smooth}(|X^{k+1:N}-Z^{k+1:N}_i|)$
我們將各代 $S = {s1, . , sm}$，為該序列提計算出異常得分。隨後將此分數分配給相應的幀，以評估其異常程度。在多個行為體佔用同一幀的情況下，我們會為這些幀分配平均異常得分
<!-- 公式3描述了生成未來骨架動作序列的過程。具體來說，我們從一個隨機的位移向量z開始，然後通過擴散過程生成未來的骨架動作序列。這個過程是通過將先前的骨架動作序列Xt-1作為輸入，並通過一個函數εθ(Xt, t, h)來生成新的骨架動作序列Xt。其中，h是過去k幀的骨架動作序列的編碼。我們使用一個參數αt來控制新生成的骨架動作序列Xt與先前骨架動作序列Xt-1之間的平滑程度。具體來說，αt越小，新生成的骨架動作序列Xt就越接近先前的骨架動作序列Xt-1。我們還使用一個參數βt來控制新生成的骨架動作序列Xt的隨機性。具體來說，βt越大，新生成的骨架動作序列Xt就越隨機。最後，我們將一個隨機的位移向量z添加到新生成的骨架動作序列Xt中，以進一步增加其隨機性。 -->

--------
<!-- 模型的輸入為視頻中的骨架表示，經過正向擴散過程生成未來的骨架表示，然後通過反向擴散過程生成過去的骨架表示。在正向擴散過程中，輸入為時間步$t-1$的骨架表示$x_{t-1}$，輸出為時間步$t$的骨架表示$x_t$的概率分佈。在反向擴散過程中，輸入為時間步t的骨架表示$x_t$，輸出為時間步$t-1$的骨架表示$x_{t-1}$的概率分佈。最終，模型通過比較生成的骨架表示和實際的骨架表示來檢測異常動作。模型中的擴散係數$β_t$和衰減係數$α_t$控制了擴散過程的速度和範圍。模型中的深度神經網絡$μ_θ(x_t, t)$用於估計前向過程的後驗均值，即生成骨架表示的期望值。模型的輸出為視頻中是否存在異常動作。 -->

此論文討論了從 S 中計算異常分數的不同策略：(1) 正常代和異常代之間的多樣性；(2) 聚合統計。多樣性指標 $rF = mean(L_{smooth})/ min (L_{smooth})$。多樣性源於檢驗異常世代是否比正常世代更具多樣性，但多樣性得分無法檢測到異常，幾乎降至隨機概率。我們的解釋是，正常和異常具有相似的多樣性程度，這一點我們在第 5.1 節中進行了實驗驗證。

論文將平均值、包括中位數在內的量級穩健統計以及最大和最小選擇器作為集合統計，以 m 生成的運動和 GT 未來運動之間的$L_{smooth}$ 距離來表示。我們的分析表明，平均而言，最小距離是最好的。這加強了最初的假設，即正態條件生成的運動與異常條件生成的運動一樣具有多樣性，但更偏向於實際運動，因此更有可能生成接近實際運動的樣本。

<!-- 本模型的輸入為人體骨架表示的視頻，輸出為視頻中是否存在異常動作。以下是模型中每個符號和函數的解釋：

- $x_t$ : 表示時間步t的骨架表示。
- $q(x_t|x_{t-1})$ : 表示正向擴散過程，即給定時間步$t-1$的骨架表示$x_{t-1}$，生成時間步$t$的骨架表示$x_t$的概率分佈。
- $p_θ(x_{t-1}|x_t)$: 表示反向擴散過程，即給定時間步$t$的骨架表示$x_t$，生成時間步$t-1$的骨架表示$x_{ t-1}$的概率分佈。
- $N(μ, Σ)$: 表示高斯分佈，其中$μ$為均值，$Σ$為協方差矩陣。
- $β_t$: 表示時間步t的擴散係數。
- $α_t$: 表示時間步t的衰減係數，即$α_t = 1 - β_t$。
- $Q_t$: 表示時間步t的累積衰減係數，即$Q_t = ∑_{s=1}^t α_s$。
- $μ_θ(x_t, t)$: 表示前向過程的後驗均值，是一個深度神經網絡。
- $εθ(X,t,h)$: 是一個經過訓練的神經網絡，用於預測輸入運動中的干擾噪聲
 -->
**$εθ(Xt, t, h)$** 是一個神經網絡，用於預測在訓練過程中添加到輸入 $x^{k+1:N}$ 中的噪音 $ε$。函數的輸入包括當前的骨架序列 $X_t$，當前的時間步長$t$，以及使用嵌入函數 $τ_θ$ 嵌入 $t$ 得到的信號h。函數的輸出是預測的噪音$ε$，該噪音在訓練過程中用於破壞輸入樣本 $x^{k+1:N}$。這個函數的目的是通過預測輸入樣本的噪音來優化擴散概率模型，這是優化目標的關鍵組成部分。

<!-- **嵌入函數$τθ$** 是一個用於將時間步長t嵌入到信號中的函數。它將時間步長t轉換為一個向量，並將其與運動序列$X^{1:k}$結合起來，生成一個新的運動-時間信號h。這個嵌入過程有助於將時間信息納入模型中，從而提高模型對時間序列的建模能力。在本文中，我們使用了一個可學習的嵌入函數$τθ$，它是通過與模型的其餘部分一起訓練來學習的。

它是透過一個稱為去噪網路的神經網路產生的。 去噪網路將損壞的姿態 X_t 和雜訊向量 ε 作為輸入，並輸出去噪姿態 X_tilde。 在訓練過程中，去噪網路被訓練成最小化去噪姿態 X_tilde 與地面真實姿態 X_t 之間的差異。 雜訊向量 ε 從高斯分佈中取樣，平均值為 0，標準差為 1。 去噪網路使用兩個損失函數的組合進行訓練：平滑損失 L_smooth 和重建損失 L_rec。 平滑損失促使生成的姿勢平滑一致，而重建損失則確保生成的姿勢接近地面真實姿勢。 去噪網路採用隨機梯度下降法進行訓練，權重在每批訓練實例後更新。 在推理過程中，去噪網路用於對損壞的姿勢進行去噪，以產生一組去噪姿勢，用於重建輸入姿勢序列。 去噪網路是我們模型的關鍵組成部分，因為它允許我們產生高品質的去噪姿勢，用於檢測視訊序列中的異常。 -->


<!-- $θ$指的是所建模型中使用的神經網絡的參數。具體來說，論文中提到的函數$εθ(X,t,h)$是一個經過訓練的神經網絡，用於預測輸入運動中的干擾噪聲。在推理過程中，該函數用於對隨機高斯噪聲去噪，並從所學分佈中生成樣本。此外，擬議模型中的反向過程被表述為 $pθ(xt-1|xt)$，其中 $θ$ 是估計正向過程後驗均值的深度神經網絡的參數集。因此，$θ$用於表示擬議模型中神經網絡的可學習參數。 -->



## 4. Experiments
#### 4.1. Datasets
1. [UBnormal -2022CVPR](https://github.com/lilygeorgescu/UBnormal)
   包含 29 個使用 Cinema4D 軟體從二維自然影像合成的場景。 每個場景出現在 19 個片段中，包含正常事件與異常事件

![](https://hackmd.io/_uploads/BkyCPTLJT.png)

2. HR-UBnormal
過濾掉UBnormal中不涉及人體的異常事件來建立 HR-UBnormal，例如火災和車禍，除非涉及到人體。
並利用骨架推論器與追蹤器對其結果進行改進，以提取每個 UBnormal 視訊幀中的人類姿勢。

3. [HR-Avenue -ICCV2013](https://www.cse.cuhk.edu.hk/leojia/projects/detectabnormal/dataset.html)
包含 16 個訓練影片和21個測試影片共30652幀，與總計47個異常事件，包括投擲物體，遊蕩和奔跑。
![](https://hackmd.io/_uploads/ByCZg0Ika.png)


5. [HR-STC(ShanghaiTech Campus)](https://svip-lab.github.io/dataset/campus_dataset.html)
包含13個場景，具有不同的光照條件和攝像機角度。包含130個異常事件以及超過 270,000 個訓練幀。異常事件的ground truth也在數據集中進行了註釋
![](https://hackmd.io/_uploads/S1C1P68Ja.png)
#### 4.2 與SOTA比較
![](https://hackmd.io/_uploads/BkkDqALyp.png)
* MPED-RNN 結合了雙分支 RNN 的重建和預測誤差來發現異常
* Normal Graph 使用ST-GCN對骨骼序列進行編碼
* GEPC  使用 ST-GCN 對輸入序列進行編碼，並在潛空間中對嵌入進行聚類
* Multi-timescale Prediction 對觀察到的輸入序列進行編碼，並透過中間全連接層預測不同時間尺度的未來姿勢
* PoseCVAE 和 BiPOCO 都利用條件變異自動編碼器來學習正常動作的後驗分佈，並使用編碼的過去和未來序列來重建未來序列。 前者採用基於 MLP 的架構，後者則是基於 GRU。
* STGCAE-LSTM 透過基於 LSTM 的自動編碼器重建過去的姿勢序列並預測未來的姿勢序列
*  SSMTL++  擴展了 SSMTL 用一個變換器取代了卷積，改變了物體偵測主幹，並增加了一些輔助代理任務
*  COSKAD 以 STS-GCN 為基礎，將正常姿勢的嵌入映射到潛空間中的一個狹窄區域
`以上為純翻譯`



## 5. Discussion
![](https://hackmd.io/_uploads/HyxhqA816.png)
作者對擴散模型生成代數 m 和異常分數 S 的聚合策略進行了消融分析，圖左側表示四種不同聚合策略在HR-UBnormal 得到的重構誤差直方圖，圖右測展示了模型檢測AUC分數與生成代數之間的相關性，其中每條曲線對應不同的聚合統計量
![](https://hackmd.io/_uploads/H1-TqRUy6.png)
(左圖）以過去的正常運動（上圖）和異常運動（下圖）為條件，產生的 1000 個未來運動的分佈。 二維投影是透過 t-SNE [49] 估算的。 請注意，在正常情況下，真實的未來運動（紅點）位於主要分佈模式內，而在異常情況下，則位於邊緣區域。 (右圖）多樣性比率 rF [31]，用於測量正常和異常條件下產生的未來運動的多樣性。 沿著x 軸移動，隨著生成運動的增加，rF 測量值也在增加（MoCoDAD 生成的運動具有多模態多樣性），但它們仍然具有可比性（無論如何，從正常和異常生成運動都是多 模態的）。


1. 消融研究：評估不同調節策略對模型表現的影響。在異常檢測準確率方面，結合了正常條件和異常條件的混合條件策略優於單獨策略。
![](https://hackmd.io/_uploads/HkYB3A8y6.png)


3. 生成運動分析： 我們對生成的運動進行了定性分析，以深入了解模型的行為。 我們發現，我們的模型能夠產生多樣且合理的未來運動，而且產生的運動對條件資訊很敏感。







