基於temporal segment networks的行為識別
引言:根據ActionRecognize發展路線,最初是VGG組提出的Two-Stream Network實現,再他們之後,Limin Wang提出了VGGNet完成,加深了網路的深度,並提出防止過擬合的方法。得到了較好的效果。在ECCV2016,Limin Wang 提出了一種新的網路結構,即對雙流網路的改進,稱之為Temporal Segment Networks。 這篇部落格主要講述兩個方面:1,介紹BatchNormalization。2,介紹TSN網路以及訓練方法。
Batch Normalization:
起因
網路在訓練的過程,由於輸入資料分佈不一致,學習過程中網路引數會由於輸入資料分佈而變動,訓練變得較為困難,這種現象也稱之為 internal covariate shift。解決方案
由於起因在於輸入資料分佈不一致,因此,需要對輸入資料進行處理。對mini-batch進行歸一化。 歸一化公式(1.1)
x^=x(k)−E[x(k)]Var(x(k))√ (1.1)
BN層輸出結果如式(1.2)
y(k)=γ(k)x^(k)+β(k)
其中
BN用於卷積神經網路時,將BN層放置於卷積層之後,RELU/Sigmoid之前。因為如果放置於卷積層之前,也就是非線性單元輸出之後,導致訓練過程中,非線性單元的分佈變化大,卷積層之後更穩定。
減少了internal covariate shift,網路訓練速度加快。
- BN的訓練特性
- 加入BN層可以使用更高的學習率,一定程度上減少了反向梯度過大的問題。
- Regularize the model,可以在一定程度上替代Dropout層,提升模型的泛化能力。
TSN網路
起因:先前的two-stream network對於視訊的資訊利用率低。original two-stream network 在train spatial network 使用一張RGB圖,以及L=10的stacked optical flow。這明顯是不足以代表整段視訊,因此,TSN提出了一種新的方法使用該網路結構,通過temporal segment實現對video分段,增加video利用率
方法:將一段video分割成等間隔的3段(segments),每一段中隨機取一張RGB圖和L=5的optical flow image。、
對於RGB圖,三張RGB圖stack成一張9通道的圖片,經過影象預處理及影象擴增之後,再reshape成連續的三通道圖片輸入至網路中,相當於增加了網路的batchsize,但三張圖片是連續的,在FC層輸出之後,再將loss 的形狀reshape為3個一組的形式。reshape_param { shape { dim: [-1, 1, 3, 101] } },此三個loss便是三張rgb圖經過網路分別得到的loss,再對loss經過Average Pooling,得到最終的spatial loss。
光流圖同上。
網路圖如下
三個spatial/temporal convnet共享權重,實質上是三張rgb/optical flow輸入的是同一個網路,類似於batchsize擴大了3倍,輸入到網路中,再最終的FC層之後,分離各個圖片的輸出,並將三個圖片的loss融合在一起。
最終將temporal 和 spatial融合在一起,得到最終的loss,經過softmax歸一化,判斷出video所屬的label。
為了進一步提升準確率,作者不惜代價,居然加入了warped optical flow,雖然有了很小的提升,但是,俗話說,這種方法只能說是:傷敵一千自損八百。只有百分之0.2左右的提升,卻需要重新訓練warped optical flow網路。
關於warped optical flow,是來處理相機位移帶來的水平方向位移的影響。
因此,最終的準確率是rgb+optical flow + warped optical flow的結合。
實際上,只有訓練時採用TSN。訓練是單獨對spatial 和 temporal訓練,兩者的結合存在於測試之中。因此,該方法還有巨大的提升空間,也就是在訓練中對spatial 和 temporal結合(貌似這種方法在CVPR2017中已經使用了)。
測試中,為了保持與其他方法一致的評判標準,並未使用TSN,而是取25幀影象進行評估。最終對Temporal和spatial進行結合,達到了較高的準確率。
該實現採用的網路是bn-inception,該網路是對Googlenet的改進,在BN的論文中提出。
由於資料集不夠,網路還挺深,於是防止過擬合就成了當務之急。提出的三個過擬合方法:
1. Cross Modality Pre-training:很老套,用原始的ImageNet訓練的bn-inception模型初始化(包含optical flow)
2. 資料擴增:與VGG一模一樣,在上一篇論文有提及。但是實際程式碼中,crop了更多的圖片,不只是四個角和中心,還有中上,中下,中左,中右。一共九塊來隨機取樣。
3. BN層的修改:BN層將batch資料轉換成符合標準的高斯分佈,加速收斂,但是會有過擬合的風險。因此,論文中選擇不更新mean和variable。這種修改叫做Partial BN。並且在fc層前額外增加了dropout層防止過擬合。
另外,論文中再融合了RGB-difference發現並不好,因此RGB-difference不穩定。