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