王成軍 薛玉珂 楊超宇
(①安徽理工大學(xué)人工智能學(xué)院,安徽 淮南 232001;②安徽理工大學(xué)計(jì)算機(jī)科學(xué)與工程學(xué)院,安徽 淮南 232001)
采用工業(yè)機(jī)器人分揀工件過程中引入視覺模塊,利用深度學(xué)習(xí)技術(shù)[1]迅速準(zhǔn)確地完成對工件的自動(dòng)檢測[2-3],已經(jīng)成為智能制造領(lǐng)域研究的熱點(diǎn)。在鑄件生產(chǎn)中,采用帶視覺模塊的分揀機(jī)器人進(jìn)行分揀,可顯著提升鑄件的生產(chǎn)效率。
運(yùn)用深度學(xué)習(xí)方法實(shí)現(xiàn)鑄件自動(dòng)檢測,常用方法可分為兩類:一階段(One-Stage)目標(biāo)檢測和二階段(Two-Stage)目標(biāo)檢測。一階段的目標(biāo)檢測算法典型的有YOLO 系列算法[4-5]和SSD 系列算法等[6],二階段目標(biāo)檢測典型的算法為Faster R-CNN[7-8]等,由于兩階段目標(biāo)檢測法精度較高但速度較慢[9],在工業(yè)上應(yīng)用較少。
近年來,國內(nèi)外學(xué)者在一階段目標(biāo)檢測算法上針對工件檢測等問題開展了較多研究。蘇維成等[10]提出了一種基于Tiny-YOLOv3 改進(jìn)算法的工件識別方法,在特征提取網(wǎng)絡(luò)中增加了SPP 模塊、SE模塊和Ghost 模塊,并用卷積層代替池化層,改進(jìn)后的算法能夠更好地提升工件識別效率。楊僑等[11]提出了一種基于SSD 改進(jìn)的工件目標(biāo)檢測算法,將SSD 的骨干網(wǎng)絡(luò)VGG16 替換為ResNet50,加入特征金字塔(FPN)的算法,將底層特征與高層特征融合,解決了SSD 算法對底層特征提取能力不足的問題。藍(lán)宏宇等[12]提出了一種基于卷積神經(jīng)網(wǎng)絡(luò)多特征融合的工件識別與檢測方法,該算法新增了特征融合結(jié)構(gòu),解決了工件識別與檢測精度不夠高的問題。上述方法雖然在檢測精度和識別效率上均有所提高,但需對鑄件進(jìn)行逐一檢測,當(dāng)鑄件種類多、分布密時(shí),易出現(xiàn)漏檢、誤檢等現(xiàn)象。
針對上述問題,選用YOLOv5 目標(biāo)檢測算法作為改進(jìn)前的算法,由于該算法與傳統(tǒng)檢測方法相比,檢測精度和速度均有所提高,具有較強(qiáng)的實(shí)時(shí)性與通用性。本文將對YOLOv5 算法進(jìn)行改進(jìn),使其在鑄件檢測方面達(dá)到更好的效果。
YOLOv5 模型架構(gòu)主要有YOLOv5s、YOLOv5m、YOLOv5l 和YOLOv5x??紤]到鑄件自動(dòng)檢測算法的準(zhǔn)確性、效率和規(guī)模等,實(shí)驗(yàn)采用了YOLOv5s架構(gòu)對鑄件自動(dòng)檢測模型進(jìn)行改進(jìn),原始YOLOv5s模型結(jié)構(gòu)如圖1 所示。
圖1 YOLOv5s 模型結(jié)構(gòu)圖
YOLOv5 網(wǎng)絡(luò)結(jié)構(gòu)由輸入端(Input)、骨干網(wǎng)絡(luò)(Backbone)、頸部網(wǎng)絡(luò)(Neck)和檢測層(Detect)等四部分組成,YOLOv5 網(wǎng)絡(luò)結(jié)構(gòu)組成見表1。
表1 YOLOv5 網(wǎng)絡(luò)結(jié)構(gòu)組成
Input 由Mosaic 數(shù)據(jù)增強(qiáng)、自適應(yīng)錨框、自適應(yīng)圖像縮放等技術(shù)組成;Backbone 部分由CBS 模塊、CSP 模塊和SPPF 等模塊組成;Neck 部分由FPN 和PAN 結(jié)構(gòu)構(gòu)成;Detect 通過非極大值抑制NMS 篩選出目標(biāo)框,用CIoU_Loss 作為損失函數(shù)[13],同時(shí)生成預(yù)測框。
鑄件目標(biāo)多為小目標(biāo)且分布較為密集,可能會(huì)出現(xiàn)漏檢、誤檢及檢測準(zhǔn)確率較低等問題。為解決上述問題,基于YOLOv5 網(wǎng)絡(luò)結(jié)構(gòu)提出一種改進(jìn)的多尺度特征鑄件自動(dòng)檢測算法,改進(jìn)后的YOLOv5網(wǎng)絡(luò)結(jié)構(gòu)如圖2 所示。
圖2 改進(jìn)后的YOLOv5 網(wǎng)絡(luò)結(jié)構(gòu)圖
傳統(tǒng)鑄件分揀場景下,由于攝像頭安裝位置及鑄件種類較多,檢測時(shí)會(huì)存在目標(biāo)尺寸差異較大的問題,對攝像頭遠(yuǎn)處的小目標(biāo)及攝像頭近處的大目標(biāo)檢測效果較差,如使用傳統(tǒng)3 種尺度的方法檢測易出現(xiàn)檢測精度不夠高的情況。原始YOLOv5 模型的3 個(gè)特征檢測層分別負(fù)責(zé)由淺到深的特征提取[14]。特征提取過程中,淺層特征的分辨率較高,且?guī)缀涡畔⑤^豐富,但感受野較小,適合檢測圖像中較小的鑄件;深層特征具有較大的感受野,但分辨率較低,適合檢測圖像中較大的鑄件。如使用YOLOv5 的3 個(gè)檢測頭檢測,會(huì)導(dǎo)致對淺層特征信息利用不充分,從而引起檢測精度丟失,因此,在YOLOv5 原有的3 個(gè)檢測頭基礎(chǔ)上增加1 個(gè)檢測頭以實(shí)現(xiàn)多尺度檢測,增加特征融合及檢測頭個(gè)數(shù)來提高鑄件的檢測精度,整體特征融合過程網(wǎng)絡(luò)結(jié)構(gòu)圖如圖3 所示。
圖3 整體特征融合過程網(wǎng)絡(luò)結(jié)構(gòu)圖
多尺度檢測首先由骨干網(wǎng)絡(luò)生成特征,按階段來劃分,分別為C1、C2、C3、C4、C5、C6,共6個(gè)階段,其中數(shù)字表示分辨率減半次數(shù),如C1 表示階段1 輸出的特征圖,分辨率為輸入圖片的1/2,C6 是改進(jìn)算法新增部分,表示階段6 輸出的特征圖,分辨率為輸入圖片的1/64;接著是特征融合階段[15-16],由于骨干網(wǎng)絡(luò)部分增加了階段6,特征融合部分也對應(yīng)增加為4 個(gè),將骨干網(wǎng)絡(luò)生成的不同分辨率特征作為輸入,輸出融合后的特征P,經(jīng)融合后輸出為P3、P4、P5、P6,分別生成大小為80×80、40×40、20×20、10×10 的4 個(gè)檢測頭;最后由4 個(gè)檢測頭對鑄件檢測并生成檢測框。算法改進(jìn)后新生成的檢測頭用來負(fù)責(zé)預(yù)測大目標(biāo),原來3 個(gè)檢測頭負(fù)責(zé)預(yù)測更小的目標(biāo)。
改進(jìn)后的模型采用了4 個(gè)檢測頭對鑄件進(jìn)行檢測,相比3 個(gè)檢測頭,4 個(gè)檢測頭能更好地對不同尺度下的鑄件檢測,多尺度的實(shí)現(xiàn)顯著提升了算法對鑄件的檢測性能。
卷積注意力機(jī)制(convolutional block attention module, CBAM)[17]由通道注意力模塊(channel attention module, CAM) 和空間注意力模塊(spartial attention module,SAM)兩部分組成。
將輸入特征圖F與各通道權(quán)重值的對應(yīng)元素相乘,得到特征映射F′,將F′作為SAM 的輸入與空間權(quán)重系數(shù)兩個(gè)矩陣的對應(yīng)元素相乘,得到顯著特征圖F′′。
式中: ?表示點(diǎn)乘,F(xiàn)′為特征層F經(jīng)過CAM 的中間量;F′′表示經(jīng)過SAM 的輸出。CBAM 計(jì)算過程如圖4 所示。
圖4 卷積注意力模塊結(jié)構(gòu)特征圖
CAM 模塊先對輸入特征進(jìn)行最大池化和平均池化操作,然后將特征圖送入多層感知機(jī)中,對輸出結(jié)果加和,再經(jīng)過Sigmoid 激活函數(shù)激活,得到通道注意力特征Mc(F)。
SAM 采用最大池化和平均池化提取輸入特征圖F在通道維度上的特征,使特征圖在通道維度上壓縮,將兩個(gè)特征圖拼接后經(jīng)過一個(gè)卷積層,再經(jīng)過Sigmoid 激活函數(shù)生成空間注意力特征Ms(F)。
式中:Mc(F)、Ms(F)分別為特征層F的通道和空間注意力權(quán)重;Favg、Fmax分別為平均池化和最大池化操作;MLP為多層感知機(jī);σ為sigmoid 激活函數(shù)。
由于CBAM 即插即用的特性,該算法在特征金字塔部分融合了CBAM 模塊,設(shè)計(jì)了兩種模型結(jié)構(gòu):一種是在Neck 部分的CSP 模塊后引入一個(gè)CBAM 模塊,改進(jìn)結(jié)構(gòu)如圖5 中結(jié)構(gòu)1 所示;另一種是每個(gè)檢測頭前引入一個(gè)CBAM 模塊,改進(jìn)結(jié)構(gòu)如圖5 中結(jié)構(gòu)2 所示。
圖5 添加CBAM 后的部分模型結(jié)構(gòu)圖
YOLOv5 中卷積層的激活函數(shù)是SiLU 激活函數(shù),SiLU 是swish激活函數(shù)的一種變體。swish的函數(shù)表達(dá)式如下:
式中: β值為1 時(shí),swish激活函數(shù)就等同于SiLU激活函數(shù)。SiLU 的表達(dá)式:
為考慮模型計(jì)算的速度,選擇合適的激活函數(shù)尤為重要。Hardswish 激活函數(shù)在MobileNetV3 論文中被提出[18],它的屬性與Swish 激活函數(shù)[19]相似,該函數(shù)與Swish 相比,計(jì)算速度更快、穩(wěn)定性更好,避免了大量指數(shù)運(yùn)算。改進(jìn)算法利用Hardswish 激活函數(shù)替換了卷積層中的SiLU 激活函數(shù),因?yàn)镠ardswish 激活函數(shù)可實(shí)現(xiàn)分段功能,有檢測速度快且穩(wěn)定性高等優(yōu)勢,在檢測精度上比SiLU 也有一定的提升,改進(jìn)后的結(jié)構(gòu)如圖6 所示。
圖6 替換激活函數(shù)后的網(wǎng)絡(luò)結(jié)構(gòu)
Hardswish的函數(shù)見式(8),該函數(shù)考慮了3種輸入值。
由于國內(nèi)外公開數(shù)據(jù)集中沒有鑄件數(shù)據(jù)集,為驗(yàn)證改進(jìn)算法在鑄件檢測中的性能優(yōu)勢,采用自建鑄件數(shù)據(jù)集展開實(shí)驗(yàn)。為在實(shí)驗(yàn)中提高鑄件的檢測精度,使用ZED 雙目相機(jī)進(jìn)行數(shù)據(jù)拍攝,以不同拍攝角度、背景變化及鑄件擺放位置拍攝,包括6種共800 張不同鑄件,數(shù)據(jù)集中鑄件如圖7 所示。
圖7 數(shù)據(jù)集中的鑄件圖
圖像標(biāo)注工作完成后,采用數(shù)據(jù)增強(qiáng)方法,用到旋轉(zhuǎn)、噪聲、亮度等對鑄件圖像及標(biāo)注的.xml 文件擴(kuò)充,擴(kuò)充的1 000 張鑄件圖像用作改進(jìn)算法的實(shí)驗(yàn)數(shù)據(jù)。
數(shù)據(jù)增強(qiáng)是為了增強(qiáng)數(shù)據(jù)的多樣性,同時(shí)可提高模型的魯棒性,避免過擬合現(xiàn)象,在實(shí)驗(yàn)訓(xùn)練過程中,能夠自適應(yīng)的學(xué)習(xí)更多有用的特征信息。改進(jìn)算法中采用的數(shù)據(jù)增強(qiáng)流程如圖8 所示。
圖8 數(shù)據(jù)增強(qiáng)流程圖
實(shí)驗(yàn)的環(huán)境參數(shù)見表2,基于配置表中的參數(shù)搭建實(shí)驗(yàn)平臺(tái)。
實(shí)驗(yàn)操作系統(tǒng)使用Windows 11, GPU 為RTX3090, CPU 為 Intel(R) Xeon(R) Gold 6330 CPU@2.00GHz 160GB,深度學(xué)習(xí)框架是PyTorch 1.8.0,CUDA 版本選用CUDA11.1。
實(shí)驗(yàn)將訓(xùn)練集數(shù)據(jù)輸入到改進(jìn)后的YOLOv5 模型中,經(jīng)過Mosaic 數(shù)據(jù)增強(qiáng)及自適應(yīng)填充等操作,將所有鑄件圖像大小統(tǒng)一為640×640。
在訓(xùn)練模型時(shí)將Batch size 設(shè)為16,由于批次太小可能會(huì)導(dǎo)致?lián)p失函數(shù)不易收斂,批次過大則易陷入局部最優(yōu),導(dǎo)致泛化性能差;訓(xùn)練epoch 設(shè)為100 組,通過實(shí)驗(yàn)結(jié)果的mAP 和best.pt 權(quán)重文件,epoch 在100 左右表現(xiàn)較好;初始學(xué)習(xí)率設(shè)為0.01,由于初始學(xué)習(xí)率決定權(quán)值的更新速度,設(shè)置過高會(huì)導(dǎo)致模型性能較差,出現(xiàn)過擬合現(xiàn)象,設(shè)置過低則會(huì)導(dǎo)致收斂速度慢;動(dòng)量因子設(shè)為0.937,可在梯度下降算法中加速模型收斂;權(quán)重衰減系數(shù)設(shè)為0.000 5,有利于控制權(quán)重值的變化幅度,起到一定正則作用,防止模型過擬合。
改進(jìn)算法訓(xùn)練完成后,用訓(xùn)練完的權(quán)重對模型進(jìn)行測試,并從幾個(gè)方面對模型評估,選用3 個(gè)評價(jià)指標(biāo)對模型評估,包括查準(zhǔn)率P、查全率R和均值平均精度mAP,各指標(biāo)的具體計(jì)算公見式(9)~式(11)。
式中:TP為真正例,即被正確檢測出的目標(biāo)數(shù);FP為假正例,即被錯(cuò)誤檢出的目標(biāo)數(shù);FN為假反例,即未被檢測出的目標(biāo)數(shù)。
YOLOv5 算法的改進(jìn)主要包括采用多尺度特征融合并增加一個(gè)檢測頭、引入卷積注意力機(jī)制及替換Hardswish 激活函數(shù)。為驗(yàn)證提出的改進(jìn)算法效果,在保證數(shù)據(jù)集、訓(xùn)練的配置參數(shù)、平臺(tái)框架相同的基礎(chǔ)上,對測試集進(jìn)行消融實(shí)驗(yàn),實(shí)驗(yàn)結(jié)果見表3。
表3 消融實(shí)驗(yàn)結(jié)果
表中“√”表示在模型訓(xùn)練時(shí)加入了此改進(jìn)方法。從表3 的實(shí)驗(yàn)結(jié)果看出,相比于模型1(原始YOLOv5),模型2 引入了CBAM 模塊,mAP值提升了0.2%,證明引入CBAM 模塊的有效性;模型3 在模型2 的基礎(chǔ)上增加了多尺度特征融合與檢測頭部分,mAP較模型2 提升了1.9%,證明多尺度特征融合與檢測頭的改進(jìn)是有效的;模型4 表示將卷積層中的SiLU 激活函數(shù)替換為Hardswish 激活函數(shù),與模型3 相比檢測精度提升了0.5%,證明了Hardswish 激活函數(shù)的有效性。
改進(jìn)算法模型檢測平均精度達(dá)到了96.5%,較原算法提升了2.6%,在檢測精度上有較大的優(yōu)勢,但由于增加了注意力機(jī)制與一個(gè)新的檢測層,因此檢測速度有所減慢,改進(jìn)算法與原YOLOv5 算法相比檢測速度雖下降了19 fps,但仍可滿足工業(yè)實(shí)時(shí)檢測的要求。
上述實(shí)驗(yàn)結(jié)果表明改進(jìn)算法在鑄件檢測上的優(yōu)越性,該算法能夠提高鑄件檢測精度,算法改進(jìn)前后鑄件檢測結(jié)果對比如圖9 所示。
圖9 算法改進(jìn)前后鑄件檢測結(jié)果對比圖
為進(jìn)一步驗(yàn)證改進(jìn)算法對鑄件檢測的有效性,證明改進(jìn)算法相對于其他檢測算法的優(yōu)越性,將改進(jìn)算法與SSD、Faster RCNN、YOLOv3、YOLOv5等算法在同一個(gè)鑄件數(shù)據(jù)集上展開對比實(shí)驗(yàn),將對比實(shí)驗(yàn)的結(jié)果匯總比較,對比結(jié)果如圖10 所示。
圖10 模型mAP 對比圖
圖10 直觀地顯示了不同模型訓(xùn)練過程中鑄件檢測精度的變化情況,在前50 個(gè)epoch,各個(gè)算法mAP的提升均較快;訓(xùn)練100 個(gè)epoch 后,各算法的檢測精度開始趨于穩(wěn)定,改進(jìn)算法的mAP最終穩(wěn)定在0.965 左右,且明顯高于其他算法,表明改進(jìn)算法相對其他算法有更高的檢測精度。穩(wěn)定后,各算法的檢測結(jié)果對比見表4。
表4 不同算法對比結(jié)果
從表4 可以看出,改進(jìn)算法的平均精度和召回率遠(yuǎn)比SSD 算法要高;Faster RCNN 模型雖然在平均精度與召回率上的表現(xiàn)較好,但檢測時(shí)間相對較長,不適用于工業(yè)場景下的檢測;YOLOv3 檢測精度遠(yuǎn)低于原始YOLOv5s 算法和改進(jìn)算法。改進(jìn)算法與SSD、Faster RCNN、YOLOv3、YOLOv5 相比,mAP值分別提高了4.58%、1.59%、7.8%和2.6%。
綜合上述,改進(jìn)算法在鑄件檢測平均精度上明顯優(yōu)于其他算法,雖然檢測速度有所降低,但相比于其他算法達(dá)到了檢測精度與速度的平衡,完全滿足鑄件生產(chǎn)中分揀作業(yè)要求。
本文提出一種基于多尺度特征的YOLOv5 鑄件自動(dòng)檢測算法。該算法采用多尺度特征融合并增加一個(gè)檢測頭來提取更全面的鑄件特征信息;采用卷積注意力機(jī)制來提高關(guān)鍵特征的提取能力;引入Hardswish 激活函數(shù)提高算法的準(zhǔn)確性和穩(wěn)定性。結(jié)果表明,改進(jìn)算法在鑄件檢測中準(zhǔn)確率為94.7%,召回率為92.3%,mAP值為96.5%,與原YOLOv5算法相比,改進(jìn)算法的mAP提高了2.6%,綜合性能優(yōu)于其他算法,能解決鑄件檢測精度不夠高和易漏檢、誤檢問題,滿足鑄件自動(dòng)檢測在工業(yè)分揀場景中的需求。