呂 鑠,蔡 烜,馮 瑞
1(復(fù)旦大學(xué) 計算機(jī)科學(xué)技術(shù)學(xué)院,上海 201203)
2(上海視頻技術(shù)與系統(tǒng)工程研究中心,上海 201203)
3(復(fù)旦大學(xué) 智能信息處理實(shí)驗(yàn)室,上海 201203)
4(公安部第三研究所物聯(lián)網(wǎng)技術(shù)研發(fā)中心,上海 201204)
目標(biāo)檢測具有廣闊的發(fā)展前景和巨大的商業(yè)價值,已經(jīng)成為國內(nèi)外相關(guān)從業(yè)者的研究熱點(diǎn),在智能安防、自動駕駛等領(lǐng)域具有廣泛應(yīng)用.經(jīng)典的目標(biāo)檢測方法有Dalal于2005年提出的基于HOG特征的檢測方法[1],Felzenswalb等人于2008年提出的可變行組件模型(Deformable Part Model,DPM)檢測方法[2],該方法先利用梯度算子計算出目標(biāo)物體的HOG特征并采用滑動窗口+SVM的方法進(jìn)行分類,在目標(biāo)檢測問題中表現(xiàn)良好.
與經(jīng)典方法相比,深度神經(jīng)網(wǎng)絡(luò)提取特征能力強(qiáng),準(zhǔn)確率高,在計算機(jī)文本、圖像分析等領(lǐng)域取得令人矚目的成果,受益于深度學(xué)習(xí)的快速發(fā)展,基于卷積神經(jīng)網(wǎng)絡(luò)(CNN)的目標(biāo)檢測模型層出不窮,檢測效果不斷提升,Girshick R等人于2014年提出R-CNN網(wǎng)絡(luò)[3],采用選擇性搜索(selective search)方法代替?zhèn)鹘y(tǒng)的滑動窗口,將VOC2012數(shù)據(jù)集上目標(biāo)檢測平均準(zhǔn)確率(mean Average Precision,mAP)提高了30%;Girshick R和Ren SQ等人相繼提出了Fast R-CNN[4]與Faster R-CNN[5]網(wǎng)絡(luò),Faster R-CNN采用區(qū)域推薦網(wǎng)絡(luò)(Region Proposal Network,RPN)生成候選框,再對這些候選框進(jìn)行分類和坐標(biāo)回歸,檢測精度大幅提升,檢測速度約5 fps,這些方法由于生成候選框和進(jìn)行預(yù)測分成兩個步驟進(jìn)行,所以稱為為Two-Stage方法,同時進(jìn)行這兩種操作的網(wǎng)絡(luò)稱為One-Stage方法,代表有YOLO[6],SSD[7]等.2016年Redmon J等提出YOLO網(wǎng)絡(luò),其特點(diǎn)是將生成候選框與分類回歸合并成一個步驟,預(yù)測時特征圖被分成S×S(S為常數(shù),在YOLOv1中取7)個cell,對每個cell進(jìn)行預(yù)測,這就大大降低了計算復(fù)雜度,加快了目標(biāo)檢測的速度,幀率最高可達(dá)45 fps,之后,Redmon J再次提出了YOLOv2[8],與前代相比,在VOC2007測試集上的mAP由67.4%提高到76.8%,然而由于一個cell只負(fù)責(zé)預(yù)測一個物體,面對被遮擋目標(biāo)的識別表現(xiàn)不夠好.2018年4月,YOLO發(fā)布第三個版本YOLOv3[9],在COCO數(shù)據(jù)集上的mAP-50由YOLOv2的44.0%提高到57.9%,與mAP61.1%的RetinaNet[10]相比,RetinaNet在輸入尺寸500×500的情況下檢測速度約98 ms/幀,而YOLOv3在輸入尺寸416×416時檢測速度可達(dá)29 ms/幀,在保證速度的前提下,達(dá)到了很高的準(zhǔn)確率.
為了實(shí)現(xiàn)實(shí)時分析的目標(biāo),本文針對One-Stage方法的代表YOLOv3網(wǎng)絡(luò)模型進(jìn)行研究和改進(jìn),根據(jù)坐標(biāo)預(yù)測值和Sigmoid函數(shù)的特殊性質(zhì),將原版的損失函數(shù)進(jìn)行優(yōu)化,不僅減少了梯度消失的情況,而且可以使網(wǎng)絡(luò)收斂更加快速,同時通過分析數(shù)據(jù)集中目標(biāo)的分布情況修正anchor box,使得anchor box更加符合目標(biāo)尺寸,增強(qiáng)收斂效果,在Pascal VOC[11]數(shù)據(jù)集上的實(shí)驗(yàn)表明,在不影響檢測速度的情況下準(zhǔn)確率提高了1個百分點(diǎn)左右,且收斂速度變快,使目標(biāo)檢測能力進(jìn)一步提升.
YOLO網(wǎng)絡(luò)將目標(biāo)檢測問題轉(zhuǎn)化為回歸問題,合并分類和定位任務(wù)到一個步驟,直接預(yù)測物體的位置及類別,檢測速度可以滿足實(shí)時分析的要求.YOLOv3包含了新的特征提取網(wǎng)絡(luò)Darknet-53,以及三種尺度的YOLO層,也就是預(yù)測層.通過在三種尺度上進(jìn)行預(yù)測的方法,有效的增強(qiáng)了對不同大小物體及被遮擋物體的檢測效果,并引入躍層連接以強(qiáng)化收斂效果,同時采用隨機(jī)多尺度訓(xùn)練的方式增強(qiáng)了魯棒性.
YOLOv3提出了新的提取圖片特征的網(wǎng)絡(luò)Darknet53,作為全卷積網(wǎng)絡(luò),darknet53主要由卷積層、Batch Normalization及躍層連接組成,激活函數(shù)采用LeakyRelu,其網(wǎng)絡(luò)結(jié)構(gòu)如圖1所示.
圖1 YOLOv3的網(wǎng)絡(luò)結(jié)構(gòu)
YOLO卷積層負(fù)責(zé)輸出檢測結(jié)果,包括目標(biāo)的中心位置xy,寬高wh,置信度,以及類別,這種檢測分別在三個尺度上進(jìn)行,13×13,26×26,52×52,通道數(shù)為3,也就是每個box負(fù)責(zé)對三個anchor box進(jìn)行回歸,取其中的一個作為最終檢測結(jié)果,共對9個anchor box進(jìn)行回歸,所以對于一張輸入圖像,最后的輸出尺寸為1×(3×(13×13+26×26+52×52))×(5+k)=1×10647×(5+k),k代表類別數(shù),在COCO數(shù)據(jù)集上為80,VOC數(shù)據(jù)集上為20,如圖2所示.
圖2 YOLOv3網(wǎng)絡(luò)的輸出格式
在YOLOv1版本中,x,y,w,h是直接預(yù)測物體實(shí)際值,預(yù)測值的微小變化都會被放大到整個圖像的范圍,導(dǎo)致坐標(biāo)波動較大,預(yù)測不準(zhǔn)確.YOLOv2對其進(jìn)行了改進(jìn),其公式為:
其中,tx,ty為網(wǎng)絡(luò)預(yù)測值,經(jīng)過Sigmoid運(yùn)算將其縮放到0和1之間,tw,th也為網(wǎng)絡(luò)預(yù)測值,無需Sigmoid;cx,cy為cell坐標(biāo),也就是距離左上角的偏移量;pw,ph代表該cell對應(yīng)anchor box的寬高,計算出bounding box的位置,如圖3所示.通過對confidence這一項(xiàng)設(shè)定閾值,過濾掉低分的預(yù)測框,然后對剩下的預(yù)測框執(zhí)行非極大值抑制(Non Maximum Suppression,NMS)處理,得到網(wǎng)絡(luò)最終的預(yù)測結(jié)果.
圖3 YOLOv3的bounding box坐標(biāo)轉(zhuǎn)換公式
對于YOLOv3的損失函數(shù),Redmon J在論文中并沒有進(jìn)行講解,本文作者根據(jù)對Darknet,也就是Redmon J實(shí)現(xiàn)YOLOv3網(wǎng)絡(luò)的平臺的源代碼進(jìn)行解讀,總結(jié)出YOLOv3網(wǎng)絡(luò)的損失函數(shù)為:
其主要分為三大部分,坐標(biāo)損失,置信度損失及分類損失,λobj在該cell存在物體時為1,其他cell為0,且均采用SSE計算,最終Loss采用和的形式而不是平均Loss,主要原因?yàn)轭A(yù)測的特殊機(jī)制,造成正負(fù)樣本比巨大,尤其是置信度損失部分,以一片包含一個目標(biāo)為例,置信度部分的正負(fù)樣本比可以高達(dá)1:10646,如果采用平均損失,會使損失趨近于0,網(wǎng)絡(luò)預(yù)測變?yōu)槿?失去預(yù)測能力.并且,根據(jù)作者描述,Lin TY等提出的,用于解決正負(fù)樣本不均衡,使得網(wǎng)絡(luò)專注于困難樣本計算的Focal Loss無法解決這個問題,會導(dǎo)致mAP下降.
PASCAL VOC數(shù)據(jù)集是目標(biāo)分類、檢測等常用的數(shù)據(jù)集,通過模型在VOC2007 test部分的表現(xiàn)衡量目標(biāo)檢測模型的性能已經(jīng)成為常用的驗(yàn)證方法,在實(shí)際訓(xùn)練過程中,一般使用VOC2012的全部樣本及VOC2007的train及val部分樣本作為訓(xùn)練集,VOC2007 test部分作為測試集,本文也是如此.訓(xùn)練集部分包含圖片16 551張,物體40 058個,測試集包含圖片4952張,物體12 032個.根據(jù)標(biāo)簽數(shù)據(jù),對訓(xùn)練集的物體寬高進(jìn)行分析,其分布情況如圖4所示,可以發(fā)現(xiàn)VOC數(shù)據(jù)集中較小目標(biāo)占比較大.
作為聚類算法的一種,K-means具備簡潔快速,易于實(shí)現(xiàn)的優(yōu)點(diǎn),應(yīng)用非常廣泛,其基本思想是以空間中K個點(diǎn)作為形心,將最靠近他們的點(diǎn)進(jìn)行歸類,然后迭代更新這K個點(diǎn)的值,直到K個值不再變化或達(dá)到最大迭代次數(shù).本文使用K-means算法對VOC數(shù)據(jù)集進(jìn)行分析,結(jié)果如圖5,縱坐標(biāo)表示平均畸變程度,越小說明類內(nèi)距離越小,根據(jù)肘部法則選擇K值為9,并確定相應(yīng)的anchor box.
圖4 VOC物體寬高分布情況,大點(diǎn)為聚類結(jié)果
圖5 K-means聚類分析結(jié)果
作為深度神經(jīng)網(wǎng)絡(luò)對誤檢測樣本進(jìn)行懲罰的根據(jù),損失函數(shù)可以在很大程度上影響模型收斂的效果,如何設(shè)計更合適的損失函數(shù)以獲得更好地預(yù)測效果也成為模型優(yōu)化的重要方向,學(xué)界對此也進(jìn)行了很多研究[12,13].在YOLOv3網(wǎng)絡(luò)的最終輸出中,x,y,物體置信度以及類別置信度部分均經(jīng)過Sigmoid函數(shù)激活,然后采用SSE計算最終損失,從Sigmoid函數(shù)的導(dǎo)數(shù)圖像(圖6)可以看到,當(dāng)神經(jīng)網(wǎng)絡(luò)的輸出較大時,(x)會變得非常小,此時使用平方誤差得到的誤差值很小,導(dǎo)致網(wǎng)絡(luò)收斂很慢,出現(xiàn)誤差越大收斂越慢,也就是梯度消失的情況,為了解決這個問題,當(dāng)真實(shí)值只能取0或1時,一個常用的方法是采用交叉熵(cross-entropy)損失函數(shù),其形式為:
a代表神經(jīng)網(wǎng)絡(luò)經(jīng)過Sigmoid以后的輸出值,也就是a=σ(ωx+b),令z=ωx+b,可以計算出交叉熵函數(shù)的導(dǎo)數(shù).
圖6 Sigmoid函數(shù)及其導(dǎo)數(shù)
特別的,對于predx和predy的輸出,它們的真實(shí)值并不是0或1,而是0和1之間的某個值,也就是說predx,predy并不是離散變量,以truthx=predx=0.7為例,交叉熵?fù)p失為 -0.7 ln(0.7)-0.3 ln(0.3)≈0.61,不為0,所以不能采用交叉熵?fù)p失函數(shù).
通過以上分析可知,損失函數(shù)的導(dǎo)數(shù)形式f(x)需要具備以下性質(zhì): ①f(x)的定義域?yàn)閤2(-1,1),值域f(x)2(-1,1);②f(x)為 單調(diào)遞增函數(shù),且f(0)=0;③f(x)的 圖像需要關(guān)于坐標(biāo)原點(diǎn)對稱;④(x)≠0.因此,本文設(shè)計了一種新的損失函數(shù),稱為tan方損失(Tan-Squared Error,TSE),導(dǎo)數(shù)形式為LossGrad=tan(t-σ(z))/tan(1),在YOLOv3中,t-σ(z)2(-1,1),由于t也是不定項(xiàng),此差值與σ(z)本 身的取值無關(guān),令x=t-σ(z),作出 函數(shù)圖像如圖7.
圖7 TSE與SSE導(dǎo)數(shù)圖像
在本網(wǎng)絡(luò)的訓(xùn)練過程中,由于極其巨大的正負(fù)樣本比,訓(xùn)練開始時會難以避免地出現(xiàn)網(wǎng)絡(luò)輸出全零的情況,此時負(fù)樣本部分,也就是真實(shí)值為0的部分,其誤差逼近于0,而真實(shí)值為1的部分,誤差則非常的大,對于predx和predy來說,差值更是為(-1,1),而不是常見的(0,1),作者采用平方損失進(jìn)行計算,并且是定義了梯度值的計算方法,也就是直接使用公式grad=tx-predx進(jìn)行梯度計算,這也正是平方損失函數(shù)的導(dǎo)數(shù)形式,遵循同樣的思路,本文定義了TSE導(dǎo)數(shù)形式的計算公式,通過TSE與SSE的圖像(圖7)可以直觀地看出,TSE與SSE導(dǎo)數(shù)的值域均為(-1,1),并且TSE導(dǎo)數(shù)的絕對值要小于SSE,也就是說對于較大的誤差,可以將它進(jìn)行適當(dāng)?shù)乜s小,這樣當(dāng)梯度傳播到Sigmoid函數(shù)時,可以使小幅度地增大,加快初始時的收斂速度,減小梯度消失的影響;同樣的,對于誤差已經(jīng)逼近0的情況,由于TSE要略微小于SSE,可以使輸出層權(quán)重的調(diào)整幅度更小,使模型得到更好收斂.這種調(diào)整也應(yīng)該控制在一個較小的幅度,防止對輸出層的權(quán)重作出過大的調(diào)整,導(dǎo)致模型不收斂或者發(fā)散的情形.對兩函數(shù)求導(dǎo),得到他們的導(dǎo)數(shù)圖像如圖8.
可以看到,TSE導(dǎo)數(shù)的值域約為(-2.2,2.2),即使誤差極大導(dǎo)數(shù)也在有限范圍內(nèi),并且最小值約為0.64,不會出現(xiàn)梯度為0從而導(dǎo)致梯度消失.不同于SSE的常數(shù)梯度值,TSE的梯度會隨著誤差的變化而變化,具有誤差大時梯度大,誤差小時梯度小的性質(zhì),既能在誤差較大時加大權(quán)重的調(diào)整,也在誤差減小以后,以更小的變化率調(diào)整權(quán)重,使網(wǎng)絡(luò)模型可以收斂得更好,這是對 于連續(xù)變量predx和predyTSE所具有的優(yōu)勢.
圖8 TSE與SSE導(dǎo)數(shù)的梯度變化
對預(yù)測損失值的大小進(jìn)行控制可以增強(qiáng)反向傳播時卷積層權(quán)重調(diào)整的效果,TSE控制梯度變化的幅度是否合適也需要驗(yàn)證.將TSE與梯度調(diào)整幅度更大的損失函數(shù)進(jìn)行對比,其導(dǎo)數(shù)形式為:
從它與TSE的對比圖像如圖9.
圖9 TSE與另一函數(shù)對比
從圖9可以看出: 該函數(shù)在訓(xùn)練的初期可以對損失進(jìn)行更大幅度的調(diào)整,理論上來講可以更大程度地減少梯度消失的情況,使得預(yù)測層梯度保持在一個較大的數(shù)值.在實(shí)際的實(shí)驗(yàn)過程中,訓(xùn)練的初始階段Loss下降得非常快,正樣本的置信度上升速度也加快了很多,但是由于誤差靠近0時梯度的過度減小,負(fù)樣本的置信度未能得到有效下降,訓(xùn)練后期梯度消失的現(xiàn)象也導(dǎo)致正負(fù)樣本沒有被很好地區(qū)分開,模型收斂效果變差,最終的mAP很低;而且由于采用較大的學(xué)習(xí)率,訓(xùn)練中也出現(xiàn)了預(yù)測值變?yōu)镹an的情況,說明過大的調(diào)整幅度也可能導(dǎo)致梯度發(fā)散.
在Pascal VOC數(shù)據(jù)集上進(jìn)行實(shí)驗(yàn),使用兩塊1080TI的顯卡,顯存為2×12 GB,CPU為Intel Xeon E5-2620 V4@2.10 GHz,軟件環(huán)境為cuda9.0 + cudnn7,訓(xùn)練集為VOC07+12,測試集為07 test-dev,由于作者并未公布相關(guān)的mAP數(shù)據(jù),本文直接使用作者提供的訓(xùn)練配置文件進(jìn)行訓(xùn)練,總計訓(xùn)練了50 000個batch,除了更換損失函數(shù)和修改anchor box外不作其他改動,結(jié)果如表1所示.
表1 VOC數(shù)據(jù)集訓(xùn)練結(jié)果
由于本實(shí)驗(yàn)的主要目的是驗(yàn)證TSE的有效性,作者并沒有對訓(xùn)練時的超參數(shù)進(jìn)行仔細(xì)調(diào)參,不保證該mAP一定為YOLOv3網(wǎng)絡(luò)模型在VOC數(shù)據(jù)集上可以達(dá)到的最高值.通過最終的mAP值可以表明,只是改用TSE就可以得到1個百分點(diǎn)左右的提升,TSE可以使網(wǎng)絡(luò)獲得更好地收斂效果.
為了驗(yàn)證TSE相比于SSE在收斂速度方面所獲得的優(yōu)勢,采取每10 000個batch保存一次模型的方式,收集了5個階段的mAP數(shù)據(jù),如圖9所示,可以看出,在訓(xùn)練10 000個batch時,TSE就可以比SSE取得更高的mAP值,并且在30 000個batch時mAP就達(dá)到了SSE訓(xùn)練40 000個batch的水平,說明使用TSE可以使網(wǎng)絡(luò)收斂得更加快速.當(dāng)訓(xùn)練40 000個batch以后,學(xué)習(xí)率被減少為原來的1/10,模型進(jìn)一步收斂,mAP獲得了比較大的提升,并且受益于TSE的函數(shù)性質(zhì),模型獲得了1個百分點(diǎn)左右的mAP提升.
圖10 三種方法訓(xùn)練的mAP
本文分析了YOLOv3模型的結(jié)構(gòu),并且對它實(shí)際的訓(xùn)練應(yīng)用過程做出了有益嘗試.通過對原版損失函數(shù)特點(diǎn)的分析,提出了一種新的損失函數(shù)TSE,在VOC數(shù)據(jù)集上的實(shí)驗(yàn)結(jié)果表明: ① 與SSE相比,TSE適用于連續(xù)變量的情況,減少了梯度消失的情況,mAP穩(wěn)步提升;② 模型的收斂速度得到提升,能夠使訓(xùn)練所需輪數(shù)減少,節(jié)省訓(xùn)練所需時間;③ 對比實(shí)驗(yàn)表明TSE進(jìn)行梯度調(diào)整的幅度比較合適,可以在保證正負(fù)樣本區(qū)分度的基礎(chǔ)上有效增強(qiáng)正樣本的置信度.基于改進(jìn)損失函數(shù)的網(wǎng)絡(luò)模型取得1個百分點(diǎn)左右的mAP提升,獲得了更好的檢測效果.
目前,YOLO系列網(wǎng)絡(luò)由于其檢測快速的優(yōu)點(diǎn),已經(jīng)在實(shí)際生產(chǎn)中獲得了大量應(yīng)用.如鄭志強(qiáng)等將YOLO網(wǎng)絡(luò)應(yīng)用于遙感圖像的飛機(jī)識別[14],王福建等將YOLO網(wǎng)絡(luò)應(yīng)用于車輛信息的快速檢測[15],蔡成濤等基于YOLO網(wǎng)絡(luò)實(shí)現(xiàn)機(jī)場跑道目標(biāo)的快速檢測[16],都取得了非常好的效果,本文提出的方法適用面廣,通用性強(qiáng),可以很好地應(yīng)用于現(xiàn)有的YOLO檢測系統(tǒng)中,獲得更為準(zhǔn)確的檢測效果,使系統(tǒng)性能獲得進(jìn)一步增強(qiáng).
本文從損失函數(shù)的角度,提出了現(xiàn)有網(wǎng)絡(luò)的改進(jìn)方法.在下一步的研究工作中,將會在更多其他的網(wǎng)絡(luò)模型中,采用更大規(guī)模的數(shù)據(jù)集如MSCOCO[17]等,用以驗(yàn)證TSE的通用性與魯棒性;同時也對連續(xù)變量的梯度控制問題,尋求更好的解決方案;另外,針對于網(wǎng)絡(luò)結(jié)構(gòu)本身的改進(jìn),如何設(shè)計出性能更強(qiáng)的網(wǎng)絡(luò)來提取圖像特征,也需要更加細(xì)致地研究.
圖11 檢測結(jié)果示例