宅中地 - 每日更新
宅中地 - 每日更新

贊助商廣告

X

雙流卷積網路:當深度學習第一次在影片動作識別上打敗了老辦法

2026年08月14日 首頁 » 熱門科技

2014 年之前,如果你去問任何一個做影片動作識別的研究者「深度學習行不行」,得到的答案大概是搖頭。

這不是因為大家不想用深度學習。恰恰相反,2012 年 AlexNet 已經在圖像分類上把傳統方法打得潰不成軍,整個電腦視覺圈子都在往神經網路這條路上沖。可是一旦換成影片,換成「動作」而不是「物體」,深度學習就突然變得不好用了。

當時最好的手工特徵方法叫做密集軌跡

> 密集軌跡*:一種傳統的影片動作識別方法,通過追蹤影片中密集分布的點隨時間的運動軌跡,再統計軌跡周圍的圖像和運動特徵來判斷動作類別。

密集軌跡在標準測試集 UCF-101 上能做到 87.9% 的準確率。而同期幾個用深度學習做影片動作識別的嘗試,效果都不理想,有的甚至比不上手工特徵。這種反差在當年是相當扎眼的:圖像識別領域深度學習已經全面碾壓,影片識別領域深度學習卻抬不起頭。

這篇論文要做的事情,就是回答一個問題:深度學習到底能不能在影片動作識別上贏一次。

答案是能,而且贏得不算勉強。這就是 Karen Simonyan 和 Andrew Zisserman 在 2014 年提出的雙流卷積網路。順帶一提,這兩位來自牛津大學 VGG 研究組的學者,幾個月後又發表了另一篇更加出名的論文,提出了 VGGNet。兩篇論文差不多是同期的工作,這說明當時那個組裡,大家是同時在圖像和影片兩條戰線上突破深度學習的邊界。

問題出在哪:影片比圖片難在哪裡

要理解這篇論文的巧思,得先搞清楚影片識別到底比圖片識別難在什麼地方。

圖片分類,網路只需要認出「這是一隻貓」還是「這是一輛車」,靠的是物體的形狀、紋理、顏色這些靜態的視覺特徵。而動作識別不一樣,同樣是一個人站在那裡,「揮手」和「舉手不動」在單張畫面上可能長得幾乎一樣,真正的區別在於「動」這件事本身,在於時間維度上發生了什麼變化。

早期直接把 2D 卷積網路套用到影片幀上的嘗試,基本上都在犯同一個錯誤:把影片當成一堆孤立的圖片來處理,寄希望於網路自己從這些靜態畫面里學出動作的規律。這就好比你想教一個人理解「開門」這個動作,卻只給他看一張門半開著的照片。他能從照片裡猜出門大概是開著的,但他猜不出這扇門是正在被推開,還是正在被關上。缺失的正是運動的方向和速度這類時間資訊,而這恰恰是動作識別最核心的線索。

網路當然也可以試著通過 3D 卷積或者在網路內部堆疊多幀來隱式地學習運動模式,但作者們發現這樣做效果並不好,訓練難度大,也沒能超過手工特徵。問題不是深度學習學不會,問題是給它餵的原料就不對。

雙流架構:把外形和運動拆開來看

這篇論文最核心的想法,說出來其實很簡單:既然一個影片裡包含兩種完全不同性質的資訊,一種是「畫面里有什麼」,一種是「畫面里的東西怎麼動」,那就乾脆用兩個完全獨立的網路分別去處理這兩種資訊,最後再把結果合併起來。

第一個網路叫空間流

> 空間流*:雙流網路中的一個分支,輸入是影片中的單幀 RGB 圖像,負責識別畫面中的場景和物體,捕捉「外形」資訊。

它的輸入就是影片裡隨便抽出來的一幀靜止畫面,和普通圖片分類網路沒什麼區別。它認的是「這個場景是網球場」「這個人手裡拿著球拍」這類靜態視覺資訊。單看這一個網路的表現,其實已經不差,因為很多動作本身和場景、道具強關聯,比如游泳這個動作,你只要看到一幀畫面里有水池,基本就能猜個大概。

第二個網路叫時間流

> 時間流*:雙流網路中的另一個分支,輸入是光流場,專門捕捉畫面中物體的運動方向和速度資訊。

它的輸入不是原始畫面,而是光流。

> 光流*:描述圖像序列中每個像素點在連續兩幀之間移動方向和速度的向量場,通常用兩張圖分別表示水平方向和垂直方向的位移。

光流場長什麼樣?它本質上是一張「運動地圖」,每個像素上標註的不是顏色,而是這個點在下一幀往哪個方向移動了多少。作者們把連續 10 幀的光流疊在一起作為時間流網路的輸入,這樣網路看到的不再是一張孤立的靜止畫面,而是一小段時間內每個點是怎麼運動的。

這裡有個細節值得說一下。作者做過對比實驗,發現如果單純給網路餵原始的連續影片幀,讓網路自己去學習運動模式,效果遠不如直接把預先計算好的光流餵給它。這說明網路並不是學不出運動特徵,而是從原始像素里直接學習運動線索這件事,對網路來說太繞了,不如把這一步先用傳統算法算好,再交給網路處理後續的分類任務。

