本篇文章是基於《R-C3D:Region Convolutional 3D Network for Temporal Activity Detection》的詳解,歡迎批評指正。
動作檢測(Action Detection)主要用於給分割好的視頻片段分類,但在實際中視頻多是未分割的長視頻,對於長視頻的分割並且分類任務叫做時序動作檢測(Temporal Action Detection)。給定一段未分割的長視頻,算法需要檢測視頻中的動作片段,包括開始時間、結束時間和動作類別。一段視頻可以包含一個或多個相同或不同的動作片段。
Action Recognition和Temporal Action Detection之間的關系和Image Classification和Object Detection之間的關系很像。基於Image Classification產生了例如VGG等網絡模型,這些模型在Object Detection中提取目標特征提供很大幫助。同樣,Action Recognition相關的模型(例如C3D等)也被廣泛用於Temporal Action Detection中提取相關動作特征。
由於Temporal Action Detection和Object Detection存在相似性,很多Temporal Action Detection方法采用與Object Detection相似的框架(例如R-C3D采用與Faster R-CNN相似的結構)。
時序動作檢測難點較多,解決方法主要針對這些難點。1)目標檢測邊界框很明確,但時序動作邊界比較模糊;2)時序動作檢測必須將靜態圖像(幀圖像)結合時序信息,只使用靜態圖像特征不可行;3)動作時間跨度非常大,少則1s,多則上百秒。
時序動作檢測關鍵在於擁有高質量的時序片段和准確的動作分類。很多方法使用Proposal和Classification結合(例如R-C3D),對於這類方法,在保證平均召回率情況下,要盡量減少Proposal數量,提高速度。對於所有方法,獲得准確的時序動作邊界和分類都很重要。
時序動作檢測主要用於對連續的、未分割的視頻進行包含動作(幀)的裁剪,捕獲動作類別,並定位出動作的開始和結束時間。本文提出的方法簡稱為“R-C3D”,它是一個端到端的網絡架構,每秒可以處理569幀。
對於時序動作檢測問題,已經存在的方法主要基於目標檢測框架,例如使用滑動窗口等,本文使用的方法類似於Faster R-CNN框架,它是一個端到端的網絡,有一個類似RPN網絡的結構,用於提取視頻的Proposal(給出視頻段中心和長度)。3D RoI結構可以將任意尺寸特征圖轉變為相同尺寸特征圖,便於輸入全連接結構。同樣類似於Faster R-CNN,網絡框架同時優化Proposal Generation和Activity Classification。輸入視頻可以是任意長度,需要檢測視頻段也可以是任意長度。
下圖1可以清晰看出網絡結構信息。輸入為視頻流(幀),經過C3D(類似VGG、ResNet等特征提取網絡,這里對視頻也就是四維數據提取特征,增加特征L即視頻幀維度)網絡提取特征圖。然后將提取的特征經過動作提議網絡得到一系列粗略的動作序列,包含提取到的動作序列的中心點和長度。最后,經過分類網絡和精調,得到動作序列的具體開始和結束時間以及動作類別。
圖1
詳細的R-C3D結構如下圖2所示,此網絡主要包含三個部分:共享的3D卷積特征提取器、時序提取網絡和動作分類及精調網絡。時序提取網絡和動作分類網絡共享了由3D卷積特征提取器提取到的特征。
圖2
3D Convolutional Feature Hierarchies(3D卷積特征層次結構)
此部分采用C3D網絡架構提取視頻序列幀的特征,類似於2D卷積,3D卷積的形象描述如下圖3(c)所示。3D卷積對H、W和L三個維度都進行卷積,而2D卷積(多通道(b))只對H和W兩個維度進行卷積,因此3D卷積得到的是三維輸出,而2D卷積得到的是二維輸出。
圖3
模型的輸入是視頻幀序列$\mathbb{R}^{3\times L\times W\times H}$,經過C3D提取特征圖為$C_{conv5b}\in \mathbb{R}^{512\times \frac{L}{8}\times \frac{H}{16}\times \frac{W}{16}}$,此特征在提取網絡和分類網絡中共享(如圖2紅色箭頭所示)。其中H=W=112,L長度任意,只要滿足內存容量即可。
Temporal Proposal Subnet(時序提議子網絡)
顧名思義,就是提取出上面特征圖中(視頻流)包含動作提議的視頻幀段,類似於Faster R-CNN中RPN提取可能包含目標的錨框。這個過程是比較粗略的,簡單的定位可能出現動作的視頻段,標識出動作段的中心和長度,后面進行精調。具體流程見下圖4。
圖4
首先,接收上個C3D網絡提取的特征圖作為輸入。然后,假設anchor(動作片段,類似RPN產生的錨框)均勻分布在L/8的時間域上,時間域上每個位置生成K個不同長度的候選時序anchor,總共有(L/8)×K個anchor。為了獲得每個時間位置的特征,預測這些錨框,首先一個3D卷積過濾器3×3×3來擴展時序感受野。然后下采樣空間維度,使用3D最大池化$1\times \frac{H}{16}\times \frac{W}{16}$得到特征圖$C_{tpn}\in R^{512\times \frac{L}{8}\times 1\times 1}$。每個時序位置上的512維的特征向量用來預測中心位置和長度$\left \{ c_{i},l_{i} \right \}$的相對偏移$\left \{ \delta c_{i},\delta l_{i} \right \}$,它也預測了此提議(Proposal)是動作還是背景。通過在$C_{tpn}$上增加兩個1×1×1卷積預測提議偏移和提議分數。對於眾多的提議(L/8)×K個,本文選擇IoU大於0.7作為正提議,IoU小於0.3作為負提議,比例1:1,其他拋棄。
Activity Classification Subnet(動作分類子網絡)
動作分類子網絡主要包含三個功能:從上一階段選擇出部分提議、對於選擇的提議進行3D RoI(類似於2D RoI)池化挖掘固定尺寸特征和對於選中的提議基於特征整合進行動作分類以及邊界回歸(調整動作視頻段中心和長度)。NMS消除了高度重疊提議和低提議分數的情況,使得提議數量更少質量更高,提高效率,見圖5。
圖5
選擇的提議是任意長度的,為了平鋪(Flatten)后得到固定維度的向量使得與全連接層連接,使用了3D RoI池化層。輸入是共享的特征$C_{conv5b}\in \mathbb{R}^{512\times \frac{L}{8}\times 7\times 7}$,輸出為512×1×4×4。最后,將這些特征喂入兩個全連接層,通過分類層進行分類,通過回歸層調整這些提議的開始和結束時間。
提議與動作有最高的IoU並且IoU大於0.5時提議定義為此動作,提議和任何GT動作的IoU都低於0.5是背景,正負樣例比1:3。
Optimization(優化)
本文對分類和回歸任務共同優化,分類使用Softmax損失函數,回歸使用平滑的L1損失函數。目標函數如下:
$N_{cls}$和$N_{reg}$分別代表batch size和anchor的數量,$a_{i}$是提議或動作預測的可能性,$a_{i}^{*}$代表相應的GT,$t_{i}=\left \{ \delta \hat{c_{i}},\delta \hat{l_{i}} \right \}$表示anchor相對偏移,$t_{i}^{*}=\left \{ \delta c_{i},\delta l_{i} \right \}$代表對應坐標轉換的GT,坐標轉換如下:
$c_{i}$和$l_{i}$分別表示anchor中心位置和長度,而$c_{i}^{*}$和$l_{i}^{*}$分別表示相應的GT。
上面的損失函數同時運用在時序提議網絡和動作分類網絡。提議網絡中,二元損失預測是否包含動作,回歸損失優化提議和GT相對偏移;分類網絡中,多元損失函數預測提議具體類,類個數為動作類個數加1(背景),回歸損失優化動作和GT相對偏移。同時優化兩個子網絡的四個損失函數。
R-C3D動作預測分為兩步:首先,提議子網絡產生候選提議並且預測開始和結束時間以及每個提議分數;然后,通過NMS重新調整提議,被選擇的提議喂入分類網絡進行分類,預測提議的動作邊界通過回歸層重現調整。
數據集采用THUMOS14,網址為https://www.crcv.ucf.edu/THUMOS14/download.html。還有ActivityNet和Charades數據集,在論文中也有使用。THUNOS14數據分為訓練集、背景、驗證集和測試集,我們只使用驗證集和測試集,驗證集充當訓練集,測試集就充當測試集。其中訓練集包含200個視頻數據,測試集包含213個視頻數據,其中總共有20個動作類。每個視頻可能包含一個或多個相同或不同的動作類。下圖6是數據集的直觀表示。具體的數據集使用方法我會在使用的代碼實現中詳細描述。
驗證的主要標准是mAP(平均精度)和檢測速度(fps,每秒鍾處理多少幀圖像)。
圖6
代碼的使用方法以及數據集的介紹我會在日后具體介紹。