賈敘文 劉慶華 劉東華 李楊 黃凱楓
(江蘇科技大學 鎮江 212003)
行人檢測是計算機視覺中的一個重要命題,有著悠久的發展歷史。其中比較經典的算法有NAVNEET D 等提出的梯度直方圖特征(Histogram of oriented gradient,HOG)的特征描述法再加支持向量機進行行人檢測[1],這使得行人檢測在計算機視覺領域獲得重大突破,之后此方法獲得進一步改進,出現了可變形部件模型(Deformable part models,DPM)方法、聚合通道特征(Aggregation channel feature,ACF)方法等,此類方法雖然在發展過程中解決了部分問題,如局部遮擋等,但其缺點也是尤為突出,需要大量人工設置的參數,這導致這類算法很大程度只能應用到一些固定的場景環境當中。隨著神經網絡、深度學習不斷應用到圖像識別和目標檢測當中,人們找到了另外的行人檢測思路。目前深度學習中的目標檢測可以大致分為兩大類,一類是以Faster R-CNN[2]這類為代表的目標區域建議的目標檢測算法;另一類是YOLOv3[3]這類基于回歸算法為代表的算法,比較常見出名的有SSD[4]、RetinaNet[5]等算法。前者的這類算法具有較好的精確度,但需要大量的計算機資源,后者主要用于實時檢測,但檢測性能還是存在很大的改進潛力。而本文通過對Faster R-CNN 和Cascada R-CNN[6]的學習研究,改進了原有Cascada R-CNN模型,本文稱之為改進型Cascada R-CNN 算法模型。
Cascada R-CNN 算法本身是以Faster R-CNN為基礎多次優化算法,其可以解決因IoU 值的設置問題而導致出現小樣本訓練時的mismatch 等問題。Faster R-CNN 的傳統做法是將IoU 值設置為0.5 以兼顧準確性和mismatch 和過擬合等問題,為此Zhao-wei等[7]還設計出了muti-stage 的結構,用來在不同的階段設置不同的IoU 值,也就是通過級聯的方式逐級提高IoU 值,以此來提高檢測的準確性。這種方式的本質就是前一個階段的輸出作為后一個階段的輸入,在這個過程中IoU 值逐級提高,這樣的好處是在小樣本情況下可以有效的防止過擬合現象并提高檢測的準確性。IoU值級聯回歸問題構架公式[8]為

其中T為級聯階段數,ft為預優化的項,x表示本階段你輸入的圖片,b表示本階段圖片對應的檢測框。Cascada R-CNN 模型的實現過程就是對Faster R-CNN 實現多聯級的擴展。Cascada R-CNN 模型是由一個用于生成候選區的RPN 階段和三個檢測階段組成,本文改進型Cascada R-CNN 的結構如圖1,其IoU分別設置為0.5,0.6和0.7。其流程大致可以理解為H0 對輸入圖片進行處理產生候選區RPN,之后的階段對第一階段的RPN進行處理完成分類和邊框模塊選擇。原來的Cascada R-CNN 模型還存在一些問題,比如用于行人檢測時對小尺度行人檢測會導致誤測,檢測準確率低,其模型的候選框是對多類目標進行檢測,而本文的目標只是讓其對行人目標作出準確的檢測和識別,在此基礎上能夠達到快速準確的檢測結果,所以本文就此對模型可以提高的地方進行了改進。

圖1 改進型的Cascada R-CNN模型
通過對Cascada R-CNN 模型網絡結構的學習了解,本文是以改進整個網絡中的幾個模塊網絡來提升Cascada R-CNN 模型的整體性能,在第一個共享卷積層時本文改進了原本的VGG16 網絡,在對原本的RPN 分析了原本的一些問題原因,針對這些問題尤其是小尺度行人檢測作出了一些改進方法,具體分析如下文。
Shared convolution 層使用的是VGG16[9]網絡,而VGG16 網絡是由5 個最大池化層、3 個全連接層、13 個卷積層組成的網絡結構,這樣的結構中就可以引入SE嵌入模塊和K-means聚類網絡[10]。SE模塊中包含的基本操作是池化和全連接,所以可以在VGG16 網絡中的每一層的最大池化層中加上一層SE 網絡層用來處理池化層之前的卷積特征集,這樣在處理遮擋和小尺度行人[11]檢測時,能夠有效地提高準確度。

