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

贊助商廣告

X

兩條影片流的秘密:當深度學習第一次學會了看動作

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

2014年之前,如果你問電腦視覺領域的研究者一個問題:影片裡的動作識別,深度學習能打過手工設計的特徵嗎?大概率會得到一個苦笑。

那時候深度學習已經在圖像識別上鬧出了大動靜,AlexNet橫空出世,卷積神經網路把ImageNet的錯誤率打得措手不及。可是一旦把靜態圖片換成動態影片,事情就變了。

最強的方法叫密集軌跡

密集軌跡*:一種手工設計的影片特徵提取方法,通過追蹤影片裡密集分布的點的運動軌跡,再統計軌跡周圍的圖像和運動資訊來判斷動作類別

這種方法在UCF-101這樣的動作識別數據集上能做到85%以上的準確率,而當時最好的深度學習方法只能徘徊在65%到70%之間。差了將近20個百分點。

這是什麼概念。意味著每5個動作里,深度學習就要比手工方法多認錯1個。這在當時幾乎被當作一個既定事實:影片這種時序數據,太複雜了,卷積網路學不來。

直到牛津大學的Karen Simonyan和Andrew Zisserman發表了一篇論文,題目叫《Two-Stream Convolutional Networks for Action Recognition in Videos》,中文可以翻譯成"雙流卷積網路"。這篇論文第一次讓深度學習在影片動作識別上打贏了手工特徵。

有意思的是,Simonyan和Zisserman幾個月後又發表了VGGNet,那篇後來幾乎人盡皆知的圖像分類網路。兩篇論文幾乎是同期完成的工作,出自同一個牛津實驗室。這個細節本身就很說明問題:這批人當時同時在攻克靜態圖像和動態影片兩條戰線。

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

要理解雙流網路的巧妙之處,得先搞清楚為什麼直接把圖像分類的思路搬到影片上會失敗。

圖像分類網路處理的是一張靜止的畫面,網路學的是紋理、邊緣、形狀這些空間上的模式。一隻貓和一隻狗,光看一張照片就能分辨。

但動作是什麼?動作是隨時間變化的過程。一個人在揮手還是在拍球,單看某一幀畫面,很多時候根本分不出來。你需要知道"接下來發生了什麼",需要看到運動本身。

早期的研究者試過很直接的辦法:把影片的連續幾幀堆疊起來,直接扔進一個3D卷積網路里,讓網路自己去學習哪些時序變化對應哪些動作。

這個想法聽起來合理,可實驗結果很打臉。網路學出來的效果遠遠不如手工的密集軌跡特徵。為什麼會這樣?

一個重要原因是數據量。當時可用的影片動作識別數據集,樣本量比ImageNet小了幾個量級,UCF-101總共只有一萬多個影片片段。而卷積網路要學會從原始像素里提煉出"運動"這種抽象概念,需要海量數據去餵。數據不夠,網路學不動,只能學到一些淺層的、容易過擬合的模式。

這就像讓一個從沒見過足球比賽的人,只給他看幾十張比賽照片,指望他總結出"傳球"和"射門"的區別。他能記住的可能只是球場是綠色的、球衣的顏色,而不是動作本身的規律。如果換成給他一萬張標註好的照片再加上足球比賽的規則手冊,他反而能一下子抓住重點。這正是雙流網路的思路,規則手冊就是提前算好的光流資訊。

核心思路:把運動資訊直接餵給網路,而不是讓網路自己去發現

Simonyan和Zisserman的關鍵決定是:既然網路自己從原始幀里學運動這麼難,那就不要逼它自己學,直接把運動資訊計算好,餵給一個專門的網路。

於是網路被拆成了兩條獨立的流。

第一條叫空間流

空間流*:處理單幀RGB圖像的卷積網路分支,負責識別影片畫面里的靜態場景、物體和外觀資訊

它輸入的就是影片裡的某一幀彩色圖像,負責回答"畫面里有什麼"這個問題,比如場景是游泳池還是籃球場,畫面里有沒有出現某種特定的道具。這條流本質上和普通的圖像分類網路沒什麼區別。

第二條叫時間流

時間流*:處理光流場的卷積網路分支,負責捕捉影片裡物體和人體的運動模式

它輸入的不是原始畫面,而是提前用傳統算法算好的光流場。

光流*:描述影片中相鄰兩幀之間,畫面上每個像素點的運動方向和速度的一種表示方法,可以理解為一張"運動地圖"

光流場大概長什麼樣:如果你看論文裡給出的示例圖,會發現光流圖不是彩色照片,而是一堆密密麻麻的箭頭,或者用顏色編碼方向和幅度的偽彩色圖。一個人揮手,手臂周圍的箭頭會朝著揮動的方向排列,背景是靜止的,箭頭幾乎為零。這張圖直接把"什麼在動、往哪動"這個資訊可視化了,畫面本身的顏色、紋理反而被完全剝離掉了。

