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

贊助商廣告

X

影片裡的動作,AI 曾經看不懂

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

2014 年之前,如果你讓一台電腦分辨影片裡的人是在"打網球"還是在"打棒球",最可靠的辦法居然不是神經網路。

那時候深度學習已經在圖像識別上大殺四方了。2012 年的 AlexNet 把圖片分類的錯誤率一下打下來十幾個百分點,整個電腦視覺圈子都在傳"深度學習要統治一切"。可是到了影片動作識別這個任務上,事情變得很尷尬。

一個叫"密集軌跡"的手工特徵方法,穩穩占據著榜首。它不是神經網路,是研究者手動設計的一套規則,追蹤畫面里密密麻麻的點怎麼運動,然後統計這些運動軌跡的模式。這套土辦法在權威的 UCF-101 動作識別數據集上能做到 85% 左右的準確率,而當時能找到的神經網路方案,只能做到 65% 上下,差了整整 20 個百分點。

20 個百分點是什麼概念?

意味著每 5 個動作里,深度學習就要比手工方法多認錯 1 個。放在圖像分類上,這個差距會被認為是災難性的失敗。

於是當時圈子裡有一種隱隱的共識:影片這東西太複雜了,神經網路學不明白動作里的時間資訊,還是老老實實用手工特徵吧。

這篇文章要講的論文,就是在這個背景下出現的。作者是 Karen Simonyan 和 Andrew Zisserman,來自牛津大學,論文叫《Two-Stream Convolutional Networks for Action Recognition in Videos》,2014 年發表。順便說一句,這兩位幾個月後又發了另一篇論文,叫 VGGNet,後來成了圖像識別領域最經典的網路結構之一。同一個組,同一段時間,一邊琢磨怎麼讓神經網路看懂圖片,一邊琢磨怎麼讓神經網路看懂影片裡的動作,這兩件事其實是擰在一起的。

難在哪裡:神經網路缺了一根筋

要理解這篇論文的巧妙之處,先得搞清楚影片識別到底難在哪。

一張靜態圖片,神經網路只需要認出"這是什麼東西"。一段影片,多了一個維度:時間。一個動作是"揮拍",光看某一幀畫面,可能根本看不出這人是在揮拍還是僅僅舉著球拍站著。動作的本質藏在連續幀之間的變化里。

傳統的卷積神經網路

卷積神經網路*:一種通過卷積操作提取圖像局部特徵的深度學習模型,擅長識別圖片裡的物體、紋理、形狀。

天生是為靜態圖片設計的。你把影片的每一幀單獨餵給它,它能告訴你這一幀里有沒有人、有沒有球拍,但它沒有辦法直接感知"動作"這個概念,因為動作是跨越多幀才能看出來的東西。

早期有研究者嘗試把影片直接堆疊成一個三維數據塊,讓網路在時間和空間兩個維度上同時做卷積,指望網路能自己學會捕捉運動資訊。這個思路聽起來很合理,但實際效果並不好。網路在海量的像素變化里很難自己摸索出"這是運動"這種抽象概念,尤其是訓練數據不夠多的時候,網路學到的更多是背景紋理之類的表面特徵,而不是真正的動作模式。

這就好比你想教一個從沒見過運動會的人認識"跑步"這個動作,但你給他看的只是一張一張孤立的照片,還期待他自己從這些照片的像素變化里推理出"跑步"的概念,而不告訴他"腿在交替擺動"這個關鍵線索。他大概率會盯著跑道的顏色、觀眾的衣服這些無關的細節瞎猜。如果你直接告訴他"看腿的擺動軌跡",他會瞬間抓住重點。這正是當時神經網路在影片任務上的處境,它沒有被直接告知"運動資訊在哪裡",只能在原始像素里大海撈針。

核心思路:把"長什麼樣"和"怎麼動"拆開來看

Simonyan 和 Zisserman 的想法說出來其實很樸素:既然網路自己很難從原始像素里學出運動資訊,那就不要讓它自己學了,直接把運動資訊餵給它。

具體怎麼做?他們把影片識別這個任務拆成了兩條獨立的通路,一條專門看"這一幀長什麼樣",另一條專門看"畫面是怎麼動的"。這兩條通路各自訓練一個卷積神經網路,最後把兩邊的判斷結果融合起來做最終決策。

這就是論文標題里"Two-Stream"的意思。

雙流卷積網路*:由兩個獨立的卷積神經網路組成的架構,一個處理靜態畫面(空間流),一個處理運動資訊(時間流),最後融合兩者的判斷結果。

