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

贊助商廣告

X

兩條視線拼出一個動作:雙流卷積網路如何在2014年第一次讓深度學習贏了手工特徵

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

你有沒有想過,機器要看懂一個人在做什麼動作,到底有多難?

你看一段影片裡,有個人正在揮棒,這事兒對人來說一眼就明白。可對機器來說,這裡藏著兩個完全不同性質的資訊。一個是畫面里有什麼東西,球棒、人、球場,這是靜態的外觀資訊。另一個是這些東西怎麼動的,球棒揮動的軌跡、速度、方向,這是動態的運動資訊。人腦處理這兩種資訊幾乎是無縫銜接的,但對2014年的深度學習來說,這是兩座翻不過去的山。

那一年,卷積神經網路在圖片識別上已經打出了漂亮的戰績。前一年,AlexNet橫空出世,把圖像分類的錯誤率甩開一大截,整個電腦視覺圈都在往深度學習轉向。可是奇怪的事情發生了,同樣的網路架構,一挪到影片動作識別上,就突然不好用了。

當時最好的手工特徵方法,叫做improved Trajectories

**improved Trajectories(改進軌跡特徵)**:一種手工設計的影片動作識別方法,通過跟蹤像素點的運動軌跡並提取特徵來判斷動作類別,在深度學習出現前長期占據準確率榜首。

在UCF-101這個標準測試集上能拿到87.9%的準確率。而當時最好的深度學習方法,只能做到65.4%左右。這個差距接近22個百分點,意味著什麼?意味著每5個動作里,深度學習就要比手工方法多認錯一個還多。這在圖像識別領域是不可想像的差距,深度學習明明應該是更先進的技術,卻被一個"老古董"式的手工方法按在地上摩擦了兩年多。

這篇論文的兩位作者,Karen Simonyan和Andrew Zisserman,來自牛津大學視覺幾何組。有意思的是,他們幾個月後又發表了另一篇論文,叫VGGNet,後來成了圖像識別領域最經典的架構之一。這兩篇論文幾乎是同期的工作,你可以想像這兩位學者當時腦子裡同時裝著兩個問題:圖片怎麼分類,影片怎麼理解。而正是影片這道題,讓他們想出了一個後來被證明極其重要的點子。

問題到底難在哪:一張圖片不會動,但一段影片會

先說說為什麼直接把圖像分類的網路搬過來會失敗。

卷積神經網路之所以在圖片上表現好,是因為它能從像素里學出邊緣、紋理、形狀這些視覺特徵,然後一層一層組合成更抽象的語義,比如"這是一隻貓"。這套邏輯對單張靜止圖片是成立的,因為圖片裡所有該有的資訊,都擺在那一幀畫面上了。

可動作是個時間上的概念。揮棒這個動作,你給我看其中一幀,我可能猜到這是打棒球的場景,但我猜不出這一瞬間球棒是在往上舉還是往下揮。你需要連續好幾幀才能判斷出運動的方向和速度。

這就好比你要判斷一個人是在給你鞠躬還是剛站起來,如果只看一張照片,彎腰九十度的姿勢可能是這兩個動作里的任意一個瞬間。你只有看到這個姿勢前後發生了什麼變化,才能確定他到底在做哪個動作。

如果單純把影片的每一幀圖片餵給一個圖像分類網路,然後把結果做個平均或者投票,網路學到的實際上只是"這個場景里通常會出現什麼物體",比如泳池邊容易出現游泳這個類別,而不是真正理解了運動本身。這也是為什麼早期直接套用圖像網路的方法,效果始終摸不到手工特徵的天花板,因為手工特徵里那些基於軌跡的方法,天生就是在追蹤像素怎麼動的。

核心方法:把一個問題拆成兩條視線來看

Simonyan和Zisserman的解法,現在回頭看簡單到有點不可思議,但在當時是個真正的突破。

他們把網路拆成兩條獨立的流,一條叫空間流,一條叫時間流,各自處理各自擅長的資訊,最後再把兩邊的判斷結果融合起來。

空間流吃的是普通的RGB圖像幀,跟一般的圖像分類網路沒什麼區別,專門負責認出畫面里有什麼,場景、物體、人物姿態,這些靜態的外觀線索。

時間流則完全不吃原始圖像,它吃的是光流

**光流(Optical Flow)**:描述圖像序列中像素點運動方向和速度的一種表示方法,通常用兩張連續幀計算得出,分為水平方向和垂直方向兩個分量,像一張記錄了"每個像素往哪兒動、動多快"的地圖。

