宋立博,費燕瓊
(1.上海交通大學(xué)學(xué)生創(chuàng)新中心,上海 200240;2.上海交通大學(xué)機械與動力工程學(xué)院,上海 200240)
隨著芯片計算能力的快速提高及深度網(wǎng)絡(luò)技術(shù)的成熟,以深度學(xué)習(xí)為基礎(chǔ)的機器智能時代已經(jīng)來臨。Tensorflow、MXNet、Pytorch和Caffe等開源深度網(wǎng)絡(luò)尤其是高效的Darknet深度網(wǎng)絡(luò)的推出,更促進智能技術(shù)在語音識別[1-2]、人臉及姿態(tài)識別[3-5]、電力設(shè)備及設(shè)施[6-7]、零件質(zhì)量及缺陷檢測[8-9]、輪廓檢測[10]、垃圾回收[11]及農(nóng)業(yè)相關(guān)[12-13]等領(lǐng)域成功工程應(yīng)用的同時,也成為國內(nèi)外學(xué)術(shù)機構(gòu)的研究熱點之一。
實際工程應(yīng)用證實了深度網(wǎng)絡(luò)實現(xiàn)的機器智能的高效性。但這些深度網(wǎng)絡(luò)普遍運行在Python軟件上,普遍存在硬件要求高、環(huán)境依賴項多、搭建難度大及對使用者有一定編程基礎(chǔ)要求等的缺點。由于算力限制,深度網(wǎng)絡(luò)在樹莓派等邊緣設(shè)備上運行速度更慢,從而限制了其在移動機器人領(lǐng)域的工程應(yīng)用。本文以上海交通大學(xué)研發(fā)的裂縫檢測機器人為例,研究簡化YOLOv4-tiny網(wǎng)絡(luò)及在樹莓派上實現(xiàn)裂縫智能檢測的方法和技術(shù)。
目標(biāo)檢測是深度網(wǎng)絡(luò)及其算法的主要應(yīng)用領(lǐng)域之一。傳統(tǒng)上,物體檢測有兩階段(two-stages)和一階段(one-stage)兩種方法。其中,基于候選區(qū)域(Region Proposal)的R-CNN,F(xiàn)ast R-CNN,F(xiàn)aster R-CNN等R-CNN系算法[14]就是典型的兩階段方法,其特點是先通過啟發(fā)式方法或卷積神經(jīng)網(wǎng)絡(luò)(convolutional neural network,CNN)產(chǎn)生一系列候選框,再對這些候選框進行分類與回歸。而一階段方法則是采用不同尺度和長寬比在圖片不同位置均勻采樣,利用卷積CNN提取特征后直接進行分類與回歸,將候選框產(chǎn)生與分類過程合二為一,典型的有單發(fā)多窗檢測器(single shot multibox detector,SSD)[15-16]和YOLO(you only look once)兩種算法。相比較而言,一階段方法速度較快、準(zhǔn)確度稍低且訓(xùn)練較為困難。
YOLO算法建立在華盛頓大學(xué)Redmon J.團隊推出的Darknet深度網(wǎng)絡(luò)框架基礎(chǔ)之上,采用C語言和CUDA編寫,無依賴,速度快,可在Windows及Linux等系統(tǒng)及CPU和GPU等多種硬件上快速編譯和運行。2020年4月,Bochkovskiy等[17]在考慮了邊框重合度、中心距離和寬高比等尺度信息的完全交并比(complete-intersection-over-union,CIoU)損失函數(shù)等基礎(chǔ)上推出YOLOv4算法,Mosaic數(shù)據(jù)增廣、DropBlock正則化等數(shù)據(jù)增強方法的應(yīng)用使其在MS COCO數(shù)據(jù)集上的平均精度均值(mean average precision,mAP)提升至43.5%,性能較其他版本YOLO算法有了很大提升。
YOLOv4具有162層網(wǎng)絡(luò)結(jié)構(gòu),使用三個特征層進行分類?;貧w預(yù)測骨干網(wǎng)絡(luò)采用CSPDarknet53,以空間金字塔池化(spatial pyramid pooling,SPP)和PANet為脖頸(Neck)的附加模塊和特征融合模塊。相對于一般PC和樹莓派等算力較弱的計算設(shè)備,YOLOv4運行速度較慢,訓(xùn)練和檢測時間較長。2020年6月,Bochkovskiy團隊[18]在YOLOv4網(wǎng)絡(luò)結(jié)構(gòu)基礎(chǔ)之上,推出只有38層結(jié)構(gòu)的簡化版YOLOv4,稱為YOLOv4-tiny。與YOLOv4相比,YOLOv4-tiny在主干特征提取網(wǎng)絡(luò)、脖頸和頭部(head)等方面均做了極大簡化。YOLOv4-tiny主干特征提取網(wǎng)絡(luò)采用CSPDarknet53-tiny,一般以416×416×3圖像為輸入。
在樹莓派等邊緣設(shè)備上運行時,38層網(wǎng)絡(luò)結(jié)構(gòu)的YOLOv4-tiny速度依然較慢,簡化后再加速就是可能的技術(shù)途徑了。學(xué)術(shù)界以YOLOv4系列算法為基礎(chǔ)進行了改進,主要手段有如下幾種。
(1)數(shù)據(jù)增強。結(jié)合采用Mosaic和CutMix等多種數(shù)據(jù)增強方法和策略,解決單類檢測和小目標(biāo)檢測時正負(fù)樣本不平衡問題,使用小樣本構(gòu)建具有多種數(shù)據(jù)特征的數(shù)據(jù)集[19];
(2)改進特征融合。結(jié)合低層信息豐富特征提取網(wǎng)絡(luò)層次結(jié)構(gòu),使用多尺度融合及使用損失函數(shù)加權(quán)來約束權(quán)重和偏置以提高特征利用率。同時,使用CIoU等作為邊框回歸損失函數(shù)加快模型收斂速度[20];
(3)改動網(wǎng)絡(luò)特征層數(shù)量。通過刪減或增加網(wǎng)絡(luò)中相關(guān)的特征提取層,以實現(xiàn)網(wǎng)絡(luò)改進[21-22];
(4)改進特征提取網(wǎng)絡(luò)。這是簡化結(jié)構(gòu)并提高性能的主要技術(shù)手段,主要方法有使用GhostNet[23]、逆殘差組件(Inverted Residual Unit)[24]及將MobileNetV3作為主干特征提取網(wǎng)絡(luò)[25],再結(jié)合特征融合層引入跨階段部分網(wǎng)絡(luò)(cross stage partial network,CSP)結(jié)構(gòu)、融合卷積層和BN(batch normalization)層的方法或軟性非極大值抑制(soft DIoU-non-maximum suppression,Soft-DIoU-NMS)等算法或K-means聚類方法優(yōu)化錨框選取以提高網(wǎng)絡(luò)檢測能力。
除刪減特征提取層外,文獻[19-25]所述簡化方法依然沒有顯著減少CPU計算量及提高在樹莓派上部署的可能性。本文采用的技術(shù)方法是刪減一個用于特征提取的殘差網(wǎng)絡(luò)結(jié)構(gòu)及改變最后一個route層連接的方法,在保證網(wǎng)絡(luò)參數(shù)不變的條件下實現(xiàn)目標(biāo)特征的盡早前向傳播。其算法如圖1所示。
圖1 改進YOLOv4-tiny網(wǎng)絡(luò)結(jié)構(gòu)Fig.1 Improved network structure of YOLOv4-tiny
由此可見,改進YOLOv4-tiny算法主要在于殘差網(wǎng)絡(luò)層的刪減及特征的后向傳遞與route層連接。作為比較,本文設(shè)計了兩種簡化形式。
YOLOv4-lite1網(wǎng)絡(luò)結(jié)構(gòu)是第一種簡化形式。與標(biāo)準(zhǔn)YOLOv4-tiny相比,YOLOv4-lite1網(wǎng)絡(luò)有如下幾個特點:①去除了第二個殘差網(wǎng)絡(luò)結(jié)構(gòu),僅使用兩個殘差網(wǎng)絡(luò)進行特征提取;②在第10層conv卷積層和第11層conv卷積層之間增加了一個maxpool池化層以匹配原第三個殘差網(wǎng)絡(luò)結(jié)構(gòu)的輸入;③最后一層route層與新結(jié)構(gòu)中的第12層conv卷積層相連,新網(wǎng)絡(luò)具有33層結(jié)構(gòu),未改變標(biāo)準(zhǔn)YOLOv4-tiny雙YOLO頭輸出形式。
采用netron工具表示的YOLOv4-lite1網(wǎng)絡(luò)結(jié)構(gòu)(部分)如圖2所示,虛線內(nèi)結(jié)構(gòu)為YOLOv4-lite1網(wǎng)絡(luò)最大變化。最大變化之一是在原第三層殘差網(wǎng)絡(luò)之前增加一個maxpool池化層在降維的同時減少運算量,第二個變化是第一層殘差網(wǎng)絡(luò)前向傳播后再上采樣與第一個YOLO輸出融合,以用于較小裂縫檢測。
圖2 YOLOv4-lite1網(wǎng)絡(luò)結(jié)構(gòu)Fig.2 Structure of YOLOv4-lite1
與YOLOv4-lite1相比,YOLOv4-lite2網(wǎng)絡(luò)最后一個route層連接的是第17層,其余與YOLOv4-lite1網(wǎng)絡(luò)相同。去除與圖2a相同部分,其余部分結(jié)構(gòu)如圖3所示。
圖3 YOLOv4-lite2網(wǎng)絡(luò)結(jié)構(gòu)(部分)Fig.3 Structure of YOLOv4-lite2(part)
由此可見,除最后一個route層連接外,YOLOv4-lite1和YOLOv4-lite2網(wǎng)絡(luò)是完全類似的。
因未能獲取待測建筑物的實際裂縫圖片,以“裂縫”為關(guān)鍵詞在百度上使用Python爬蟲程序下載了166張網(wǎng)絡(luò)照片,街拍200余張裂縫圖片。將圖片分為大裂縫、小裂縫、斑駁裂縫和表面脫落等4種類型后,使用imagemagick軟件將其裁剪為416×416的標(biāo)準(zhǔn)尺寸照片,再經(jīng)旋轉(zhuǎn)、鏡像和曝光度調(diào)整等處理得到800余張有效照片數(shù)據(jù)集,嚴(yán)格按照Pascal VOC格式和目錄組織。使用官配Python軟件按7:2:1比例隨機分為訓(xùn)練集、測試集和驗證集。
從https://github.com上下載了AlexeyAB版本的Darknet深度框架源代碼,修改后以輸出預(yù)測框中心坐標(biāo)、置信度、類別統(tǒng)計、各類別物體數(shù)量及檢測物體總計數(shù)等。在64位Ubuntu16.04環(huán)境下結(jié)合MX150顯卡對應(yīng)的CUDA編譯生成GPU版本Darknet可執(zhí)行文件。
分別按照如圖2和圖3所示簡化版YOLOv4-tiny網(wǎng)絡(luò),修改YOLOv4-tiny.cfg配置文件,保存間隔burn_in和學(xué)習(xí)率learning_rate等采用默認(rèn)參數(shù),未調(diào)整其他參數(shù)。
無預(yù)訓(xùn)練權(quán)重文件的訓(xùn)練命令為:
至第10 000個迭代周期終止,分別得到Y(jié)OLOv4-lite1_1000.weights,YOLOv4-lite1_2000.weights等10個權(quán)重文件及YOLOv4-lite2_1000.weights,YOLOv4-lite2_2000.weights等10個權(quán)重文件。
為驗證裂縫檢測功能,作者將經(jīng)NNpack深度網(wǎng)絡(luò)工具包加速的AlexeyAB版Darknet部署在樹莓派4B上,使用make all指令編譯后生成./darknet可執(zhí)行文件。將相關(guān).cfg配置文件和.weights權(quán)重文件拷貝至MicroSD卡相關(guān)目錄內(nèi),即完成裂縫智能檢測系統(tǒng)在樹莓派4B邊緣設(shè)備上的部署。
在樹莓派4B上分別使用2 000、4 000、6 000和8 000次迭代周期生成的weights權(quán)重文件及YOLOv4-lite1及YOLOv4-lite2網(wǎng)絡(luò)進行了驗證。4個圖片文件在驗證集和測試集中隨機抽選,采用默認(rèn)thresh閾值時實驗結(jié)果如圖4~圖7所示。其中,圖4~圖7的分圖a為YOLOv4-lite1實驗結(jié)果,b為YOLOv4-lite2實驗結(jié)果,c為標(biāo)準(zhǔn)YOLOv4-tiny實驗結(jié)果。
圖4 2 000次迭代周期生成的weights權(quán)重文件實驗結(jié)果Fig.4 Experiment results of the 2000-epoch weights file
圖7 8 000次迭代周期生成的weights權(quán)重文件實驗結(jié)果Fig.7 Experiment results of the 8000-epoch weights file
此時,各測試圖片使用YOLOv4-lite1、YOLOv4-lite2和YOLOv4-tiny算法的檢測時間和平均精度均值mAP如表1所示。其中,lite1、lite2及tiny分別表示YOLOv4-lite1、YOLOv4-lite2和YOLOv4-tiny算法。
表1 各測試圖片檢測時間表Tab.1 Detection time of different weights files and pictures ms
相應(yīng)的,各圖片裂縫檢出數(shù)量如表2所示,“+”后面的數(shù)字為重復(fù)檢測或誤檢數(shù)量。
表2 各測試圖片檢出數(shù)量對比表Tab.2 Detection number of different weights files and pictures
圖5 4 000次迭代周期生成的weights權(quán)重文件實驗結(jié)果Fig.5 Experiment results of the 4000-epoch weights file
分析如上數(shù)據(jù),可得如下結(jié)論:
(1)因殘差網(wǎng)絡(luò)結(jié)構(gòu)相同而route層連接靠前,在較低迭代周期時YOLOv4-lite1網(wǎng)絡(luò)平均精度均值mAP高于YOLOv4-lite2和YOLOv4-tiny網(wǎng)絡(luò),其置信度相對較高;而隨著訓(xùn)練的進行,較高迭代周期時YOLOv4-lite2網(wǎng)絡(luò)平均精度均值將高于YOLOv4-lite1和YOLOv4-tiny網(wǎng)絡(luò);
圖6 6 000次迭代周期生成的weights權(quán)重文件實驗結(jié)果Fig.6 Experiment results of the 6000-epoch weights file
(2)兩者權(quán)重文件均為23.7 M,一般情況下YOLOv4-lite1平均運行速度比YOLOv4-lite2快0.86%。二者速度并無本質(zhì)差別,但均高于YOLOv4-tiny網(wǎng)絡(luò);
(3)以2 000次迭代周期為例,在較少迭代周期時YOLOv4-lite1的裂縫檢出率較YOLOv4-lite2高約22%;超過4 000個迭代周期后YOLOv4-tiny網(wǎng)絡(luò)和YOLOv4-lite2網(wǎng)絡(luò)因過擬合出現(xiàn)大量重復(fù)檢測,而YOLOv4-lite1網(wǎng)絡(luò)因較為穩(wěn)定的平均精度均值表現(xiàn)穩(wěn)定且效果最好。這就是說,平均精度均值與檢測效果并無必然關(guān)系,但過擬合將影響實際檢測效果。
需說明的是,裂縫檢測數(shù)據(jù)集較少,訓(xùn)練均不太充分,網(wǎng)絡(luò)參數(shù)也未經(jīng)完全優(yōu)化。綜合來講,在使用圖例圖片檢測時YOLOv4-lite1網(wǎng)絡(luò)較YOLOv4-tiny網(wǎng)絡(luò)和YOLOv4-lite2網(wǎng)絡(luò)效果佳,雖然其平均精度均值較YOLOv4-lite2小。進一步的分析、訓(xùn)練和測試表明,增加網(wǎng)絡(luò)的批量數(shù)batch和批次數(shù)subdivision參數(shù)確實能在一定程度上提高平均精度均值。例如,YOLOv4-lite1網(wǎng)絡(luò)在batch=32和subdivision=4及batch=16和subdivision=2時,其平均精度分別如表3所示。
表3 不同參數(shù)的平均精度均值對比Tab.3 Comparision of mAP with different parameters
但在網(wǎng)絡(luò)濾波因子filter等參數(shù)變化的情況下,表3所示結(jié)論未必成立。例如,某網(wǎng)絡(luò)在batch=16和subdivision=2條件下,在迭代周期分別為6 000、7 000和8 000時,其平均精度均值為26.25、24.71和28.91;batch=32和subdivision=4條件下,在迭代周期為6 000、7 000和8 000時,其平均精度均值分別為24.16、24.51和24.58,平均精度均值mAP反而有所降低。
在標(biāo)準(zhǔn)YOLOv4-tiny網(wǎng)絡(luò)結(jié)構(gòu)基礎(chǔ)上,簡化出兩種YOLOv4-lite新網(wǎng)絡(luò)結(jié)構(gòu)。以裂縫檢測為例,訓(xùn)練后在樹莓派4B上進行了實際檢測實驗。結(jié)果表明,YOLOv4-lite1較YOLOv4-tiny和YOLOv4-lite2有更好的檢出效果、穩(wěn)定性和更快的運行速度。下一步作者將建立實際的遠程圖像采集和傳輸系統(tǒng),并在裂縫檢測機器人上進行實際測試。同時,采集更多實際裂縫圖像擴大圖像集數(shù)量和類型,進一步提高實際檢測效果。
作者貢獻聲明:
宋立博:設(shè)計YOLOv4-lite1比YOLOv4-lite2新網(wǎng)絡(luò)結(jié)構(gòu),訓(xùn)練網(wǎng)絡(luò)并進行測試。
費燕瓊:網(wǎng)絡(luò)上下載裂縫圖片,處理并形成裂縫數(shù)據(jù)集。