蘆 佳 陸振宇 詹天明 戴裕亮 王 鵬
1(南京信息工程大學電子與信息工程學院 江蘇 南京 210044)
2(南京審計大學信息工程學院 江蘇 南京 211815)
隨著社會的發展與進步,人們飼養寵物的情況越來越多,它們在人們身邊的地位也越來越重要。但是寵物給人們帶來歡樂的同時也帶來了許多的問題,如寵物店里的監管與喂養,寵物的丟失和尋找,以及流浪狗的管轄等都需要更加智能化和系統化的管理。寵物的身份認證也是智能化和系統化管理中非常重要的環節之一。而狗作為日常最受歡迎的寵物之一,提取其特征來進行智能識別在寵物狗智能管理中具有非常廣泛的應用。
傳統的目標檢測算法大致方法如下:一開始是候選區域的選擇,然后在已經選定的候選區域中提取特征,如HOG(Histogram of Oriented Gradient)[1]、SIFT(Scale Invariant Feature Transform)[2]、Haar等方法,最后使用訓練的分類器,如SVM(Support Vector Machine)[3]、Adaboost[4]等進行分類。這些檢測方法雖然實現起來比較簡單,但是由于手工設計的特征對于多樣性的變化沒有很好的魯棒性,而且待檢測目標會因為光照、視角等因素的變化而變化,因此會直接影響到目標檢測的準確性。為此,研究者們又提出了DPM(Deformable Part Model)[5]目標檢測算法,但是該模型特征相對復雜,計算速度慢,對于旋轉、拉伸的物體檢測效果不好。后來,還有一些目標檢測的算法被提出,但是大多還是借鑒了DPM方法的思路進行改進,并沒有發生本質的變化,因而傳統的目標檢測的研究工作遇到了瓶頸。
隨著研究者們在目標檢測技術上的不斷改進與創新,新穎而高效的目標檢測算法層出不窮。其中,基于深度學習的方法在目標檢測中得到了迅速發展。Ross Girshick提出的R-CNN算法作為深度學習目標檢測算法中的開山之作,多次在目標檢測比賽中摘得桂冠,但是該方法訓練和測試耗時長,訓練所需的空間大。為此,作者在原算法的基礎上進行了改進,提出了Fast R-CNN算法,雖然該算法在時間和準確率上都有了提升,但沒有真正實現端到端的訓練測試。于是,作者又進一步作出改進,提出了Faster R-CNN算法[6-7],將候選區域的生成、特征的提取、分類和位置精修統一到一個深度網絡框架之中,大大提高了運行的速度和準確率。隨后,Liu等[8]提出了SSD(Single Shot Multi-Box Detector)算法,該方法沒有生成候選區域的過程,極大提高了檢測速度。Redmon等[9]提出的YOLOv1(You Only Look Once)算法又使目標檢測算法上升了一個臺階,它速度快,背景錯檢率低,泛化能力強,但是不足之處是其輸入尺寸必須固定。時隔一年,作者提出了YOLOv2算法,在保證原有速度的優勢之下,提升了精度。之后,作者又提出了YOLOv3算法,使用了新的網絡結構Darknet-53,用Logistic取代Softmax進行對象的分類,并利用多尺度特征進行對象的檢測,在保持其一貫檢測速度快的情況下,性能又有了提升。但是該算法缺點在于識別物體位置的精確性差且召回率低,為了解決這一問題,本文在特征提取部分添加與Darknet-53[10]網絡結構相同層數的深度殘差網絡,并將這兩個特征提取模型分別輸出后取均值降維,生成三個尺度的特征圖,使其能更好地提取圖像中的信息,再結合ImageNet數據集中的狗臉數據集,進行狗臉檢測。
YOLO算法的核心思想就是將整幅圖像作為網格的輸入,直接在輸出層回歸邊界框的位置以及所屬的類別。首先將一幅圖像劃分成S×S的網格,每個網格預測B個邊界框,每個邊界框除了要回歸自身的位置外,還要附帶一個置信度值,這個置信度值表示所預測的框內含有物體的準確性,用式(1)表示。
(1)
式中:如果目標落在網格中,則第一項為1,反之為0;第二項是邊界框與真實框的IOU值。每個邊界框都要預測(x,y,w,h)和置信度共5個值,其中:x、y為預測框的中心位置的坐標;w、h為預測框的寬度和高度。每個網格預測一個類別信息,記作C類,所以最后輸出為S×S×(5×B+C)維。
在測試的時候,每個網格預測的類別信息和邊界框預測的置信度值相乘,就是相對應邊界框的最后類別得分,用式(2)表示。
(2)
得到最后的類別得分后,給定一個閾值,將分數低于閾值的框淘汰掉,再對剩余的框進行NMS(非極大值抑制)算法處理[11],得到最終的檢測結果。
但由于輸出層為全連接層,在檢測時只能輸入相同大小的圖像,且每個格子最多只能檢測出一個物體。在此基礎上,YOLOv2算法加入了歸一化層,使得網絡不需要每層都去學習數據的分布,加快了收斂的速度。在預測框的數量上,每個特征圖位置使用5種anchor boxes,相比原先的算法增加了很多。總的來說,YOLOv2算法在YOLOv1算法的基礎上進行了一系列改進,且綜合了ImageNet數據集和COCO數據集,采用聯合訓練的方式進行訓練,使系統可以識別超過9 000種物體。但是對于重疊的分類,YOLOv2算法依然沒有給出很好的解決方案。
針對無法很好地識別重疊的物體,YOLOv3提出了多標簽任務,用Sigmoid分類器代替Softmax分類器,這樣每個類的輸出仍在[0,1]之間,但它們的和不再是1,只要置信度大于閾值,該錨點便被作為檢測框輸出。多標簽模型的提出,對于提高覆蓋率高的圖像的檢測效果是十分顯著的。
一般在一幅圖像中,都或多或少包含著大小不一的各種物體,比較理想的狀態是將圖像中待檢測的目標全部檢測出來。但由于網絡的不斷加深,特征圖越來越小,導致小目標很難被檢測出來。而在實際的特征圖中,低層的目標位置準確,但包含的語義信息少,而高層正好相反。因此,YOLOv3汲取了FPN(Feature Pyramid Network)[12]的思想,從不同尺度上提取了特征。
如圖1所示,YOLOv3方法一共分為兩個部分,第一部分是網絡的前向傳播過程,它主要是通過一定的步長縮放來得到其特征層次結構。第二部分是將特征圖進行上采樣得到更大及語義更強的特征圖,然后通過將兩者特征融合,生成具有更明顯特征的特征圖。

