韓 鵬,沈建新,江俊佳,周 喆
(南京航空航天大學 機電學院,南京 210016)
目標跟蹤是目前計算機視覺的一項基本核心技術,在民用和軍事的許多領域都有廣闊的應用前景.目前,目標跟蹤在智能視頻監控、智能交通[1]、軍事應用、圖像檢索等領域得到了充分的發展.然而,圖像是從三維空間到二維平面的投影,本身丟失了部分信息,而且運動目標不是一個一成不變的信號,它在跟蹤過程中會發生旋轉、位移、縮放、遮擋等復雜變化,都在一定程度上影響目標跟蹤的準確性,增加了目標跟蹤的難度[2].
為了實現有效的目標跟蹤,提高目標跟蹤的魯棒性,卷積神經網絡的算法已經成功應用于目標跟蹤領域.目前常見的算法有R-CNN (Region-based Convolutional Networt)[3]、Fast R-CNN[4]、Faster R-CNN[5]、YOLO (You Only Look Once)[6]、SSD (Single Shot MultiBox Detectoer)[7]等.R-CNN 的基本思想是利用選擇搜索算法(Selective Search) 在圖像中提取可能包含目標候選區域,然后用CNN 提取特征,實現目標跟蹤.但是R-CNN 計算量大,步驟繁瑣,運行緩慢.Fast RCNN 在R-CNN 的基礎上進行了兩點改進,一是在網絡的最后一個卷積層后加了一個ROI (Region of Interest)池化層,二是把目標邊框的回歸和分類這兩個任務的損失函數合在一起訓練,使得訓練的效率更高,運行速度更快.
從R-CNN和Fast R-CNN 以及到后來的Faster RCNN 等一系列算法都是基于候選區域的.而不用候選區域的算法也有很多,比較典型的是基于回歸思想的YOLO和SSD 算法.
這些基于卷積神經網絡的目標跟蹤算法其實更側重于目標物體的檢測,在每一幀圖像中進行滑動窗口進行遍歷,雖然包含了目標所在的所有可能位置,但是缺乏對視頻幀中目標運動信息的連續獲取.傳統的視頻跟蹤算法如Camshift (Continuously Adaptive Meanshift)[8]算法的實時性比較強,但是當場景中出現目標被遮擋時,跟蹤效果受到較大影響,跟蹤目標甚至會丟失.
針對目標被遮擋的問題,本文聯合YOLO和Camshift 的目標跟蹤算法的長處,用YOLO 算法不斷更新目標框,克服目標遮擋的干擾,改進傳統的Camshift 跟蹤算法.
通過圖像增強的方法對視頻的首幀進行預處理,通過YOLO 算法處理圖像增強后的首幀圖像,檢測出目標,利用Camshift 算法對目標框進行跟蹤.
圖像增強的方法有很多,按照不同作用域可分為空域和頻域增強,空域有灰度變換、直方圖均衡化和空域濾波等,頻域增強有高通、低通和同態濾波等[9].由于在目標的檢測跟蹤中,光照會影響圖像的整體觀感,導致目標的部分信息丟失,無法辨認目標等問題,Retinex[10]作為空域增強算法的一種,在動態壓縮、顏色不失真和邊緣增強三個方面達到平衡,所以本文利用Retinex 算法對視頻幀進行自適應的增強.
Retinex 算法將圖像看作是由入射圖像和反射圖像共同構成的,即:

其中,S(x,y)為視頻幀初始的圖像;R(x,y)表示反射分量,即圖像的內在屬性;L(x,y)表示入射分量,決定圖像像素能夠達到的動態范圍.Retinex 的本質就是得到能夠表示圖像內在信息的反射分量,去除入射分量.在計算過程中,將上式取對數來方便計算.

令s=logS,r=logR,l=logL,即:

在Retinex 算法中,利用高斯函數和初始圖像進行卷積來表示入射分量,即:

其中,r(x,y)是輸出圖像,*運算是卷積運算,F(x,y)是中心環繞函數,即:

