視頻中的目標檢測與圖像中的目標檢測具體有什麼區別?


抽空來簡答一下這個問題,恰好也是我們比較關注的一個方向。

簡單來說,視頻檢測是比單張圖片檢測多了Temporal Context(時間上下文)的信息。不同方法想利用這些Context來解決的問題並不相同。一類方法是關注如何使用這部分信息來加速Video Detection。因為相鄰幀之間存在大量冗餘,如果可以通過一些廉價的辦法來加速不損害性能,在實際應用中還是很有意義的。另一類方法是關注這部分信息可以有效減輕單幀圖片檢測中由於運動模糊,物體面積過小導致的困難,從而來提升性能。當然最理想的方法是能又快又好啦:)

當然,這裡有一些很簡單的baseline方法,例如直接使用tracking關聯。這類方法其實並沒有深入到模型本身,一般僅僅局限於後處理步驟,雖然也可以取得一定的結果提升,但是個人覺得並不是很優美。比較關注的是來自以下兩個組的工作吧。

1. CUHK: Xiaogang Wang 這面我了解到的有三篇文章,最開始 (TPAMI Short)是通過Motion的信息以及多類之間的Correlation來對單幀圖像detector的輸出進行後處理,算是在前面提到的Baseline方法上的小改進。後續的文章(CVPR 16)在這個基礎上,引入了一個Temporal CNN對每一個Tubelet進行rescore。這樣通過Temporal的信息來重新評估每個proposal的置信度。最近的工作(CVPR17)將Proposal生成這個步驟,也從靜態圖片拿到了時序上來做。除此之外,對於每個Tubelet的分類,也採取了流行的LSTM。

2. MSRA: Jifeng Dai 相對來講,這面的工作更乾淨,思路更清晰一些。個人來說更喜歡。這面的兩個工作其實思想類似,但是恰好對應於前文提到的加速和性能提升兩個目的。其核心都在於通過快速計算Optical Flow來捕捉視頻中的Motion信息,然後通過這個Flow的信息使用Bilinear Sampling對之前的Feature Map進行Warp(也就是通過Optical Flow來預測當前幀的Feature Map)。有了這樣的信息之後,如果我們想加速,那麼可以直接使用預測的Feature Map來輸出結果;如果想得到更好的結果,可以將預測的Feature Map和當前幀計算出來的Feature Map融合起來一起輸出結果。值得一提的是,後者也是目前唯一一個End to End的Video Detection方法。

另外有一些零碎一些的工作,基本都是在後處理過程中,處理rescore detection的問題,例如Seq-NMS等等。

最後呢,想來拋磚引玉,提出一個我們觀察到在Video Detection中的問題,我們也寫了一篇paper來講這個事情([1611.06467] On The Stability of Video Detection and Tracking) 也就是在Video Detection中的穩定性(Stability)的問題。見下面這個Video,其實兩個Detector如果論準確性來講,差別並不大,然而對於人眼來看,孰優孰劣一目了然。

視頻封面TUD-Stadtmitte.wmvyouku.com視頻

這樣的穩定性的問題,在實際的應用中其實也會帶來很多困擾。例如在自動駕駛中,需要穩定的2D檢測框來進行車輛距離和速度的估計。不穩定的檢測都會極大影響後續任務的準確性。所以呢,我們在文章中首先提出了一個定量的指標來衡量這種穩定性,然後評測了幾種簡單的Baseline。我們還計算了這個Stability指標和常用的Accuracy指標之間的Correlation,發現其實這兩種指標其實相關性並不大,也就是說分別捕捉到了Video Detection中兩方面的一個質量。希望這個工作能給大家一些啟發,在改進準確性之餘,也考慮一下同等重要的穩定性如何改進。

綜上,Video Detection這個問題,不管是從實用性而言,還是從學術研究的角度來說,都是很不錯的題目。在RBG大神和Kaiming大神不斷的工作下,Still Image Detection改進空間越來越少。與其拚命在Still Image下拼那麼0.x個點的mAP,不如退一步,挖掘一些新的設定,會是一篇海闊天空 :-D


@Naiyan Wang 的答案非常棒,點出了核心的區別是:在Video-based Object Detection中,我們可以利用Temporal Context 消除幀率較高時的信息冗餘,還有利用Temporal Context 來補充單幀圖像中的信息不足, 從而實現更好更快的跟蹤。還附帶了兩個對應的最時髦優美的視頻檢測演算法,感覺受益匪淺。