這就像教一個孩子看地圖導航和看車速表判斷車開得多快是兩件不同難度的事。如果你只給他一段連續拍攝的路況錄像,讓他自己判斷車速,他需要在腦子裡做大量的換算和對比;但如果你直接把儀錶盤上的車速數字給他看,他一眼就懂。光流做的正是這種「預先換算」的工作,把「運動」這件抽象的事情,轉換成一張網路可以直接讀取的數字地圖。如果不做這一步預處理,網路就得同時兼顧「認物體」和「算速度」兩件事,兩件事互相干擾,誰都做不好。

兩條流各自訓練出一個卷積網路,最後把兩個網路給出的分類分數做加權融合,得到最終的判斷。這個設計的巧妙之處在於,它沒有強迫一個網路同時學兩種性質完全不同的資訊,而是分工明確,各司其職。

時間流網路的輸入怎麼構造:堆疊光流

時間流網路具體怎麼處理光流,這裡有一些工程細節值得展開講講。

單獨一幀的光流其實資訊量有限,只能告訴你「這一瞬間東西往哪兒動了」,但動作是一個持續的過程,比如揮高爾夫球桿,是一個從後擺到揮出的連續過程,單看某一瞬間的運動向量,很難判斷這到底是揮桿的哪個階段。

於是作者選擇把連續 10 幀的光流疊起來,形成一個更厚的輸入,讓網路能看到運動隨時間演化的一段軌跡,而不是一個孤立的瞬間。這就像看一場籃球投籃的慢動作回放,你不會只看運動員手部鬆開球那一幀就判斷他投籃姿勢對不對,你需要看到從蹲下、起跳到出手的一連串過程,單幀資訊不夠,連續的過程才有意義。如果只用單幀光流,網路對動作的時間發展趨勢幾乎一無所知,準確率會明顯下降。

作者還嘗試了兩種堆疊方式,一種是直接按原始坐標堆疊光流,另一種是先追蹤運動軌跡再沿軌跡採樣光流。實驗發現直接堆疊的方式效果已經足夠好,複雜的軌跡追蹤並沒有帶來明顯提升,這也算是給後續研究省了不少麻煩,證明簡單直接的方案往往夠用。

數據不夠怎麼辦:多任務學習和預訓練遷移

深度學習一個繞不開的老問題是數據不夠。當時能用來訓練動作識別模型的數據集,規模都不算大,比如 UCF-101 只有一萬多個影片片段,這個規模對於訓練一個大型卷積網路來說明顯偏少,容易過擬合。

作者用了兩個辦法來緩解這個問題。

第一個辦法是用圖像分類的大數據集給空間流網路做預訓練。空間流網路處理的是靜止畫面,這和普通圖片分類任務本質上是一回事,所以完全可以先在大規模圖片數據集上訓練出一個通用的圖像特徵提取器,再拿到動作識別任務上微調。這個思路後來成為整個深度學習遷移學習範式的標準操作,如今幾乎所有視覺任務都會先用大數據集預訓練,再在小數據集上微調,這篇論文算是很早就把這條路走通了。

第二個辦法是多任務學習

> 多任務學習*:讓同一個網路同時在多個相關但不完全相同的數據集或任務上訓練,共享底層特徵表示,以此緩解單個數據集數據量不足的問題。

具體來說,作者把 UCF-101 和另一個數據集 HMDB-51 放在一起訓練同一個時間流網路,網路的底層參數是共享的,只是在最後分類層上分別對應各自數據集的類別標籤。這樣網路能從兩個數據集裡一起學習通用的運動模式,相當於人為把訓練樣本的規模擴大了。

這個操作很像一個學生同時準備兩門不同科目的考試,如果這兩門課有大量重疊的基礎知識,比如數學和物理都需要紮實的代數功底,那麼同時學習這兩門課反而能讓基礎知識學得更牢,比單獨刷一門課的題庫效果更好。如果不做多任務訓練,時間流網路單獨在 UCF-101 上訓練時,因為數據量偏少,很容易在訓練集上表現很好但在測試集上翻車,這就是過擬合的典型症狀。

結果:深度學習終於贏了一次

說了這麼多設計細節,最後要看的是效果究竟如何。

| 方法 | UCF-101 準確率 |

|---|---|

| 密集軌跡(當時最強手工特徵) | 87.9% |

| 僅空間流網路 | 72.6%左右 |

| 僅時間流網路 | 81%左右 |

| **雙流網路融合** | **88.0%** |

這幾個數字放在一起看,資訊量很大。

如果只用空間流,準確率只有 72.6% 左右,比手工特徵的 87.9% 低了整整 15 個百分點。這意味著每識別 100 個動作,單靠「看畫面里有什麼」的方式會比手工特徵多認錯 15 次。這就是前面說的問題,靜態畫面資訊不足以支撐動作識別這個任務。

單獨用時間流,準確率能提升到 81% 左右,已經明顯好於純空間流,證明運動資訊確實是動作識別里更關鍵的線索。但即便如此,單條時間流依然打不過手工特徵。

