周 楊 楊文柱 申 遠
(河北大學網絡空間安全與計算機學院 河北 保定 071000)
人物檢測通常用于檢測圖像中是否存在人目標,之后再獲取圖像中人目標的坐標。傳統的方式中,HOG和SVM通常被用于人物檢測,但這非常消耗時間,通常準確度也不太高。深度卷積神經網絡在模式識別中效果表現非常良好,基于深度卷積神經網絡的人物檢測模型現在變成了主流模型。最近幾年提出了很多新的基于深度卷積神經網絡的模型。Ren等[1]構建了用于物體檢測的深度卷積神經網絡Faster R-CNN,其包含兩個平行的子網絡,分別用于生成目標框的類置信度和提取這些目標框的位置信息。Redmon等[2]提出了一種深度卷積神經網絡——YOLO。YOLO是一個沒有區域建議部分的網絡。Liu等[3]提出了SSD網絡,這像是YOLO網絡和區域建議網絡的混合體。Lin等[4]提出了RetinaNet,它使用focal loss來計算損失值。He等[5]提出了SPP-net,該網絡把輸入圖像轉換成了一個固定大小的圖像。Dai等[6]提出了R-FCN,該網絡修改并提高了Faster R-CNN的RoI池化部分。在這些網絡中,YOLOv3是速度最快的一個,而且準確率很高。YOLOv3使用Darknet-53作為深度卷積神經網絡部分來提取輸入圖像的特征,提取特征并預測檢測窗口。
YOLOv3使用了傳統的NMS(非極大值抑制)算法[7],該算法可以替換為最新的Soft-NMS[8]來提高準確率。在YOLOv3的物體檢測過程中,傳統的深度卷積神經網絡會計算得到很多重復的目標檢測框,NMS是用來消除這些重復的窗口的。但是傳統的NMS移除了所有的重疊率超過閾值的檢測框,這導致了很多正確預測的檢測框被移除。盡管Soft-NMS提高了準確率,但還是有一些正確預測的檢測框被移除。所以我們加入了取回算法,該算法可以恢復丟失的目標框,從而提高了準確率。
對于傳統的人物檢測,目標物體的特征首先作為模板提取了出來。之后使用不同尺度的滑動窗口用于裁剪圖像。裁剪出的小塊圖像的特征會被提取出來,基于相似度和模板比較來確定它們是否屬于目標物體。HOG[9]和SIFT[10]通常用于獲得特征。最后,會使用數據集來訓練一個支持向量機來預測輸入物體是否是一個人。傳統的方式非常消耗時間,所以需要一種更快的方式。
YOLO系列模型是目前最佳人物檢測模型。YOLO有三個版本,是YOLOv1[11]、YOLOv2[12]和YOLOv3。YOLOv1只是簡單地把輸入圖像分成了幾個格,并使用GoogleNet[13]對每個格進行檢測框預測。YOLOv2基于YOLOv1的模型基礎上微調了分類網絡。其使用了高分辨率的分類器,并像Faster R-CNN一樣使用錨點。YOLOv2還使用了Darknet-19作為深度卷積神經網絡部分。
YOLOv3使用了Darknet-53作為深度卷積神經網絡部分用于從輸入圖像中提取特征。在使用像MS-COCO[14]這樣的數據集來訓練之后,就可以提取特征并預測物體的檢測框了。它會在3個不同的尺度上預測檢測框,這比較像是一個特征金字塔網絡[15],這樣YOLOv3就可以識別非常大的或者非常小的物體。在網絡的結尾,YOLOv3會得出輸出數據,輸出數據包括4個檢測框的偏移、1個目標置信度和80個類置信度。YOLOv3把輸入圖像分成了很多單元,每個單元會預測幾個檢測框,對于相同的物體會存在很多重復錯誤預測的檢測框。NMS算法通常被用于移除這些重復的檢測框。
由于簡單的結構和Darknet-53的原因,YOLOv3相比于其他基于深度卷積神經網絡的人物檢測模型,運行得非常快。使用Nvidia的GTX-1080或者Titan-X就可以實時地檢測人目標。所以,它非常適合應用在工程中用于滿足日常需要。
NMS是一種貪心算法,應用在計算機視覺檢測上已經很多年了。NMS可以被用于邊緣檢測[16]、特征檢測、人臉檢測[17]和物體檢測。
對于人物檢測,NMS算法會處理YOLOv3深度卷積神經網絡生成的檢測框數據。首先,它會通過檢測框的置信度來排序,找出置信度最高的檢測框M。然后再計算其他更低置信度的檢測框和M的重疊率,并且設置了一個重疊率閾值來確定檢測框是否應該被移除。如果一個檢測框的重疊率大于等于該閾值,它就會被移除出檢測框列表。在這之后,檢測框M會被加入到最終的結果列表中,第二高置信度的檢測框會成為檢測框M,之后再計算剩下的更低置信度的檢測框和新的檢測框M的重疊率。這個過程會一直持續到列表中沒有檢測框為止。NMS算法如算法1所示[8]。
算法1NMS算法
輸出:B={b1,b2,…,bN},S={s1,s2,…,sN},Nt。
B是初始檢測框列表。
S包含了相應的檢測數值。
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
但是,當存在遮擋的時候,就是一個高置信度得分的人被另一個高置信度得分的人遮住,只是通過重疊率來判斷會導致錯誤移除預測檢測框。如果閾值設置得太高,會導致重復檢測框從識別框列表中被移除得太少。如果閾值設置得太低,一些高置信度的正確檢測框也會被從列表中移除。所以,應該改進NMS算法來讓其更加高效。
通過使用Soft-NMS和取回算法來改進YOLOv3,這樣會恢復一些錯誤移除掉的檢測框。改進的YOLOv3算法如圖1所示。

