周 楊 楊文柱 申 遠(yuǎn)
(河北大學(xué)網(wǎng)絡(luò)空間安全與計(jì)算機(jī)學(xué)院 河北 保定 071000)
人物檢測通常用于檢測圖像中是否存在人目標(biāo),之后再獲取圖像中人目標(biāo)的坐標(biāo)。傳統(tǒng)的方式中,HOG和SVM通常被用于人物檢測,但這非常消耗時間,通常準(zhǔn)確度也不太高。深度卷積神經(jīng)網(wǎng)絡(luò)在模式識別中效果表現(xiàn)非常良好,基于深度卷積神經(jīng)網(wǎng)絡(luò)的人物檢測模型現(xiàn)在變成了主流模型。最近幾年提出了很多新的基于深度卷積神經(jīng)網(wǎng)絡(luò)的模型。Ren等[1]構(gòu)建了用于物體檢測的深度卷積神經(jīng)網(wǎng)絡(luò)Faster R-CNN,其包含兩個平行的子網(wǎng)絡(luò),分別用于生成目標(biāo)框的類置信度和提取這些目標(biāo)框的位置信息。Redmon等[2]提出了一種深度卷積神經(jīng)網(wǎng)絡(luò)——YOLO。YOLO是一個沒有區(qū)域建議部分的網(wǎng)絡(luò)。Liu等[3]提出了SSD網(wǎng)絡(luò),這像是YOLO網(wǎng)絡(luò)和區(qū)域建議網(wǎng)絡(luò)的混合體。Lin等[4]提出了RetinaNet,它使用focal loss來計(jì)算損失值。He等[5]提出了SPP-net,該網(wǎng)絡(luò)把輸入圖像轉(zhuǎn)換成了一個固定大小的圖像。Dai等[6]提出了R-FCN,該網(wǎng)絡(luò)修改并提高了Faster R-CNN的RoI池化部分。在這些網(wǎng)絡(luò)中,YOLOv3是速度最快的一個,而且準(zhǔn)確率很高。YOLOv3使用Darknet-53作為深度卷積神經(jīng)網(wǎng)絡(luò)部分來提取輸入圖像的特征,提取特征并預(yù)測檢測窗口。
YOLOv3使用了傳統(tǒng)的NMS(非極大值抑制)算法[7],該算法可以替換為最新的Soft-NMS[8]來提高準(zhǔn)確率。在YOLOv3的物體檢測過程中,傳統(tǒng)的深度卷積神經(jīng)網(wǎng)絡(luò)會計(jì)算得到很多重復(fù)的目標(biāo)檢測框,NMS是用來消除這些重復(fù)的窗口的。但是傳統(tǒng)的NMS移除了所有的重疊率超過閾值的檢測框,這導(dǎo)致了很多正確預(yù)測的檢測框被移除。盡管Soft-NMS提高了準(zhǔn)確率,但還是有一些正確預(yù)測的檢測框被移除。所以我們加入了取回算法,該算法可以恢復(fù)丟失的目標(biāo)框,從而提高了準(zhǔn)確率。
對于傳統(tǒng)的人物檢測,目標(biāo)物體的特征首先作為模板提取了出來。之后使用不同尺度的滑動窗口用于裁剪圖像。裁剪出的小塊圖像的特征會被提取出來,基于相似度和模板比較來確定它們是否屬于目標(biāo)物體。HOG[9]和SIFT[10]通常用于獲得特征。最后,會使用數(shù)據(jù)集來訓(xùn)練一個支持向量機(jī)來預(yù)測輸入物體是否是一個人。傳統(tǒng)的方式非常消耗時間,所以需要一種更快的方式。
YOLO系列模型是目前最佳人物檢測模型。YOLO有三個版本,是YOLOv1[11]、YOLOv2[12]和YOLOv3。YOLOv1只是簡單地把輸入圖像分成了幾個格,并使用GoogleNet[13]對每個格進(jìn)行檢測框預(yù)測。YOLOv2基于YOLOv1的模型基礎(chǔ)上微調(diào)了分類網(wǎng)絡(luò)。其使用了高分辨率的分類器,并像Faster R-CNN一樣使用錨點(diǎn)。YOLOv2還使用了Darknet-19作為深度卷積神經(jīng)網(wǎng)絡(luò)部分。
YOLOv3使用了Darknet-53作為深度卷積神經(jīng)網(wǎng)絡(luò)部分用于從輸入圖像中提取特征。在使用像MS-COCO[14]這樣的數(shù)據(jù)集來訓(xùn)練之后,就可以提取特征并預(yù)測物體的檢測框了。它會在3個不同的尺度上預(yù)測檢測框,這比較像是一個特征金字塔網(wǎng)絡(luò)[15],這樣YOLOv3就可以識別非常大的或者非常小的物體。在網(wǎng)絡(luò)的結(jié)尾,YOLOv3會得出輸出數(shù)據(jù),輸出數(shù)據(jù)包括4個檢測框的偏移、1個目標(biāo)置信度和80個類置信度。YOLOv3把輸入圖像分成了很多單元,每個單元會預(yù)測幾個檢測框,對于相同的物體會存在很多重復(fù)錯誤預(yù)測的檢測框。NMS算法通常被用于移除這些重復(fù)的檢測框。
由于簡單的結(jié)構(gòu)和Darknet-53的原因,YOLOv3相比于其他基于深度卷積神經(jīng)網(wǎng)絡(luò)的人物檢測模型,運(yùn)行得非???。使用Nvidia的GTX-1080或者Titan-X就可以實(shí)時地檢測人目標(biāo)。所以,它非常適合應(yīng)用在工程中用于滿足日常需要。
NMS是一種貪心算法,應(yīng)用在計(jì)算機(jī)視覺檢測上已經(jīng)很多年了。NMS可以被用于邊緣檢測[16]、特征檢測、人臉檢測[17]和物體檢測。
對于人物檢測,NMS算法會處理YOLOv3深度卷積神經(jīng)網(wǎng)絡(luò)生成的檢測框數(shù)據(jù)。首先,它會通過檢測框的置信度來排序,找出置信度最高的檢測框M。然后再計(jì)算其他更低置信度的檢測框和M的重疊率,并且設(shè)置了一個重疊率閾值來確定檢測框是否應(yīng)該被移除。如果一個檢測框的重疊率大于等于該閾值,它就會被移除出檢測框列表。在這之后,檢測框M會被加入到最終的結(jié)果列表中,第二高置信度的檢測框會成為檢測框M,之后再計(jì)算剩下的更低置信度的檢測框和新的檢測框M的重疊率。這個過程會一直持續(xù)到列表中沒有檢測框?yàn)橹?。NMS算法如算法1所示[8]。
算法1NMS算法
輸出:B={b1,b2,…,bN},S={s1,s2,…,sN},Nt。
B是初始檢測框列表。
S包含了相應(yīng)的檢測數(shù)值。
Nt是NMS閾值。
Begin
D←{}
WhileB≠emptydo
m←argmaxS
M←m
D←D∪M;B←B-M
forbiinBdo
ifiou(M,bi)≥Ntthen
B←B-bi;
S←S-si
end
end
end
returnD,S
end
但是,當(dāng)存在遮擋的時候,就是一個高置信度得分的人被另一個高置信度得分的人遮住,只是通過重疊率來判斷會導(dǎo)致錯誤移除預(yù)測檢測框。如果閾值設(shè)置得太高,會導(dǎo)致重復(fù)檢測框從識別框列表中被移除得太少。如果閾值設(shè)置得太低,一些高置信度的正確檢測框也會被從列表中移除。所以,應(yīng)該改進(jìn)NMS算法來讓其更加高效。
通過使用Soft-NMS和取回算法來改進(jìn)YOLOv3,這樣會恢復(fù)一些錯誤移除掉的檢測框。改進(jìn)的YOLOv3算法如圖1所示。
圖1 改進(jìn)的YOLOv3算法
傳統(tǒng)的NMS只是移除所有的重疊率高于閾值的檢測框。這可能會導(dǎo)致很多正確的檢測框被移除。Soft-NMS對判斷閾值進(jìn)行了修改,盡管Soft-NMS提高了準(zhǔn)確率,依然有一些正確的檢測框被移除。我們添加了取回算法來發(fā)現(xiàn)未檢測的人實(shí)例,并恢復(fù)人實(shí)例對應(yīng)的丟失檢測框,從而進(jìn)一步提升了準(zhǔn)確率。
Boldla等提出了Soft-NMS算法,該算法很像傳統(tǒng)的NMS,但是Soft-NMS沒有立刻移除高重疊率的檢測框。算法降低了重疊率大于等于閾值的檢測框的置信度。
傳統(tǒng)的NMS移除步驟可以描述如下:
(1)
式中:iou(M,bi)是最大置信度的檢測框和剩余檢測框之間的重疊率。式(1)通過比較iou和Nt閾值來給檢測框i的置信度Si重新賦值。
當(dāng)檢測框的重疊率大于等于閾值時,Soft-NMS降低了檢測框的置信度。因?yàn)橐勒誝OLOv3的深度卷積神經(jīng)網(wǎng)絡(luò)的原理,檢測框的重疊率越高,檢測框越有可能是一個重復(fù)的錯誤的檢測框。當(dāng)一些檢測框的重疊率高于閾值時,就需要被移除。但是當(dāng)置信度很高時,這意味著它們更加可能是正確的檢測框,應(yīng)該被保留。所以Soft-NMS保留了重疊率高于閾值的檢測框,但是不至于高到幾乎完全和檢測框M重疊的程度,而且這些保留的檢測框的初始置信度也很高,這樣在被算法降低置信度后依然可以保留。檢測框幾乎完全和檢測框M重疊的會被移除,因?yàn)樗鼈兏赡苁侵貜?fù)的錯誤的檢測框。Soft-NMS的移除標(biāo)準(zhǔn)定義如下:
(2)
式(2)是線性函數(shù),用來降低檢測框的置信度。遠(yuǎn)離檢測框M的檢測框就會較少被影響,或者不會被影響。如果某檢測框離檢測框M非常近或者大部分被檢測框M覆蓋時,其置信度就會被降低非常多。最后,在所有的檢測框置信度被降低后,還使用了另一個閾值來移除錯誤預(yù)測的檢測框。降低這些檢測框的置信度不會移除重復(fù)檢測框,所以在降低置信度后,還需要設(shè)置一個用來過濾低置信度的檢測框的閾值。
相比于傳統(tǒng)的NMS,Soft-NMS對于YOLOv3沒有增加更多的計(jì)算。Soft-NMS的計(jì)算復(fù)雜度是O(N2),與傳統(tǒng)的NMS一樣。N是檢測框的數(shù)量。每個檢測框需要計(jì)算它和最大置信度檢測框的重復(fù)率,所以Soft-NMS的計(jì)算復(fù)雜度是O(N2)。
Soft-NMS對于YOLOv3來說是一個很小的部分。它不會需要對YOLOv3進(jìn)行重新訓(xùn)練,所以集成到Y(jié)OLOv3時不會花費(fèi)太多的時間。
因?yàn)镾oft-NMS也是通過重疊率來判斷是否移除檢測框,所以肯定還存在錯誤移除的被算法漏掉的檢測框。對此,我們可以通過取回算法來取回這些錯誤移除的檢測框。
在取回算法中,我們提取了數(shù)據(jù)集中的人臉圖像的HOG特征,并使用這些特征來訓(xùn)練了一個SVM。使用NMS和一個滑動窗口來從圖像中截取數(shù)據(jù)并提取對比特征,我們就可以檢測人臉了。在改進(jìn)的YOLOv3中,在檢測出所有的人實(shí)例后,還需要檢測出圖像中的所有人臉。
因?yàn)槿宋餀z測框都圍繞在人形狀輪廓之外,所以對應(yīng)人物檢測框的檢出人臉一定是完全在人物檢測框里面。如果有人臉檢測框在所有人物檢測框外面,或者與人物檢測框重疊時,肯定存在一個漏掉的人物檢測框被Soft-NMS算法錯誤地移除。所以所有的被Soft-NMS移除的人物檢測框都會被再次檢查一遍,查找出那個完全覆蓋了該人臉檢測框的人識別框,因?yàn)橛袝r候會發(fā)現(xiàn)好幾個人識別框符合要求,這時候就會找到置信度最高的那個來恢復(fù)。
在圖2中,細(xì)線的檢測框是人物檢測框,粗線檢測框是被Soft-NMS漏掉的檢測框,已經(jīng)被恢復(fù)了回來,虛線的檢測框是檢測到的人臉中沒有被完全包含在人識別框中的人臉檢測框。在圖2(a)中,人臉檢測框明顯和人物檢測框邊界重疊了,所以一定存在被Soft-NMS遺漏的人物檢測框。
(a)
我們在這里會討論如何判斷一個人臉檢測框是否完全在一個人物檢測框里。定義(X1,Y1)是人臉檢測框的右上角的坐標(biāo);(X2,Y2)是人臉檢測框的左下角坐標(biāo);(M1,N1)是人物檢測框的右上角坐標(biāo);(M2,N2)是人物檢測框左下角坐標(biāo)。如果這些點(diǎn)的坐標(biāo)符合如下的條件,人臉檢測框就屬于完全在人物檢測框里面的情況。
M1-X1>0,Y1-N1>0
(3)
X2-M2>0,N2-Y2>0
(4)
如果有一個人臉檢測框在人物檢測框外邊或者與人物檢測框重疊,我們就會搜索查找所有的原始的沒有被Soft-NMS算法刪減的檢測框。計(jì)算它們哪一個完全覆蓋了人臉檢測框,最后找到最高的置信度的那個人物檢測框。之后該人物檢測框就會被取回恢復(fù),所以人物檢測準(zhǔn)確度就會提高。
圖3展示了取回算法的流程。
圖3 取回算法的流程
實(shí)驗(yàn)使用的數(shù)據(jù)集是PASCAL VOC 2007[18]。YOLOv3使用的權(quán)重是官網(wǎng)的作者訓(xùn)練好的權(quán)重,該權(quán)重訓(xùn)練使用的數(shù)據(jù)集是MS-COCO。PASCAL VOC數(shù)據(jù)集的測試部分被用于測試改進(jìn)的YOLOv3的平均精確度。PASCAL VOC測試部分包含了大約5 000幅圖片。
實(shí)驗(yàn)中,我們設(shè)置了NMS重疊閾值為默認(rèn)值0.3,該默認(rèn)值是作者發(fā)現(xiàn)的可以獲得最高準(zhǔn)確率的值。對于Soft-NMS,除了重疊閾值Nt設(shè)置為0.3,還有一個Soft-NMS作者設(shè)置的閾值σ,通過對物體置信度進(jìn)行與該閾值的比對,最終移除錯誤預(yù)測的檢測框,該σ值設(shè)置為0.4。該閾值設(shè)置得太高會移除掉所有的檢測框,設(shè)置得太低也會降低檢測準(zhǔn)確度,因?yàn)闄z測框具有非常高的重疊率時,它就更可能是一個重復(fù)的檢測框。設(shè)置一個低閾值意味著檢測框很少會被移除。在對該閾值嘗試了很多數(shù)值之后,數(shù)據(jù)結(jié)果如圖4所示,當(dāng)設(shè)置為0.4時,得到了最高的準(zhǔn)確率。網(wǎng)絡(luò)的輸入分辨率設(shè)置為了416。在對PASCAL VOC數(shù)據(jù)集進(jìn)行檢測結(jié)束后,我們計(jì)算了檢測的準(zhǔn)確率,使用了傳統(tǒng)的NMS的YOLOv3和使用Soft-NMS和取回算法改進(jìn)的YOLOv3的準(zhǔn)確率如表1所示。
圖4 不同σ值下進(jìn)行人物檢測的準(zhǔn)確率
表1 使用Soft-NMS和取回算法改進(jìn)的YOLOv3的準(zhǔn)確率結(jié)果
可以看出,在使用了Soft-NMS和取回算法后,準(zhǔn)確率提升了3.1百分點(diǎn)。圖5所示的部分實(shí)驗(yàn)結(jié)果證明了Soft-NMS帶來的改進(jìn)。圖5中(a)、(c)、(e)、(g)是使用YOLOv3和Soft-NMS的檢測結(jié)果,(b)、(d)、(f)、(h)是使用YOLOv3和NMS的檢測結(jié)果。圖5(a)和圖5(b)中,上衣上印有PM的女孩被NMS給遺漏了。在圖5(c)和圖5(d)中,紅色上衣的人被遺漏了。在圖5(e)和圖5(f)中,站在后面的女孩被遺漏了。在圖5(g)和圖5(h)中,左半部分中間的人被遺漏了。
由此我們可以看出,使用NMS時,一些人的檢測框由于超過了閾值而被移除。通過使用Soft-NMS,由于其使用了置信度判斷更加合理,NMS中錯誤移除的檢測框可以被保留,提高了最終的檢測精度。
(a)
圖6中,虛線的檢測框是被Soft-NMS漏掉的人物檢測框?qū)?yīng)的人臉檢測框。他們被取回算法恢復(fù)了,檢測框被標(biāo)為了粗線。
(a)
我們比較不同模型消耗的時間,結(jié)果如表2所示。模型和它們的速度通過每秒處理幀數(shù)(Frames Per Second,F(xiàn)PS)來測量。從表2中看到,改進(jìn)的YOLOv3相比其他模型有著最高的速度,同時精確度也被提升了。
表2 人物檢測模型和它們的檢測速度
通過替換NMS為Soft-NMS,加入了取回算法,本文對YOLOv3進(jìn)行了改進(jìn)。通過使用Soft-NMS算法,高置信度的檢測框的置信度被降低了,而不是徹底從最終結(jié)果中移除掉,從而提升了準(zhǔn)確度。Soft-NMS的算法復(fù)雜度與傳統(tǒng)的一樣。取回算法恢復(fù)了Soft-NMS遺漏的檢測框,進(jìn)一步提升了準(zhǔn)確度。
Soft-NMS和取回算法可以被集成到其他未來的人物檢測模型中去來提高性能。它們也可以集成到其他模型中用于人追蹤。關(guān)于取回算法,還有更多可以改進(jìn)的東西。據(jù)我們所知,檢測的人臉檢測框必須完全在人物檢測框中。但是如果有兩個人臉檢測框完全在一個人物檢測框中,一個人臉會被遺漏掉,其所屬的人物檢測框也不會恢復(fù)。為了解決這個問題,YOLOv3的神經(jīng)網(wǎng)絡(luò)可以通過修改輸出結(jié)果為包含人識別框信息和人臉識別框信息,并通過計(jì)算取回算法中的人臉檢測框和修改的YOLOv3中輸出的人臉識別框信息,并設(shè)置一個像NMS的閾值,就可以移除相應(yīng)的人物檢測框。然后遺漏的人臉就不會完全在人物檢測框中,其所屬的人物檢測框就可以恢復(fù),準(zhǔn)確度就可以進(jìn)一步提升。