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

贊助商廣告

X

雙流卷積網路:當深度學習第一次在影片動作識別上打敗了手工特徵

2026年09月20日 首頁 » 熱門科技

2014年,電腦視覺圈子裡有一件讓很多人心裡不太舒服的事。

圖像識別領域早就被深度學習攻占了。2012年AlexNet橫空出世後,卷積神經網路在靜態圖片分類上一路狂飆,把傳統的手工特徵方法按在地上摩擦。可是換到影片動作識別這個賽道,情況完全反過來了。

卷積神經網路*:一種通過卷積層自動學習圖像特徵的深度學習模型,擅長處理圖像和影片這類具有空間結構的數據。

當時最強的影片動作識別方法,是一種叫做密集軌跡的手工特徵方法,在UCF101數據集上能做到87.9%的準確率。而深度學習方法呢?最好的成績只有65.4%,差了整整22.5個百分點。

這個差距意味著什麼?意味著每識別5個動作,深度學習方法就要比手工特徵方法多犯錯一個多。在圖像分類領域已經被深度學習證明是過去時的手工特徵,在影片領域卻依然穩坐王座。這在當時是一件很打臉的事:難道深度學習真的只擅長圖片,不擅長影片?

牛津大學的Karen Simonyan和Andrew Zisserman沒有接受這個結論。他們後來在幾個月內又發表了另一篇同樣重量級的論文,就是VGGNet,那篇論文重新定義了"深度網路該有多深"。而在動作識別這篇論文裡,他們要解決的問題是:影片比圖片多了什麼,而深度學習恰好沒有利用上這個東西?

答案是運動。

問題出在哪:卷積網路不知道"動"是什麼

一張靜態圖片能告訴你很多東西:這是不是一隻貓,背景是不是草地,光線是不是充足。但它永遠不會告訴你貓下一秒要往哪跑。

傳統的卷積神經網路在處理影片時,通常的做法是把影片切成一幀一幀的圖片,逐幀識別,然後把結果做個平均,或者簡單粗暴地把多幀圖像堆疊起來一起丟進網路。這種做法有個致命問題:網路看到的更多是"這一幀長什麼樣",而不是"從上一幀到這一幀發生了什麼變化"。

這就好比你想判斷一個人是在揮手還是在撓頭,如果只給你看一張定格照片,你可能根本分不清,因為兩個動作在某個瞬間的手部姿態可能長得很像。但如果給你看一段連續的動作軌跡,答案立刻就清楚了。如果不給網路提供運動資訊,它就只能靠猜姿態相似的動作到底是哪一個,這正是當時深度學習方法卡在65%左右的根本原因。

Simonyan和Zisserman的洞察是:影片裡其實藏著兩種完全不同性質的資訊,一種是外觀,也就是畫面里有什麼東西,另一種是運動,也就是這些東西在往哪個方向、以多快的速度移動。這兩種資訊的性質差異很大,一個是空間上的靜態模式,一個是時間上的動態模式,硬把它們塞進同一個網路里學習,網路很難同時把兩件事都學好。

於是他們提出了一個聽起來簡單粗暴、但極其有效的方案:乾脆用兩個完全獨立的卷積網路,一個專門學外觀,一個專門學運動,最後再把兩邊的判斷結果融合起來。這就是雙流卷積網路的核心思路。

雙流卷積網路*:Two-Stream Convolutional Networks,把影片動作識別拆分成空間流和時間流兩個獨立網路分別處理,再融合結果的深度學習架構。

空間流:認出畫面里有什麼

雙流架構里的第一條流叫空間流,它的任務很單純,就是常規的圖像分類。

輸入是影片裡的某一幀靜止畫面,網路結構基本照搬當時ImageNet圖像分類上表現優異的卷積網路架構。它要判斷的是:這張畫面本身看起來像哪種動作場景?比如畫面里有游泳池,有個人在水裡划水的姿態,那這一幀本身就帶有很強的"游泳"信號。

空間流之所以有效,是因為很多動作確實和場景、道具、姿態強相關。你看到一個人手裡拿著球拍站在網球場上,即便這一幀是定格的,你大概也能猜到這跟打網球有關。這一條流本質上是在利用影片裡那些和靜態圖片識別沒什麼區別的線索。

但空間流單獨作戰的時候表現如何?論文裡的實驗數據給出了答案:僅用空間流,在UCF101上的準確率是72.6%。

這個數字比傳統手工特徵的87.9%還差了15個百分點還多。這說明單靠外觀資訊,深度學習依然打不過老方法。真正決定勝負的,是第二條流。

時間流:把運動本身變成一張"圖片"

這是整篇論文最巧妙的一步。

研究者們意識到,卷積神經網路雖然擅長處理圖片,但沒有天然的機制去理解"運動"這種時序概念。那怎麼辦?他們沒有去發明一種全新的網路結構來處理時序資訊,而是想了一個更聰明的辦法:把運動本身編碼成一張圖片的形式,然後依然用卷積網路去處理它。

這個編碼運動的工具叫光流。

光流*:Optical Flow,描述影片中相鄰兩幀之間每個像素點移動方向和速度的向量場,通常用兩張圖分別表示水平方向和垂直方向的位移。