圖1 改進的YOLOv3算法
傳統的NMS只是移除所有的重疊率高于閾值的檢測框。這可能會導致很多正確的檢測框被移除。Soft-NMS對判斷閾值進行了修改,盡管Soft-NMS提高了準確率,依然有一些正確的檢測框被移除。我們添加了取回算法來發現未檢測的人實例,并恢復人實例對應的丟失檢測框,從而進一步提升了準確率。
Boldla等提出了Soft-NMS算法,該算法很像傳統的NMS,但是Soft-NMS沒有立刻移除高重疊率的檢測框。算法降低了重疊率大于等于閾值的檢測框的置信度。
傳統的NMS移除步驟可以描述如下:
(1)
式中:iou(M,bi)是最大置信度的檢測框和剩余檢測框之間的重疊率。式(1)通過比較iou和Nt閾值來給檢測框i的置信度Si重新賦值。
當檢測框的重疊率大于等于閾值時,Soft-NMS降低了檢測框的置信度。因為依照YOLOv3的深度卷積神經網絡的原理,檢測框的重疊率越高,檢測框越有可能是一個重復的錯誤的檢測框。當一些檢測框的重疊率高于閾值時,就需要被移除。但是當置信度很高時,這意味著它們更加可能是正確的檢測框,應該被保留。所以Soft-NMS保留了重疊率高于閾值的檢測框,但是不至于高到幾乎完全和檢測框M重疊的程度,而且這些保留的檢測框的初始置信度也很高,這樣在被算法降低置信度后依然可以保留。檢測框幾乎完全和檢測框M重疊的會被移除,因為它們更可能是重復的錯誤的檢測框。Soft-NMS的移除標準定義如下:
(2)
式(2)是線性函數,用來降低檢測框的置信度。遠離檢測框M的檢測框就會較少被影響,或者不會被影響。如果某檢測框離檢測框M非常近或者大部分被檢測框M覆蓋時,其置信度就會被降低非常多。最后,在所有的檢測框置信度被降低后,還使用了另一個閾值來移除錯誤預測的檢測框。降低這些檢測框的置信度不會移除重復檢測框,所以在降低置信度后,還需要設置一個用來過濾低置信度的檢測框的閾值。
相比于傳統的NMS,Soft-NMS對于YOLOv3沒有增加更多的計算。Soft-NMS的計算復雜度是O(N2),與傳統的NMS一樣。N是檢測框的數量。每個檢測框需要計算它和最大置信度檢測框的重復率,所以Soft-NMS的計算復雜度是O(N2)。
Soft-NMS對于YOLOv3來說是一個很小的部分。它不會需要對YOLOv3進行重新訓練,所以集成到YOLOv3時不會花費太多的時間。
因為Soft-NMS也是通過重疊率來判斷是否移除檢測框,所以肯定還存在錯誤移除的被算法漏掉的檢測框。對此,我們可以通過取回算法來取回這些錯誤移除的檢測框。
在取回算法中,我們提取了數據集中的人臉圖像的HOG特征,并使用這些特征來訓練了一個SVM。使用NMS和一個滑動窗口來從圖像中截取數據并提取對比特征,我們就可以檢測人臉了。在改進的YOLOv3中,在檢測出所有的人實例后,還需要檢測出圖像中的所有人臉。
因為人物檢測框都圍繞在人形狀輪廓之外,所以對應人物檢測框的檢出人臉一定是完全在人物檢測框里面。如果有人臉檢測框在所有人物檢測框外面,或者與人物檢測框重疊時,肯定存在一個漏掉的人物檢測框被Soft-NMS算法錯誤地移除。所以所有的被Soft-NMS移除的人物檢測框都會被再次檢查一遍,查找出那個完全覆蓋了該人臉檢測框的人識別框,因為有時候會發現好幾個人識別框符合要求,這時候就會找到置信度最高的那個來恢復。
在圖2中,細線的檢測框是人物檢測框,粗線檢測框是被Soft-NMS漏掉的檢測框,已經被恢復了回來,虛線的檢測框是檢測到的人臉中沒有被完全包含在人識別框中的人臉檢測框。在圖2(a)中,人臉檢測框明顯和人物檢測框邊界重疊了,所以一定存在被Soft-NMS遺漏的人物檢測框。

