一 寫(xiě)在前面
未經(jīng)允許虎锚,不得轉(zhuǎn)載,謝謝~~~
這是一篇超級(jí)老也超級(jí)經(jīng)典的文章了枚赡,2014年發(fā)表在NIPS上谷誓。在我之前的幾篇視頻識(shí)別的博客中也多次提到過(guò)這一篇two-stream結(jié)構(gòu)迫横。
整篇文章的思想和模型結(jié)構(gòu)都很簡(jiǎn)單,之所以再拿出來(lái)完整地讀一讀是最近一門(mén)課程需要做個(gè)綜述酝碳。
而且對(duì)于文章中的optical flow一直也只是聞其名矾踱,但沒(méi)有真正學(xué)習(xí)過(guò)(/捂臉),所以也趁機(jī)學(xué)習(xí)一波疏哗。
二 基本介紹
2.1 任務(wù)描述
視頻相比于圖像而言呛讲,是一幀幀圖像的集合。因此返奉,很自然可以想到從兩個(gè)維度去提取視頻信息:
- 空間:?jiǎn)螏瑘D像包含的信息贝搁;
- 時(shí)間:多幀圖像之間包含的運(yùn)動(dòng)信息;
所以文章就想能否同時(shí)利用視頻的空間信息與時(shí)間信息衡瓶,來(lái)更好的提取視頻特征徘公,進(jìn)而進(jìn)行視頻分類任務(wù)。
2.2 main contribution
文章的主要contribution:
- 提出了大名鼎鼎的two stream ConvNet哮针;
- 實(shí)驗(yàn)發(fā)現(xiàn)利用optical flow即使只有很少的訓(xùn)練樣本也能達(dá)到不錯(cuò)的實(shí)驗(yàn)結(jié)果关面;
- 在兩個(gè)不用的數(shù)據(jù)集上用multitask-learning, 可以增加訓(xùn)練樣本的數(shù)量,進(jìn)而提升在單個(gè)數(shù)據(jù)集上的識(shí)別性能十厢。
第3點(diǎn)在現(xiàn)在看來(lái)其實(shí)都不算是很創(chuàng)新的東西了等太,只是把兩個(gè)數(shù)據(jù)集UCF101及HMDB51疊加在一起作為訓(xùn)練集訓(xùn)練網(wǎng)絡(luò),用相同的網(wǎng)絡(luò)結(jié)構(gòu)蛮放,不同的softmax進(jìn)行分類缩抡,得到兩個(gè)分類loss,然后對(duì)兩個(gè)loss做一個(gè)相加后進(jìn)行梯度回傳包颁。
這里主要介紹一下two stream的結(jié)構(gòu)及optical flow相關(guān)的部分瞻想。
三 模型及方法介紹
還是先看網(wǎng)絡(luò)結(jié)構(gòu)圖吧:
整體網(wǎng)絡(luò)簡(jiǎn)單清晰:
- 上面一層:spatial stream convNet負(fù)責(zé)提取空間信息;
- 下面一層:temporal stream convnet負(fù)責(zé)提取時(shí)間信息娩嚼;
如圖中所示蘑险,對(duì)于spatial convNet來(lái)說(shuō),輸入圖像是單張RGB圖像岳悟,然后經(jīng)過(guò)一系列的卷積層佃迄、fc層后接到一個(gè)sofmax中,得到一個(gè)概率分布值贵少;
然后對(duì)于Temporal ConvNet來(lái)說(shuō)呵俏,輸入是多幀圖像之間的optical flow,同樣經(jīng)過(guò)一系列網(wǎng)絡(luò)層后接到一個(gè)softmax中滔灶,得到一個(gè)概率分布值普碎。
除了下面的temporal ConvNet少了一層normalization層, 上下兩個(gè)stream的基本網(wǎng)絡(luò)構(gòu)成都是一樣的。
最后的class score fusion將兩個(gè)stream的score值融合在一起宽气,文章一共嘗試了:average随常、SVM這兩種方法潜沦。(實(shí)驗(yàn)結(jié)果顯示SVM融合的方式更優(yōu))
四 optical flow視頻光流
4.1 optical flow stacking
我們先從下面的例子來(lái)看一下optical flow的定義:
光流可以看成是2幀連續(xù)幀t,t+1之間的移位向量場(chǎng)(displacement vector)绪氛。
如圖(a),(b)所示為2幀連續(xù)幀唆鸡,其中綠色框中是前后兩幀運(yùn)動(dòng)信息比較明顯的部分。圖(c)展示的就是綠色框中對(duì)應(yīng)的光流情況枣察,可以看到各個(gè)位置的移動(dòng)情況争占。
圖(d)(e)分別是對(duì)移位場(chǎng)進(jìn)行水平和垂直兩個(gè)方向進(jìn)行分解后的示意圖。
這兩個(gè)就就可以很方便的用神經(jīng)網(wǎng)絡(luò)來(lái)識(shí)別序目。
對(duì)于大小為 w, h, 幀長(zhǎng)度為L(zhǎng)的一個(gè)視頻片段來(lái)說(shuō)臂痕,將L幀的dx,dy給堆疊起來(lái)猿涨,就能得到長(zhǎng)度為2L
的input channels, 即整個(gè)輸入的體積形狀為:[ w握童,h,2L ]
對(duì)于L中的任意一幀τ而言叛赚,下式成立:
其實(shí)整個(gè)數(shù)學(xué)公式表達(dá)的就是將每一幀的dx澡绩,dy按序stack在一起的意思:
而對(duì)于任意一個(gè)點(diǎn)(u,v),Iτ(u,v,c), c = [1;2L] 就是表示這一個(gè)坐標(biāo)位置點(diǎn)在長(zhǎng)度為L(zhǎng)幀中的動(dòng)作進(jìn)行編碼俺附。
4.2 trajectory stacking
整體思路跟optical 類似肥卡,只是這里記錄的是軌跡信息。
看如下公式:
唯一與optical flow不一樣的地方的地方就在在于等式的右邊不再是位置(u事镣,v)步鉴,而是軌跡Pk。
Pk的數(shù)學(xué)解釋在這里:
其實(shí)就是記錄的從點(diǎn)(u,v)出發(fā)璃哟,后面每一個(gè)軌跡上的點(diǎn)的位置氛琢。即pk上的點(diǎn)是從運(yùn)動(dòng)軌跡上sample出來(lái)的。
下面這張圖很好的表示了optical flow和trajectory之間的關(guān)系和區(qū)別:
- 左邊是optical flow随闪;
- 右邊是trajectory艺沼;
- 注意看左邊的點(diǎn)在各幀上始終是p1,即記錄的自始至終都是同一個(gè)坐標(biāo)點(diǎn)(u蕴掏,v)在各幀上的移動(dòng)情況。
- 而右邊的點(diǎn)從最開(kāi)始的p1(u,v)调鲸,到后面各幀盛杰,它指向的坐標(biāo)位置是在變化的。它記錄的是這個(gè)點(diǎn)的運(yùn)動(dòng)軌跡藐石。
目前用的比較多的應(yīng)該還是optical flow的表示方式即供。
4.3 learn more
- optical flow具體計(jì)算方法參考:
T. Brox, A. Bruhn, N. Papenberg, and J. Weickert. High accuracy optical ?ow estimation based on a theory for warping. In Proc. ECCV, pages 25–36, 2004.
- trajectory具體計(jì)算方法參考:
H. Wang, A. Kl¨aser, C. Schmid, and C.-L. Liu. Action recognition by dense trajectories. In Proc. CVPR, pages 3169–3176, 2011.
- 具體實(shí)現(xiàn):github有挺多開(kāi)源代碼,下次有機(jī)會(huì)實(shí)踐的話再另外補(bǔ)充吧~
五 寫(xiě)在最后
接下來(lái)一段日子應(yīng)該都會(huì)先學(xué)習(xí)3D重建方面的東西了于微,新接觸一個(gè)領(lǐng)域還是有很多新的東西需要花時(shí)間和精力去學(xué)習(xí)逗嫡。
視頻的工作當(dāng)然也希望能一直做下去青自。