齊永康
(華南師范大學 計算機學院,廣州 510631)
隨著移動網絡和智能設備的不斷發展,越來越多的年輕人喜歡邊行走邊玩手機.這導致了他們的注意力分散,進而遇到路面障礙發生危險[1].
因此,我們設計了一個希望能在智能手機上應用的基于深度學習方法的路面障礙實時檢測模型,用來及時提醒行人在行走時遇到的障礙,這樣可以有效減少邊走邊使用手機帶來的危險.其中智能手機能夠實時識別路面障礙的本質要求是在保證檢測路障圖像高精度值的前提下,檢測速度也要足夠快.對比傳統的移動端路障檢測方法,本文提出的基于深度學習的Mobile-YOLOv3 模型在提高了精度值的前提下,也能達到實時檢測的最低要求[2].
傳統的目標檢測方法和近年來使用深度學習來進行目標檢測的方法大相徑庭.傳統的目標檢測方法典型代表有AdaBoost和Cascaded 人臉檢測算法[3],HOG和SVM 行人檢測算法[4],DPM 檢測算法[5].傳統的目標檢測方法大致可分為3 個步驟,包括選定目標區域、特征提取和特征分類.傳統方法先將目標圖像區域像素遍歷一遍,然后使用人工設計好的特征提取器來分析這些特征區域提取特征,最后利用類別分類器對這些目標特征區域分類,已獲得預期的分類結果.傳統的目標檢測方法存在較多的局限性,例如像素窗口冗余,以及檢測結果的不穩定性.隨著復雜神經網絡和深度學習的出現,這些局限性得到了一定程度上的解決.因此,以深度學習為基礎的目標檢測技術逐漸代替了傳統的目標檢測方式.以深度學習為基礎的目標檢測網絡分為兩種,one-stage 網絡和two-stage 網絡.Onestage 網絡以SSD[6],YOLO[7]系列算法為代表,twostage 網絡常見的有RCNN[8],Faster-RCNN[9],RFCN[10].Two-stage 類算法輸入圖像后首先會生成目標對象候選區域,然后會將生成的目標對象候選區域輸入到卷積神經網絡進行分類和回歸.而one-stage 類算法輸入圖像后會直接利用卷積神經網絡提取特征進行分類和回歸.兩種算法的流程不同導致的結果就是onestage 類網絡的檢測速度要比two-stage 類網絡快很多,而檢測的準確性要比two-stage 類網絡低.
One-stage 類網絡YOLOv3 提取特征的骨干網絡Darknet53 是為在VOC 等目標種類多的大型數據集上訓練而設計的深層卷積神經網絡,而本文應用的路面障礙檢測場景目標種類并沒有那么復雜,淺層特征提取網絡MobileNetv1 已經足夠適用,使用YOLOv3 原始的骨干網絡Darknet53 訓練反而增加了參數優化空間的復雜度,降低了訓練效果.所以在本文中,我們基于one-stage 網絡YOLOv3 網絡和MobileNetv1 網絡提出了一個精確率較高且具有一定實時性的輕量級道路障礙檢測模型:
1)拍攝制作了所需要的路面障礙數據集,因為路面障礙種類多樣化,且需要使用特定的手持角度拍攝,因此無法通過網絡爬蟲進行搜集,需要在現實生活中實地拍攝.數據集圖片由作者在廣州市各街道,公園等地拍攝,路面障礙數據集分類有井蓋,減速帶,樓梯臺階3 類.
2)將YOLOv3的骨干網絡Darknet53 替換為了MobileNetv1,提出了輕量級網絡Mobile-YOLOv3.
3)使用了4 個改進訓練速度和提高訓練精度的方法.首先是訓練時的改進,通過對IOU 局限性的分析,利用回歸損失函數CIOU 更全面地學習了真實框與預測框之間的位置及形狀關系,提升了模型的訓練深度,速度及檢測精度.之后使用類別損失函數Focal 替換了交叉熵損失函數使得訓練更關注于難分類樣本,并在一定程度上解決了正負樣本不均衡的問題.最后,通過加入不包含目標路障的負樣本背景圖片進行訓練,進一步提升了模型的精度.而對于檢測時的改進,利用Soft-NMS 算法替換NMS 算法,更加科學合理地處理冗余預測框,減少了對密集目標的漏測誤刪情況.
本文實地拍攝制作了一個路障數據集,將YOLOv3骨干網絡替換為MobileNetv1,設計和實現了一個道路障礙檢測模型Mobile-YOLOv3,并使用了4 個改進方法來提升模型的檢測性能.最終模型在路面障礙數據集上取得了98.84%的檢測精度,相比于YOLO3 在路面障礙數據集上所取得的91.98%的檢測精度,提升了約7%.而且模型規模較YOLOv3 訓練出來的模型減小了約2.5 倍,使用CPU 進行檢測的速度提升了1.8 倍,使用GPU 進行檢測的速度提升了1.3 倍.
YOLO (you only look once),是Redmon 等于2016年提出的一種one-stage 目標檢測算法[7].在YOLO 算法出現之前,目標檢測算法通常都是將檢測問題轉化為分類問題,而YOLO 算法將目標檢測問題轉化成為了回歸問題,用一個卷積神經網絡就可以直接從輸入圖像上預測目標對象所在位置和概率,實現了從端到端(end-to-end)的目標檢測算法.本文使用的網絡以YOLO 系列第3 代算法YOLOv3為基礎構建,YOLOv3在YOLOv1和YOLOv2的基礎上主要改進了骨干網絡結構,損失函數的計算方式,以及使用了多尺度預測融合特征的檢測方法[11].
為了讓神經網絡模型在小型移動和嵌入式設備上快速實時地運行,Google 公司減小了神經網絡模型規模并設計出了模型MobileNetv1.它在保證了模型的精確性和檢測速度的基礎上,極大地減小了模型的規模和計算量[12].MobileNetv1 是專門為移動和嵌入式設備提出的高效輕量級模型,它基于流線型架構,使用深度可分離卷積來替代普通的卷積方式來構建輕量級神經網絡.深度可分離卷積方式和傳統的卷積方式不同的地方在于它將傳統的卷積方式分為了深度卷積和點卷積,通過這種方式能夠在一定程度上達到和傳統的卷積方式一樣的卷積效果,同時,參數量會大幅減少.
本節從YOLOv3 特征提取網絡骨干網絡的替換,CIOU和Focal 損失函數,預測框篩選算法Soft-NMS和負樣本訓練4 個方面來詳細地闡述改進的網絡模型.
本文最終的目的是設計出一個能夠落地于便攜設備上的輕量級路面障礙檢測算法.YOLOv3 雖然是目前最常用的one-stage 目標檢測算法之一,在很多場景下也能夠精確的檢測出目標物體,但是其網絡結構過于龐大,計算參數也十分巨大,最終導致訓練出來的網絡模型規模太大,不適用于在運算能力和內存容量不夠充足的移動設備上運行.
MobileNetv1 是一個輕量級神經網絡,它基于一個可深度分離的卷積方法,將標準卷積分解為深度卷積和卷積核大小為1×1的點卷積.深度卷積將每個卷積應用于輸入圖像的每個通道,而點卷積用于組合通道卷積輸出[12].這種深度可分離卷積方法可以有效地減少計算量,減少模型的規模.
因此,為了結合YOLOv3的目標檢測結構和MobileNetv1 網絡輕量化的特點,我們將YOLOv3的骨干網絡Darknet53 替換為MobileNetv1.這樣,新的目標檢測網絡的參數量和運算量都將大大降低,使得該網絡可以在移動設備上運行.本文改進后的網絡結構Mobile-YOLOv3 如圖1所示.其中,y1,y2,y3為3 個不同圖像尺寸的輸出矩陣.DBL 塊是YOLOv3的基本組件,由標準卷積層(Conv)、批標準化層(Batchnormalization)、激活函數Leaky_ReLU 層組成.Concat是向量拼接操作,用于將MobileNetv1的中間層和深層網絡的上采樣特征向量進行拼接.MPWBR 塊是MobileNetv1的基本組件之一,由卷積核大小為1×1的點卷積層、批標準化層、激活函數ReLU 層組成.MDWBR/S1 塊是MobileNetv1的基本組件之一,由步長為1的深度卷積層、批標準化層、ReLU 層組成.MDWBR/S2 塊是MobileNetv1的基本組件之一,由步長為2的深度卷積層、批標準化層、ReLU 層組成,用于縮放圖像尺寸.MBR/S2 塊由步長為2的標準卷積層、批標準化層、ReLU 層組成.MDWS/S2 塊由零填充層(zeropadding)、MDWBR/S2 塊、MPWBR 塊組成.MDWS/S1 塊由MDWBR/S1塊、MPWBR 塊組成.