具體來說,對於影片裡連續的兩幀畫面,可以計算出畫面中每一個像素點從上一幀移動到下一幀的位移量,這個位移在水平方向和垂直方向各有一個分量,分別可以畫成一張灰度圖。把連續多幀的光流圖堆疊起來,作為輸入餵給另一個卷積網路,這個網路就是時間流。

這個操作等於是把"運動"這個抽象概念,翻譯成了卷積網路最擅長處理的語言,也就是像素圖案。網路不需要理解"運動"是什麼哲學概念,它只需要在光流圖上找出規律性的圖案就行,因為不同動作在光流圖上會呈現出完全不同的紋理和方向分布。

舉個例子,如果一個人在做深蹲,光流圖上會呈現出上下方向的強烈運動信號;如果一個人在揮高爾夫球桿,光流圖會呈現出一個弧線狀的方向變化模式。這些模式對人眼來說可能不直觀,但對卷積網路來說恰恰是它最擅長識別的那種局部紋理特徵。

這裡必須停下來說一個類比,因為這一步的設計決策非常關鍵。

想像你想讓一個只會看照片的助手去判斷一群人是在跳舞還是在打架,但這個助手完全不會看影片。如果你直接把一整段影片甩給他,他會不知道該怎麼處理,因為他的訓練只讓他看單張照片。但如果你把這段影片的每一處運動軌跡畫成一張張箭頭圖,箭頭的方向和長度代表運動的方向和快慢,再把這些箭頭圖當成普通照片給他看,他立刻就能用他原本的看圖技能來判斷了,因為箭頭圖本質上還是一張圖片,只是內容變成了運動資訊。如果沒有這一步轉換,你就得重新訓練這個助手去理解"動態"這個全新的概念,成本高得多,效果也未必更好。光流圖就是這樣一種轉換,它把網路不擅長的時序理解問題,轉化成了網路擅長的圖像模式識別問題。

時間流單獨作戰的效果如何?論文給出的數據是,僅用時間流,準確率能達到81%左右,這個數字已經非常接近手工特徵方法的水準了,而且要知道,手工特徵方法之前一直被認為難以撼動的原因,正是它擅長捕捉運動軌跡資訊,比如密集軌跡方法的核心正是追蹤像素點的運動軌跡。深度學習第一次單靠運動資訊就摸到了這個門檻,這本身已經說明光流編碼這個思路是走對了方向的。

兩條流合併:1加1大於2

單獨看空間流是72.6%,時間流大約81%,那兩個加起來會怎樣?

論文的答案是88%,超過了當時最好的手工特徵方法87.9%。這是深度學習第一次在影片動作識別的標準評測上,正面擊敗了統治多年的手工特徵方法。這句話放在2014年的分量,不亞於兩年前AlexNet在圖像分類上掀起的那場革命。

融合的方式其實很樸素,兩個網路各自輸出一個動作類別的概率分布,然後做加權平均,或者訓練一個簡單的分類器把兩邊的分數結合起來。沒有什麼特別複雜的機制,效果卻出奇地好。

這說明一個很重要的道理:空間流和時間流學到的資訊是互補的,而不是重複的。空間流知道畫面里有什麼東西,時間流知道東西是怎麼動的,兩者結合起來才是一個動作的完整描述。就像你判斷一個人是在跑步還是在原地做拉伸,只看畫面里的姿態可能會誤判,只看運動軌跡的快慢也可能誤判,但把姿態和運動結合起來看,判斷的準確率立刻就上去了。

如果只用其中一條流會發生什麼?前面已經給出了答案,準確率會跌到72.6%到81%之間,離88%的最終成績有明顯的差距。這也印證了當初把網路拆成兩條獨立分支的設計是正確的,如果硬把外觀和運動塞進同一個網路里學,網路很可能會顧此失彼,學不好任何一邊。

訓練數據不夠怎麼辦:用圖片數據集來補運動網路的短板

這篇論文還有一個不那麼起眼、但工程上很有價值的細節。

深度學習最缺的就是數據,而當時的影片動作識別數據集比起圖像分類數據集要小得多。UCF101這樣的數據集只有一萬多個影片片段,相比ImageNet動輒百萬張圖片的規模,差距懸殊。數據不夠,網路很容易過擬合,也就是在訓練集上表現很好,但換到新數據上就不靈了。

過擬合*:模型在訓練數據上表現很好,但在沒見過的新數據上表現明顯變差的現象,通常是因為模型記住了訓練數據的細節而不是學到了通用規律。

研究者們採取了兩個策略來緩解這個問題。第一個是用ImageNet上預訓練好的圖像分類網路參數來初始化空間流網路,這個思路在今天看起來是理所當然的遷移學習,但在當時算是比較超前的實踐。因為空間流本質上就是在做圖像分類,用已經在百萬張圖片上學過紋理和形狀特徵的網路作為起點,比從零開始訓練要可靠得多。