但是還是想從自己的角度解答一下兩者的機理與區別。因為是前兩年在做基於視頻的目標檢測和跟蹤,所用的方法相對於現行的Long Short-Term Memory (LSTM)可能相對老套,但是我覺得題主該是新手,了解一下過去的經典還是有意義的,可以作為 @Naiyan Wang 的前期補充。

研究問題:無論是基於視頻還是圖像,我們研究的核心是目標檢測問題,即在圖像中(或視頻的圖像中)識別出目標,並且實現定位。

基於單幀圖像的目標檢測

在靜態圖像上實現目標檢測,本身是一個滑窗+分類的過程,前者是幫助鎖定目標可能存在的局部區域,後者則是通過分類器打分,判斷鎖定的區域是否有(是)我們要尋找的目標。研究的核心多集中於後者,選什麼樣的特徵表示來描述你鎖定的區域(HOG, C-SIFT, Haar, LBP, CNN, Deformable Part Models (DPM) and etc.),將這些特徵輸入到什麼樣的分類器(SVM,Adaboost and etc.)進行打分,判斷是否是我們要找的目標。

儘管我們要檢測的目標可能外形變化多端(由於品種,形變,光照,角度等等),通過大量數據訓練CNN得到的特徵表示還是能很好地幫助實現識別和判定的過程。但是有些極端情況下,如目標特別小,或者目標和背景太相似,或者在這一幀圖像中因為模糊或者其他原因,目標確實扭曲的不成樣子,CNN也會覺得力不從心,認不出來它原來是我們要找的目標呢。另外一種情況是拍攝場景混入了其他和目標外觀很像的東西 (比如飛機和展翅大鳥),這時候也可能存在誤判。

也就是在這幾種情況下,我們可能無法憑藉單幀的外觀信息,完成對目標魯棒的檢測。

基於視頻的目標檢測

單幀不夠,多幀來湊。在視頻中目標往往具有運動特性,這些特性來源有目標本身的形變,目標本身的運動,以及相機的運動。所以引入多幀之後,我們不僅可以獲得好多幀目標的外觀信息,還能獲得目標在幀間的運動信息。於是就有了以下的方法:

第一種:側重於目標的運動信息。先基於motion segmentation 或是 background extraction(光流法和高斯分布等)實現對前景和背景的分離,也就是說我們藉助運動信息挑出了很有可能是目標的區域;再考慮連續幀里目標的持續性(大小,顏色,軌跡的一致性),可以幫助刪去一部分不合格的候選的目標區域;然後對挑出的區域打分做判斷,還是利用外觀信息(單幀里提到的)。

第二種:動靜結合,即在第一種的基礎上,加入目標的外觀形變。有些目標在視頻中會呈現幅度較大的,有一定規律的形變,比如行人和鳥。這時我們可以通過學習形變規律,總結出目標特殊的運動特徵和行為範式,然後看待檢測的目標是否滿足這樣的行為變化。常見的行為特徵表示有3D descriptors,Markov-based shape dynamics, pose/primtive action-based histogram等等。這種綜合目標靜態和動態信息來判斷是否是特定目標的方法,有些偏向action classification。

第三種:頻域特徵的利用

在基於視頻的目標檢測中,除了可以對目標空間和時間信息進行分析外,目標的頻域信息在檢測過程中也能發揮巨大的作用。比如,在鳥種檢測中,我們可以通過分析翅膀扇動頻率實現鳥種的判別。

值得注意的是這裡基於視頻的目標檢測(video-based detection)存在兩種情況,一種是你只想知道這個場景中有沒有這種目標,如果有,它對應的場景位置是哪; 另一種是這個場景有沒有這種目標,它在每一幀中的位置是哪。我們這裡介紹的方法側重的是後一種更複雜的。

Deep learning 是錢途無量的,也是橫行霸道的。希望視覺特徵建模也能繼續發展,整個計算機視覺研究領域更加多元化,而非被機器學習邊緣化。


圖像中的目標檢測可理解為靜態檢測,視頻中的目標檢測可理解為動態檢測。視頻中的目標檢測可利用幀間信息,對目標運動進行建模預測,提高檢測效率。


如果說視頻檢測的目標也是找到每一幀中一些固定類別的物體,那麼跟圖片檢測幾乎一樣,畢竟圖片就是視頻的一幀。

如果視頻檢測的目標是跟蹤某一個特定物體,那麼我認為還是有一些區別的。如果只是用一種檢測的方法,比如ssd,faster rcnn,這些演算法其實是對類敏感,對類間不敏感,如果你要跟蹤某個特定的人,檢測演算法每幀會找出所有的人。