只有當兩條流融合起來,準確率才達到 88.0%,首次超過了密集軌跡的 87.9%,儘管只高出 0.1 個百分點,但這個 0.1 意義重大。它標誌著深度學習在影片動作識別這個具體任務上,第一次不再是追趕者,而是反超了手工設計特徵方法。放在 2014 年這個時間點上看,這個分量不亞於兩年前 AlexNet 在圖像分類上掀起的震動,只是影片領域的轉折來得更晚一些,更艱難一些。

在另一個數據集 HMDB-51 上,雙流網路也達到了 59.4% 的準確率,同樣超過了當時的手工特徵方法。

這篇論文之後發生了什麼

雙流網路提出之後,後續的研究基本都是在它劃定的框架里做加法和改良。

2015 年,Wang 等人提出了 TDD

> TDD*:Trajectory-Pooled Deep-Convolutional Descriptor,一種把深度學習特徵和傳統軌跡追蹤結合起來的方法。

TDD 把雙流網路提取出來的深度特徵,沿著密集軌跡的運動路徑進行池化,相當於把深度學習的特徵表達能力和手工特徵里軌跡追蹤的思路結合了起來,在準確率上又往前推進了一步。

2016 年,Feichtenhofer、Pinz 和 Zisserman 三人(後兩位和原論文有直接關聯,Zisserman 正是雙流網路的作者之一)發表了新的論文,提出了更深層的雙流網路架構,並且探索了空間流和時間流之間應該在網路的哪一層進行融合,而不是簡單地等到最後分類層才合併。這篇工作證明,讓兩條流更早地互相交流資訊,比原始版本里各自獨立訓練到最後才融合,效果更好。

2017 年,Carreira 和 Zisserman(又是 Zisserman)提出了 I3D

> I3D*:Inflated 3D ConvNet,把 2D 卷積網路的參數直接「膨脹」成 3D 卷積核,同時結合雙流思想,在大規模影片數據集 Kinetics 上訓練。

I3D 沿用了雙流的框架,但把每一條流內部的卷積操作從 2D 換成了 3D,讓網路能夠直接在時間維度上做卷積,同時藉助新出現的大規模影片數據集 Kinetics 進行預訓練,大幅提升了動作識別的準確率,一度成為該領域的新標杆。

這幾篇後續工作有一個共同點,它們都沒有推翻雙流網路最初的分工思路,而是在「空間資訊和時間資訊應該分開處理再融合」這個基本框架上做優化。這也從另一個角度證明,雙流網路提出的這個架構設計,抓住了影片動作識別問題里一個相當本質的矛盾。

寫在後面

讀這篇論文最觸動我的一點是,好的架構設計有時候不是靠堆更深的網路或者更大的數據,而是靠對問題本質的一次重新拆解。雙流網路沒有發明什麼全新的神經網路結構,它用的都是當時已有的卷積網路套路,真正的創新在於想清楚了「動作識別里到底有哪兩種性質不同的資訊」,然後老老實實地把這兩種資訊分開處理。

這讓我聯想到很多工程問題的解法,往往不是加更多資源去硬解,而是先把問題本身的結構看清楚。光流這個環節其實挺有意思,它相當於承認了「有些計算傳統算法已經做得很好,不需要非要讓神經網路從零學起」,這種務實的態度,在當時那個深度學習氣勢正猛、什麼都想端到端解決的年代,顯得有點反潮流。

論文裡還留了一個沒完全解決的問題,就是空間流和時間流最後只是簡單加權融合,兩者在訓練過程中完全獨立,互不知道對方學到了什麼。後來 2016 年的論文已經開始探索更早的層間融合,說明這個簡單加權方案確實不是終點。如果兩條流能在訓練過程中互相校正,會不會學出更聰明的特徵?這個問題現在看依然值得琢磨。

Q&A

Q1:雙流卷積網路是什麼?

A:雙流卷積網路是 Simonyan 和 Zisserman 在 2014 年提出的影片動作識別模型,它用兩個獨立的卷積網路分別處理影片的靜態畫面資訊和運動資訊,再將兩者的判斷結果融合,是深度學習第一次在該任務上超過傳統手工特徵方法。

Q2:雙流網路為什麼要分成空間流和時間流兩部分?

A:因為影片裡包含兩種性質完全不同的資訊,一種是畫面中有什麼物體和場景,一種是畫面中的東西怎麼運動。把這兩種資訊交給兩個專門的網路分別學習,比讓一個網路同時學兩件事效果更好,實驗顯示單獨用空間流只有約72.6%準確率,融合後能達到88.0%。

Q3:光流在這個模型里起什麼作用?

A:光流是一種預先計算好的運動地圖,記錄每個像素在連續幀之間的移動方向和速度。把它作為時間流網路的輸入,相當於替網路先把「運動」這件抽象的事翻譯成數字信號,比讓網路直接從原始影片幀里自己學運動模式效果更好。

宅中地 - Facebook 分享 宅中地 - Twitter 分享 宅中地 - Whatsapp 分享 宅中地 - Line 分享
相關內容
Copyright ©2026 | 服務條款 | DMCA | 聯絡我們
宅中地 - 每日更新