其中,K是歸一化因子,c是高斯環繞的尺度.Retinex算法中的卷積運算是對入射圖像的計算,通過計算像素點與周圍區域在加權平均的作用下,估計圖像中光照變化,去除L(x,y),保留R(x,y)信息.
使用Retinex 算法對視頻幀進行圖像增強處理,圖1展示了部分圖像經過Retinex 處理前后的對比效果.

圖1 圖像增強前后對比圖
YOLO 檢測算法將目標檢測看作一個單一的回歸問題,直接在圖像中找到目標的邊界框.將圖像輸入卷積神經網絡進行特征提取.不同卷積層的特征圖如圖2所示.

圖2 不同卷積層特征圖
將特征圖輸入檢測網絡進行檢測,判斷目標的類別并提取目標的邊界框,并對邊界框采用非極大抑制進行選取,得到最終的邊界框.YOLO 算法的檢測框架如圖3所示.

圖3 YOLO 檢測框架圖
YOLO 算法將圖像分為S×S的網格,如圖4所示,如果目標的中心落入其中的一個單元格中,該單元格負責檢測目標.

圖4 YOLO 檢測步驟
在每個單元格中,YOLO 會預測B個目標邊界框,每個邊界框包含5 個預測值:x,y,w,h和置信度.如果該單元格中存在目標,置信度分數等于預測框與真實框的交并比,如果該單元格中不存在目標,則置信度分數為零.表達式如下:


YOLO 算法的網絡結構圖如圖5所示,網絡中有24 個卷積層和兩個全連接層,網絡的設計借鑒了Google Net 的思想,在每個1×1 的降維層之后再連接一個3×3的卷積層,來代替Inception 結構[11].由于在目標跟蹤時,只需要判斷是前景還是背景,不需要進行目標類別的判斷,所以可以將全連接層去掉,用Softmax[12]分類器進行簡化,如圖6所示,將最后一層卷積層的輸出作為Softmax 分類器的輸入,將圖像檢測分為前景和背景,將檢測為前景的目標作為候選區域,為下面的目標跟蹤做準備.

圖5 YOLO 算法網絡結構圖

圖6 簡化后YOLO 算法網絡結構圖
本文基于目標的卷積特征,在Camshift 的算法框架下對目標進行檢測跟蹤.首先采用圖像增強的方法對視頻幀進行預處理,然后通過YOLO 算法檢測圖像中的目標,通過非極大抑制確定目標框,再利用Camshift 算法對目標進行跟蹤,確定目標下一次迭代的新位置,為視頻的下一幀選擇候選目標.當目標被遮擋時,使用YOLO 算法對目標進行更新.
Camshift算法,又稱連續自適應均值漂移(Meanshift)算法.它的基本思想是在視頻圖像上的每一幀都做Meanshift 算法,將上一幀的結果(跟蹤窗口的中心和大小)作為當前幀的初始值,依次這樣迭代下去,達到目標跟蹤的效果.
Camshift 算法如圖7所示.

圖7 Camshift 算法流程圖
Camshift 算法進行目標跟蹤,首先提出用HSV 色彩空間中色度分量的直方圖的反向概率投影來作匹配,具體分為下面幾個步驟:(1) 確定初始目標和區域;(2)計算出目標區域的色度分量直方圖;(3)利用直方圖計算輸入圖像的反向投影圖;(4)利用Meanshift 算法在反向投影圖上進行迭代,直到其達到最大迭代次數或者收斂,保存窗口的零階矩、一階矩和二階矩;(5)從第四步中計算出新的窗口中心和大小,以此為初始值,進行下一幀的目標跟蹤(即跳轉至第二步).
Camshift 算法在Meanshift 算法的基礎上,主要是能根據中心位置和窗口大小進行更新,達到跟蹤窗口自適應的目的,具體流程如下:
1) 通過反向投影圖計算初始跟蹤窗口的顏色概率分布I(x,y);
2) 計算跟蹤窗口的零階矩、一階矩和二階矩:

3) 計算中心位置:

4) 計算跟蹤窗口的長度和寬度:

其中,

為了當利用Camshift 算法估計的跟蹤框與運動目標檢測結果偏差值較大時,則利用目標區域的像素值與目標完整的像素值進行比較,并利用目標的速度對目標位置進行預估計,將預估計的結果分別與跟蹤框估計的結果和運動目標檢測的結果相比較,將相近的位置重新定義為運動目標位置.
在Camshift 跟蹤算法中,將估計的跟蹤框區域的像素數目與完整目標的的比值定義為目標遮擋參數.通過這個比值來判斷是否需要用YOLO 算法進行目標檢測,重新確定跟蹤框位置.

式中,It與I0對應第t幀目標區域與完整目標的像素值.當αt=0 時,表示出現完全遮擋.
本文提出聯合YOLO和Camshift 的跟蹤算法,相對于傳統Camshift 算法在跟蹤精度和魯棒性都有較大的提高.算法步驟如下:
1) 初始化.利用YOLO 算法初始化視頻首幀;
2) Camshift 跟蹤.利用Camshift 算法跟蹤目標,同時判斷目標是否發生遮擋現象;
① 有遮擋:若 αt<β,其中β 為遮擋閾值,則認為目標被遮擋.在判斷出目標被遮擋后,考慮目標的速度不是突變的,一般處于勻速運動或者勻加速運動,利用遮擋前的n 幀圖像所跟蹤的位置信息,二次擬合出位置與幀數的變化關系,利用這個關系進行遮擋時的位置預估;在目標再次被檢測出來時,需要用YOLO 算法進行目標更新.
② 無遮擋:若 αt≥β,則認為目標沒有被遮擋,用Camshift 算法繼續跟蹤.
聯合YOLO 算法和Camshift 算法如圖8所示.

圖8 聯合YOLO和Camshift 算法流程圖
實驗硬件平臺是Intel(R) Core(TM) i7-6700HQ 2.60GHz CPU,8GB 內存的PC 機,以Python3.6+OpenCv3.4.2和Tensorflow 框架為開發平臺對本文提出的跟蹤算法進行實現.選用遙控車在無遮擋和有遮擋情況下的視頻進行實驗仿真.視頻幀大小為1280×720,共180 幀,幀率為30 幀/s.實驗跟蹤界面如圖9.

圖9 跟蹤界面
為了直觀比較改進算法的效果,將傳統Camshift算法、KCF(Kernel Correlation Filter)[13]算法和本文聯合YOLO和Camshift 跟蹤算法進行實驗對比,并分別選取部分視頻幀的跟蹤結果進行對比分析.
實驗1:該視頻選取遙控車未被遮擋的情況.背景環境與遙控車的顏色信息相差較大,對跟蹤的干擾小.圖10至圖12分別是遙控車未被遮擋視頻序列的第95、104、109 幀,用矩形框來跟蹤遙控車.傳統Camshift 算法在簡單背景下和未被遮擋時能夠跟蹤遙控車,KCF 算法也能跟蹤遙控車,但是這兩種算法的目標跟蹤結果不準確,跟蹤矩形框選定范圍較大.相較而言,本文聯合YOLO 的Camshift 算法能夠準確地實現遙控車的穩定跟蹤.

圖10 傳統Camshift 算法的跟蹤效果

圖11 KCF 算法的跟蹤效果

圖12 聯合YOLO和Camshift 算法的跟蹤效果
實驗2:該視頻選取遙控車在中途被紙箱遮擋的情況.背景環境依舊與遙控車的顏色信息相差較大,對跟蹤的干擾小.圖13至15 分別是遙控車中途被遮擋視頻序列的第69,89,159 幀,同樣用矩形框來跟蹤遙控車.傳統Camshift 算法在遙控車將要被遮擋時丟失目標,KCF 算法也在遙控車被部分遮擋時丟失目標,而本文聯合YOLO和Camshift 算法能夠準確地實現遙控車的穩定跟蹤.