第二個策略更巧妙,是針對時間流的。既然缺影片數據,那能不能想辦法用其他數據集的影片來一起訓練?研究者們把兩個不同的動作識別數據集,UCF101和HMDB51,放在一起聯合訓練時間流網路,通過增加訓練樣本的數量來緩解過擬合。實驗證明這個多任務訓練策略確實能提升準確率。

這裡的道理其實和很多資源稀缺場景下的解決方案是共通的。假如你是一個剛開業的小餐館,顧客數據不夠多,很難總結出穩定的口味偏好規律,這時候如果能借用同城其他餐館的顧客反饋數據一起分析,即便這些數據不完全針對你的餐館,也能幫你更早發現一些普適性的規律,比如大部分人夏天更喜歡清淡口味。如果不這樣做,只死磕自己那一點點數據,規律還沒摸透,店可能已經關了。聯合訓練多個數據集,本質上就是在數據稀缺的情況下,儘可能榨取更多可用的信號。

數據說話:關鍵實驗結果一覽

論文在兩個標準數據集UCF101和HMDB51上做了系統的對比實驗。以下是核心結果的整理。

| 方法 | UCF101準確率 | 說明 |

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

| 密集軌跡(手工特徵) | 87.9% | 2014年之前的最強方法 |

| 僅空間流網路 | 72.6% | 只用外觀資訊 |

| 僅時間流網路 | 81.0%左右 | 只用光流運動資訊 |

| **雙流網路融合** | **88.0%** | 首次超越手工特徵方法 |

從這張表可以清楚看到,單獨的任何一條流都打不過手工特徵,只有把兩者結合起來,深度學習才第一次實現了反超。這個反超的幅度不算誇張,只比87.9%高了大約0.1個百分點,但這個"第一次超越"的象徵意義遠大於數字本身。它證明了深度學習在影片理解上並非天生不擅長,只是之前的架構沒有找到正確的方式去利用運動資訊。

後來發生了什麼

這篇論文提出的雙流思路成為了此後幾年影片動作識別領域的標準範式,後續大量工作都是在這個框架上做改進。

2016年,牛津團隊自己發表了後續工作Temporal Segment Networks,由王利民等人提出,這篇論文指出雙流網路原本只對影片裡很短的片段做預測,容易忽略長時間跨度的動作模式,於是提出把一整段影片切成多個片段,分別跑雙流網路再做融合,這樣網路能看到動作在更長時間尺度上的變化規律,在多個數據集上進一步提升了準確率。

2017年,Carreira和Zisserman(同一個Zisserman)發表了I3D網路,論文名字是Quo Vadis, Action Recognition,這篇工作把雙流網路里原本二維的卷積核直接膨脹成三維卷積核,讓網路能夠直接在時間維度上做卷積,而不再需要單獨計算光流這一步,同時藉助一個新建的大規模影片數據集Kinetics做預訓練,這個思路後來成為影片理解領域另一條重要的技術路線,大幅推動了後續三維卷積網路的發展。

這兩個後續工作分別從"如何看更長的時間跨度"和"如何讓網路直接理解時序而不依賴手工計算的光流"這兩個方向,把雙流網路最初提出的問題繼續往前推進了。

寫在後面

讀到這篇論文時最觸動我的一點,是它解決問題的方式並不花哨。它沒有發明一種全新的網路結構去"理解時間",而是想辦法把時間資訊轉換成網路已經擅長處理的空間圖案,這是一種很樸素的工程智慧,遇到新問題先想能不能套用舊工具,而不是急著造新輪子。

另一個值得琢磨的細節是,單獨的時間流網路效果幾乎追平了手工特徵方法,這說明手工特徵方法長期領先的真正秘密武器就是運動軌跡資訊,而不是外觀特徵,這個發現某種程度上驗證了此前手工特徵研究者的直覺是對的,深度學習不是否定了這個直覺,而是用另一種方式實現了同樣的洞察。

這篇論文沒有解決的問題是,光流的計算本身依賴傳統算法,速度慢,而且是提前算好再餵給網路的,並不是端到端可學習的一部分。後來的I3D網路正是衝著這個短板去改進的。技術的疊代往往就是這樣,先證明一個思路可行,再有人回頭把不優雅的那部分打磨掉。

Q&A

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

A:雙流卷積網路是2014年由Simonyan和Zisserman提出的影片動作識別方法,它用兩個獨立的卷積網路分別處理影片的外觀資訊(空間流)和運動資訊(時間流),再融合兩者的判斷結果,在UCF101數據集上首次讓深度學習方法超越了傳統手工特徵方法。

Q2:雙流網路里的時間流是怎麼處理影片運動資訊的?

A:時間流不是直接處理影片幀,而是先計算相鄰幀之間的光流,也就是每個像素點的運動方向和速度,把光流轉換成灰度圖後再輸入卷積網路,相當於把運動資訊翻譯成了網路擅長處理的圖片形式。

Q3:雙流網路之後有哪些重要的改進工作?

A:2016年的Temporal Segment Networks把影片切成多個片段分別處理再融合,解決了雙流網路忽略長時間動作模式的問題;2017年的I3D網路把二維卷積核膨脹成三維卷積核,讓網路直接在時間維度上做卷積,不再依賴單獨計算光流。

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