圖1 多尺度檢測
損失函數是評價一個模型好壞的重要指標,損失函數越小,模型的魯棒性就越好。YOLOv3的損失函數由預測框定位誤差、IOU誤差和分類誤差三部分組成,用式(3)表示。
(3)

YOLOv3算法雖然在anchor boxes[13]和多尺度檢測等方面都做了改進,有效地解決了對小目標檢測效果不好的問題,但是識別物體位置的精確性差且召回率低。如果想要進一步提升模型的精確性,最好的方法就是將網絡設計得越深越好,但隨之帶來的問題就是梯度消失。而深度殘差網絡能在加深網絡的同時解決梯度消失的問題,從而提升模型的精度。因此,本文在特征提取部分Darknet-53網絡結構的基礎上,加入了深度殘差網絡共同提取特征,解決了對檢測目標精確性差的問題。
改進后的算法結構如圖2所示。首先輸入像素為416×416、通道數為3的圖片,然后用Darknet-53網絡和深度殘差網絡共同提取特征,再通過卷積核的方式實現局部的特征交互,進行多尺度的預測。其中,DBL模塊表示二維卷積層、Batch Normalization[14]歸一化層和LeakyReLu層的一個組合,共同構成網絡的最小組件。通過標準化讓激活函數分布在線性區間,讓模型更大膽地進行梯度下降,這樣既加快收斂的速度,又更容易跳出局部最小值,在一定程度上緩解了過擬合。Resn(n=1,2,…)是整個網絡的大組件,它借鑒了殘差網絡的做法,使得網絡結構可以更深,但是識別物體位置的精確性仍然較差且召回率低,因此改進的網絡在特征提取部分Darknet-53網絡結構后再次加入深度殘差網絡,并將這兩個特征提取模型分別輸出后取均值降維,生成三個尺度的特征圖。

圖2 YOLO-resnet混合網絡結構
Darknet-53作為YOLOv3特征提取的主要網絡結構,由一系列3×3和1×1的卷積層構成。這些卷積層通過不斷地訓練分析,然后選取其中效果好的卷積層進行整合得到,它相比Darknet-19效果好了很多。
雖然YOLOv3采用了多尺度預測的方式,很好地解決了小物體的檢測問題,但是該模型在識別物體位置的精確性上仍然較差且召回率低,因此在Darknet-53網絡結構的基礎上,融合了深度殘差網絡,改進了其特征提取部分,這樣既能更好地對物體進行檢測,又能解決隨著網絡的加深出現的退化現象。其中,殘差塊的原理如圖3所示。