這兩條流各自訓練一個卷積網路,各自輸出對動作類別的預測概率,最後把兩邊的結果做加權融合,得到最終判斷。

為什麼要做這樣的拆分,而不是讓一個網路同時處理外觀和運動?

這背後有個很樸素的直覺:外觀資訊和運動資訊其實是兩種性質不同的東西,一個是"是什麼",一個是"怎麼動"。如果強行揉在一起交給一個網路處理,網路很容易被外觀資訊帶偏,因為外觀的模式更容易學,而運動的模式更抽象、更依賴時序上下文。

這就像讓一個人同時判斷"這道菜是什麼菜"和"廚師炒菜的手法是快炒還是慢燉"。如果只給他一張成品照片,他大概能猜出是什麼菜,但很難判斷烹飪手法。如果只給他廚師炒菜的手部動作錄像,不給他看成品,他能感覺出節奏和力道,但不知道具體炒的是什麼食材。兩種資訊各自擅長回答不同的問題,硬湊在一起反而互相干擾。分開判斷,再把兩個判斷結果加權合併,往往比強行融合輸入資訊更可靠。如果不這樣拆分,直接把光流和RGB圖像堆疊成一個多通道輸入丟給單一網路,論文裡的對比實驗顯示效果明顯更差,網路很難同時兼顧兩種性質迥異的信號。

![雙流網路結構圖]

論文裡給出的結構圖非常直觀:左邊空間流網路吃進單幀RGB圖,右邊時間流網路吃進堆疊起來的多幀光流場,兩條線各走各的卷積層,最後在頂端匯合做分類融合。整張圖看上去就是兩條平行的流水線,只在最後一步交匯,這也是"雙流"這個名字的來源。

時間流怎麼處理時序:堆疊連續多幀光流

單看一幀光流其實資訊量有限,一個瞬間的運動方向不足以判斷這是揮手還是抬手。於是研究者選擇把連續多幀(論文裡用的是10幀)的光流場在通道維度上堆疊起來,一起輸入給時間流網路。

這樣網路看到的不是一個瞬間的運動快照,而是一個短時間窗口內運動的演變過程,相當於給了網路一小段"動作片段"而不是"動作截圖"。

這裡還有個細節,光流本身分為水平方向和垂直方向兩個分量,所以10幀光流堆疊起來,實際上是20個通道的輸入(每幀2個方向)。這個設計保證了網路能同時感知到運動在兩個維度上的變化趨勢。

為什麼不直接用更長的時間窗口,比如50幀或100幀?論文裡做了對比實驗,發現幀數從5增加到10,性能有明顯提升,但再往上增加收益就變得很小,而計算成本卻直線上升。這是一個典型的性價比權衡:更長的窗口理論上資訊更豐富,但計算光流本身就有成本,而且過長的窗口可能引入和當前判斷無關的資訊噪聲。10幀左右正好踩在效果和效率的平衡點上。

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

前面提到過,影片數據集比圖像數據集小得多,這對深度網路的訓練是個硬傷。雙流網路在這方面做了兩件事來緩解數據不足的問題。

第一件事是空間流直接借用在ImageNet上預訓練好的網路權重做初始化,再在動作識別數據集上微調。這是一種遷移學習的思路,相當於讓網路先在海量圖片上學會識別通用的視覺特徵,再針對動作識別任務做小範圍調整。

預訓練*:先在大規模數據集上訓練一個模型學習通用特徵,再遷移到目標任務上進行微調的訓練策略

第二件事更巧妙,針對數據量太小導致過擬合的問題,研究者引入了多任務學習。

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

具體做法是,網路最後接了兩個不同的softmax分類層,分別對應兩個不同的動作識別數據集(比如UCF-101和HMDB-51),網路的卷積層部分是共享的,只有最後的分類頭是各自獨立的。訓練時兩個數據集的數據交替進來,網路被迫學出一套對兩個任務都通用的特徵表達,這樣單個數據集數據量不夠的問題就被另一個數據集的數據補上了一部分。

這個做法背後的邏輯是,兩個動作識別數據集雖然類別定義不完全一樣,但底層需要抓取的運動模式和外觀模式是相通的。讓網路在兩邊的數據上共同學習底層特徵,等於變相擴充了訓練數據的多樣性。如果不做多任務訓練,只在單一小數據集上訓練,論文的實驗顯示準確率會明顯下降,尤其是時間流網路,因為運動模式的學習本身就比外觀模式更依賴數據量。

實驗結果:到底打沒打過手工特徵

