你可能不知道,在2014年之前,深度學習在影片動作識別這個領域幾乎是抬不起頭的。
那時候如果你去看學術會議上的動作識別排行榜,占據榜首的不是神經網路,而是一種叫做"密集軌跡
"的手工特徵方法。
> 密集軌跡:一種傳統電腦視覺方法,通過跟蹤影片畫面中密集分布的點隨時間的運動軌跡,手工設計特徵來描述動作。
這事兒放在今天聽起來有點不可思議。畢竟同一年,AlexNet已經在圖像識別上把傳統方法打得潰不成軍。可是一旦把靜止的圖片換成動起來的影片,卷積神經網路就突然變得笨手笨腳,怎麼調都追不上那些老老實實統計像素軌跡的手工方法。
問題出在哪兒?這就是本文要講的這篇論文真正要解決的事。它是由Karen Simonyan和Andrew Zisserman在2014年發表的《Two-Stream Convolutional Networks for Action Recognition in Videos》,翻譯過來就是"用於影片動作識別的雙流卷積網路
"。這兩位作者你可能沒聽過名字,但他們幾個月後又發了另一篇論文,叫VGGNet,後來成了圖像識別領域的經典架構之一。也就是說,這篇論文和VGGNet幾乎是同一批人、同一個時間段搞出來的姊妹作。
核心問題:影片比圖片難在哪
先說說當時的成績單。
在UCF-101
這個當時主流的動作識別數據集上,手工特徵方法比如改進型密集軌跡能做到87%左右的準確率。而單純把卷積神經網路套到影片幀上,效果差得離譜,準確率只能到70%出頭,有的甚至更低。
**差了將近20個百分點,這在當時被很多人認為是深度學習在影片領域的天花板。**
20個百分點意味著什麼?意味著每5段影片裡,神經網路就要比手工方法多認錯1個。這不是"差一點",這是"差一大截"。
問題的根源在於,圖片識別和影片識別本質上不是一回事。一張靜態圖片,資訊全都擺在那兒,貓就是貓,狗就是狗,靠形狀、顏色、紋理就能判斷。可動作是什麼?動作是"跑"和"走"之間的區別,是"揮手告別"和"揮手打招呼"之間的區別。這種區別很多時候根本不在單幀畫面里,而在畫面隨時間怎麼變化。
早期研究者的思路很直接:把影片切成一幀一幀的圖片,用卷積網路分別處理每一幀,再把結果匯總。這個思路聽起來合理,但效果很差。為什麼?
因為這麼做等於把"動作"這個概念硬生生拆解成了一堆靜止的畫面快照,丟掉了最關鍵的時間資訊。這就好比你想判斷一個人是在揮手打招呼還是在揮手告別,如果只給你看其中一張靜止的照片,你根本分不清,因為兩者在單張畫面上可能長得一模一樣。區分它們的唯一線索,是手部運動的方向和軌跡,而這恰恰是單幀圖片裡沒有的東西。
如果不引入時間維度的資訊,神經網路就永遠只是在做"圖片分類的簡單疊加",而不是真正的"動作識別"。這也解釋了為什麼早期深度學習方法一直卡在70%多,怎麼加深網路、怎麼調參數都沒用,因為問題不在網路深度,而在於餵給網路的數據本身就缺了一大塊資訊。
雙流架構:一條看畫面,一條看運動
Simonyan和Zisserman的解法,說出來其實挺樸素的。
**他們把一個網路拆成了兩個,一個專門看靜止畫面,一個專門看運動資訊,最後把兩條網路的判斷結果融合起來。**
第一條叫空間流。
> 空間流:一個標準的卷積神經網路,輸入是影片裡的單幀RGB圖像,負責識別畫面里的物體、場景、人物姿態等靜態視覺資訊。
這條流幹的事情跟普通圖片分類沒什麼區別,輸入一張影片截圖,輸出這張圖里可能包含什麼物體和場景。比如畫面里有游泳池,那這個動作很可能和"游泳"有關。
第二條叫時間流,這才是這篇論文真正的巧思所在。
> 時間流:另一個卷積神經網路,輸入不是原始圖像,而是光流
場,專門捕捉畫面中物體的運動方向和速度資訊。
那什麼是光流?
> 光流:描述影片連續兩幀之間,畫面中每個像素點是往哪個方向、以多快速度移動的一種表示方法,本質上是一張記錄了運動向量的圖。
光流場看起來不像正常的照片,它更像是一張用顏色或箭頭標註了"這裡往左動、那裡往右動"的運動地圖。把光流場餵給一個卷積網路,網路就能專門學習運動模式,而不會被畫面里的顏色、紋理這些和動作本身無關的資訊干擾。
這兩條網路各自訓練,各自輸出一個分類概率,最後簡單地把兩個概率做加權平均,得到最終判斷。
這個設計為什麼重要?因為它相當於把一個混合在一起、很難直接學習的複雜問題,拆解成了兩個各自更簡單的子問題。空間流只用操心"這是什麼場景、有什麼物體",時間流只用操心"這裡在往哪個方向動"。兩邊互不干擾,各自把自己的活干好,最後再合併結果。
這就跟一個樂隊裡鼓手和貝斯手的分工有點像。如果讓一個人同時兼顧節奏和低音旋律,顧此失彼是常態,彈好了貝斯可能就忘了跟上鼓點。但如果分成兩個人,鼓手專心打節奏,貝斯手專心彈旋律,兩人各自練熟了自己的部分,合奏出來的效果反而比一個人硬撐要好得多。如果不拆分,讓一個網路同時學會識別場景和識別運動,網路就要在訓練時同時兼顧兩種截然不同的模式,學習難度陡增,這也正是早期單流方法效果差的關鍵原因之一。
論文裡還有一個細節很有意思。作者們觀察了時間流網路第一層卷積核學到的樣子,發現這些卷積核大多呈現出明顯的方向性,像是專門用來捕捉某個方向上的運動模式的濾波器。這不是人為設計出來的,是網路自己從光流數據里學出來的規律。這說明網路確實理解到了"方向"是運動資訊里最核心的線索,這也從側面證明了光流這個輸入選擇是對的路子。
為什麼要用光流,而不是直接看連續幀
這裡有個問題值得多想一層:為什麼不能讓時間流網路直接看幾張連續的原始圖像,自己去學習裡面的運動資訊,非要費勁先計算出光流場?
答案跟"資訊提煉"有關。
原始的連續影片幀里,包含了大量和動作無關的資訊,比如背景顏色、光照變化、無關物體的紋理。如果直接把好幾幀原始圖像堆在一起餵給網路,網路得自己從這堆像素里"提煉"出哪些變化是有意義的運動,哪些只是噪聲,這個學習難度非常大,尤其是在當時訓練數據量還不算特別充裕的情況下。
而光流場已經提前把"運動"這個資訊單獨抽取出來了,把顏色、紋理這些干擾項全部過濾掉,只留下"這裡往哪個方向動、動得多快"這個純粹的信號。相當於有人先幫網路做了一遍預處理,把最有用的那部分資訊挑出來,網路只需要專注學習這部分就夠了。
這就好比你想教一個人判斷音樂節拍,如果直接給他一整首帶人聲、伴奏、混音效果的完整歌曲,他得先學會從一堆聲音里分離出鼓點在哪兒,這很難。但如果你提前把鼓的音軌單獨提取出來,只給他聽純鼓點,他學節拍就容易多了。光流場乾的就是這個"提前分離"的工作。如果不做這一步分離,直接把原始幀堆疊起來訓練,論文裡對比實驗顯示效果確實會打折扣,證明這種提前處理是有實際收益的,不是畫蛇添足。
融合兩條流,效果如何
單獨看空間流的表現,在UCF-101上大概能做到72.6%的準確率。這個數字和早期那些單純堆疊影片幀的方法差不多,說明只看靜態畫面確實吃虧很多。
單獨看時間流,效果要好不少,能達到83%以上。這說明運動資訊本身就是判斷動作類別的強力線索,甚至比靜態畫面更重要。
而把兩條流的結果融合起來之後,準確率跳到了88%左右,直接超過了當時最好的手工特徵方法。
下面這張表大致反映了論文裡的核心對比數據。
| 方法 | UCF-101準確率 |
|---|---|
| 早期單流卷積網路 | 約70%-73% |
| 改進型密集軌跡(手工特徵) | 約87% |
| 空間流單獨 | 72.6% |
| 時間流單獨 | 約83%-84% |
| **雙流融合** | **約88%** |
這個結果的歷史分量不小。這是深度學習方法第一次在影片動作識別這個具體任務上,正面超過了統治多年的手工特徵方法。要知道AlexNet在2012年橫空出世,靠的是在圖像分類上碾壓傳統方法,而這篇論文相當於把同樣的劇情在影片領域重演了一遍,只不過晚了兩年,而且靠的不是簡單加深網路,而是靠重新設計了整個資訊輸入的方式。
意義追問:這個設計到底解決了什麼根本矛盾
如果只從表面看,雙流架構好像就是"多加一個網路"這麼簡單的事。但往深了想,它真正解決的是一個更根本的矛盾:**卷積神經網路天生擅長處理空間結構的資訊,卻不擅長處理時間維度上的動態變化。**
圖片分類之所以讓卷積網路大放異彩,是因為圖片本身就是純空間資訊,卷積操作的局部感知、平移不變性這些特性天生適配這類數據。可影片裡的"動作"這個概念,核心恰恰是時間維度上的變化,是卷積網路原本的設計里沒有直接照顧到的部分。
雙流架構沒有去改造卷積網路的內部結構來適應時間資訊,而是換了一個更聰明的思路:既然網路不擅長直接從原始像素序列里挖掘運動資訊,那就提前把運動資訊用光流場的形式計算好,變成一張"看起來也像圖片"的東西,再餵給網路。相當於把一個網路不擅長的問題,轉化成了網路擅長的問題的形式。
這個思路後來影響深遠。2年後,Feichtenhofer等人在2016年提出了一種時空融合的雙流架構改進版,讓空間流和時間流在網路內部更早地進行特徵交互,而不是等到最後才簡單加權平均,進一步提升了準確率。又過了一段時間,Carreira和Zisserman(同一個Zisserman)在2017年提出了I3D模型,把二維卷積核直接擴展成三維卷積核,讓網路能夠直接從連續影片幀里學習時空特徵,某種程度上是想驗證"能不能不依賴光流預處理,直接讓網路自己學會捕捉運動資訊"。這一系列後續工作,都是在雙流架構打開的這條路上繼續往前走。
回頭看,雙流網路的思路能不能再往前推一步,讓網路自己學會計算類似光流的運動表示,而不依賴傳統光流算法的預處理?這正是後續研究者們持續探索的方向,也從另一個角度說明了這篇論文提出的問題比它給出的答案更持久。
寫在後面
讀這篇論文時最觸動我的一點是,雙流網路的空間流單獨跑出來的準確率是72.6%,和當時那些效果很差的早期影片深度學習方法幾乎一樣。這說明問題從來不在於"深度學習不適合影片",而在於"餵給深度學習的數據本身缺了關鍵資訊"。這是個容易被忽略的教訓,很多時候方法本身沒問題,問題出在輸入表示的設計上。
另一個值得琢磨的細節是,兩條流最後只是簡單加權平均,沒有做什麼複雜的融合設計,效果卻已經能超過手工特徵。這說明有時候把問題拆解對了,後續的整合反而可以很樸素。複雜的融合技巧是後來者的工作,而這篇論文最大的貢獻恰恰是提出了"該往哪個方向拆"這個判斷。
如果網路最終能自己學會從原始像素序列里提煉出等效於光流的運動信號,那光流這個中間步驟是不是終將被淘汰?這個問題現在有了部分答案,但完全的答案還沒寫完。
Q&A
Q1:雙流卷積網路是什麼?
A:雙流卷積網路是Simonyan和Zisserman在2014年提出的影片動作識別模型,由兩個獨立的卷積神經網路組成,一條處理靜態畫面(空間流),一條處理運動資訊(時間流),最後融合兩者結果做出動作分類判斷。
Q2:雙流網路為什麼要用光流而不是直接輸入連續影片幀?
A:因為光流場提前把畫面中的運動方向和速度資訊單獨提取出來,過濾掉了顏色紋理等無關干擾,讓網路能專注學習運動模式,這比讓網路直接從原始像素序列里自己挖掘運動資訊要容易得多,效果也更好。
Q3:雙流網路在當時的效果超過手工特徵方法了嗎?
A:超過了。雙流網路融合後在UCF-101數據集上達到約88%的準確率,超過了當時最強的手工特徵方法改進型密集軌跡的87%左右,這是深度學習首次在影片動作識別任務上正面勝過手工特徵方法。