空間流很好理解,就是普通的圖片分類網路,輸入是影片裡的某一幀畫面,網路學習識別畫面里的場景、物體、人物姿態,這些資訊能幫助判斷"這可能是個什麼動作"。比如看到球場、球網,網路會傾向於猜測這是網球相關的動作。

時間流才是這篇論文真正的巧思所在。它的輸入不是原始畫面,而是光流場。

光流*:描述影片中相鄰兩幀之間,畫面上每個點是怎樣移動的一種表示方法,本質上是一張記錄了運動方向和速度的圖。

光流這個概念在電腦視覺里其實是個老朋友,早在深度學習流行之前,做影片分析的人就在用它。光流會告訴你,畫面上的每一個像素點,從上一幀到下一幀,往哪個方向挪動了多遠。如果把一段揮拍的影片算出光流,你會看到手臂和球拍區域的光流箭頭都指向揮動的方向,而背景幾乎是靜止的,光流值接近零。

這一步操作的巧妙之處在於,它把"運動"這件本來隱藏在多幀變化中的抽象資訊,提前用傳統算法計算好,變成了一張可以直接輸入卷積網路的圖片。網路不再需要自己去猜測運動資訊在哪裡,它拿到的輸入本身就是"運動的樣子"。

這就像你要教一個孩子理解"哪裡在下雨",與其讓他盯著一整段監控錄像自己去找雨滴的痕跡,你不如直接給他一張已經標好了"雨滴移動軌跡"的示意圖。他不需要具備從原始影片裡提取運動資訊的能力,這件事已經替他做好了,他只需要學會看這張示意圖,判斷"這種運動模式對應的是什麼天氣"。如果不做這一步預處理,網路就要同時承擔"理解運動"和"識別動作類別"兩個任務,負擔太重,學習效率會大打折扣。

論文裡作者做了個很直接的對比實驗,來驗證這個設計到底值不值。

如果只用空間流,也就是只讓網路看靜態畫面,不給它任何運動資訊,在 UCF-101 數據集上的準確率是多少?

答案是 72.6%。

如果只用時間流,也就是只讓網路看光流圖,完全不看原始畫面呢?

答案反而更高,達到 81%左右。

這個結果其實相當說明問題。單看畫面長什麼樣,對判斷動作類別的幫助有限,因為很多動作發生的場景是相似的。而運動模式本身,才是區分動作類別更本質的線索。這也印證了研究者最初的直覺:動作識別真正缺的不是"看得清",而是"看得懂運動"。

當把兩條流結合起來,用一種加權平均的方式融合兩邊的預測結果,準確率達到了 88%左右。

這一下子超過了此前手工設計的密集軌跡方法的成績,也是深度學習方法第一次在影片動作識別這個任務上超過了手工特徵。

這個時間點值得多說一句。2012 年 AlexNet 讓深度學習在圖像分類上一戰封神,那種震撼感,在影片動作識別領域,直到 2014 年這篇雙流網路論文才第一次真正出現。整整晚了兩年,深度學習才在這個子領域證明了自己不是花架子。

光流網路自己在學什麼

論文裡有一個細節我覺得特別值得拿出來聊聊。

作者去看了時間流網路第一層卷積核學到的東西,發現這些卷積核大多呈現出明顯的方向性模式,就像是一組專門檢測"某個方向上的運動"的探測器。

這不是研究者提前設計好塞進去的,是網路自己在訓練過程中學出來的。

這說明網路確實理解了光流圖里最重要的資訊是什麼,也就是運動的方向性。它不需要人告訴它"要關注方向",它通過大量數據訓練,自己發現了這一點,然後把探測器長成了最適合捕捉方向資訊的形狀。這也從另一個角度證明了,把光流作為輸入這個設計選擇是對的路,網路確實能從這種輸入里挖出有價值的模式,而不是在瞎學一些無關的噪聲。

數據不夠怎麼辦:從圖像識別那裡借點經驗

這篇論文還有一個不太起眼但很務實的貢獻,是關於訓練數據不足的問題。

影片數據集在當時遠比圖像數據集小。UCF-101 只有一萬多段影片,相比圖像分類動輒幾百萬張訓練圖片的規模,差距很大。數據量不夠,深層神經網路很容易過擬合,也就是在訓練集上表現很好,換到沒見過的數據上就表現拉垮。

密集軌跡方法雖然效果好,但它是手工設計的規則,不需要大量數據"學習",這也是它在數據稀缺年代占優勢的原因之一。神經網路想要發揮威力,通常需要餵飽它才行。