圖1 Mobile-YOLOv3 網絡結構
YOLOv3 算法中使用交并比損失函數IOU_Loss(intersection over union)作為邊框回歸損失函數,IOU是為了評價預測框對目標物體的預測效果而定義的一個指標.假設預測框為A,真實框為B,則對于圖2所示的預測框A和B的IOU_Loss運算公式如式(1)所示:

圖2 交并比IOU

IOU有兩個缺陷,一是當預測框和真實框不相交時,IOU的值等于0,無論兩個框之間的位置如何,都不可能知道預測框和真實框之間的相對位置關系.第二點是,當真實框包含預測框時,若不同的預測框大小相同,但此時IOU值相等,IOU值無法反映不同的預測框和真實框之間相對位置的不同.針對IOU存在的問題,我們使用CIOU(complete intersection over union)函數替換了IOU作為本文模型的回歸損失函數.
歐氏距離交并比DIOU(distance intersection over union)被提出用來解決IOU存在的兩個問題[13],如圖3,圖4所示.DIOU添加了一個同時包含真實框和預測框的最小外接矩形C,并且DIOU還考慮了兩個框的重疊面積和中心點距離,DIOU_Loss的運算公式如式(2)所示,DIOU引入了一個懲罰項,用來最小化真實框和預測框之間的距離.這樣無論是當預測框和真實框不相交時,還是真實框包含預測框時,DIOU的值都可以反映出預測框和真實框之間的相對位置關系.