最關鍵的問題來了,這套設計到底效果怎麼樣。論文在UCF-101和HMDB-51兩個標準數據集上做了系統的對比實驗。

| 方法 | UCF-101準確率 |

|---|---|

| 僅空間流 | 72.6% |

| 僅時間流 | 81.0% |

| 空間流+時間流融合 | **88.0%** |

| 同期最好的手工特徵方法 | 85.9% |

這組數字值得細看。如果只用空間流,也就是只看畫面外觀不看運動,準確率是72.6%。如果只用時間流,也就是只看運動不看外觀,反而達到了81.0%,比空間流高了將近8個百分點。這說明對動作識別這個任務來說,運動資訊本身比外觀資訊更關鍵,這也驗證了研究者一開始的判斷:影片動作識別的核心難點確實在於捕捉時序運動模式。

而當兩條流融合之後,準確率跳到88.0%,比手工特徵方法的85.9%高出了2個百分點。這是深度學習第一次在這個任務上超過手工設計的特徵方法。放在2014年的背景下,這個意義不亞於AlexNet當年在ImageNet上的突破,只不過戰場換成了影片。

單獨看時間流比空間流效果好這件事,也印證了前面拆分兩條流的設計是對的:如果兩種資訊真的可以互相替代,那單獨一條流的效果不會有這麼大差距,現在差了8個百分點,說明運動資訊確實提供了外觀資訊給不了的東西,而兩者融合之後又能進一步提升,說明兩種資訊也不是完全冗餘,分開處理再融合,比強行揉在一起處理,是更合理的選擇。

後續影響:這條路後來被怎麼走下去的

雙流網路提出之後,雙流的思路成了影片動作識別領域接下來幾年的主流範式,很多團隊在這個基礎上繼續往前推。

2016年,Feichtenhofer等人發表了《Convolutional Two-Stream Network Fusion for Video Action Recognition》,他們發現原始雙流網路只在最後的分類結果層面做簡單加權融合,資訊交流太晚太淺,於是提出在網路中間層就讓兩條流互相傳遞資訊,進行更早期的特徵級融合,這讓準確率進一步提升。

2017年,Carreira和Zisserman(還是同一個Zisserman)發表了《Quo Vadis, Action Recognition》,提出了I3D網路,把雙流網路里的2D卷積換成了3D卷積,同時藉助更大規模的Kinetics數據集做預訓練,這基本上解決了當年數據量不足的老問題,把準確率又往上推了一大截,成為後續幾年影片理解領域最常用的基線模型之一。

這兩篇後續工作分別從"融合方式"和"網路結構加數據規模"兩個不同的方向,延續和改進了雙流網路當年打開的這條路。

寫在後面

讀這篇論文的時候,最觸動我的其實不是88%這個數字,而是研究者面對"網路學不動運動資訊"這個困境時選擇的解法。他們沒有硬著頭皮繼續加大網路、加大數據去逼網路自己學出運動的概念,而是退一步,承認光流算法這種傳統方法在提取運動資訊上已經足夠好用,直接把它當作輸入餵給網路。

這種"不要什麼都指望端到端自動學出來,能省的力氣就先省下來"的態度,在後來的深度學習發展史里其實反覆出現,包括之後很多把傳統信號處理結果作為深度網路輸入的做法,都能看到類似的影子。深度學習不是萬能鑰匙,有時候和已有的成熟方法配合,反而能更快找到突破口。

論文裡還有個細節我印象很深,就是單獨的時間流比單獨的空間流效果更好這件事。這多少推翻了一種直覺,很多人會覺得"看清楚畫面里是什麼"應該比"看清楚東西怎麼動"更重要,但至少在動作識別這個任務上,數據給出的答案恰恰相反。這提醒人,有時候我們對一個任務"應該關注什麼"的直覺判斷,未必和數據反映的真實情況一致。

Q&A

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

A:雙流卷積網路是2014年由牛津大學Simonyan和Zisserman提出的影片動作識別方法,它用兩條獨立的卷積網路分支分別處理單幀圖像和光流場,再融合兩者的判斷結果,第一次讓深度學習在動作識別任務上超過了手工設計的特徵方法。

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

A:因為外觀資訊(畫面里有什麼)和運動資訊(東西怎麼動)是兩種性質不同的信號,硬塞進一個網路容易互相干擾。分開處理再加權融合,實驗證明比強行合併輸入效果更好,融合後準確率達到88%,比單獨任何一條流都高。

Q3:雙流網路的準確率比之前的手工特徵方法高多少?

A:雙流網路融合後在UCF-101數據集上達到88.0%的準確率,而同期最好的手工特徵方法密集軌跡是85.9%,高出約2個百分點,這是深度學習第一次在影片動作識別任務上打贏手工特徵方法。

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