圖3 殘差塊原理
整個模塊除了正常的卷積層輸出外,還有一個分支把輸入直接連接在輸出上,該輸入與卷積的輸出做算數相加得到最終的輸出,即將原始所需要學的函數H(x)轉換成F(x)+x。可以證明,如果F(x)分支中所有的參數都是0,那么H(x)就是個恒等映射。深度殘差網絡不會給網絡增加額外的參量和計算量,同時可以大大地提升模型的訓練速度,提高模型的訓練效果。
將構建塊定義為:
y=F(x,{Wi})+x
(4)
式中:x和y為考慮的層的輸入和輸出向量;函數F(x,Wi)表示要學習的殘差映射。
F=W2σ(W1x)
(5)
式中:σ表示非線性函數ReLU。
而式(4)中的F和x維度需要相同,可以通過快捷連接執行線性投影Ws來匹配維度,如式(6)所示。
y=F(x,{Wi})+Wsx
(6)
殘差網絡結構的出現,打破了之前神經網絡中前一層的輸出作為下一層輸入的思維,即前一層的輸出可以作為后面任意一層的輸入,很好地解決了隨著網絡加深而過度提取特征的現象,為高級語義特征提取和分類提供了可行性。
基于YOLO和ResNet[15]的混合網絡利用Darknet-53網絡和深度殘差網絡共同來提取特征,首先,Darknet-53網絡主要采用3×3和1×1的卷積,并將步長設置為2來降低特征圖維度提取特征。但這種特征提取方式提取的特征不夠完整,識別物體位置的精確性差且召回率低。因此,引入深度殘差網絡,將網絡設置得更深來提取更多的特征,然后將這兩個特征提取模型分別輸出后取均值降維,使兩者共同提取特征,最后將特征提取部分的中間層與上采樣后的特征層進行張量拼接,生成更明顯的特征圖,再進行三個尺度的預測。
本實驗使用的原始數據是ImageNet數據集中的狗分類數據集,共有152種不同種類的狗,且每種狗都選取了150~250幅圖片,分別包含了不同背景、不同視角。采用的是VOC2007數據集的格式:首先統計VOC2007數據集中圖片和目標的寬和高以及它們的寬高比,然后根據得出的值篩選ImageNet數據集中的圖片。其中:在實驗時每種狗選取了約30幅圖片,共4 500幅圖片作為訓練集;另外每種狗選取了3~4幅圖片,共500幅作為驗證集;每種狗再另外選取10幅圖片共1 520幅作為測試集。
實驗設備配置如下:顯卡采用GTX1070Ti;操作系統為Linux;框架為Keras。
學習率和batchsize是最影響性能的超參數,它指導著我們該如何通過損失函數的梯度調整網絡的權重。由于網絡具有一定的復雜性,過大的學習率和batchsize會導致loss梯度爆炸和顯存的溢出。經過多次調參發現,能使網絡正常訓練的最大學習率和batchsize為0.000 1和8,而當學習率降低到0.000 01時,loss收斂太慢,因此,將整個網絡的學習率和batchsize設為了0.000 1和8。
目標檢測問題中的模型的分類和定位都需要進行評估,每幅圖像都可能具有不同類別的不同目標,因此,在圖像分類問題中所使用的標準度量不能直接應用于目標檢測問題。而單純地用準確率和召回率都不科學,因此,人們用PR曲線下的面積作為評價一個模型好壞的指標,即平均精度AP(Average Precision),AP值越高,表示模型越好。
(7)
式中:∑Precisionc表示類別C在每幅圖片上的準確率的和;N(TotalImages)c表示含有類別C的圖片數目。
本文將調參之后的YOLO-resnet網絡的訓練結果與目前的一些主流的深度學習網絡進行了對比,分別包括Faster R-CNN算法,SSD算法和YOLOv3算法。其中,在對主流網絡的訓練和測試中,本文選取了與YOLO-resnet算法相同的訓練參數和數據集,以保證實驗的準確性。對比結果如表1所示。

表1 不同模型在相同數據集下的AP值和準確率
實驗結果表明,Faster R-CNN算法和SSD算法的識別精度較低,不能對寵物狗目標進行實時且較為準確的檢測。雖然YOLOv3算法在相同數據集上的準確率和AP值明顯優于前面兩種算法,分別為98.5%和89.8%,但與本文算法相比,通過改進特征提取后的YOLO-resnet算法對狗臉的識別準確率可以達到99.2%,滿足了對狗臉目標的高準確率識別的要求。
此外,本文還從測試集中選取了一些小目標圖像、狗臉被遮擋的圖像、復雜環境下的圖像進行了測試,各種算法的識別效果如圖4和圖5所示。

(a) Faster R-CNN (b) SSD

(a) Faster R-CNN (b) SSD
如圖4所示,該圖像場景復雜,目標遮擋比較嚴重,待檢測目標小且不明顯。Faster R-CNN算法和SSD算法均無法檢測出目標;而YOLOv3算法雖然檢測了目標,但對目標進行了錯檢;只有本文算法準確地將目標檢測了出來。
如圖5所示,待檢測的狗臉目標被鐵絲網所遮擋,檢測難度大大增加。Faster R-CNN算法和SSD算法雖然都檢測出了目標,但是只檢測出一個目標且準確率較低;YOLOv3算法雖然檢測出了所有的目標,但是準確率較低;而本文算法不但將目標全部檢測出,且檢測結果明顯高于其他的算法。
近年來,基于深度學習的目標檢測方法成為研究的熱點,雖然這些算法在目標檢測上取得了很好的效果,但現在需要識別的目標更多且難度更大,在理論和精度上有進一步提升的空間。因此,本文利用深度學習下的YOLOv3目標檢測算法,在原先使用Darknet-53網絡結構提取特征的基礎上,融合了殘差網絡,改進了其特征提取部分,從而實現對目標的檢測。通過實驗結果分析發現,此方法的平均準確率達到99.2%。相比于傳統的機器學習方法,其準確率有了大大的提升。但是隨著網絡的加深,訓練所用的時間也有所增加,下一步將對該模型采取新的措施,在保證其準確率不變的情況下,縮短訓練時間。