圖3 真實框包含預測框DIOU 圖

圖4 真實框與預測框不相交DIOU 圖

雖然上述方法已經解決了IOU存在的兩個問題,但是當真實框包含預測框時,如圖3,圖5所示,若預測框的長寬大小不一定但面積和中心點位置不變時,也無法確定不同的預測框與真實框的相對位置.針對這個問題,完整交并比CIOU和DIOU被同步提出用來解決這個問題[13],CIOU在保留了DIOU懲罰項的前提下,選擇添加了一個反映預測框與真實框的長寬比關系的參數項來進一步解決這個問題,CIOU_Loss的運算公式如式(3)–式(5)所示.

圖5 預測框被真實框包含時長寬比不一致DIOU 圖

其中,ɑ是用來平衡比例的參數,v用來衡量預測框和真實框之間長寬比例一致性的參數,wgt,hgt是真實框的長度和寬度,wp,hp是預測框的長度和寬度.
在YOLOv3 算法中,使用的是二分類交叉熵(binary cross entropy)作為模型的分類損失函數.然而,交叉熵損失函數并沒有對模型訓練時的難易樣本進行區分,這導致了模型的訓練效果不太理想.因此為了解決這個問題,我們使用Focal 損失函數替代了YOLOv3 中的二分類交叉熵函數作為本文模型的分類損失函數.
在二分類問題中,y表示目標的類別標簽值,取值為{0,1},0為負樣本,1為正樣本.y′是輸入樣本經過激活函數后預測屬于正樣本的概率,取值在0–1之間.二分類交叉熵損失函數如式(6)所示.若目標為正樣本,則當預測概率y′越接近1 時越容易分類,損失值越小,若目標為負樣本,則預測概率y′越接近0 時越容易分類,損失值越小,說明在二分類交叉熵損失函數中易分類樣本對損失函數的數值影響不大.而在實際訓練過程中,訓練樣本主要由大量易分類樣本組成,若采用交叉熵損失函數進行訓練,會導致損失函數在訓練過程中迭代較慢,且可能無法得到最優的結果.

