牛洪超,白 松,胡曉兵
(1.四川大學 機械工程學院,四川 成都 610065;2.四川大學 宜賓產(chǎn)業(yè)技術(shù)研究院,四川 宜賓 644000;3.瀘州市科技評估和成果轉(zhuǎn)化中心 科技管理及開發(fā)室,四川 瀘州 646000)
視覺定位[1]作為機器視覺的研究熱點之一,如何實現(xiàn)特定目標在復雜運行環(huán)境下的快速檢測,是其研究的主要問題之一。目前視覺定位系統(tǒng)[2]中檢測方法主要采用傳統(tǒng)的特征提取與模板匹配[3]相結(jié)合的算法[2],但是這類檢測算法對于視點變化與不完整特性的魯棒性較差,易受外部環(huán)境的干擾;近年來,深度學習技術(shù)的快速發(fā)展為視覺定位提供了一種新的思路,并且相比于傳統(tǒng)的特征提取方法,深度學習所提取的特征魯棒性更好,在各種復雜環(huán)境下也具有較好的檢測能力,因此本文選用基于深度學習的目標檢測算法識別出自定義靶標,通過對檢測到的靶標進行解碼,以此來獲取移動設(shè)備的相對位置。目前基于深度學習的一階段檢測算法中,SSD[4]算法對于圖片分辨率敏感,且檢測效果不佳。YOLO[5,6]系列算法通過利用輸入圖像所包含的信息直接得出目標的類別和邊界框,其檢測速度較快,尤其是最新YOLOv5系列在GPU的檢測速度最快可達到0.007 s??紤]到靶標簡單、便于識別等特點0,本文選擇通過改進YOLOv5s模型來進行靶標檢測定位的研究。
本文所做的主要工作是首先對YOLOv5網(wǎng)絡進行改進,以此來進一步提升檢測性能;其次提出快速解碼算法,對提取出的靶標進行解碼;最后將改進YOLOv5s檢測算法與解碼算法相結(jié)合,設(shè)計一套靶標檢測系統(tǒng),檢測實驗結(jié)果表明,此系統(tǒng)取得了實時性與準確性較為平衡的效果。
本文所提出的基于改進YOLOv5s的靶標檢測整體框架如圖1所示,所采用的靶標是一種類似于二維碼的圖案,其編碼信息可以根據(jù)實際需求進行擴展,并且其結(jié)構(gòu)比二維碼更加簡單,檢測與處理速度更快。其總體流程如下:將由圖像采集設(shè)備(如工業(yè)相機)實時采集的現(xiàn)場圖片作為改進YOLOv5s算法的輸入,通過前向計算,得到圖片中的靶標位置信息;提取靶標區(qū)域,經(jīng)過高斯模糊、形態(tài)學操作以及透視變換處理后,再由解碼算法提取其編碼信息;綜合靶標的位置信息和編碼信息,最終確定設(shè)備的空間相對位置或絕對位置。
YOLO算法首先將圖片進行劃分單元格,在每個單元格里進行候選框的判斷,若目標的中心落在這個單元格中,則這個單元格就負責預測這個目標,正是這種基于單元格的檢測方式,使得YOLO算法的檢測速度較為快速。目前YOLO系列算法已更新至YOLOv5,其中YOLOv5s為其系列中最小的模型,其網(wǎng)絡結(jié)構(gòu)如圖2所示。
圖1 系統(tǒng)框架
圖2 YOLOv5s網(wǎng)絡結(jié)構(gòu)
YOLOv5s網(wǎng)絡是在原YOLO系列的基礎(chǔ)上,引入了很多最新的模塊與訓練策略,使得其整體的檢測能力都得到了較大的提升。從圖2可以得知,YOLOv5由主干網(wǎng)絡、頸部網(wǎng)絡以及頭部網(wǎng)絡3部分組成。在主干網(wǎng)絡中,主要采用了CSP結(jié)構(gòu)與SPP模塊。CSP結(jié)構(gòu)是在殘差結(jié)構(gòu)上加上CSPNet[7],將梯度的變化集成到特征圖上。CSP結(jié)構(gòu)不僅可以減少整體的計算量,同時也有效增強卷積神經(jīng)網(wǎng)絡的學習能力。SPP模塊是通過空間金字塔池化操作來增加網(wǎng)絡整體的感受野。頸部網(wǎng)絡使用PANet[8]結(jié)構(gòu),通過上下層信息的交流,增強網(wǎng)絡的整體檢測能力。頭部網(wǎng)絡采用3個檢測頭,分別為20×20、40×40和80×80,用于檢測不同大小的物體。
雖然目前YOLOv5s算法在識別準確度與速度上具有很大的優(yōu)勢,但是其主要是針對于COCO數(shù)據(jù)集,若是用來檢測特定目標,需要對其進行改進;同時,特征增強模塊PANet注重于深度特征,對小目標的檢測能力有所下降,且上采樣增加了一些噪聲,因此為使YOLOv5s模型更適應本實驗,對其進行以下改進與探索,其改進后的模型如圖3所示。
圖3 改進后的YOLOv5網(wǎng)絡
(1)主干網(wǎng)絡的改進(引入V-CSPNet模塊)
目前基于深度學習的目標檢測模型都是以CNN分類網(wǎng)絡作為特征提取器,其中殘差網(wǎng)絡ResNet是最常用的特征提取網(wǎng)絡,但是殘差網(wǎng)絡所提取的特征不具有細粒度,且其感受野也受到一定的限制。而DenseNet[9]網(wǎng)絡是一種通過密集連接的方式將不同的層進行聚合,以此來整合了不同的感受野,使其可以提取出更細更深的特征。與ResNet網(wǎng)絡相比,DenseNet網(wǎng)絡是通過密集連接的方式來聚合特征,而殘差網(wǎng)絡則是通過求和的方式,原始的信息在相加的時候會被覆蓋掉,而利用拼接的方式可以將原始的信息持續(xù)傳下去。同時,研究表明:具有多個感受野的抽象特征可以捕獲不同尺度的視覺信息,因此DenseNet保留和積累了更多不同感受野的特征,比ResNet具有更好、更多樣化的特征表達能力。因此在提取特征能力上比ResNet更強,而且參數(shù)與計算量更少,但是由于DenseNet中密集連接所導致高內(nèi)存訪問成本與能量消耗,使得其預測速度較慢。針對上述問題,最近提出的網(wǎng)絡模型VOVNet[10]在DenseNet基礎(chǔ)上,刪除密集連接,只在最后一層聚合前面所有層的信息,這不僅繼承了DenseNet的優(yōu)點,同時有效解決了內(nèi)存訪問問題和充分利用了GPU的并行計算能力,其性能表現(xiàn)也超越DenseNet與ResNet。其中VOVNet網(wǎng)絡中的OSA(one-shot aggregation)模塊如圖4(a)所示。
圖4 主干網(wǎng)絡的改進
本文使用改進的V-CSPNet模塊替代YOLOv5主干網(wǎng)絡中的BottlenCSP1模塊。其做法是在OSA模塊的基礎(chǔ)上融入跨階段局部網(wǎng)絡(CSPNet)與殘差結(jié)構(gòu)。CSPNet是WANG等提出的一種可增強CNN學習能力的新型網(wǎng)絡,可以消除較高的計算結(jié)構(gòu),降低內(nèi)存成本,本文將CSPNet的思想與其相結(jié)合的主要目的是使該架構(gòu)能夠?qū)崿F(xiàn)更豐富的梯度組合,同時減少計算量。這個目的是通過將基礎(chǔ)層的特征圖分割成兩部分,然后通過提出的跨階段分層(cross-stage hierarchy)結(jié)構(gòu)進行合并來實現(xiàn),通過分割梯度流,使梯度流在不同的網(wǎng)絡路徑中傳播,進一步提升模型提取特征的能力。殘差網(wǎng)絡結(jié)構(gòu)可以使得模型訓練的更深更細,且在一定程度上防止過擬合現(xiàn)象的產(chǎn)生。
(2)特征增強模塊的改進
頸部網(wǎng)絡主要起到特征增強的作用,常用的兩種結(jié)構(gòu)如圖5所示。
圖5 常用的特征增強模塊
FPN[11]結(jié)構(gòu)利用不同的卷積層去進行預測,實現(xiàn)了多尺度目標的檢測,且這種自頂向下的結(jié)構(gòu),將深層語義信息傳送到淺層網(wǎng)絡層中,有效提高了對小目標的檢測能力;但是FPN結(jié)構(gòu)對大中型目標的檢測不夠重視,從而限制了模型性能的進一步提升。在YOLOv5中,采用的是PANet結(jié)構(gòu),在FPN基礎(chǔ)上又增加了一條信息流,如圖5(b)所示。此方法可以有效提升大中型目標的檢測能力。但是由于該方法側(cè)重于深度特征圖的增強,削弱了對小目標的檢測強度。為解決上述的缺點,本文提出一種用于目標檢測的新穎特征增強模型,其結(jié)構(gòu)如圖6所示。
從圖6可以看出:改進后的PANet網(wǎng)絡,是通過兩個串聯(lián)的特征金字塔網(wǎng)絡和一條跨層連接結(jié)構(gòu)組成,以此來實現(xiàn)更豐富的多尺度上下文特征融合。左邊是原YOLOv5s網(wǎng)絡中的PANet結(jié)構(gòu),本文用 {C3,C4,C5} 表示主干網(wǎng)絡第3、第4、第5階段生成的特征圖,分別對應于對輸入圖像下采樣8倍、16倍和32倍;通過PANet結(jié)構(gòu)輸出為 {P3,P4,P5}, 增加的信息流結(jié)構(gòu)產(chǎn)生 {Q3,Q4,Q5}, 對應于3個檢測頭,用于最終的目標檢測。除了雙金字塔結(jié)構(gòu)外,改進后的PANet網(wǎng)絡還包含一條獨立的自底向上的跨層結(jié)構(gòu),稱為A1模塊。
如上所述:原來的FPN結(jié)構(gòu)可以很好處理小目標,而PANet結(jié)構(gòu)可以很好地用于大目標和中等目標的檢測。為了在不同尺度的目標檢測上取得良好的整體性能,我們提出改進的PANet結(jié)構(gòu),由增加的信息流與A1模塊組成。為了保證對小目標的檢測能力,通過引入一條自頂而下的結(jié)構(gòu),將豐富的深層信息進一步傳送至底層,增強底層的信息表達能力,得到用于預測的特征 {Q3,Q4,Q5}。 為緩解上采樣與降采樣所造成的信息損失,引入一條跨層結(jié)構(gòu),將主干網(wǎng)絡中的輸出{C3}作為輸入,送入到最后一層{Q3}中,用來指導小目標特征的生成,融合更多尺度的特征。改進后的PANet網(wǎng)絡在保留PANet網(wǎng)絡的優(yōu)點之上,進一步增強對小目標的檢測能力,豐富每一層的特征以及減少信息的損失,使得特征增強模塊具有更強的增強作用,便于后面檢測頭的預測處理。
圖6 改進后的PANet結(jié)構(gòu)
(3)優(yōu)化損失函數(shù)
本文中只含有一個類別,不存在分類誤差,利用Distance-IOU[12]和Focal Loss[13]來設(shè)計改進算法的損失函數(shù)。在目標檢測框的損失方面,相比于YOLOv2與YOLOv3使用的Intersection Over Union(IOU) Loss,DIOU綜合分析了邊界框的重疊與中心點距離等因素,可以實現(xiàn)更快更有效更穩(wěn)定進行回歸。DIOUB,Bgt可以表示為
(1)
式中:B表示預測框,Bgt表示真實框,b,bgt分別表示預測框與目標框的中心點,ρ2(b,bgt) 表示的是計算兩個中心點間的歐氏距離。c代表是能夠包圍B和Bgt的最小矩形框的對角線距離。則DIOULoss可以表示為
DIOULoss=1-DIOUB,Bgt
(2)
在訓練數(shù)據(jù)集中包含大量簡單的負樣本(背景),占總損失的大部分比例,將會導致模型的優(yōu)化方向更多的偏向負樣本,這也是一階段算法的精度落后于二階段算法的主要原因,因此本文為緩解樣本的類別不均衡問題,采用Focal Loss來對目標的置信度進行評價,則Lossconf可以表示為
(3)
式中:ygt表示真實目標的置信度,yp表示預測目標的置信度,其中α取0.25,γ取1.5。
則總損失Losstotal可以表示為
Losstotal=DIOULoss+Lossconf
(4)
(4)生成合適的anchors
采用YOLOv5s中改進的K-means聚類算法對數(shù)據(jù)集進行重新聚類,生成合適的anchors。最終聚類算法所產(chǎn)生的anchors為[32,32],[51,52],[70,70],[90,90],[108,109],[130,131],[167,166],[210,211],[261,262]。
經(jīng)過改進YOLOv5s目標檢測算法提取出來的靶標圖像可能存在光照、遮擋以及傾斜等干擾因素,需要對其進行后處理來保證后續(xù)的解碼操作。其后處理與解碼操作總體流程如圖7所示,后處理操作主要用于保證靶標的完整性和清晰度,首先對檢測算法所提取的區(qū)域,通過長寬比與面積來判斷區(qū)域內(nèi)的靶標圖案是否完整,再進行擴充邊界,利用高斯模糊、二值化與開運算提高靶標的清晰度,最后找出最大輪廓與透視變換操作進行校正處理。其中擴充邊界主要是因為目標檢測提取的靶標有時無法顯示出邊界且為保證后續(xù)變換的準確度,在檢測框的基礎(chǔ)上對其擴充適當?shù)倪吔?本文中各邊擴充值為10像素)。解碼操作主要是對處理后的靶標圖案進行解碼,提取出靶標內(nèi)部的9個方格,讀取每個方格中心點的像素值,再設(shè)置閾值,低于閾值的為1,高于閾值的為0,以此輸出二進制信息。
圖7 后處理與解碼操作
本實驗數(shù)據(jù)均在戶外與實驗室環(huán)境下拍攝獲得,共4200張圖片。為增加樣本的多樣性,所采集的數(shù)據(jù)種類如圖8所示。對于收集好的數(shù)據(jù)集,使用LabelImg軟件對每張靶標圖片進行位置與類別信息的標注,將標注好的數(shù)據(jù)集劃分為訓練集與測試集,其中訓練集共3360張,測試集共840張。
圖8 數(shù)據(jù)集類型
為提高模型的泛化性和魯棒性,針對訓練數(shù)據(jù)集使用了Mosaic[14]數(shù)據(jù)增強。即將訓練集中2張或者4張圖片進行隨機裁剪,然后再拼接到一張圖片上作為訓練數(shù)據(jù),增加了訓練過程中batch的數(shù)量和樣本多樣性,減少訓練過程中batch_size的大小,降低對硬件的要求,同時增加了很多的困難樣本用于提高模型的檢測能力。
在訓練過程中,通過數(shù)據(jù)加載器對訓練集進行加載,采用上述增強技術(shù)進行處理,增強后的訓練集數(shù)據(jù)如圖9所示。
圖9 Mosaic圖像增強
3.2.1 網(wǎng)絡訓練
本文實驗的硬件環(huán)境為CPU Core(TM) 1.80 GHz,GPU NVIDIA GeForce RTX 2080Ti,內(nèi)存16 G,軟件環(huán)境為python 3.7,Torch 1.6.0。整個過程中采用SGD算法來改變參數(shù),每批次的數(shù)據(jù)量設(shè)為8,訓練集中全部樣本的訓練次數(shù)(epoch)為200次。
3.2.2 評價指標
我們用召回率(recall)、查準率(precision)、平均準確率(AP)、解碼精度和推理時間來對實驗結(jié)果進行評估。其中召回率與查準率的定義如下
(5)
(6)
其中:TP為包含目標的數(shù)據(jù)集中正確檢測出來的數(shù)量;FN為包含目標的數(shù)據(jù)集中沒有被檢測出來的數(shù)量;FP為在識別出的正樣本數(shù)據(jù)集中被錯誤識別為正樣本的數(shù)量。
AP值:根據(jù)靶標的查準率與召回率繪制曲線,AP值表示的就是這條曲線與坐標軸之間的面積。本文中求值時,IOU設(shè)置范圍為0.5~0.95,也就是以 (0.5,0.55,0.6,0.65,0.7,0.75,0.8,0.85,0.9,0.95) IOU值的AP的平均值當成AP,進行這樣IOU增量平均的原因是:只以0.5IOU為閥值不一定是最好的模型,可能僅僅在0.5閥值表現(xiàn)得很好,在其它閥值處表現(xiàn)得很差,為了更好地評估整體模型的準確度,從而計算一個模型在各個IOU值的AP, 取其平均值。
3.2.3 實驗分析
改進前后的YOLOv5s的對比實驗,本文的實驗結(jié)果如表1所示。表1與圖10列出了YOLOv5s與改進后YOLOv5s兩個模型在平均準確率、AP值、訓練損失以及檢測時間的對比結(jié)果。
表1 改進前后YOLOv5s對比
圖10 兩種模型的平均準確率AP與訓練損失值對比
從表1與圖10可知:改進后的YOLOv5s模型AP值達到96.70%,其檢測時間為0.010 s,相比于YOLOv5s,其AP值提升了3.35%,其檢測時間基本一致,且改進后的YOLOv5s最終損失穩(wěn)定在0.018 96,比YOLOv5s有著更低的平衡損失,模型收斂更加穩(wěn)定。兩者的對比實驗效果如圖11所示。
圖11 檢測效果
從圖11中可以看出:第一組與第二組圖中YOLOv5s模型均有遮擋的靶標沒有檢測出來,改進后的YOLOv5s均檢測出來;第三組圖中YOLOv5s對于遮擋型靶標給出的置信度較低,因此可知,比起原YOLOv5s,改進后的YOLOv5s模型檢測效果更好,及時檢測到靶標,對于停車定位等操作有著重要的意義。
3.2.4 在VOC數(shù)據(jù)集上模型對比實驗
為驗證改進后的YOLOv5模型的有效性,同時驗證其實驗結(jié)果并非由于數(shù)據(jù)集過小所造成的偶然性造成的,本文在PASCAL VOC 2007和PASCAL VOC 2012數(shù)據(jù)集進行對比實驗,其實驗結(jié)果見表2。
表2 模型實驗對比
從表2可以看出,當IOU值設(shè)為0.5時,改進后的YOLOv5s的平均準確率為81.00%,相比于YOLOv5s模型提升2.7%;當IOU值設(shè)為0.5至0.95時,改進后的YOLOv5s模型的平均準確率為56.69%,相比于YOLOv5s模型提升4.34%。上述結(jié)果表明,該改進算法產(chǎn)生的目標檢測結(jié)果具有較高的準確率,能夠較好地解決目標檢測問題。
本文提出了一種基于卷積神經(jīng)網(wǎng)絡的自定義靶標定位檢測算法,該算法將目標檢測算法與目標解碼算法相結(jié)合,充分利用了自定義靶標的優(yōu)勢,有助于解決傳統(tǒng)視覺定位的難點和不足,具有很高的社會和經(jīng)濟價值。一方面,通過對YOLOv5s網(wǎng)絡進行改進獲得適合的目標檢測模型,所做的改進為:在主干網(wǎng)絡中加入改進的OSA模塊;在PANet模塊的基礎(chǔ)上引入信息流與跨層連接;改進損失函數(shù)與合適的anchor。另一方面,使用后處理算法進行降噪、去模糊和透視變換,以減少外部因素的干擾,使檢測能力更加完善,最后通過解碼算法輸出目標中包含的信息。實驗結(jié)果表明,在光照、遮擋、模糊等復雜環(huán)境下,該算法能夠快速識別自定義目標并輸出中所包含的信息,其速度和準確性都取得了較好的效果,檢測速度比二維碼更加快速,可做到實時效果,方便部署到工業(yè)檢測和定位控制領(lǐng)域。將來,我們期望在實際部署模型時進行性能優(yōu)化,尤其是在準確性方面以及部署平臺的性能優(yōu)化方面。