光流本身不包含任何顏色或紋理資訊,它就是純粹的運動信號。你可以把它想像成一張只畫了箭頭的地圖,每個箭頭指向像素下一幀要去的方向,箭頭長短代表速度。這樣一來,時間流網路看到的完全是運動模式,不會被畫面里的顏色、光照這些無關資訊干擾。

這個設計的關鍵就在於,把這兩種性質完全不同的資訊硬塞進同一個網路里學習,效果反而不如讓兩個網路各管一段,專心把自己那一半資訊吃透,最後再把結論拼起來。

這就好比一個案子交給警察局處理,如果讓一個人同時負責物證分析和監控錄像分析,他可能顧此失彼,兩頭都做不到位。但如果分成兩個專業小組,一組專門看現場留下的痕跡,一組專門看監控里人怎麼移動,最後兩組交換情報再做出聯合判斷,準確率往往更高。如果不這樣拆分,讓一個網路同時消化外觀和運動兩種資訊,論文裡的對比實驗顯示效果明顯更差,這也印證了專業分工在這裡不是形式主義,而是實打實的性能提升。

![雙流架構圖](placeholder)

圖中展示的正是這套架構,輸入影片被分成兩路,一路是單幀RGB圖像送進空間流卷積網路,另一路是連續多幀計算出的光流場送進時間流卷積網路,兩路網路結構相似但參數獨立訓練,最後通過加權平均或者一個小型分類器把兩邊的softmax輸出融合成最終預測。

時間流網路吃的到底是什麼:多幀堆疊的光流

時間流網路具體怎麼處理運動資訊,這裡有個細節值得展開說說。

網路不是只看兩幀之間的一次光流,而是把連續L幀(論文裡L取10)算出來的光流場堆疊在一起,做成一個多通道的輸入。因為光流有水平和垂直兩個方向的分量,10幀就是20個通道,這些通道被當成一張"多層圖像"一起送進卷積網路。

這麼做的道理在哪?一次光流只能捕捉兩幀之間瞬間的運動,資訊量太單薄。揮棒這個動作從開始到結束可能跨越幾十幀,如果每次只看鄰近兩幀的運動,網路看到的永遠是運動的碎片,很難拼出完整的動作輪廓。堆疊多幀光流相當於給網路一段"運動的歷史",讓它能看到運動是怎麼隨時間演變的,而不是某一瞬間的快照。

這跟你看一段慢動作回放很像,如果導播只給你看某一幀和下一幀的畫面差異,你很難判斷這是一次揮拍還是僅僅是手抖了一下。但如果給你看連續十幾幀的運動軌跡疊在一起,揮拍的完整弧線一下子就顯現出來了,起手、加速、揮出、收勢,整個過程的形狀都能看清楚。如果只用單幀光流而不做堆疊,論文的實驗裡準確率會明顯下降,這說明運動資訊的時間跨度本身就是判斷動作類別的重要線索,不是可有可無的細節。

論文裡還測試了另一種處理光流的方式,叫做軌跡堆疊

**軌跡堆疊(Trajectory Stacking)**:一種沿著像素運動軌跡採樣光流的方式,而不是固定在同一個像素位置上採樣,試圖更精確地捕捉某個點隨時間的運動路徑。

這個想法聽起來更精細,理論上應該比簡單粗暴地在固定位置堆疊光流更準確。但實驗結果顯示,兩種方式的效果其實差不多,固定位置堆疊反而實現起來更簡單。這也是論文裡一個挺誠實的地方,研究者沒有為了顯得方法更精巧而硬吹一個理論上更優雅但實際提升有限的設計,而是老老實實匯報了兩種方法差距不大的事實。

光流的兩種算法選擇:精確但慢,還是粗糙但快

時間流網路依賴光流場,那光流本身怎麼算出來?這裡論文對比了兩種主流算法。

一種是傳統的光流算法,能算得比較精確,但速度慢,處理一段影片可能要花不少時間。另一種是當時剛出現的實時光流算法

**實時光流算法(Real-time Optical Flow)**:一種計算速度快、能滿足實時應用需求的光流估計方法,精度上略遜於傳統算法但換來了速度優勢。

論文測試發現,用精度稍低但速度快得多的實時算法,最終分類準確率的下降幅度很小,但換來的是數量級上的速度提升。這個權衡在工程上非常重要,因為光流計算本身在整套流程里是個不小的計算瓶頸,如果非要用最精確但最慢的算法,整個系統可能根本沒法實用。