Simonyan 和 Zisserman 借用了圖像識別領域已經驗證過的一套做法,用在圖片分類任務上表現很好的大規模數據集先把網路的空間流部分預訓練一遍,再拿到影片數據上做微調。這個思路本質上是把從圖片裡學到的"什麼是貓、什麼是人、什麼是球拍"這類通用視覺知識,遷移到影片任務上,而不用完全從零開始學。

這就像一個已經會開小汽車的人去學開卡車,他不需要從"什麼是方向盤、什麼是剎車"這種最基礎的概念重新學起,他可以直接站在已有駕駛經驗的基礎上,專注去適應卡車更大的車身和更長的剎車距離。如果非要讓他假裝完全沒有駕駛經驗從零練起,那是浪費他已經擁有的知識,學習效率會低很多。

這個遷移學習的思路,後來成了整個深度學習領域處理數據稀缺問題的標準做法之一,不僅僅局限在影片識別上。

這篇論文之後,故事怎麼發展的

雙流網路這個框架提出之後,後續研究基本都是在這個骨架上往前推。

2015 年,Wang 等人發表了 Trajectory-Pooled Deep-Convolutional Descriptors(TDD)方法,把手工設計的軌跡特徵和雙流網路提取出來的深度特徵結合在一起,進一步把 UCF-101 上的準確率往上推了一截。這個工作某種程度上是一種"過渡期"的產物,說明當時研究者還沒有完全放心把手工特徵丟掉,而是想辦法把兩邊的優勢捏合到一起。

更關鍵的後續工作來自 Feichtenhofer、Pinz 和 Wildes 在 2016 年發表的論文,他們提出了一種改進的雙流網路融合方式,把原本在最後階段才融合的兩條流,改成在網路中間層就開始進行資訊交互,讓空間流和時間流能更早地互相"通氣",而不是各自閉門造車到最後一步才合併意見。這個改動讓準確率進一步提升。

再往後,2017 年 Carreira 和 Zisserman(還是同一個 Zisserman)提出了 I3D 網路,把雙流網路的思路和三維卷積結合起來,同時藉助一個新建的大規模影片數據集 Kinetics 做預訓練,進一步把這個方向推向了更強的性能。有意思的是,I3D 依然保留了雙流結構的核心設計,一條流處理原始畫面,一條流處理光流,說明雙流這個基本框架的生命力一直延續了下來,即便具體的網路結構已經換了好幾代。

寫在後面

這篇論文最打動我的地方,其實不是準確率數字本身,而是那個"不硬學,先給線索"的思路。

深度學習給人的一貫印象是,只要數據夠多、網路夠深,它什麼都能自己學出來。這篇論文提醒我們,有些資訊如果你能提前用傳統方法算好再餵給它,效果會好得多,也快得多。這不是對深度學習能力的否定,反而是一種更聰明的配合方式。

光流網路第一層卷積核自己學出方向性濾波器這件事,也讓我想起一個更普遍的現象:好的輸入設計,往往能讓網路的學習變得異常輕鬆,而網路學到的東西,常常會回過頭證明這個輸入設計是對的。這是一種雙向驗證。

一個還沒被這篇論文解決的問題是,光流的計算本身依賴傳統算法,這一步是獨立於神經網路訓練之外的,計算量不小,也沒辦法端到端地聯合優化。如果光流本身也能被神經網路學出來,而不是靠外部算法算好再餵進去,會不會有更好的效果?後來的研究確實往這個方向走了一些,但那是另一個故事了。

Q&A

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

A:雙流卷積網路是 Simonyan 和 Zisserman 在 2014 年提出的影片動作識別方法,它用兩個獨立的卷積神經網路分別處理靜態畫面(空間流)和運動資訊(時間流),再把兩邊的判斷結果融合起來,第一次讓深度學習在影片動作識別任務上超過了手工特徵方法。

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

A:因為動作的關鍵資訊藏在幀與幀之間的運動變化里,網路很難自己從原始像素中學出這種運動模式。光流提前用傳統算法算好了每個像素點的運動方向和速度,相當於把運動資訊直接餵給網路,讓網路不用再費力自己去挖掘運動線索。

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

A:2016 年 Feichtenhofer 等人提出讓空間流和時間流在網路中間層就開始融合,而不是等到最後一步。2017 年 Carreira 和 Zisserman 提出 I3D 網路,結合三維卷積並用 Kinetics 大規模數據集預訓練,依然保留了雙流結構的核心思路。

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