2014年,如果你問一個電腦視覺研究者"深度學習能不能識別影片裡的動作",大概會得到一個尷尬的沉默。
圖像識別領域,深度學習已經靴子落地了。2012年AlexNet
橫空出世,把圖片分類任務打得服服帖帖,準確率碾壓所有手工設計的特徵。但影片呢?影片不就是一堆圖片疊起來嗎?
事實證明,不是這麼簡單。
在這篇論文發表之前,最好的影片動作識別方法用的還是一種叫做"密集軌跡
"的手工特徵。
密集軌跡*:一種傳統的影片特徵提取方法,通過追蹤影片中密集分布的點隨時間的運動軌跡,手工設計規則來描述動作特徵。
這類手工方法在標準測試集上能做到85%以上的準確率,而當時所有試圖用深度神經網路處理影片的方案,都沒能真正超過它。有人試過直接把3D卷積網路懟上去處理影片,結果效果平平,甚至不如手工特徵。這不是深度學習不行,是大家還沒找到正確的姿勢。
這篇來自牛津大學的論文,作者是Karen Simonyan
和Andrew Zisserman
,給出了一個答案。有意思的是,這兩人幾個月後又發表了另一篇論文,叫VGGNet
,後來成了圖像識別領域的經典模型之一。可以說,這篇影片識別的論文和VGGNet是同一個時期、同一個課題組的孿生研究,一個專注圖像,一個專注影片,思路上有共通之處。
這篇論文的核心突破是:它第一次讓純深度學習方法在影片動作識別上真正打贏了手工特徵,而且不是小贏,是全面超越。
影片比圖片難在哪
先說清楚一件事,影片識別到底難在什麼地方。
一張圖片,你要識別的是"這是什麼"。一段影片,你要識別的是"發生了什麼"。多出來的這個"發生",藏著時間維度的資訊,也就是動作本身的動態過程。
舉個例子,一張照片裡一個人張開雙臂,你分辨不出他是在跳舞、擁抱還是準備摔倒。但如果給你連續幾秒的影片,一切都清楚了。
問題是,怎麼讓神經網路"看懂"這種隨時間變化的動態資訊?
早期的直覺是,既然圖片可以用2D卷積網路處理,影片不就是加了一個時間維度嗎?那就用3D卷積,把時間也當作一個空間維度來卷積。
這個思路聽起來合理,實際操作中卻處處碰壁。3D卷積需要海量的影片數據來訓練,而當時能用的影片數據集,規模遠遠比不上ImageNet那種幾百萬張圖片的圖像數據集。數據不夠,網路學不到東西,效果自然上不去。
這就好比讓一個廚師同時學做菜和學開車,教材卻只有平時教做菜的十分之一。廚藝沒學好,車也沒學會開,兩頭落空。如果不解決數據不足這個根本問題,無論網路設計得多精巧,都是在沙地上蓋樓。
拆開時間和空間,分別處理
這篇論文給出的解法,思路上其實挺樸素:既然一個網路同時學空間資訊和時間資訊學不好,那就拆成兩個網路,一個專門學空間,一個專門學時間,最後把兩邊的結果合起來。
這就是這篇論文最核心的設計,叫做雙流卷積網路
。
雙流卷積網路*:將影片識別任務拆分成兩個獨立的卷積神經網路分支,一個處理靜態畫面(空間流),一個處理運動資訊(時間流),最後融合兩者的預測結果。
空間流這一支很好理解,它處理的就是影片裡的單幀畫面,本質上跟處理普通圖片的卷積網路沒什麼區別。它能學到的是"畫面里有什麼",比如背景里有游泳池,有球場,畫面中央有個人形。這類資訊對識別動作也很有幫助,畢竟你在游泳池邊看到的動作,大概率是跳水或游泳,不太可能是打冰球。
時間流這一支才是真正的創新點,它不看原始畫面,看的是光流
。
光流*:描述影片中像素點在連續幀之間移動方向和速度的一種表示方式,本質上是把"運動"這件事可視化成了一張張箭頭圖。
具體來說,研究者把兩幀畫面之間每個像素的運動方向和運動幅度計算出來,變成一張新的"圖片"。這張圖片上看不到人臉、看不到顏色,只有密密麻麻的箭頭,標示著畫面里每一處在往哪個方向、以多快的速度移動。把這樣的光流圖餵給一個卷積網路,網路學到的就純粹是"動作"本身,和背景、光線、顏色這些干擾資訊完全脫鉤。
這個設計背後的思路是,把"是什麼"和"怎麼動"這兩件事徹底拆開處理,讓兩個網路各自專注一件事,而不是逼一個網路同時兼顧兩種完全不同性質的資訊。
這就像批改學生作文,如果同時要看語法對不對、內容有沒有新意,老師很容易顧此失彼。有的老師會分成兩輪,第一輪只看語法錯誤,第二輪只看立意和結構,最後綜合兩輪的評分給出最終成績。這樣每一輪的判斷標準單一、清晰,不容易互相干擾。如果兩件事混在一起同時判斷,注意力被拉扯,反而兩頭都判斷不准。
論文的實驗數據證實了這個設計的價值。如果只用空間流網路,單獨測試,準確率大概是73%左右。如果只用時間流網路,單獨測試,準確率能達到83%左右,說明動作資訊本身包含的判別力,比背景畫面還要強。而把兩條流結合起來,最終準確率衝到了88%。
這組數字很值得琢磨。單獨看背景畫面,只能對七成左右的動作做出正確判斷。但如果你完全不看畫面內容,只看動作的運動軌跡,反而能認對八成多。這說明一件事,動作識別這件事,動作本身遠比背景更關鍵,這也是為什麼後來學界對光流資訊的重視程度這麼高。
數據不夠,那就借數據
剛才提到,影片數據集規模不夠,是深度學習在影片領域一直沒打贏手工特徵的重要原因。這篇論文怎麼解決這個問題?
答案是遷移學習
加多任務訓練的組合拳。
遷移學習*:先在數據量充足的任務上訓練模型,再把學到的知識遷移到數據量有限的目標任務上,避免從零開始訓練。
空間流網路這一支,直接借用了在ImageNet圖像數據集上預訓練好的網路參數。ImageNet有一百多萬張標註圖片,訓練出來的網路已經學會了怎麼識別邊緣、紋理、物體輪廓這些通用的圖像特徵。把這些參數拿過來,在影片動作數據集上稍微微調一下,空間流網路就能站在巨人的肩膀上,不用從零學起。
時間流網路這一支麻煩一些,因為光流圖這種數據形式,在ImageNet之類的圖像數據集裡根本不存在,沒法直接遷移預訓練參數。研究者的解法是,把兩個不同的影片動作數據集放在一起聯合訓練,用一種多任務學習的方式,讓網路同時學習預測兩個數據集各自的分類標籤,這樣即使單個數據集規模有限,合併起來的數據總量也能撐起訓練需求。
這個操作背後的邏輯是,數據不夠,那就想辦法湊,湊的方式可以是借用別處已經訓練好的知識,也可以是把幾個小數據源拼成一個大數據源。
這跟備考的道理很像。假設你要考一門冷門語言,教材稀缺,但你發現另一門語法結構類似的語言教材很多。你可以先靠那門教材打好語法基礎,再針對冷門語言做專項練習,而不是從零開始死磕稀缺教材。如果沒有這一步遷移,你可能因為練習量不夠,連基本規則都掌握不牢,更別說應對複雜題型了。
論文用實驗驗證了這套組合拳的效果。如果時間流網路不做任何預訓練或數據增強,直接在有限的數據上訓練,過擬合問題會很嚴重,模型在訓練集上表現不錯,換到測試集上就崩。加上多數據集聯合訓練之後,準確率有明顯提升,證明了數據不足問題確實可以通過巧妙的訓練策略緩解,而不是必須等更大規模的數據集出現才能往前推進。
兩條流怎麼融合
拆成兩條流分別處理只是第一步,最後還得把兩邊的判斷結果合併成一個最終答案。
這篇論文嘗試的融合方式相對直接,主要是在兩個網路各自輸出預測分數之後,做加權平均,或者訓練一個簡單的分類器把兩組分數當作新的輸入特徵,重新做一次判斷。
這個環節看起來技術含量不算最高,但它其實解決了一個很現實的矛盾:兩個網路各自都不完美,空間流會被複雜背景誤導,時間流對光照變化或攝像機自身的抖動比較敏感。把兩者結合,相當於讓兩個各有短板的專家互相補台。
這就像看病時找了兩個醫生分別診斷,一個是內科專家,一個是影像科專家,兩人各自給出判斷後,再讓主治醫生綜合兩邊的意見做最終決策。單獨一個醫生的判斷可能有偏差,但兩個角度的資訊疊加起來,誤診率會明顯降低。如果只信一個醫生的一次判斷,誤診的代價可能就是延誤治療。
實驗數據顯示,融合之後的準確率比任何單一流都高,這也印證了空間資訊和時間資訊確實是互補的,不是重複的。
下面這張表格總結了論文裡幾個關鍵的實驗對比結果。
| 方法 | UCF-101數據集準確率 |
|---|---|
| 僅空間流網路 | 約73% |
| 僅時間流網路 | 約83% |
| **雙流網路融合** | **約88%** |
| 同期最好的手工特徵方法(改進版密集軌跡) | 約85%-87% |
從這張表能看出,雙流網路的融合結果,已經穩穩超過了當時手工特徵方法的最好成績。這在2014年是一件大事,意味著深度學習在影片這個更複雜的任務上,終於追平並超越了積累多年的手工設計智慧。
這句話的分量,不亞於兩年前AlexNet在圖像識別上引發的震動。區別在於,AlexNet證明深度學習能在靜態圖像上碾壓傳統方法,而這篇論文證明,深度學習經過恰當的結構設計,同樣能在動態影片這個更難的戰場上取勝。
後來的故事
這篇論文提出的雙流架構,後來成了影片動作識別領域一個繞不開的基準框架,很多後續工作都是在這個骨架上做改進。
2016年,林特和塗等研究者提出了時序分段網路
,這篇論文進一步優化了雙流網路如何處理長影片的問題。原始的雙流網路只能處理很短的影片片段,時序分段網路把整段影片切成若干段,分別提取特徵再匯總,讓網路能感知更長時間跨度里的動作演變,在多個數據集上把準確率又往上推了幾個百分點。
2017年,卡雷拉和齊塞爾曼(注意,齊塞爾曼正是這篇雙流網路論文的作者之一)發表了I3D網路
的論文,提出把雙流網路里的2D卷積全部替換成3D卷積,並且巧妙地用圖像預訓練的參數來初始化3D卷積核,解決了3D卷積網路之前一直缺數據、難訓練的老問題。I3D在多個動作識別數據集上刷新了當時的最好成績,這也說明雙流的思路和3D卷積的思路,後來找到了融合的方式,而不是互相取代的關係。
從2014年到2017年,短短三年,影片動作識別這個領域從"深度學習打不過手工特徵"走到"深度學習成為絕對主流",這篇雙流網路論文正是這條路上的第一塊奠基石。
寫在後面
這篇論文最讓我意外的一點是,時間流單獨跑分居然比空間流還高。直覺上背景畫面資訊量更大,應該更好判斷,但實際是運動本身的判別力更強。這提醒我,做任務拆解的時候,不能憑直覺猜哪部分資訊更重要,得靠實驗說話。
另一個值得琢磨的細節是,這篇論文和VGGNet幾乎是同一批人同一時期的產物,一個啃圖像,一個啃影片。這說明真正推動一個領域往前走的,往往不是孤立的靈光一閃,而是團隊長期扎在一個方向上,同時打通幾個相鄰問題。
雙流網路沒解決的問題也很明顯,它對光流的依賴意味著計算光流本身就要花不少功夫,而且兩條流是分開訓練、事後融合的,網路內部並沒有真正學會"空間資訊怎麼影響時間理解"這種更深層的交互。這個問題後來被3D卷積網路和更複雜的時空聯合建模方式接手解決,但那已經是另一段故事了。
Q&A
Q1:雙流卷積網路是什麼?
A:雙流卷積網路是牛津大學研究者在2014年提出的影片動作識別模型,把任務拆成兩個獨立的神經網路分支,一個處理靜態畫面的空間流,一個處理運動資訊的時間流,最後融合兩邊的預測結果,準確率達到約88%,首次讓深度學習方法在影片動作識別上超越了手工特徵方法。
Q2:為什麼雙流網路要把空間和時間分開處理?
A:因為一個網路同時學習畫面內容和動作變化效果不好,數據也不夠支撐。拆成兩個網路後,空間流專注學"畫面里有什麼",時間流通過光流圖專注學"動作怎麼變化",實驗證明分開處理後融合的效果比混在一起處理好很多。
Q3:光流在這篇論文裡起什麼作用?
A:光流是把影片裡每個像素點的運動方向和速度轉化成圖像的一種表示方式,不包含顏色或背景資訊,只有運動軌跡。研究者用光流圖訓練時間流網路,讓網路專注學習動作本身,實驗中光流單獨訓練的準確率約83%,比只看畫面的空間流更高,證明動作資訊比背景資訊更關鍵。






