1. 程式人生 > >利用吸收態馬爾科夫鏈進行基於超畫素分割的目標跟蹤【Superpixel-based Tracking-by-Segmentation using Markov Chains】

利用吸收態馬爾科夫鏈進行基於超畫素分割的目標跟蹤【Superpixel-based Tracking-by-Segmentation using Markov Chains】

CVPR2017目標跟蹤領域中的一篇,文章的亮點在於實現了基於分割的跟蹤,博主剛好對這一方向比較感興趣,所以解讀一下文章。

首先介紹一下什麼是 基於分割的跟蹤。一般意義上的目標跟蹤,就是在一個視訊序列中,根據第一幀給出的目標,對目標在後續幀進行跟蹤,傳統的跟蹤方法是用矩形框框出跟蹤目標,如下:

這裡寫圖片描述

而基於分割的跟蹤,在找出目標的同時,還需要對目標進行分割,即找到目標的輪廓:

這裡寫圖片描述

毫無疑問,基於分割的目標跟蹤可以給出更精細的輪廓,提供目標更多的形狀資訊。但是,也比傳統意義上用矩形框進行跟蹤的方法更難實現。

接下來我們看看該文章是如何實現基於分割的目標跟蹤的。

正如文章名一樣,文章主要用了吸收態馬爾科夫鏈(AMC, Absorbing Markov Chain)和超畫素(Superpixel)兩個概念實現了基於分割的跟蹤。
超畫素

可以把畫素級的圖片劃分成區域級的圖片,每個區域內的畫素具有相同的標籤(前景或背景),這樣在之後的分割中只需要對每個區域賦予標籤,可以大大減少計算量。
吸收態馬爾科夫鏈用來對超畫素進行前後景分類。

吸收態馬爾科夫鏈(AMC)

這裡寫圖片描述

如圖,在馬爾可夫鏈中,稱Pii=1的狀態為吸收狀態。如果一個馬爾可夫鏈中至少包含一個吸收狀態,並且從每一個非吸收狀態出發,都可以到達某個吸收狀態,那麼這個馬爾可夫鏈稱為吸收馬爾可夫鏈。
文章中還有矩陣P、Q、R的描述,具體推導可見這一篇部落格:吸收馬爾科夫鏈。在此就不再贅述。

初步瞭解了吸收態馬爾科夫鏈之後,就能對它在本文中的作用有一個認識了:若一副圖片中的超畫素

對應馬爾科夫鏈中的頂點(vertex),相鄰超畫素之間的邊界(edge)對應馬爾科夫鏈中的路徑,那麼一副基於超畫素的圖片就能夠用一個馬爾科夫鏈來表示。如果我們把標籤為背景的超畫素視為吸收態頂點(absorbing vertex)那麼所有超畫素到達吸收態頂點的時間(absorption time)就可以視為它到背景的距離,時間越短,距離越短,說明屬於背景的概率越大,反之則大概率屬於目標

演算法流程

瞭解了馬爾科夫鏈的作用之後,文章大致的思路就出來了:首先,對當前幀t進行超畫素分割;然後,根據t-1幀結果和當前幀建立吸收態馬爾科夫鏈圖(AMC graph);再根據AMC graph算出每個超畫素的吸收時間(absorption time);最後,文中取吸收時間的平均值為閾值,進行超畫素的分類,然後再遞迴到t+1幀。

整個過程中最關鍵最主要的一步在於構建AMC graph。

這裡寫圖片描述

構建AMC graph

AMC graph分為兩個元素,vertex和edge,vertex比較簡單就不做解釋了,主要就是如何求每個edge上的權重(weight)。每個edge的權重由相鄰超畫素特徵的相似度求得。 具有相同標籤的超畫素之間的權重應大於具有不同標籤的超畫素之間的權重。 文中採用支援向量迴歸( support vector regressor)的方法,最大化前景和背景樣本之間的差異,同時最小化具有相同標籤的示例之間的差異。文中有很詳細的數學推導,在此就不列出。

這裡寫圖片描述

跟蹤的實現及細節問題

在文章的第五章節,給出了演算法在實現過程中的三個細節問題,在此簡要介紹一下

1.優化吸收時間

這裡寫圖片描述

文中根據邊緣型別,用不同的係數(πt<πa)乘以原始權重,這使得背景超畫素具有更快的吸收速度,從而與目標的吸收時間相比區分更明顯。

這裡寫圖片描述

2.整體外觀模型

文中說,由上一小節中描述的自下而上方法生成的目標分割掩碼可能由於缺少前景超畫素而被分段,並且包含假陽性超畫素。 為了減輕目標碎片問題,我的理解是,作者在原來相鄰edge的基礎上,還加入了與相鄰的超畫素的鄰居超畫素之間聯通路徑(也就是文中的“2 hops“),等於說增加了區域性資訊。

這裡寫圖片描述

此外,通過不斷更新一個外觀模型ht,使得在有兩個目標區域候選時,可以選擇真實的目標。

這裡寫圖片描述

3.對第一幀的初始分割