3D CNN for Video Processing網絡
Updated on 2018-08-06 19:53:57ide
本文主要是總結下當前流行的處理 Video 信息的深度神經網絡的處理方法.函數
參考文獻: 性能
1. 3D Convolutional Neural Networks for Human Action Recognition T-PAMI 2013
學習
2. Learning Spatiotemporal Features with 3D Convolutional Networks CVPR 2015
編碼
1. 3D Convolutional Neural Networks for Human Action Recognition T-PAMI 2013 idea
Reference:http://www.javashuo.com/article/p-krbgulna-bw.htmlspa
摘要:本文考慮了在監控視頻下進行行人動做的識別。大部分當前的方法都是基於從原始輸入獲得的複雜的手工設計的特徵,來構建分類器。CNN是一種深度模型能夠直接做用在原始輸入上。然而,像這樣的模型當前僅僅應用於2D的輸入。本文中提出了一種新穎的3D CNN模型來進行動做識別。經過3D卷積能夠獲得時間和空間上的特徵,從而抓住了多幀之間的運動信息。這個模型從輸入幀獲得多個通道的信息,最終的feature表示是組合全部通道的信息。爲了進一步的提高性能,咱們提出了正則化高層特徵的輸出和組合不一樣模型的預測,利用提出的這個模型來進行人類動做的識別,超過了現有的baseline方法。.net
本文的主要貢獻點是:設計
(1)提出3D卷積操做獲得空間和時序上的feature用來行爲識別。
(2)基於3D卷積特徵提取器發展了一個3D卷積神經網絡結構。
(3)經過用高層運動特徵獲得的的額外輸出來正則化3D CNN models。
(4)取得了較好的實驗效果。提出的模型比普通的2D CNN 結構獲得了更好的實驗結果。
3D 卷積神經網絡:
在普通的2D卷積神經網絡中,2D卷積操做在上一層獲得的feature maps 上的局部近鄰提取 feature,而後添加一個額外的誤差(bias),而後將這個結果輸入給一個sigmoid函數(激活函數)。從形式上來說,第 i 層的第 j 個feature map 在位置(x, y)處的值爲:
從上式能夠看出,tanh(*)是激活函數,$b_{ij}$是這個feature map 的bias,m 表示和當前feature map 相連的第(i-1)層的特徵映射的集合索引,W 是和第 k 個feature map 連接的核在位置(p, q) 的值,$P_i, Q_i$ 是核的高和寬。在下采樣層,feature maps 的分辨率是經過在上一層的feature maps 上的局部近鄰上進行pooling操做而下降。一個卷積神經網絡就是經過這樣 卷積和pooling的交替而堆疊在一塊兒造成的網絡結構。CNN的參數,例如:bias $b_{ij}$ 和 核權重 $W_{ijk}^{pq}$ 經過監督或者非監督的方式進行學習。
3D Convolution:
在2D CNNs,卷積都是在2D的feature map上執行,當應用到視頻分析問題上時,須要編碼運動信息(motion information)從多個連續幀上獲得。爲了達到這個目的,本文提出了3D卷積操做,在CNN的卷積階段在時間維度和空間維度都進行特徵的提取。3D卷積操做是經過卷積一個3D核在由多幀構成的cube上,經過這個構建,卷積層的feature maps在以前的層上鍊接成多個連續的幀,因此抓住了運動信息,最終,在第 i 層的第 j 個feature map上在位置(x, y, z)處的值爲:
其中,$R_i$ 是3D kernel 沿着時間維度的大小,前一層連接第 m 個feature map 的kernel的(p, q, r)個值是 $w$。關於 2D 和 3D卷積的對比示意圖以下所示:
注意到一個 3D卷積核能夠從幀立方體(frame cube)中提取一種類型的feature,因爲kernel weight在整個 cube上都是複製的。CNNs 一個總的設計原則是:feature maps 的個數在後面的layers 上應該是增長的,經過在同一個底層feature maps 集合上,產生多個類型的feature。和 2D CNNs 相似,咱們能夠在不一樣的 kernel 上在上一層的同一個位置應用多個不一樣 kernel 來進行 3D卷積操做。如圖2所示:
A 3D CNN Architecture :
如上圖所示,基於3D卷積操做,本文提出了一種不一樣的 CNN 結構。咱們以當前幀爲中心,考慮到 7 幀60*40的圖像做爲輸入給 3D CNN model。咱們提出採用一組 hardwired kernels 從輸入幀上來產生多個通道的信息。這將會致使在第二層產生 33 個 feature maps,由 5 個不一樣的通道產生,分別是:灰度,梯度-x, 梯度-y, 光流-x,光流-y。灰度通道包括由7個輸入幀組成的灰色像素點,梯度-x 和 梯度-y 通道分別是經過 水平和垂直方向的梯度獲得的,在7個輸入幀的每個上面,都執行這樣的操做,光流-x 和 光流-y 經過包括沿着水平和垂直方向的光流場,從相鄰輸入幀計算獲得。這個 hardwired layer 用來在feature上編碼咱們的先驗知識,這個機制會獲得相對比隨機初始化更好的性能。
咱們而後用 kernel size 爲 7*7*3 的kernel 進行3D卷積操做,其中 7*7 是在空間維度,3 是在時間維度,在5個通道分別進行卷積操做。爲了增長feature map 的個數,在每個位置都進行兩組不一樣的操做,獲得兩組feature maps,每個都包括 23 個 feature maps。在隨後的採樣層 S3上,咱們在C2層的每個feature map上都進行 2*2 的下采樣操做。就會獲得和下降的空間分辨率相同個數的 feature maps。
其他的層,相似的方法就能夠推斷獲得。
關於這其中每一層 feature map 大小變化的緣由,參考原文以及相關blog,可知:
輸入層(input):連續的大小爲60*40的視頻幀圖像做爲輸入。.
硬線層(hardwired,H1):每幀提取5個通道信息(灰度gray,橫座標梯度(gradient-x),縱座標梯度(gradient-y),x光流(optflow-x),y光流(optflow-y))。前面三個通道的信息能夠直接對每幀分別操做獲取,後面的光流(x,y)則須要利用兩幀的信息才能提取,所以
H1層的特徵maps數量:(7+7+7+6+6=33),特徵maps的大小依然是60* 40;
卷積層(convolution C2):以硬線層的輸出做爲該層的輸入,對輸入5個通道信息分別使用大小爲7* 7 * 3的3D卷積核進行卷積操做(7* 7表示空間維度,3表示時間維度,也就是每次操做3幀圖像),同時,爲了增長特徵maps的個數,在這一層採用了兩種不一樣的3D卷積核,所以C2層的特徵maps數量爲:
(((7-3)+1)* 3+((6-3)+1)* 2)* 2=23* 2
這裏右乘的2表示兩種卷積核。
特徵maps的大小爲:((60-7)+1)* ((40-7)+1)=54 * 34
降採樣層(sub-sampling S3):在該層採用max pooling操做,降採樣以後的特徵maps數量保持不變,所以S3層的特徵maps數量爲:23 *2
特徵maps的大小爲:((54 / 2) * (34 /2)=27 *17
卷積層(convolution C4):對兩組特徵maps分別採用7 6 3的卷積核進行操做,一樣爲了增長特徵maps的數量,文中採用了三種不一樣的卷積核分別對兩組特徵map進行卷積操做。這裏的特徵maps的數量計算有點複雜,請仔細看清楚了。咱們知道,從輸入的7幀圖像得到了5個通道的信息,所以結合總圖S3的上面一組特徵maps的數量爲((7-3)+1) * 3+((6-3)+1) * 2=23,能夠得到各個通道在S3層的數量分佈:
前面的乘3表示gray通道maps數量= gradient-x通道maps數量= gradient-y通道maps數量=(7-3)+1)=5;
後面的乘2表示optflow-x通道maps數量=optflow-y通道maps數量=(6-3)+1=4;
假設對總圖S3的上面一組特徵maps採用一種7 6 3的3D卷積核進行卷積就能夠得到:
((5-3)+1)* 3+((4-3)+1)* 2=9+4=13;
三種不一樣的3D卷積核就可得到13* 3個特徵maps,同理對總圖S3的下面一組特徵maps採用三種不一樣的卷積核進行卷積操做也能夠得到13*3個特徵maps,
所以C4層的特徵maps數量:13* 3* 2=13* 6
C4層的特徵maps的大小爲:((27-7)+1)* ((17-6)+1)=21*12
降採樣層(sub-sampling S5):對每一個特徵maps採用3 3的核進行降採樣操做,此時每一個maps的大小:7* 4
在這個階段,每一個通道的特徵maps已經很小,通道maps數量分佈狀況以下:
gray通道maps數量 = gradient-x通道maps數量 = gradient-y通道maps數量 = 3
optflow-x通道maps數量 = optflow-y通道maps數量 = 2;
Model Regularization:
3D CNN model 的輸入限制於一個小的連續視頻幀,因爲隨着輸入尺寸的增長,要訓練的參數個數也會隨着增長。另外一方面,許多人類動做涉及到多幀。因此,須要將高層motion information 編碼到 3D CNN model中去,爲了達到這個目的,咱們提出了從許多視頻幀計算運動特徵 和 正則化 3D CNN models 經過將這些運動特徵做爲 auxilary outputs。類似的idea能夠在其餘論文中也能夠找到,可是並不知道是否在行爲識別上有效。實際上,對於每個訓練action,咱們產生一個特徵向量編碼長期動做信息(long-term action information)超過輸入給CNN 的視頻幀序列包含的信息。咱們接着用CNN 學習特徵向量接近這個 feature。這是經過將一些 auxiliary output units 鏈接到 CNN 最後的 hidden layer,而後在訓練的過程當中,在auxiliary units 上重複的計算特徵向量。這將會使得 hidden layer information 和 高層motion feature相接近。更多的細節具體參考相關文章。在實驗中,做者採用了 bag-of-words features,由 dense SIFT 描述子構建的特徵,在原始灰度圖像和運動邊緣歷史圖像做爲 auxiliary features。結果代表這種regularization scheme 將穩定的提高性能。
Model Combination:
模型的組合,沒啥好說的,就是用不一樣的網絡結構,最後將各個網絡的輸出作一個綜合,來作出最終的預測。
2. Learning Spatiotemporal Features with 3D Convolutional Networks CVPR 2015
Code:http://vlg.cs.dartmouth.edu/c3d/
本文進一步討論了 3D CNN 在視頻上的特徵提取,最終提出一種簡單有效的 3D 卷積結構(C3D):
==