這個選擇背後的邏輯其實很樸素。你去醫院拍片子,做一個特別精細的全身核磁共振可能要一個小時,但如果只是想快速判斷骨頭有沒有骨折,一張幾分鐘就能拍出來的X光片可能就夠用了。多餘的精度如果換不來判斷結果的實質提升,那這份精度就是浪費。光流計算在這裡也是同樣的道理,實時算法犧牲的那一點精度,並沒有明顯拖累最終的分類效果,但換來的速度提升是實打實的。

數據不夠怎麼辦:借用圖像分類的經驗做遷移

深度網路最怕的就是數據不夠,而當時的影片動作識別數據集,規模跟圖像分類比起來小得可憐。UCF-101隻有大約1.3萬段影片,HMDB-51更少,只有幾千段。相比ImageNet那種上百萬張圖片的規模,這個數據量對訓練一個深層卷積網路來說是遠遠不夠的,很容易過擬合。

論文裡用了兩個辦法來緩解這個問題。第一個是多任務學習

**多任務學習(Multi-task Learning)**:讓同一個網路同時在多個相關任務上訓練,共享底層特徵表示,藉此提高數據利用效率的一種訓練策略。

具體做法是把UCF-101和HMDB-51兩個數據集放在一起訓練,網路共享大部分參數,只在最後接了兩個不同的輸出層分別對應兩個數據集的類別標籤。這樣網路能從兩份數據里一起學習通用的運動模式,相當於把兩個小數據集拼成了一個更大的訓練資源。

第二個辦法是用圖像分類任務上預訓練過的網路參數來初始化空間流網路,這個思路後來被稱為遷移學習

**遷移學習(Transfer Learning)**:將一個任務上學到的知識遷移到另一個相關任務上,通常表現為用一個任務預訓練的網路參數作為另一個任務的初始化起點。

空間流網路處理的是普通圖像,跟ImageNet上訓練的圖像分類網路任務性質接近,所以直接借用在ImageNet上學到的底層特徵當作起點,能省掉從零開始學習邊緣、紋理這些基礎視覺特徵的過程,把有限的數據集中用在學習動作相關的高層特徵上。

這跟一個人轉行的道理很像。一個原本做建築設計的人轉去做遊戲場景設計,他不需要從零學起怎麼理解空間結構和透視關係,這些底子已經打好了,他只需要在這個基礎上補充遊戲引擎和交互設計的知識。如果每次換個領域都從零開始學,人生根本沒有那麼多時間。網路的訓練也是這樣,如果空間流網路不借用ImageNet的預訓練參數而是從零開始在幾千段影片上訓練,過擬合幾乎是必然的,準確率會大幅下滑。

兩條流怎麼融合:簡單相加還是訓練一個分類器

最後一步是怎麼把空間流和時間流的預測結果拼到一起。

論文嘗試了兩種融合方式。一種是直接對兩個網路輸出的softmax分數做加權平均,權重可以手動調,論文裡發現給時間流更高的權重效果更好,這也從另一個角度說明運動資訊對動作識別的重要性其實超過外觀資訊。另一種是訓練一個額外的支持向量機

**支持向量機(SVM)**:一種經典的機器學習分類算法,常用於在特徵空間中尋找一個最優的分界面來區分不同類別。

把兩條流的輸出分數當作新的特徵,重新訓練一個分類器來做最終判斷。實驗顯示這種方式比簡單加權平均效果更好一些,因為它能自動學出更合理的組合方式,而不是依賴人工設定的權重。

最終成績單:深度學習第一次贏了手工特徵

說了這麼多設計細節,最後來看結果。

| 方法 | UCF-101 準確率 | HMDB-51 準確率 |

|---|---|---|

| 單獨空間流 | 72.6% | 40.5% |

| 單獨時間流 | 81.2% | 54.6% |

| 雙流融合(SVM) | **88.0%** | **59.4%** |

| improved Trajectories(此前最強手工特徵) | 87.9% | 57.2% |

這張表格里最值得細品的是前兩行的對比。單獨用空間流,也就是只看圖像不看運動,準確率是72.6%。單獨用時間流,只看運動不看圖像外觀,準確率反而更高,81.2%。這說明了什麼?說明對動作識別這件事,運動資訊本身比靜態外觀資訊更關鍵,這跟我們人類判斷動作的直覺是一致的,你閉上眼睛只憑肢體運動的感覺往往也能猜出對方在做什麼動作,但只看一張靜止照片經常猜不准。

