1. 程式人生 > >斯坦福新深度學習系統 NoScope:視頻對象檢測快1000倍

斯坦福新深度學習系統 NoScope:視頻對象檢測快1000倍

這樣的 nvidia 備份 stanford feed 角度 靜態圖 普通 acc

以作備份,來源http://jiasuhui.com/archives/178954

技術分享

本文由“新智元”(微信ID:AI_era)編譯,來源:dawn.cs.stanford.edu,編譯:劉小芹

斯坦福大學的新研究構建一個名為 NoScope 的深度學習視頻對象檢測系統,利用視頻的局部性對 CNN 模型進行優化,相比當前性能最好的 YOLOv2 或 Faster R-CNN 速度加快了1000倍,同時仍保持高精度。這一系統在安防、交通等領域有著巨大的應用價值和潛力。

視頻數據正在爆炸性地增長——僅英國就有超過400萬個CCTV監控攝像頭,用戶每分鐘上傳到 YouTube 上的視頻超過300小時。深度學習的最新進展已經能夠自動分析這些海量的視頻數據,讓我們得以檢索到感興趣的事物,檢測到異常和異常事件,以及篩選出不會有人看的視頻的生命周期。但是,這些深度學習方法在計算上是非常昂貴的:當前 state-of-the-art 的目標檢測方法是在最先進的NVIDIA P100 GPU上以每秒10-80幀的速度運行的。這對單個視頻來說還好,但對於大規模實際部署的視頻來說,這是難以維持的。具體來說,假如用這樣的方法來實時分析英國所有的CCTV監控視頻,僅在硬件上就得花費超過50億美元。

為了解決視頻增長速度與分析成本之間的巨大差距,我們構建了一個名為 NoScope 的系統,與目前的方法相比,它處理視頻內容的速度要快數千倍。我們的主要想法是,視頻是高度冗余的,包含大量的時間局部性(即時間上的相似性)和空間局部性(即場景中的相似性)。為了利用這種局部性,我們設計了用於高效處理視頻輸入任務的 NoScope。通過利用一系列利用視頻局部性的優化,顯著降低了在每個幀上的計算量,同時仍保持常規檢索的高精度。

本文將介紹NoScope優化的一個示例,並描述NoScope如何在模型級聯中端到端地堆疊它們,以獲得倍增的加速——在現實部署的網絡攝像機上可提速1000倍。

一個典型例子

試想一下,我們想檢索下面的監控攝像頭拍攝的視頻,以確定公交車在什麽時候經過臺北的某個交叉路口(例如,用於交通分析):

技術分享技術分享

臺北某個交叉路口的兩個視頻片段

那麽,當前最好的視覺模型是如何處理這個問題的呢?我們可以運行 YOLOv2 或Faster R-CNN 之類的用於對象檢測的卷積神經網絡(CNN),通過在視頻的每個幀上運行CNN來檢測公交車:

技術分享技術分享

使用YOLOv2標記的交叉路口片段

這種方法工作得很好,尤其是如果我們使視頻中出現的標簽流暢的話,那麽問題出現在哪裏呢?就是這些模型非常昂貴。這些模型的運行速度是每秒10-80幀,這對監控單個視頻輸入來說還好,但如果要處理上千個視頻輸入的話,效果並不好。

機會:視頻中的局部性

為了提高檢索的效率,我們應該看視頻內容本身的性質。具體來說,視頻的內容是非常冗余性的。讓我們回到臺北的街道監控視頻,看一下以下一些出現公交車的幀:

技術分享

從這個視頻影像的角度看,這些公交車看起來是非常相似的,我們稱這種局部(locality)形式為場景特定的局部性(scene-specific locality),因為在視頻影像中,對象之間看起來並沒有很大的不同(例如,與另一個角度的攝像頭相比)。

此外,從這個監控視頻中,很容易看出,即使公交車正在移動,每一個幀之間都沒有太大的變化:

技術分享

我們將這種特征稱為時間局部性(temporal locality),因為時間點附近的幀看起來相似,並且包含相似的內容。

NoScope:利用局部性

為了利用上面觀察到的特征,我們構建了一個名為 NoScope 的檢索引擎,可以大大加快視頻分析檢索的速度。給定一個視頻輸入(或一組輸入),一個(或一組)要檢測的對象(例如,“在臺北的監控視頻影像中查找包含公交車的幀”),以及一個目標CNN(例如,YOLOv2),NoScope 輸出的幀與YOLOv2的一致。但是NoScope 比輸入CNN要快許多:它可以在可能的時候運行一系列利用局部性的更便宜的模型,而不是簡單地運行成本更高的目標CNN。下面,我們描述了兩類成本較低的模型:專門針對給定的視頻內容(feed)和要檢測的對象(以利用場景特定局部性)的模型,以及檢測差異(以利用時間局部性)的模型。