(a)
我們在這里會討論如何判斷一個人臉檢測框是否完全在一個人物檢測框里。定義(X1,Y1)是人臉檢測框的右上角的坐標;(X2,Y2)是人臉檢測框的左下角坐標;(M1,N1)是人物檢測框的右上角坐標;(M2,N2)是人物檢測框左下角坐標。如果這些點的坐標符合如下的條件,人臉檢測框就屬于完全在人物檢測框里面的情況。
M1-X1>0,Y1-N1>0
(3)
X2-M2>0,N2-Y2>0
(4)
如果有一個人臉檢測框在人物檢測框外邊或者與人物檢測框重疊,我們就會搜索查找所有的原始的沒有被Soft-NMS算法刪減的檢測框。計算它們哪一個完全覆蓋了人臉檢測框,最后找到最高的置信度的那個人物檢測框。之后該人物檢測框就會被取回恢復,所以人物檢測準確度就會提高。
圖3展示了取回算法的流程。

圖3 取回算法的流程
實驗使用的數據集是PASCAL VOC 2007[18]。YOLOv3使用的權重是官網的作者訓練好的權重,該權重訓練使用的數據集是MS-COCO。PASCAL VOC數據集的測試部分被用于測試改進的YOLOv3的平均精確度。PASCAL VOC測試部分包含了大約5 000幅圖片。
實驗中,我們設置了NMS重疊閾值為默認值0.3,該默認值是作者發現的可以獲得最高準確率的值。對于Soft-NMS,除了重疊閾值Nt設置為0.3,還有一個Soft-NMS作者設置的閾值σ,通過對物體置信度進行與該閾值的比對,最終移除錯誤預測的檢測框,該σ值設置為0.4。該閾值設置得太高會移除掉所有的檢測框,設置得太低也會降低檢測準確度,因為檢測框具有非常高的重疊率時,它就更可能是一個重復的檢測框。設置一個低閾值意味著檢測框很少會被移除。在對該閾值嘗試了很多數值之后,數據結果如圖4所示,當設置為0.4時,得到了最高的準確率。網絡的輸入分辨率設置為了416。在對PASCAL VOC數據集進行檢測結束后,我們計算了檢測的準確率,使用了傳統的NMS的YOLOv3和使用Soft-NMS和取回算法改進的YOLOv3的準確率如表1所示。

圖4 不同σ值下進行人物檢測的準確率

表1 使用Soft-NMS和取回算法改進的YOLOv3的準確率結果
可以看出,在使用了Soft-NMS和取回算法后,準確率提升了3.1百分點。圖5所示的部分實驗結果證明了Soft-NMS帶來的改進。圖5中(a)、(c)、(e)、(g)是使用YOLOv3和Soft-NMS的檢測結果,(b)、(d)、(f)、(h)是使用YOLOv3和NMS的檢測結果。圖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漏掉的人物檢測框對應的人臉檢測框。他們被取回算法恢復了,檢測框被標為了粗線。

(a)
我們比較不同模型消耗的時間,結果如表2所示。模型和它們的速度通過每秒處理幀數(Frames Per Second,FPS)來測量。從表2中看到,改進的YOLOv3相比其他模型有著最高的速度,同時精確度也被提升了。

表2 人物檢測模型和它們的檢測速度
通過替換NMS為Soft-NMS,加入了取回算法,本文對YOLOv3進行了改進。通過使用Soft-NMS算法,高置信度的檢測框的置信度被降低了,而不是徹底從最終結果中移除掉,從而提升了準確度。Soft-NMS的算法復雜度與傳統的一樣。取回算法恢復了Soft-NMS遺漏的檢測框,進一步提升了準確度。
Soft-NMS和取回算法可以被集成到其他未來的人物檢測模型中去來提高性能。它們也可以集成到其他模型中用于人追蹤。關于取回算法,還有更多可以改進的東西。據我們所知,檢測的人臉檢測框必須完全在人物檢測框中。但是如果有兩個人臉檢測框完全在一個人物檢測框中,一個人臉會被遺漏掉,其所屬的人物檢測框也不會恢復。為了解決這個問題,YOLOv3的神經網絡可以通過修改輸出結果為包含人識別框信息和人臉識別框信息,并通過計算取回算法中的人臉檢測框和修改的YOLOv3中輸出的人臉識別框信息,并設置一個像NMS的閾值,就可以移除相應的人物檢測框。然后遺漏的人臉就不會完全在人物檢測框中,其所屬的人物檢測框就可以恢復,準確度就可以進一步提升。