再看融合之後的88.0%,這是雙流網路的最終成績,比單獨空間流高了整整15個百分點。如果不做這個融合,只用空間流去打這場仗,深度學習方法根本沒資格跟手工特徵掰手腕。而融合之後,88.0%這個數字,終於超過了此前保持了兩年多的手工特徵最好成績87.9%,雖然只領先了0.1個百分點,但這是深度學習在影片動作識別領域第一次正面擊敗手工特徵方法。這個歷史節點的分量,不亞於AlexNet當年在圖像分類上的突破。

在HMDB-51這個更難的數據集上,雙流方法的優勢更明顯,59.4%對57.2%,領先了2.2個百分點。HMDB-51之所以更難,是因為裡面的動作類別更細碎,場景更複雜,這也說明雙流方法在更困難的場景下反而展現出更穩的優勢,這對後續研究者來說是個很有信心的信號。

後續的故事:雙流架構成了整個領域的地基

這篇論文的影響,不是那種"發表了就被遺忘"的論文,而是真正開啟了一條研究路線。

2016年,Feichtenhofer等人在論文裡對雙流網路的融合方式做了改進,提出了在網路更深的層次上做特徵融合,而不是僅僅在最後的分類分數層面融合,這個改進進一步提升了準確率,證明兩條流之間在中間層就有資訊可以互相借鑑,而不是完全獨立訓練到最後才見面。

2017年,Carreira和Zisserman(注意,Zisserman又出現了)發表了I3D網路,這篇論文把雙流的思路和3D卷積結合起來,用3D卷積直接處理連續幀的時空資訊,同時還提出了Kinetics這個規模更大的影片數據集用來預訓練,這一下把影片動作識別的準確率又往上推了一大截,在Kinetics上預訓練後再遷移到UCF-101,準確率能衝到98%左右。

這兩項後續工作有個共同點,他們都沒有推翻雙流網路"分別處理外觀和運動"這個核心思想,而是在這個框架的基礎上做優化,一個是改進融合的時機和方式,一個是把光流這種手工設計的運動表示替換成更通用的3D卷積。這說明雙流網路提出的那個基本判斷,動作識別需要同時處理靜態外觀和動態運動這兩種性質不同的資訊,這個判斷本身站住了腳,後來的十年裡研究者們基本都是在這個地基上往上蓋樓。

寫在後面

讀這篇論文的時候,最觸動我的其實是那個15個百分點的對比。單獨空間流72.6%,融合後88.0%,這中間的差距全部來自於加入了運動資訊。這說明一件事,人在判斷"這是什麼動作"的時候,潛意識裡用的資訊量遠比我們以為的複雜,不是簡單地認出畫面里有什麼東西就完事了。

還有一個細節值得單獨說一下,論文裡發現給時間流更高的權重效果更好,這個發現在當時可能只是個工程上的小技巧,但往深里想,它其實暗示了一件事:靜態圖像里的"上下文線索"(比如游泳池邊容易出現游泳動作)看似有用,但也容易造成偏見式的猜測,而真正忠實地反映動作本質的信號是運動本身。這跟後來大家批評深度學習模型容易"抓錯重點"、依賴場景偏見而不是真正理解動作的討論,其實是同一件事的兩種表述。

這篇論文沒解決的問題也很明顯,光流本身的計算成本仍然是個瓶頸,而且光流是提前算好的一種"手工設計"的運動表示,並不是網路自己學出來的。I3D後來用3D卷積繞開了這個問題,但更徹底的端到端運動表示學習,直到今天依然是個開放的問題。

Q&A

Q1:雙流卷積網路(Two-Stream ConvNet)是什麼?

A:這是Simonyan和Zisserman在2014年提出的一種影片動作識別方法,把網路拆成空間流和時間流兩部分,分別處理畫面外觀資訊和光流運動資訊,最後融合兩邊的判斷結果,在UCF-101數據集上第一次讓深度學習方法超過了手工特徵方法。

Q2:雙流網路為什麼要用光流而不是直接用原始影片幀?

A:因為原始影片幀混雜了外觀和運動兩種性質不同的資訊,網路很難同時學好這兩者。光流是專門描述像素運動方向和速度的信號,不含顏色紋理資訊,讓時間流網路能專注學習運動模式,這樣拆分後整體準確率比混在一起處理提升了約15個百分點。

Q3:雙流卷積網路對後續研究有什麼影響?

A:2016年Feichtenhofer等人改進了兩條流的融合方式,在更深層次融合特徵。2017年Carreira和Zisserman提出的I3D網路把雙流思路和3D卷積結合,並引入Kinetics大規模數據集預訓練,把準確率進一步推高到98%左右,雙流的核心思想一直被後續工作沿用。

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