圖2 SE-conv-moudle模塊

圖3 改進的VGG16網路模塊
首先可以固定RPN 中的Anchor 的寬高比,因為用于行人檢測的候選框通常可以看成是瘦長直立型的,其寬高比一般為0.41[12]和以及一些其他相近的數值,具體參數根據訓練集進行設置,這個參數需要設置固定好;其次在POI 池化層中原來的Cascada R-CNN 模型中存在兩次浮點取整操作,該網絡將原圖的ROI 坐標(左上角與右下角的坐標值)進行池化操作,使其縮小為原圖的十六分之一[13],其過程需要兩次取整,導致的問題是RoI pooling提取的特征圖與原圖不對齊,所以在這個過程中可以采用雙線性插值來對齊RoI pooling 提取出的特征圖,改進過程就是在RoI pooling 過程中不進行取整運算而保留小數,然后通過雙線性插值[14]對每個采樣點進行估值,插值完成對每個區域進行Max Pooling,整個過程避免了取整操作,這樣有效地保留了提取出的特征圖的對應位置,并且在進入RPN 之前引入了K-means 聚類算法,K-means 聚類算法可以加速候選區域的收斂速度,K-means聚類方法測量兩點間距離使用的是歐式距離測量法,其作用是聚類單位網格長與候選框寬高比例。K-means的聚類函數為

其中N為聚類的類別;M為聚類的樣本;Box[N]為候選區域的寬和高;Box[M]為實際的人的區域的寬和高。
下面說明雙線性插值方法:在圖像提取特征圖之坐標都為原來的十六分之一,我們以特征圖的中心點為坐標原點設為P(x,y),圖中各點的坐標為Q11(x1,y1),Q12(x2,y1),Q21(x1,y2),Q22(x2,y2),p=x-[x],q=y-[y],x1=[x],y1=[y],[n]為取整操作,是不大于n的最大整數。雙插值操作就是先在X方向上插值一次,由Q11(x1,y1)、Q12(x2,y1)得到R1(x,y1)的灰度值為

同理再在X方向再進行一次插值得到R2(x,y2),其灰度值為

之后再通過R1(x,y1)、R2(x,y2)的灰度值在Y方向進行一次插值得到P(x,y)的灰度值為

雙線性插值避免了特征圖坐標的取整操作,保留了高質量的特征圖、完整的位置信息。

圖4 雙線性插值法
本次實驗訓練采用的是INRIA 數據集[15],INRIA 數據集包含15560 個正樣本和6744 個負樣本,本次實驗訓練集選取了該數據集中3000 張正樣本和1000張負樣本,然后選取300張該數據集的圖片和自制的500 張某段街區采集的的行人圖片作為測試集。實驗環境PyTorch+mmdetection。最終本文的改進型Cascada R-CNN 模型的在行人檢測數據集中獲得了90.1%準確率的好成績。在自制的檢測集內的檢測結果如圖5。

圖5 自制測試集檢測結果
改進型Cascada R-CNN 模型和Cascada R-CNN 模型以及Faster R-CNN 模型檢測結果對比如表1。

表1 實驗結果對比
由表1 可以知道改型的Cascada R-CNN 模型的準確率比Faster R-CNN 和Cascada R-CNN 具有更高的識別精確度,在性能上也優于原來的Cascada R-CNN模型。
本文提出了一種改進型Cascada R-CNN 行人檢測模型,在INRIA 數據集進行了訓練,并在INRIA 數據集中挑選測試圖片和自制的圖片制作了測試集并在測試集中取得了的AP 為90.1%的成績,但是在檢測速度上有不足的地方,可以在后續的實驗中在保證檢測準確率的前提下改善網絡結構,盡可能減少網絡復雜度提高運行速度;同時在對遠處小尺度樣本進行檢測時,任然會有誤測,無法固定行人位置等問題,這些問題可以通過后續改進RPN 中的特征提取方式,將色彩位置信息豐富的低層特征圖與具有高級語義信息的高層特征圖相結合,讓網絡獲得更加準確的特征圖,這樣可以對遠處的小樣本進行更加準確的檢測。