圖13 傳統Camshift 算法的跟蹤效果

圖14 KCF 算法的跟蹤效果

圖15 聯合YOLO和Camshift 算法的跟蹤效果
傳統Camshift 算法在遙控車有無遮擋兩種情況下目標跟蹤效果如圖10和圖13所示.通過對圖13(b)和圖13(c)的觀察,當遙控車靠近遮擋物時,算法的跟蹤結果不準確,跟蹤框發生了較大的偏移,徹底地丟失遙控車.
KCF 算法在實驗1和實驗2 的效果分別如圖11和圖14所示.在遙控車靠近遮擋物時,如圖14(b)所示,跟蹤效果沒有影響.但當遙控車受到遮擋物干擾時,如圖14(c)所示,跟蹤效果明顯下降,丟失跟蹤目標.
聯合YOLO和Camshift 算法在實驗1和實驗2 的效果分別如圖12和圖15所示.在實驗2 的跟蹤過程中,當遙控車受到部分遮擋(見圖15(c))時,跟蹤窗口仍能基本收斂到遙控車位置,遙控車并沒有丟失,從而證明了本文算法的優越性.
為了進一步驗證聯合YOLO和Camshift 算法在目標被部分遮擋時處理的有效性,從精確度和實時性兩個方面進行量化的結果對比.
在算法的精確度方面,由于遙控車在水平方向運動,中心點Y 軸變化較小,所以只選取中心點X 軸的坐標變化進行定量分析,比較跟蹤結果中每幀圖像中目標的中心點X 軸坐標與手工標記的真實值,以對比算法的跟蹤精度.跟蹤結果與真實值越接近,跟蹤精度越高.
根據實驗1、實驗2 的視頻幀跟蹤結果,選取中心點的X 軸坐標,對3 種算法的精確度進行對比,結果如圖16和圖17所示.通過對比結果可知,傳統的Camshift 算法在目標靠近遮擋物時,即跟蹤框包含了遮擋物,傳統的Camshift 算法失效,如圖17所示,在第90 幀左右線段發生階躍.而KCF 算法在目標大部分被遮擋物遮擋后,也出現了失效的情況,如圖17所示,在第140 幀左右無法準確跟蹤.相較于傳統的Camshift 算法和KCF 算法,聯合YOLO和Camshift 算法在跟蹤目標被遮擋時,其中心點的X 軸坐標誤差始終保持最低水平,即跟蹤窗口能夠跟蹤目標區域,其穩定性和精準度有很好的提高.

圖16 實驗1 下中心點X 軸坐標的對比
在算法的實時性方面,針對實驗2 的視頻幀,在有效跟蹤時間內計算單幀的平均運行時間,將其進行比較,結果如表1所示.
由表1可知,聯合YOLO和Camshift 算法采用了圖像增強和YOLO 檢測,算法耗時主要在于首幀和在目標被遮擋時用YOLO 算法進行目標更新,因此相比于傳統Camshift 算法,其復雜度更高,單幀耗時更長,相對應的運行速度更慢.本文算法在仿真時能夠達到18.5 幀/s 的運行速度,相比于KCF和傳統Camshift 目標跟蹤算法,算法的實時性有待提高,但基本上滿足實時跟蹤的要求.

圖17 實驗2 下中心點X 軸坐標的對比

表1 不同算法單幀平均耗時對比
本文為了解決了傳統目標跟蹤在有遮擋后無法準確跟蹤的問題,提出了一種聯合YOLO和Camshift 的目標跟蹤算法.在傳統Camshift 算法的框架下,使用Retinex 算法對視頻首幀進行預處理,并采用YOLO 算法進行目標框確定,Camshift 進行跟蹤.通過目標檢測對目標進行更新,在部分遮擋的情況下,仍能有效實現目標跟蹤,避免在跟蹤過程中目標丟失的問題,具有更好的抗干擾性和魯棒性.但它的時間復雜度較高,下一步研究的重心是設計更加合理的卷積神經網絡,以適應目標跟蹤任務,提高運行效率.