針對這個問題,Focal 損失函數[14]在交叉熵損失函數的基礎上引入了一個權重系數,通過控制易分類樣本和難分類樣本的權重,使得模型在訓練時更加專注于困難樣本.Focal 損失函數如式(7)所示:

Focal 損失函數首先在二分類交叉熵的基礎上加了一個因子γ,其中γ>0.若目標為正樣本,則當預測概率y′越接近1 越容易分類時,(1–y′)γ的值會逐漸減小接近0,Focal 損失函數的值相比二分類交叉熵損失也會大量減少.同樣若目標為負樣本,則當預測概率y′越接近0 越容易分類時,(y′)γ的值也會逐漸減小接近0,Focal 損失函數的值相比于二分類交叉熵損失也會大量減少.這樣Focal 損失函數通過添加了一個干擾因子γ,使得模型可以降低易分類樣本的權重,更加關注于難以分類的樣本,此外還加入了平衡因子ɑ,用來平衡數據集中正負樣本的比例.在本文經過對比實驗得出當ɑ=0.75,γ=2 時實驗效果最優.
YOLOv3 算法中使用非最大值抑制NMS (nonmaximum suppression)來刪除檢測時的冗余框,NMS的本質是尋找局部最大值,去除非極大值元素,找到最接近真實框的預測框位置,NMS 流程如算法1 所示.NMS 算法先對所有可能包含了同一個檢測對象的預測框B的檢測得分S進行排序,然后將得分最高的預測框作為目標真實框M,并計算該框和其他預測框的IOU 值,如果該值高于預先設置的閾值Nt,則刪除此預測框并重復此過程,直到所有預測框都被選中或被刪除.NMS 處理結果如圖6所示.

圖6 NMS 處理結果
根據NMS 算法設計,如果兩個目標對象都處于預先設置的重疊閾值中,則NMS 算法可能會無法檢測到所有的目標對象.當兩個目標對象的預測框靠的太近時,如果重疊區域的IOU 值高于預先設置的閾值,那么檢測得分低的目標對象預測框就會被刪除,這樣就導致了一些目標對象的預測框被誤刪從而無法被檢測出來.針對誤檢的問題,我們使用Soft-NMS 函數替代了NMS 作為本文模型的目標框篩選算法.
為了解決NMS 會誤刪距離太近,重疊區域過大的目標物體預測框的問題,Bodla 等人提出了軟化非極大值限制Soft-NMS[15].Soft-NMS 處理流程如算法2,對于初始預測框列表B中的某一預測框bi也是先計算其和檢測得分最高框M的IOU 值,但Soft-NMS 不是像NMS 一樣當IOU 值高于預設閾值Nt,在預測框列表B和檢測得分列表S中直接暴力刪除該預測框bi及其得分si.而是將該預測框bi和目標真實框M的IOU 值和預測框bi的檢測得分si相乘重新作為該預測框bi的檢測得分進行檢測.通過這種方式可以降低改該預測框bi的檢測得分,不會像NMS 中直接被刪除.
一是要在設計、工藝、生產環節深耕細作,優化設計、生產流程,改變傳統的作坊式生產為自動化、智能化流水線生產;改變傳統的二維圖紙設計為三維設計、數字化設計;改變傳統的工藝聯系單為標準作業。

算法1.NMS 處理步驟Input:B={b1,…,bn},S={s1,…,sn},Nt B 是初始預測框的表S 列表包含預測框列表B 對應的檢測得分Nt 是 NMS 預設閾值begin D ← {}While B≠empty do m ← argmax S M ← bm D ← D ∪ M;B ← B? M for bi in B do if IOU(M,bi) ≥ Nt then B ← B? bi;S ← S? si end end end return D,S end算法2.Soft-NMS 處理步驟Input:B={b1,…,bn},S={s1,…,sn},Nt B 是初始預測框的列表S 列表包含預測框列表B 對應的檢測得分Nt 是 NMS 預設閾值begin D ← {}While B≠empty do m ← argmax S M ← bm D ← D ∪ M;B ← B? M for bi in B do si← sif(IOU(M,bi))end end end return D,S end
傳統的NMS 計算公式如式(8)所示:

在圖像上具有連續性的高斯加權的Soft-NMS 計算公式如式(9)所示:

其中,σ是n個預測框的計算復雜度.
負樣本是一種不包含識別目標的圖像,負樣本訓練的意義是為了減少模型錯誤檢測的概率.我們通過對原始訓練集圖像的研究,發現了一個可能會導致模型誤檢的負樣本場景,該場景包括具有直線特征的背景如斑馬線、直線等.另外,在對正樣本進行標注的時候,難免會有一部分路面和目標路面障礙同時被標記,而這些路面的特征也會被模型學習到.所以,我們在收集負樣本時側重收集了具有直線特征的非典型路面障礙背景圖像.通過在訓練數據集中添加負樣本,模型檢測的錯誤率將會得到一定程度的緩解.
本文以原始模型訓練中常見誤測的對象為重點,在廣州所有地區的街道上隨機收集和篩選了500 張負樣本,再結合1 500 張正樣本,一共得到了包含2 000張樣本的數據集A.我們將Mobile-YOLOv3 網絡分別在數據集A 與只有2 000 張正樣本的數據集B 上進行了訓練,得到的檢測精度對比如表1所示,實驗結果證明在數據集中添加負樣本可以提升模型訓練的效果.

表1 添加負樣本測試精度對比
實驗的模型訓練和檢測的軟硬件環境為Intel(R)Xeon(R) CPU E5-2620 v4 @ 2.10 GHz,128 GB 內存,Nvdia GeForce GTX 1080ti 顯卡.操作系統為Ubuntu 16.04.6 LTS.開發環境為Python 3.6.10,TensorFlow 1.10.0,CUDA9.0,CUDNN7.6.4,IDE 平臺為Visual Studio Code,數據標注軟件為labelImg.
由于本文應用的場景是行人在行走時低頭使用手機所遇到的道路障礙,因此對數據集的拍攝角度和形狀等方面存在特殊性要求,而現有的開源數據集沒有此類型的圖像.路面障礙數據集是一個模擬行人低頭使用手機角度所拍攝的照片,我們拍攝了廣州各區具有代表性的道路障礙,這些圖片可以用來代表在日常生活中許多場景可能遇到的路面障礙.在拍攝了一系列的路障圖像,我們進行篩選并去除了難以用肉眼識別的圖像之后,總共收集了2 000 張路面障礙數據集,路面障礙分類有井蓋,減速帶,樓梯臺階3 類各500 張,為了降低誤檢率,還拍攝了不含目標障礙的負樣本500 張.我們將路障圖像批量標號,并使用labelImg 軟件進行標注,生成了對應的XML 文件.本文將數據集劃分為1 620 張訓練集,180 張驗證集,200 張測試集.部分數據集如圖7所示.

圖7 部分數據集示例
在目標檢測中,如果預測框與真實框的交并比IOU大于預設的閾值,則認為此預測框預測正確,否則認為此預測框預測錯誤.假如給定一張A類別的圖像,則此圖的預測精度PA如式(10)所示:


即一個A類圖像預測的平均精度等于測試集上A類圖像的預測精度值之和除以A類圖像的總數量.而一個數據集中會有多個類別的圖像,因此需要一個統一的概念來衡量一個網絡在此數據集上訓練最后得到的模型表現如何,則均值平均精度MAP(mean average precison)定義如式(12)所示:
∑

即MAP等于數據集中所有類別圖像預測的平均精度值之和除以該數據集中類別的總數量.MAP值越高,代表模型在此數據集上訓練的效果越好.
在對收集到的圖片進行預處理并標注生成數據集之后,將數據集放入Mobile-YOLOv3 模型中進行訓練,其中重要的參數設置如表2所示.

