李士驥,李忠民,李威
(南昌航空大學 信息工程學院,江西 南昌 330063)
背景提取是一種目標檢測算法,其準確性、實時性和魯棒性較好[1]。ViBe 算法[2]是背景提取算法中的一種像素級的前景檢測算法,這種算法檢測迅速、檢測精度優(yōu)異。雖然這種算法的性能十分優(yōu)異,但其仍具有不足之處。比如,算法所存在的鬼影問題就是影響算法性能的最主要原因之一。所謂鬼影,是指在沒有運動目標的區(qū)域中被錯誤檢測出的前景區(qū)域,也就是不真實的前景[3]。
對于如何解決鬼影的問題,許多學者提出的解決措施中,主要包含兩種處理方式:一是對背景模型初始化作出改進。比如,文獻[4]使用多幀圖像進行背景模型的初始化。文獻[5]將最大類間方差法(OTSU)[6]引入到幀間差分法中,把前面幾幀圖片加以適當?shù)奶幚?,組成一張背景樣本圖像,以這幅圖片為依據(jù)來創(chuàng)建初始的背景模型。文獻[7]用視頻的前25 幀圖像中的像素點及其它鄰域的像素點中的像素值來初始化背景模型。此方法的背景模型初始化需要通過多幀圖像來建立,而這會大大降低背景模型的初始化速度。但同時,此方法無法處理因背景突變而產(chǎn)生的鬼影現(xiàn)象。第二種處理方式是在前景檢測的過程中對鬼影進行識別,若識別出鬼影,則將其視為背景。比如,文獻[8]比較了前景目標與相鄰背景像素的直方圖,根據(jù)直方圖的不同來辨別鬼影區(qū)域。文獻[9]通過分析前景的像素值來進行鬼影的消除。然而這種算法對速度慢并且顏色單調(diào)的目標的檢測敏感性不高,容易將其誤判為鬼影,并且算法較為復雜,無法確保實時性。
綜上所述,當前消除鬼影的方法都具有一定的不足。為了解決鬼影問題,本文提出了一種基于改進的ViBe 和YOLO v3 算法的行人檢測方法。算法采用YOLO v3-SPP 對首幀中的行人進行檢測,將檢測出的行人消除后,將輸出的圖像作為ViBe 算法的首幀,從而解決鬼影問題。
ViBe 算法為每一個像素點都創(chuàng)建了一個背景樣本模型,通過比較當前幀與背景模型中相對應位置的像素值,并由預設(shè)的閾值將其定為背景點或前景點。一旦像素被確認為背景點,則隨機更新其背景模型里的一個樣本值。同時基于空間一致性原則,將其鄰域像素背景模型中的一個樣本值進行隨機更新。ViBe 算法主要由3 部分組成,即背景建模、前景檢測和背景模型的更新。
1)背景建模
背景模型是背景樣本的集合。在背景模型的初始化過程中,從一幀圖像每個像素的八鄰域中隨機選擇N個像素的灰度值存放到背景模型樣本中。背景模型也可以描述為:
式中:M(x)為背景樣本;vi表示背景模型樣本中的像素值;N表示樣本的大小。
2)前景檢測
將當前的像素值與背景模型中同一位置像素的樣本作比較來判定當前像素點是否為前景。如圖1 所示,v(x)為當前幀圖像中的像素x的像素值;C1與C2組成了二維的色彩空間(C1,C2);SR(v(x))是以v(x)作為圓心的圓形區(qū)域,R是此區(qū)域的半徑;v(x)與背景樣本模型之間的相似程度由SR(v(x))所包含的M(x)的樣本數(shù)M來描述。當M大于或者等于設(shè)定的閾值時,判定v(x)為背景;當M小于設(shè)定的閾值時,判定v(x)為前景。
圖1 當前幀像素值與樣本值在二維色彩空間的比較Fig.1 Comparison of current frame pixel value and sample value in two-dimensional color space
3)背景模型的更新
本文中,ViBe 算法的背景模型更新方法使用了隨機更新策略。設(shè)定抽樣因子為λ。假設(shè)第二步前景檢測過程后,算法判定當前像素點為背景像素點,那么它會有1/λ的概率更新其在背景模型中的樣本值,并將隨機替換樣本模型中的一個樣本。每一個樣本經(jīng)過時間Δt仍被保存的概率可以描述為:
該過程將有助于確保樣本生命周期的平滑。基于圖像空間的一致性原則,該算法可以通過相同的方式與概率隨機選取八鄰域中的一個像素來更新其背景模型。
YOLO v3 借鑒了在Faster R-CNN 中提到的錨框(Anchor box)機制[10]。為了增強檢測的精度,采用K均值聚類算法得出邊框的尺寸,從而獲得合適的錨框[11]。同時,采用特征金字塔網(wǎng)絡(luò)(feature pyramid networks,F(xiàn)PN)來實現(xiàn)多尺度預測[12],檢測時可以應對不同尺寸的物體,因此能夠大大提高對精細物體的識別能力。YOLO v3 結(jié)合了錨框和特征金字塔網(wǎng)絡(luò)的思想,每個網(wǎng)格可以預測3 個預測框,并選擇具有最優(yōu)交并比(IoU)的錨框作處理后作為輸出的預測框。
YOLO v3 使用Darknet53 網(wǎng)絡(luò)為主干,舍棄了最大池化層,采用步長為2 的卷積層作為代替。
由于YOLO v3 算法在行人遮擋檢測上的漏檢率較高,不利于對圖像進行特定的處理,所以對網(wǎng)絡(luò)結(jié)構(gòu)進行改進以增加算法的準確率與檢測精度。
YOLO v3-SPP 是提出的YOLO v3 算法的增強網(wǎng)絡(luò)。與YOLO v3 不同的是,它在網(wǎng)絡(luò)的YOLO 層前增加了一個SPP層,并為了避免過擬合而進行多尺度訓練,從而能夠增加檢測精度(在COCO 公共數(shù)據(jù)集上)。
SPP 層的基本構(gòu)造如圖2 所示。利用5×5,9×9 與13×13 這3 個最大池化層對特征圖進行池化,再連接起池化后的特征圖,并將其傳輸?shù)较乱粚泳W(wǎng)絡(luò)中[13]。
圖2 SPP 層結(jié)構(gòu)Fig.2 SPP layer structure
加入SPP 層的YOLO v3 算法(YOLO v3-SPP)的結(jié)構(gòu)如圖3 所示。
圖3 YOLO v3-SPP 結(jié)構(gòu)Fig.3 YOLO v3-SPP structure
ViBe 算法為了提升初始化的速度,通過只處理視頻圖像的首幀來對背景樣本模型作初始化。但是這種措施存在著不足,當待檢測的運動前景存在于首幀時,會使后續(xù)檢測中出現(xiàn)鬼影。如圖4 所示。
圖4 鬼影問題展示Fig.4 Ghost problem display
因為鬼影產(chǎn)生的原因是第一幀中出現(xiàn)了運動目標,所以利用YOLO v3-SPP 算法本身對靜止行人目標的檢測優(yōu)勢,在進行背景初始化之前,對首幀圖像進行行人檢測。檢測出行人后,將檢測出的行人進行消除,從而避免鬼影的產(chǎn)生。
基于YOLO v3 SPP 的改進ViBe 算法框圖如圖5所示。
本文使用PASCAL VOC2012 數(shù)據(jù)集對YOLO v3-SPP 網(wǎng)絡(luò)進行訓練后得到權(quán)重文件。在輸入待檢測的視頻后,對首幀作處理。利用訓練好的權(quán)重文件進行行人檢測。整幅首幀圖像可以分為兩部分,即前景部分與背景部分。針對背景部分的像素點,與傳統(tǒng)算法的背景初始化步驟一致。針對前景部分的像素點,采用以下的行人消除方法對行人進行消除。具體步驟如下:
1)將每個檢測出的行人,分為6 個部分。如圖6所示。
圖6 分成六部分的行人Fig.6 Pedestrians divided into six parts
2)如果檢測出的行人不在圖像的邊界處,則用行人周圍的像素來代替圖6 中各方框內(nèi)的像素值。代替規(guī)則如下:
①和②分別用各自上方的像素值來代替。③和④用各自兩邊的像素值來代替。
⑤和⑥分別用各自下方的像素值來代替。
3)如果檢測出的行人在圖像的邊界處,則基于2)中的規(guī)則,做出適當?shù)恼{(diào)整。具體調(diào)整如圖7 所示。
像素代替方法的總流程圖如圖7 所示。
圖7 像素代替方法的總流程Fig.7 General flow chart of pixel replacement method
用這種方法可以將首幀中的行人進行消除。行人消除的效果如圖8 所示。
圖8 行人消除的效果Fig.8 Effect of pedestrian elimination
用處理好的首幀圖像進行初始化背景建模,再用ViBe 檢測行人,對鬼影的消除效果如圖9 所示。
圖9 鬼影消除的效果Fig.9 Results of ghost elimination
可見,本文算法可以有效地解決鬼影問題,并改善算法的檢測性能。
根據(jù)以上的算法描述,選擇PETS2006[14]測試視頻來進行實驗驗證。實驗環(huán)境和參數(shù)如下:Windows 10 系統(tǒng),AMD Ryzen 5 2600X Six-Core Processor CPU,3.60 GHz 主頻,16.0 G RAM,Python 3.7。背景模型建立參數(shù)N=20,R=20。N為背景樣本的容量,R為顏色距離判定閾值。
本文將提出的算法和ViBe 算法、三幀差分法[15](three-frame differential method,TFDM)、高斯混合模型[16](Gaussian mixture model,GMM)算法進行對比測試。三幀差分法是一種對視頻中連續(xù)3 幀圖像進行差分運算來檢測運動目標的方法,這種方法的優(yōu)點是計算量小,實時性較好。GMM 算法是有限個單一高斯分布的加權(quán)和,能反映各個像素點不同的分布情況。
測試視頻的檢測效果如圖10 所示,第1 行分別是測試視頻中第534 幀、第564 幀和第583 幀的原始圖像。第2 行是傳統(tǒng)ViBe 算法對這3 幀原始圖像的檢測效果,可以清楚地看到用這種方法檢測后所產(chǎn)生的鬼影;第3 行是使用三幀差分法(TFDM)對這3幀原始圖像的檢測效果,能夠看出這種方法只能檢測出運動物體的輪廓信息,而當物體運動比較快時,輪廓的部分信息也會丟失。第4 行是高斯混合模型(GMM)算法對3 幀原始圖像的檢測效果,可以看到,這種方法檢測出的前景會出現(xiàn)部分缺失和空洞的現(xiàn)象。第5 行是本文所提出的算法,可以看出,本文所提出的算法可以有效地解決鬼影問題,并且檢測出的運動目標完整無空洞。
圖10 PETS2006 視頻檢測效果:(a)(b)(c)原始圖像;(d)(e)(f)ViBe 算法;(g)(h)(i)三幀差分法;(j)(k)(l)高斯混合模型算法;(m)(n)(o)本文算法Fig.10 PETS2006 video detection effect: (a)(b)(c) Original image;(d)(e)(f) ViBe algorithm;(g)(h)(i) Three-frame difference method;(j)(k)(l) Gaussian mixture model algorithm;(m)(n)(o) The algorithm in our paper
采用文獻[17]中提出的方法對本文提出的算法進行定量評價。使用精確率(Precision)、召回率(Recall)以及F1 分數(shù)(F1-score)等指標,可以描述為:
式中:TP 與TN 分別為檢測正確的前景像素與背景像素的數(shù)量;FP 與FN 分別檢測錯誤的前景像素與背景像素的數(shù)量。一般來說,精確率與召回率越高,查準率和查全率就越高,算法性能就越好;F1 分數(shù)則為前兩者的調(diào)和平均,F(xiàn)1 分數(shù)的值越大,算法的綜合性能越強。表1 為對實驗結(jié)果做出的對比評價,其中frame per second 指的是每秒處理的幀數(shù),每秒處理的幀數(shù)越多,算法的實時性能就越強。可見,雖然三幀差分法的實時性較強,但其精確率明顯低于本文提出的算法,而本文提出的算法在精確率、召回率和F1 分數(shù)上均高于其他3 種算法,綜合性能最強。
表1 實驗結(jié)果評價Table 1 Evaluation of experimental results
本文首先對背景提取技術(shù)和ViBe 算法的優(yōu)點與缺點做了總體上的描述,并對一些當前的改進ViBe 算法作出了介紹,然后詳細介紹了ViBe 算法的原理與YOLO v3-SPP 的結(jié)構(gòu),并在此基礎(chǔ)上提出了一種基于YOLO v3-SPP 的改進ViBe 算法以解決傳統(tǒng)ViBe 算法中的鬼影問題。改進算法利用YOLO v3-SPP 對靜止行人的檢測能力來改進ViBe 算法本身的背景初始化策略,對檢測出的行人進行了消除,從而解決了傳統(tǒng)ViBe 算法由于首幀出現(xiàn)行人而產(chǎn)生的鬼影問題。本文選擇在PETS2006 數(shù)據(jù)集下對所提出算法的性能與傳統(tǒng)算法、三幀差分法和高斯混合模型算法進行比較測試。經(jīng)比較后的實驗測試結(jié)果表明,本文算法能夠有效地解決傳統(tǒng)ViBe 算法的鬼影問題,且檢測效果得到提升。