2014 年,深度學習已經在圖片識別上打得手工特徵滿地找牙。AlexNet 一戰封神,讓所有人相信卷積神經網路是萬能鑰匙。
但有一件事讓當時所有做影片研究的人都很困惑:把這套神器搬到影片動作識別上,居然打不過一群老派的手工特徵方法。
這不是小差距。當時最強的手工特徵方法叫做「密集軌跡
」,在權威的 UCF-101 數據集上能做到 87.9% 的準確率。而深度學習的嘗試呢,最好的結果才 65% 左右,差了整整 20 多個百分點。
這事兒聽起來很反常。你想想,深度學習在靜態圖片上把 SIFT、HOG 這些老牌手工特徵打得毫無還手之力,為什麼換成影片反而掉鏈子了?
如果你是當時的研究者,會怎麼想這個問題?
Karen Simonyan 和 Andrew Zisserman,兩位來自牛津大學的研究者,就在琢磨這件事。他們後來又用同樣的嚴謹勁頭搞出了 VGGNet,那是幾個月後的事,但當時,他們的注意力全放在影片這塊硬骨頭上。
影片比圖片難在哪
先說清楚問題出在哪。
圖片識別,說到底是在學「這個東西長什麼樣」。一張貓的照片,網路學的是貓的輪廓、毛髮紋理、耳朵形狀,這些都是空間資訊,一幀畫面里全都包含了。
但影片不一樣。一個「揮手」的動作,如果你只看其中一幀靜止畫面,很可能什麼都看不出來,可能就是一個人舉著手,和「打招呼」「投籃」「求救」長得一模一樣。
動作的關鍵資訊藏在時間維度里,藏在畫面怎麼隨時間變化這件事上。
> 卷積神經網路(CNN):一種擅長從圖像中自動提取空間特徵的深度學習模型,通過卷積層逐層學習從邊緣、紋理到物體輪廓的層次化表徵。
當時的研究者嘗試把 3D 卷積用在影片上,直接對時間和空間兩個維度一起做卷積,理論上聽起來很美,讓網路自己從原始像素堆里學出時間變化的規律。
但實際效果很差。為什麼?
這裡要往深一層想。CNN 在圖片上的成功,很大程度上依賴於 ImageNet 那種上百萬張標註圖片的海量數據。而影片數據集在 2014 年小得可憐,UCF-101 只有 13000 段影片,樣本量差了兩個量級。
從零開始,讓網路自己學會分辨「時間變化里哪些是動作資訊,哪些是噪聲」,這個任務對於當時的數據量來說,太難了。
打個比方,這就像讓一個從沒學過認字的孩子直接讀長篇小說,還指望他自己總結出語法規則。理論上語言規律確實藏在文本里,但沒有足夠的閱讀量,孩子學到的頂多是幾個高頻詞,根本抓不住語法結構。如果非要這麼幹,結果就是每次考試都答得亂七八糟,這正是 3D 卷積在小數據集上的下場。
雙流網路:把問題拆成兩半來解決
Simonyan 和 Zisserman 的思路,說白了就是不硬啃。
他們不去指望一個網路自己學會揪出時間資訊,而是把問題提前拆解成兩部分,分別用兩個網路來解決。這就是這篇論文的核心貢獻,雙流卷積網路
(Two-Stream Convolutional Networks)。
> 雙流網路:把影片動作識別拆成兩條並行的處理路徑,一條處理靜態畫面(空間流),一條處理運動資訊(時間流),最後把兩條路徑的判斷結果融合起來。
第一條路徑叫空間流,說白了就是普通的圖片分類網路,輸入是影片裡的單幀畫面,學的是「這個場景里有什麼東西」,比如背景是不是游泳池,畫面里有沒有籃球架。這部分資訊幫網路排除干擾,比如你在游泳池邊就不太可能是在打籃球。
第二條路徑叫時間流,這才是解決核心難題的關鍵設計。它的輸入不是原始畫面,而是提前算好的光流
場。
> 光流(Optical Flow):描述影片中相鄰兩幀之間每個像素點移動方向和速度的場,本質上是把「畫面怎麼動」翻譯成了一張張可以直接餵給卷積網路的圖像。
這一步設計很聰明,而且是整篇論文裡最值得琢磨的地方。
研究者沒有讓網路自己去從原始像素里挖運動資訊,而是先用傳統的光流算法,把「運動」這件事顯式地計算出來,變成一張張標註了每個像素運動方向的圖,再把這些光流圖餵給一個和空間流結構類似的卷積網路。
為什麼這樣做?
因為運動資訊如果藏在原始像素的時間變化里,網路得自己去發現這個規律,這需要海量數據。但如果你提前用光流算法把運動資訊「翻譯」出來,變成一種更直接的表示形式,網路要學的東西就簡單多了,不用再費勁去理解像素怎麼變化對應什麼運動,而是直接看運動方向本身。
這就像你要教一個新手廚師判斷菜有沒有熟,你可以讓他自己去摸索「顏色變化對應什麼熟度」這種複雜的隱藏規律,也可以直接給他一個測溫槍,把溫度這個關鍵資訊提前給他算出來,他只需要學會「多少度算熟」這一條簡單規則就夠了。如果不用測溫槍,讓他自己從顏色、氣味里去悟出溫度規律,大概率新手期會做出一堆夾生或者燒焦的菜。光流對於時間流網路,就是那個測溫槍。
論文裡還有個細節值得說,他們嘗試了兩種光流表示方式,一種是逐幀堆疊的光流圖,一種是光流軌跡的形式,同時還測試了要不要減去平均光流值來消除攝像機自身移動帶來的干擾。結果發現,減去均值這個小操作能帶來實打實的提升,因為很多影片是手持拍攝的,攝像機本身的抖動會污染真實的動作資訊。
兩條流怎麼合併成一個答案
兩條網路分別算出各自的判斷之後,怎麼把結果拼到一起?
論文裡用的辦法很直接,兩種融合方式都試了。一種是在最後的分類分數層面做平均,另一種是訓練一個額外的支持向量機(SVM)來學習怎麼組合兩條流給出的分數。
> 支持向量機(SVM):一種經典的機器學習分類算法,擅長在特徵空間裡找到一個最優的分界線來區分不同類別,在深度學習流行之前是主流的圖像分類工具。
結果是,用 SVM 融合的效果比簡單平均更好,這說明兩條流給出的資訊不是簡單的「各打五十分」,而是有主次和互補關係的,某些動作類別可能空間資訊更關鍵,某些則更依賴運動模式,SVM 能學到這種權重關係。
數據說話最直接。在 UCF-101 上,只用空間流,也就是丟掉運動資訊,只看單幀畫面,準確率是 72.6%。只用時間流,也就是只看光流不看畫面內容,準確率能到 81.0%。而兩者融合之後,準確率跳到了 88.0%。
這組數字資訊量很大。
首先,單獨看,時間流居然比空間流表現更好,這印證了一個直覺,動作識別里,運動資訊比場景資訊更關鍵。想想看,你判斷一個人是在「走」還是在「跑」,光看一張靜止照片其實很難,雙腳離地的瞬間走和跑長得差不多,但看運動軌跡,一眼就能分清。
其次,兩者融合後的提升幅度,從 81% 到 88%,說明這兩條流學到的東西確實是互補的,不是重複資訊。空間流補上了時間流缺失的場景上下文,比如通過背景判斷「這是在泳池邊」,能幫著排除掉一些運動模式相似但場景完全不同的干擾項。
如果只用空間流會怎樣?準確率從 88% 掉到 72.6%,整整少了 15 個百分點。這意味著每 7 個影片裡,就有 1 個會被判斷錯。這個差距足夠說明,靜態畫面資訊對於動作識別這件事,只是輔助,不是主角。
最終成績單,和它打破的那個天花板
回到開頭說的那個困局。深度學習之前打不過手工特徵的「密集軌跡」方法,差距是 20 多個百分點。
這篇論文最終交出的成績是,在 UCF-101 上達到 88.0%,在另一個數據集 HMDB-51 上達到 59.4%。而當時最強的手工特徵方法,密集軌跡加上 Fisher Vector 編碼,在 UCF-101 上是 87.9%。
這兩個數字幾乎打平,88.0% 對 87.9%。
這個數字聽起來不算驚天動地,但它的歷史意義完全不在於領先了多少,而在於第一次,深度學習方法在影片動作識別這個任務上,追平了統治多年的手工特徵方法。
這是深度學習在影片動作識別上第一次不再輸給手工特徵。在 2014 年,這句話的分量不亞於 AlexNet 在圖片識別上的橫空出世。區別在於,AlexNet 是碾壓式勝利,而雙流網路是艱難追平,但追平本身,就足以證明這條路走得通,深度學習不是不能做影片,只是需要一個更聰明的輸入表示方式,而不是硬啃原始像素堆。
這篇論文之後發生了什麼
雙流網路提出的「空間加時間」這個框架,後來成了影片理解領域將近十年的主流範式,直到 3D 卷積和 Transformer 架構真正成熟之後才逐漸被取代。
2016 年,Feichtenhofer 等人發表了 Temporal Segment Networks(TSN),把雙流網路里對時間資訊的處理方式做了改進,原來的時間流只能捕捉短時間窗口內的運動,TSN 通過對整段影片稀疏採樣多個片段再融合,讓網路能夠建模長時間跨度的動作規律,把 UCF-101 上的準確率進一步推高到 94% 以上。
2017 年,Carreira 和 Zisserman,同樣是 Zisserman,發表了 I3D(Inflated 3D ConvNet),這篇論文提出了一個很巧妙的思路,把在圖片上訓練好的 2D 卷積網路「膨脹」成 3D 卷積網路,直接繼承圖片識別里學到的權重,再用雙流的框架在大規模影片數據集 Kinetics 上訓練。這一下子解決了 3D 卷積當年因為數據量不足訓練不好的老問題,I3D 把兩個方向的思路捏到了一起,既用了雙流架構的思想,也終於讓 3D 卷積真正可用。
這兩篇後續工作,一個從時間建模的粒度上做了延伸,一個從網路結構和預訓練策略上做了突破,都是站在雙流網路這個「空間+時間」框架的肩膀上往前走的。
寫在後面
寫到這裡,最讓我意外的一點是,雙流網路能追平手工特徵,靠的不是更深的網路或者更大的算力,而是一個看似「作弊」的操作,提前用傳統算法把光流算好,再餵給深度網路。
這其實提出了一個更普遍的問題,深度學習到底是應該端到端地從原始數據里學一切,還是應該在合適的地方保留一點傳統方法算出來的先驗資訊?雙流網路給出的答案很實用主義,數據不夠的時候,別硬學,先把領域知識用傳統方法算出來,幫網路省點力氣。
這和後來 I3D 用 2D 權重去初始化 3D 網路,其實是同一種思路的不同變體,都是在「數據不夠時如何借力」這個問題上做文章。
這個思路放到今天的大模型訓練里也不過時,預訓練、遷移學習,本質上都是在回答同一個問題,當你沒有足夠的數據從零學會一件事時,能不能借用別處已經算好的知識?
Q&A
Q1:雙流卷積網路是什麼?
A:雙流卷積網路是 2014 年由牛津大學研究者 Simonyan 和 Zisserman 提出的影片動作識別方法,把影片分析拆成兩條並行網路,一條處理單幀畫面的空間資訊,一條處理光流計算出的運動資訊,最後融合兩者的判斷結果。
Q2:雙流網路為什麼要用光流而不是直接用原始影片幀訓練?
A:因為當時的影片數據集規模太小,如果讓網路自己從原始像素的時間變化里學會識別運動模式,需要海量數據才能學好。提前用傳統算法計算出光流,把運動資訊直接翻譯成圖像形式,能大幅降低網路需要學習的難度。
Q3:雙流網路的效果到底怎麼樣,能打過傳統手工特徵方法嗎?
A:在 UCF-101 數據集上,雙流網路達到 88.0% 的準確率,幾乎追平了當時最強的手工特徵方法「密集軌跡」的 87.9%。這是深度學習方法第一次在影片動作識別任務上追平手工特徵,具有重要的歷史意義。