表2 訓練參數設置
ReduceLRONPlateau 參數設置為如果訓練持續5 個epoch 后,驗證損失沒有下降,則將學習率調小0.1倍.EarlyStopping 參數設置為如果訓練持續10 個epoch 后,驗證損失沒有下降,則提前結束訓練.
本實驗使用了遷移學習,深度學習中的遷移學習是將已經訓練好學習完數據集特征的模型參數遷移到新模型中,幫助新模型進行訓練的一種方法.因為幾乎所有的數據和特征基本上都是有相關關系的,所以通過遷移學習的方式,新模型可以直接學習已經訓練好的模型參數,從而加快模型的學習效率,加速模型優化速度,不需要像大多數網絡一樣重新開始學習.
本文訓練分為兩個階段進行,第1 階段采用了遷移學習的方式,凍結了MobileNetv1 模型的前160 層,并使用在ImageNet 數據集上預訓練的MobileNetv1 模型進行遷移學習,訓練次數為300 個epoch.第2 階段將第1 階段凍結的所有卷積層解封進行訓練,訓練次數為150 個epoch.訓練過程中設置了早停和學習率自動衰減參數,防止無效訓練.Mobile-YOLOv3的訓練過程如圖8,圖9所示,檢測精度如圖10所示,其中,SpeedBump,WellLid,Stairs為路面障礙數據集中的3 類路障標簽.

圖8 Mobile-YOLOv3 第一階段訓練圖像

圖9 Mobile-YOLOv3 第二階段訓練圖像

圖10 Mobile-YOLOv3 訓練檢測精度圖
本文對YOLOv3,YOLOv3 網絡的精簡版Tiny-YOLOv3和Mobile-YOLOv3 網絡分別進行了訓練,訓練參數設置和數據集預處理均和第4.3 節一致,訓練結果如表3所示.由表3可以看到,雖然Tiny-YOLOv3訓練出來的模型規模只有YOLOv3 原模型的1/7 左右,但是MAP下降了將近11%.對比之下,Mobile-YOLOv3訓練出來的網絡模型規模為原來的0.4 倍,使用CPU檢測圖像的速度比YOLOv3 提升了將近一倍,使用GPU 檢測圖像的速度也比YOLOv3 提升了26%,而且MAP也提升了將近3%,我們考慮到可能是因為YOLOv3是針對大型數據集檢測而設計的目標檢測模型,對于具有直線,圓形等平面特征的小型路障數據集沒有很好的效果.實驗結果證明Mobile-YOLOv3 網絡更適用于基于移動設備的路障檢測問題.

表3 各網絡性能對比
本文將Mobile-YOLOv3 模型的邊框回歸損失函數替換為了CIOU,分類損失函數替換為了Focal,目標框篩選算法替換為了Soft-NMS,數據集添加了負樣本進行訓練.作為對照組分別將Mobile-YOLOv3的邊框回歸損失函數,分類損失函數,目標檢測框篩選算法替換為YOLOv3 原來的算法,數據集添加負樣本訓練,最后訓練得到的結果如表4所示.由表4可以看出,本文改進的3 種優化算法都可以提升Mobile-YOLOv3 模型對路面障礙數據集的檢測速度和精度,最終使用了3 種優化算法和增加了負樣本訓練機制的模型Mobile-YOLOv3 檢測精度為98.84%,MAP相比原始Mobile-YOLOv3 模型的94.77% 提升了約4.1%.改進后的Mobile-YOLOv3 模型相比于YOLOv3 模型,均值平均精度MAP提升了約7%,模型規模也縮小了約2.5 倍,使用CPU 檢測圖像的速度提升了80%,使用GPU 檢測圖像的速度也提升了30%.

表4 各優化方法消融實驗
本文自行設計標注了一個包含各類道路障礙特征的數據集,用于模型效果的性能評估.我們在基于YOLOv3的基礎上分別對其骨干網絡和邊框回歸損失函數,分類損失函數,預測框篩選算法進行了改進,并在數據集中添加了負樣本訓練,提出了一種針對行人使用便攜移動設備走路時遇到路面障礙的目標檢測算法.實驗結果表明,本文提出的Mobile-YOLOv3道路障礙檢測輕量化算法對日常生活場景經常遇到的具有樓梯,井蓋,減速帶等幾何特征的道路障礙的檢測,具有良好的實時性和精確度,且模型性能相比于YOLOv3 網絡,模型規模縮減了約2.5 倍,平均均值精度MAP提升了約7%,識別的精度值達98.84%.