這些模型端到端地堆疊,比原來的CNN要快1000倍。

利用場景特定局部性

NoScope 使用專用模型來利用場景特定局部性,或訓練來從特定視頻內容的角度檢測特定對象的快速模型。如今的CNN已經能夠識別各種各樣的物體,例如貓、滑雪板、馬桶等等。但在我們的檢測臺北地區的公交車的任務上,我們不需要關心貓、滑雪板或馬桶。相反,我們可以訓練一個只能從特定角度的監控視頻檢測公交車的模型。

舉個例子,下面的圖像是MS-COCO數據集中的一些樣本,也是我們在檢測中不需要關心的對象。

技術分享

MS-COCO數據集中沒有出現公交車的3個樣本

技術分享

MS-COCO數據集中出現公交車的2個樣本

NoScope 的專用模型也是CNN,但它們比通用的對象檢測CNN更簡單(更淺)。這有什麽作用呢?與YOLOv2的每秒80幀相比,NoScope的專用模型每秒可以運行超過15000幀。我們可以將這些模型作為原始CNN的替代。

使用差異檢測器來利用時間局部性

NoScope 使用差異檢測器(difference detector)或設計來檢測對象變化的快速模型來利用時間局部性。在許多視頻中,標簽(例如“有公交車”,“無公交車”)的變化比幀的變化少很多(例如,一輛公交車出現在幀中長達5秒,而模型以每秒30幀的速度運行)。為了說明,下面是兩個都是150幀長度的視頻,但標簽並不是在每個視頻中都有變化。

技術分享

技術分享

每個視頻都是150幀,標簽一樣,但下邊的視頻沒變過!

相比之下,現在的對象檢測模型是逐幀地運行的,與幀之間的實際變化無關。這樣設計的原因是,像YOLOv2這樣的模型是用靜態圖像訓練的,因此它將視頻視為一系列的圖像。因為NoScope可以訪問特定的視頻流,因此它可以訓練差異檢測模型,這些模型對時間依賴性敏感。NoScope的差異檢測器目前是使用逐幀計算的邏輯回歸模型實現的。這些檢測器在CPU上的運行速度非常快,每秒超過10萬幀。想專用模型一樣,NoScope可以運行這些差異檢測器,而不是調用昂貴的CNN。

把這些模型放到一起

NoScope將專用模型和差異檢測器結合在一起,堆疊在一個級聯中,或堆疊在使計算簡化的一系列模型。如果差異檢測器沒有發生任何變化,那麽NoScope會丟棄這一幀。如果專用模型對其標簽有信心,那麽NoScope會輸出這個標簽。而且,如果面對特別棘手的框架,NoScope 可以隨時返回到完整的CNN。

為了設置這個級聯(cascade)以及每個模型的置信度,NoScope提供了可以在精度和 速度之間折衷的優化器。如果想更快地執行,NoScope將通過端到端級聯傳遞更少的幀。如果想得到更準確的結果,NoSceop 則將提高分類決定的簡化閾值。如下圖所示,最終結果實現了比當前方法快10000倍的加速。

技術分享

技術分享上圖是NoScope的系統圖示;下圖顯示了在一個有代表性的視頻中速度和準確度的相關性。

差異檢測器和專用模型都有助於這一結果。我們先是只使用YOLOv2進行因素分析,然後將每個類型的快速模型添加到級聯中。兩者都是為了實現最大話性能所必需的。

技術分享

NoScope系統的因素分析

總結NoScope的級聯車輛,優化器先在一個特定視頻流中運行較慢的參考模型(YOLOv2,Faster R-CNN等),以獲取標簽。給定這些標簽,NoScope訓練一組專用模型和差異檢測器,並使用一個holdout set來選擇使用哪個特定模型或差異檢測器。最後,NoScope的優化器將訓練好的模型串聯起來,可以在優化模型不確定是調用原始的模型。

結論總結而言,視頻數據非常豐富,但使用現代神經網絡進行檢索的速度非常慢。在NoScope中,我們利用時間局部性,將視頻專用管道中差異檢測和專用CNN相結合,視頻檢索速度比普通CNN檢索提高了1000倍。也就是說,每秒處理的視頻幀數超過8000幀。我們將繼續改進NoScope來支持多類分類,非固定角度監控視頻,以及更復雜的檢索。

斯坦福新深度學習系統 NoScope:視頻對象檢測快1000倍