可能你要說重新針對某一特定目標訓練不就好了,這就是我現在正在做的事情了。最直接的問題就在於給你的只有這個要跟蹤的視頻,一般給出第一幀的目標信息,而檢測演算法的訓練需要大量訓練樣本,怎麼破?


瀉藥。。。

你把視頻單幀拿出來做檢測就是圖像檢測了。視頻檢測相對多了很多信息,一幀中的目標被遮擋還能從前後幾幀的信息中推測出來。

適用於圖像檢測的也能用到視頻單幀中。。。

視頻中的檢測有的會使用連續幾幀來識別。。。

其實就是視頻多了個時間維度。。。


視頻中目標檢測,只是需要做好靜態圖像目標檢測和跟蹤演算法就好了。

已知的一些看似準確厲害的深度學習方法,涉及到RNN,循環之類,實際工程中不可用,資源有限

跟蹤演算法做的好,即便不用上下文信息(其實更多時間都是在處理冗餘信息,有點划不來),也是可以估計出來的。

還有對於穩定性問題,大不了臨時保存之前立了flag的數據特徵做相似性處理,基本也夠用了。

更偏向工程問題;

我的建議就是,不要一上來覺得有時間維度信息,就用。因為問題的難度是平行的


區別就是視頻目標檢測有歷史信息可以用,這個時候我們就可以愉快的應用CNN+LSTM了

如果說YOLO等圖像目標檢測演算法在視頻上簡單的做單幀檢測,性能也很好,那隻能說視頻太過簡單,加入嘈雜背景和遮擋等變數之後就會FAIL


我用SSD演算法來檢測視頻發現效果也挺好的,雖然ssd是用圖片來訓練的,由於速度夠快,魯棒性也可以,作用在視頻上完全沒問題,而且10米左右被一排自行車遮擋的摩托車也能識別出來,簡直令人驚訝;

另外,視頻肯定比單純的圖像多出了時間信息,所以做檢測的時候可以適當考慮時序,預測目標在下一個時間點的位置,可以試一下;


長話短說:

圖片是檢測,視頻是檢測+跟蹤


一個是利用運動信息,一個是利用形狀信息。


輸入:

一個是圖片文件,固定大小,一般是在內存中工作。

視頻則是 流數據,一般不會全部裝在內存中。

輸出:

圖像的目標檢測,有更多的細節:位置,大小,特徵數據等等

視頻 往往只是判斷一種存在性,比如存在煙霧,存在人臉,存在運動物體。

性能要求

顯然,視頻上不能做太大計算量的識別,而圖像就可以揮霍一下計算性能。

視頻的目標檢測是基於圖像的目標檢測。視頻的目標檢測功能,肯定是"圖像的目標檢測"功能的子集。


舉個例子:

圖片中的一個極小的點通常無法與噪點和干擾區分,無法識別。視頻中同樣是一個極小的點,但如果能發現其進行連續的運動,就能將其識別為有價值的目標。

這差不多就是利用了 @Naiyan Wang 說的Temporal Context(時間上下文)。


首先,視頻中目標檢測可以使用上一幀的信息,圖像中就不行。

其次,視頻中目標檢測對於速度要求更高一些


單幀圖像用MeanShift,視頻就可以用CamShift了。

好吧,這是目標跟蹤,跟檢測還是有區別的 :P


所有圖片檢測的演算法對於視頻都適用。除此之外,視頻檢測還可以使用光流法,即利用前後幀圖像之間的關聯性進行檢測。


並沒有什麼區別吧,我是做跟蹤的,跟蹤使用的訓練集和測試集也是使用一幀一幀的圖片,就是視頻轉換過來的,對視頻進行跟蹤的時候也會把視頻轉換為圖片的形式進行跟蹤。這個真的沒什麼大的區別。


就我個人使用來說,SSD基於單張圖片的訓練集訓練後的確在視頻中檢測效果也還不錯,但主要有兩個問題,一是比較遠的小目標不行,另外就是沒考慮到序列信息,其實一個目標在多幀中總有某一幀中被檢測到,但是下一幀中又可能丟失,能否有一種方法有效的利用這些信息,沒找到好的資料。


推薦閱讀:

為什麼SSD(Single Shot MultiBox Detector)對小目標的檢測效果不好?
自知視野不夠開闊,目前的平台也不高,如何確定擅長做什麼?找到什麼樣的目標?
如何評價Google最新的論文NASNet?
有圖像標註工具推薦或者分享嗎?
計算機視覺技術的車輛「檢測」與「識別」是怎麼做的?

TAG:圖像處理 | 目標檢測 | 視頻處理 |