目標檢測框不穩定不連續?

周見智發表於2021-02-04

在這個大家都在摸魚、熬時間、等年終獎的“空閒時間”(哈哈),我整理了一篇文章,之前已經發過公眾號,有興趣的朋友可以關注一下。

做過基於目標檢測演算法應用的人可能會碰到這樣一個問題:演算法在檢測連續視訊幀時,視訊中同一個目標的檢測框經常出現抖動、有時候目標還出現若干幀檢測不到的情況(漏檢),哪怕整個視訊畫面保持不變,目標就停在原地不動,照樣會出現這個問題。檢測演算法出現這個問題會對後面整個流程產生非常大的負面影響,因為大部分應用會基於前面的檢測輸出結果去做一些具體的業務邏輯,比如測速、軌跡分析。如果檢測輸出框不穩定、不連續,無疑會對整個應用的準確性造成非常大的影響。我將這種問題分為3類:

1、目標檢測框的寬高不穩定。比如一輛車停在原地不動,正常期望的是,不管在哪幀進行檢測,車輛檢測輸出框的寬高應該固定不變,因為車沒挪動。或者說目標從遠到近,檢測框的寬高應該平滑變化,而不是看上去一閃一閃的感覺

2、同理,目標檢測框的位置不穩定。同樣還是一輛車停在原地,車輛檢測輸出框的位置(框中心點座標)應該固定不變。或者從遠到近,檢測框的中心點應該平滑移動,而不是看上去一抖一抖

3、目標停在原地不動,視訊畫面保持不變,該目標應該連續被檢測到,而不會出現若干幀漏檢

下面這個動圖很好的說明了上面提到的問題(來源youtube見末尾連結)

 

在搞清楚如何解決(或者說優化)這個問題之前,我們要先搞清楚為什麼會出現這個現象?目前所有基於CNN的目標檢測演算法,輸入全部都是畫素值,無論做過什麼預處理,原始影像的畫素組成肯定會影響最終的檢測結果。而我們人眼認為的“視訊畫面沒有變化”只是一個錯覺,由於影像採集裝置各種噪音的影響(可能還有光線亮度變化、解碼噪音等等),看似沒有變化的視訊畫面前後兩幀其實從微觀畫素組成上已經發生了很大變化,這些變化對檢測演算法來講無疑是巨大的。如果用同一張圖片組成一個序列,那麼這個序列中的目標檢測框肯定非常穩定(實際上可以做到完全一模一樣),原因很簡單,前後幀的畫面一模一樣、微觀畫素組成也完全一樣,模型的輸出當然也一模一樣了(不考慮解碼噪音)。

好了,現在清楚了問題出現的原因,就要找辦法去解決。可惜的是,目前並沒有辦法徹底解決這個檢測框不穩定/不連續的問題,只有優化該問題的辦法。下面直接列出來:

1、既然微觀上的畫素變化對檢測結果影響巨大,那麼我們儘量充分收集各種場景(比如各種亮度)的素材去訓練模型,最終提升模型的泛化能力。但是這個方法侷限性太大了,有些影像噪音你無法預估;

2、對訓練素材質量進行優化,尤其素材的標註質量。檢查素材gt標註是否規範(比如是否剛好貼近目標輪廓、是否有漏標目標)。原因很簡單,gt框子如果本身都很隨便,有時候大有時候小,對最終檢測框的穩定性影響肯定很大。如果gt漏標嚴重,那麼最終肯定影響模型對目標的檢測判斷;

3、無法在檢測環節解決的,那麼我們就在檢測之後去處理。這裡要提到的就是目標跟蹤演算法,對目標跟蹤不熟悉的童鞋請看前面的舊文章。目標跟蹤主要是將視訊前後幀中的同一目標進行關聯,並且賦予唯一ID。在跟蹤的邏輯中,我們可以做一些軌跡平滑處理、軌跡快取處理,來彌補前面檢測環節的不足。下面這張圖右邊為檢測演算法的原始輸出,左邊為跟蹤結果:

上面3條,我已經在實際工程中證實過2和3有效。下面重點說第3條,也就是目標跟蹤對檢測輸出結果的優化。下面先看一個檢測演算法的原始輸出效果,它只有檢測框:

我們可以看到檢測框抖動嚴重,而且畫面中的行人檢測斷斷續續,演算法無法逐幀都檢測到。這種情況下,我們無法穩定捕捉到行人移動這個動作,所以對應用系統後續的業務邏輯帶來巨大的負面影響。現在我在檢測輸出的基礎上增加目標跟蹤的邏輯之後:

可以看到,不僅行人目標檢測框連續了(ID固定不變),周邊車輛運動也更加平滑,對後續車輛測速邏輯有非常大的幫助。目標檢測框穩定/連續到底對後續業務邏輯有什麼影響?舉個例子,如果應用系統在檢測到行人目標的時候發出告警的閾值是25幀,也就是系統至少要連續檢測到行人目標一秒鐘才認為應該報警。那麼僅僅按照目標檢測的原始輸出結果,該行人目標檢測無法觸發連續25幀的閾值。

 

具體的目標跟蹤演算法可以參考SORT和DeepSort兩種,這倆是非常典型有代表性的跟蹤方式。前者純粹基於目標物理位置進行跟蹤(目標檢測框的大小和位置),後者除了考慮目標物理位置之外,還考慮了目標外觀特徵(Appearance Feature),通過外觀特徵進一步進行匹配關聯,執行速度要比前者慢很多,但是準確性高。在這兩種跟蹤方式中,都用到了卡爾曼濾波,一個作用就是用來做前後幀目標軌跡預測關聯,另一個就是對目標檢測框的平滑處理,讓目標檢測框變化不要那麼突兀。至於若干幀漏檢的問題,這些跟蹤演算法中都有快取機制,當目標偶爾漏檢時,之前賦予的ID並不會馬上清除,而是保留一段時間(幀),後面如果能匹配到新的檢測結果,那麼目標重新被啟用(ID不變)。對跟蹤原理不清楚的童鞋請參考之前的舊文章。

 

參考資料

1、https://arxiv.org/abs/1602.00763

2、http://cs230.stanford.edu/projects_winter_2019/reports/15812427.pdf

3、https://www.youtube.com/watch?v=vGiHciI-NC0

相關文章