論文筆記——基於深度學習的視頻行為識別/動作識別(一)
6 人贊了文章
1. 概述
使用DL方法解決視頻中行為識別/動作識別的問題解決思路有兩大類,一是以抽取並分類時空特徵為目的的視頻識別方法;二是以提取骨架信息進行再訓練為目的的姿態估計方法。本文主要梳理近5年來第一類論文中的演算法,其中有三個分支:分別是two-stream(雙流)方法,C3D方法以及CNN-LSTM方法。本文將從演算法介紹、演算法架構、參數配置、訓練集預處理、演算法優勢及原因、運行結果六個方面對每種演算法進行闡釋,並對每一個分支的演算法集合總結自己的心得。本文暫不區分行為識別(Activity Recognition)與動作識別(Action Recognition)。
本筆記大概分析15篇左右數量的論文,基本是2014-2018的引用較多的頂會文章,共分四篇筆記對這些內容進行論文詳解、演算法對比與總結。
2. 論文詳解
2.1 two-stream(雙流)方法
2.1.1 two stream
(1). 演算法介紹
該篇論文[1]是雙流方法的開山之作,論文所提出的網路使用以單幀RGB作為輸入的CNN來處理空間維度的信息,使用以多幀密度光流場作為輸入的CNN來處理時間維度的信息,並通過多任務訓練的方法將兩個行為分類的數據集聯合起來(UCF101與HMDB),去除過擬合進而獲得更好效果。
該篇論文無公開源代碼。
(2). 演算法架構
(3). 參數配置
1) CNN使用了AlexNet,kernel參數與pool參數如圖所示;
2) 激活函數使用了ReLU;
3) 時域卷積與空域卷積不同在於第二個卷積層沒有正規化層,減少內存的消耗;
4) 每層CNN都有softmax,全過程的loss是每個任務的loss之和;最後兩個softmax的fusion有兩種方法,分別是平均法與SVM訓練+L2正則方法。
(4). 訓練集預處理
1) 空域卷積有三種方法:UCF101從0開始訓練、ILSVRC-2012 pre-trained+UCF101 finetuning與ILSVRC-2012 pre-trained+UCF101隻訓練最後一層;
2) 時域卷積沒有可供預處理的模型,故僅通過改變輸入的層數來觀察結果;
3) 多任務學習中對比了HMDB從0開始訓練、HMDB+UCF101(部分)從0開始訓練、UCF101 pre-trained+HMDB finetuning三種方式來對比結果。
(5). 演算法優勢及原因
1) 用兩個CNN網路一個來處理空域信息一個來處理時域信息,奠定了這一類演算法的基礎框架。
2) 稠密光流的確可以表徵出動作的特徵從而更易分類,傳統非DL的視頻識別演算法中獲取最高成績就是iDT演算法,也是使用了光流法。本論文對光流法輸入進行了4種嘗試,分別是光流直接疊加的光流棧、軌跡疊加的軌跡棧、雙向光流的雙向棧以及去除平均光流,(stacking在這裡即是堆疊累加的意思,軌跡疊加類似於視頻編碼中P幀的MV、MVD,雙向疊加類似於B幀中的MV、MVD)。
(6). 運行結果
1) 空域上Pre-trained效果更優,時域上L=10且雙向光流,水平和垂直光流場的簡單疊加效果最好。
2) 多任務學習的演算法在小規模數據集上有明顯優勢。
3) SVM的融合方式比計算平均有更高增益。
4) 當時的確很少人研究或是沒找准方向關於DL的視頻識別,故對比主要是與非DL的傳統手動提取特徵的方法以及單空域卷積和單時域卷積進行了對比。
2.1.2 two stream fusion
(1). 演算法介紹
該篇論文[2]發現了two stream的兩個問題,一是不能在空間和時間特徵之間學習像素級的對應關係,二是空域卷積只在單RGB幀上時域卷積只在堆疊的L個時序相鄰的光流幀上,時間規模非常有限。導致了不能利用視頻中兩個非常重要的線索(Cue)來完成動作識別,即從指定的表象(空間線索)位置區域同時看光流(時間線索)有何變化,從而進行行為識別(what is moving where),以及線索是如何隨時間展開的。
雖然該論文沿襲了two stream網路架構,但做了如下擴展:
1) 在空域卷積網路進行了3D Conv 融合與3D Pooling;
2) 在時域卷積網路進行了3D Pooling;
3) 用VGG深度模型替換了AlexNet。
與此同時,作者有3處新發現:
1) 在時域空域卷積層進行融合比傳統stacked CNN那種在softmax上融合性能損失更少,參數上也有節省;
3) 在最後一個卷積層上融合比空域的卷積層融合(提早融合)可以提升準確;
3) 抽象的卷積特徵時空鄰域內池化更能提升性能。
但我不太清楚這兩處性能是否都是指計算複雜度,同時也指出了數據集小、雜訊多和前人研究成果沒有充分挖掘時域信息是視頻識別對比圖像識別落後的兩大因素。
該篇論文公開源代碼,是基於MatConvNet toolbox實現。
(2). 演算法架構
該文章通篇談的是融合(Fusion),關鍵闡釋的是如何去融合空域卷積網路與時域卷積網路、在哪裡融合這兩個網路、如何在時域上融合網路三個問題。
首先要處理如何在空域上融合的問題。空域卷積網路與時域卷積網路的融合問題目標是在相同像素位置上的空域時域同時給予激勵並獲取其響應。需要空域卷積對時域卷積的網路通過通道傳遞信息。以刷牙為例,空域網路的某個通道對應面部區域,時域網路中一個通道負責周期性運動場,時域通道被疊加(stacking)後,後續的filter必須學習通道之間的相關信息。
文章介紹了以下5種網路間feature map的融合方法(假設兩個網路的寬、高、通道數一致):
1) 求和融合,計算兩個feature map之和;
2) 最大化融合,採用兩個feature map的最大值;
3) 級聯融合,擴展輸出的值域範圍,直接堆疊兩個feature map;
4) 卷積融合,先堆疊,再乘以一個卷積核,加上一個偏置;
5) 雙線性融合,計算兩個feature map在每個像素位置的矩陣外積,然後求和。
接下來要處理在哪裡融合的問題,約束條件是兩個輸入在t時刻的feature map需要有相同的空間維度,如果沒有,可通過向上卷積或填充0來實現上採樣。
最後要處理如何在時域上融合的問題,文章介紹了以下3種方法:
1) 2D Pooling,就是時間維度上不縮減;
2) 3D Pooling,時間維度上也縮減;
3) 3D Conv + Pooling,C3D的方法,先用若干個3D卷積核卷積再進行池化。
該文章的架構是在最後一個卷基層的ReLU之後將兩個網路融合至空域流,並通過3D Conv+3D Pooling轉化成時空流,同時不截斷時域流,在時域網路上執行3D Pooling。最終兩個Loss都用於訓練並進行預測。整個網路輸入是上下文較長的時間尺度(t + Tτ),但每次處理的只是上下文較短的時間尺度(t±L/2),要注意類似於奈奎斯特準則一樣,τ < L導致時域的輸入重疊,τ ≥ L時域輸入不會重疊。
(3). 參數配置
1) 使用了VGG-M-2048模型(5卷積+3全連接)與VGG-16模型(very deep,13卷積+3全連接),都進行了ImageNet預訓練;
2) L=10的疊加光流,預計算光流,存儲為JPEG且不使用批量歸一化;
3) batch size=96, learning rate 10的-3次冪,精度飽和後再降低10倍;
4) 3D Conv fusion f的維度是3×3×3×1024×512 T=5,時空filter的維度是3×3×3,ReLU5連接和D = 512匹配FC6層輸入通道的數量D = 1024。
(4). 訓練集預處理
1) 空間抽取上,在幅面上隨機地將其寬度和高度抖動±25%,並將其重新調整為224x224,雖然隨機選擇了crop的位置、大小、比例、水平翻轉,但以後將相同的空間crop應用於堆棧中的所有幀作為時域輸入;
2) 時間抽取上,從96個視頻中的每一個中抽取T=5幀,隨機選擇起始幀,然後隨機抽取時間跨度 (τ)∈ [1,10](τT=15~50)。
(5). 演算法優勢及原因
1) 作者找到表象(appearance)和運動(motion)位置能對應上的融合,如ReLU5,所以在這兒的表現比在FC融合要好的多,FC層已經完全瓦解了這種對應關係;
2) 使用了VGG-M-2048(提升3%)與VGG-16(提升4.5%-6%)這種very deep的網路,要比之前的AlexNet好很多;
3) 使用了類似於C3D的演算法,3D Conv與3D Pooling相對於2D更有效果。
(6). 運行結果
1) 關於在空域上的融合,最好的方法還是卷積的方法,對kernel的隨機初始化(Gauss雜訊)和單位矩陣初始化差不多,次好的反而是運算最簡單的求和法。
2) 作者嘗試各種位置進行融合,測試結果比較好的是ReLU5融合,雖比ReLU5+FC8的融合低了0.08%,但是參數少了僅一倍。
3) 3D Conv + 3D Pooling顯然是最好的
4) 和主流方法的第一代演算法進行對比,以及和iDT互補後照樣優勢明顯。
2.1.3 Towards Good Practices
(1). 演算法介紹
該文章[3]主要是列舉了最新的幾種CNN形式和訓練策略,並用caffe實現了two streams,並沒有在演算法上有創新。
該文章所關注的最優實踐有如下五個方面:
1) 時域網路與空域網路的預訓練技術;
2) 更小的學習速率;
3) 新的數據集擴容技術;
4) 更高的drop out係數;
5) 多GPU訓練技術。
該篇論文公開源代碼,基於caffe實現。
(2). 演算法架構
同two-stream的演算法架構
(3). 參數配置
1) 學習速率方面
空域網路,0.001開始,4000次之後為0.0001,迭代10000次結束;
時域網路,0.005開始,10000次之後為0.0005,迭代30000次結束。
2) 數據集擴容方面
角落裁剪策略,只裁剪圖像的4個角落和1個中間區域;
多尺度採樣,{256-224,192-168}隨機採樣裁剪寬和高。
3) dropout係數方面
空域網路,後兩層FC設置的係數為0.9和0.9;
時域網路,後兩層FC設置的係數為0.9和0.8。
4) 多GPU訓練
依賴於caffe和OpenMP的實現。
(4). 訓練集預處理
空域網路輸入仍是單幀RGB圖像,224x224x3,ImageNet預訓練;
時域網路輸入是10幀光流場,224x224x20,對每個視頻提取光流場,線性離散化到[0,255]中,ImageNet模型濾波器的第一層求平均值,複製20次進行時域網路的初始化。
(5). 演算法優勢及原因
1) 使用了更深的CNN網路VGG-16,能夠更好表徵圖像特徵,從而更好表徵視頻特徵;
2) 使用了TDD(軌跡池化-深度卷積描述符)和TVL1光流計算方法。
(6). 運行結果
2.1.4 TSN
(1). 演算法介紹
該篇文章[4]的作者和2.1.3是同一伙人,但本篇論文相比2.1.3在架構上有所創新,作者發現了前人研究成果(尤其是two-stream)只能處理短期運動(short-term),對長期運動(long-range)時間結構進行理解不足,且訓練樣本較小。於是作者使用了稀疏時間採樣策略和基於視頻監督的策略,將視頻進行時域分割後隨機抽取片段,來彌補第一個不足,用交叉預訓練、正則化技術和數據擴張技術彌補第二個不足,並將此網路結構命名為時域分割網路(Temporal Segment Network, TSN)。
此文章 Temporal Segment Networks for Action Recognition in Videos 只是在本文章基礎上稍作調整。
該篇論文公開源代碼,基於caffe實現,以及另一種實現方式,基於pytorch實現。
(2). 演算法架構
對一個輸入視頻V被分為K個segment(S1,S2,…,Sk),並從中隨機選擇一個片段Tk(snippet),完成了稀疏時間採樣,而後繼續通過two-stream網路,將所有(k個)空域網路的輸出進行類別score的分布統計,對時域網路的輸出進行類別score的分布統計,每個segmental consesus的輸出結果用均值處理一下,最後用softmax函數得出概率最高的類別。
(3). 參數配置
k個spatial convnet的參數是共享的。
(4). 訓練集預處理
1) 在輸入上,在two-stream基礎上又增加了RGB difference(相鄰兩幀的差)和warped光流場,如下圖所示;
2) 在防止過擬合上,使用了交叉預訓練技術、正則化技術和數據擴張技術,需要預處理的是時域網路初始化以及對圖像進行隨機剪裁、鏡像、畫幅抖動的數據擴張方法。
(5). 演算法優勢及原因
1) 由於進行了時域分割和隨機抽取,並有分布統計和獨特的Loss函數,作者認為利用了整個視頻的視覺信息進行的video-level的學習與分類;
2) 交叉預訓練主要是針對時域網路的初始化,先將光流場離散線性變換至[0,255]區間內,這樣就和RGB單通道的值域相同了,接下來對RGB模型第一個卷積層的權值作為光流場第一個卷基層的權值,並對RGB三通道取均值作為單通道作為時域網路的輸入,從而完成時域網路的初始化。
3)正則化技術主要用到的是partial BN,即凍結BN層的均值和方差參數(除了第一層),不再進行訓練過程中的更新
4)數據擴張的方式還是4個角落+1個中心,以及寬高在256~224/192~168進行浮動。
此外還有個亮點在於DeepDraw可以對訓練後每層的輸出進行可視化,更直觀的觀測到每一層DL都學習到了什麼特徵。
(6). 運行結果
1) 從訓練過程來看,經過交叉預訓練並使用局部BN的效果自然最好;
2) 從不同輸入對比來看,RGB+光流+warped光流場的組合效果最優;
3) 從不同合併方式來看,帶有權重的平均效果最優;
4) 從不同網路架構對比來看,BN-Inception的TSN效果最優;
5) 和主流演算法的對比結果。
2.1.5 3D ResNet
(1). 演算法介紹
該篇文章的作者同2.1.2。由於ResNet在圖像識別領域中的出色表現,引起了視頻識別研究者的關注,作者最先將其在時域上進行了擴展,並延續了Fusion網路的特色,一定要找到時域空域的像素級對應關係。在雙流網路中,時域網路和空域網路也有residual connection並進行參數的傳遞,最終得出比較優異的結果。其實每一個網路都能學習到時空特徵,所以不再稱為空域網路和時域網路,而改稱為場景網路(appearance)和運動網路(motion)。該網路整體命名為時空殘差網路,即STResNet。
該篇論文公開源代碼,基於MatConvNet toolbox實現。
(2). 演算法架構
這個架構的紅色連線部分即是殘差連接,這個連接是可訓練的,前向公式如下:
appearance和motion的後向公式如下:
處理視頻數據過程中時空連貫性是一個重要的線索,無監督的方式學習視頻泛化特徵的時候,在這種情況下,要求特徵隨時間變化緩慢。卷積殘差網路對時域的表示需要使用在時間上進行平滑的手段,也即關於時間求導,這樣時域上的殘差連接才能更有意義。下圖是運動網路中一個神經單元從第1層到第5層的殘差連接。作者認為殘差連接對於判別學習是次優的,因為求和運算等同於低通濾波,隨著時間推移可能會平滑掉一些高頻但能潛在表達特徵的重要信息。而且反向傳播無法彌補該缺陷,因為梯度從輸出到輸入所有層連接中是均等分布的。
為了解決這一問題,作者採用了新的時間殘差的方法,使用了小的非對稱的filter,通過將殘差路徑中的空間filter維數映射轉換為時間filter,實現了時間卷積。這個時間filter可以學習場景與運動的變化,通過堆疊這些filter可以學習到更深層次的時空特徵。
(3). 參數配置
每一層的網路參數如下圖,每一層的Kernel/Pooling/Batch Normalize都比較詳細。
其中連接細節如下圖所示。
超參數如下圖所示:
(4). 訓練集預處理
1) 每個輸入都是5個snippets,其中是跳躍取幀而不是連續取幀,5~15幀左右;
2) 兩個流的預訓練都使用ResNet50,光流輸入L=10幀;
(5). 演算法優勢及原因
1) 雙流中的卷積層都換成了3D Residual,初始化和預訓練也可以相互參考,不再像之前沒有辦法對光流進行預訓練或是交叉預訓練等。
2) residual connection可以避免梯度流失的問題,網路表達能力也相應增強。
(6). 運行結果
迭代次數少,學習變化率小,但chunks更多的超參數效果更優。
比主流演算法效果更優。
下一篇: 論文筆記——基於深度學習的視頻行為識別/動作識別(二)
參考文獻
[1]. K. Simonyan and A. Zisserman. Two-stream convolutional networks for action recognition in videos. In NIPS, 2014. 2,
[2]. C. Feichtenhofer, A. Pinz, and A. Zisserman. Convolutional two-stream network fusion for video action recognition. In CVPR, 2016. 2, 8
[3]. L. Wang, Y. Xiong, Z. Wang, Y. Qiao, and D. Lin. Towards Good Practices for Very Deep Two-Stream ConvNets. In ECCV, 2015. 8
[4] L. Wang, Y. Xiong, Z. Wang, Y. Qiao, D. Lin, X. Tang, and L. V. Gool. Temporal segment networks: Towards good practices for deep action recognition. In ECCV, 2016. 2, 8
[5] C. Feichtenhofer, A. Pinz, and R. P. Wildes. Spatiotemporal residual networks for video action recognition. In NIPS, 2016. 2, 7, 8
推薦閱讀:
※北大女神帶你進入計算機視覺的神奇世界 | 新課上線
※文本檢測之RRPN
※cs131課程筆記(8)
※[論文筆記] 圖像密集標註
TAG:計算機視覺 | 目標識別 | 深度學習DeepLearning |