林 鑫,沈建新,秦 順,潘 峰
(南京航空航天大學(xué) 機(jī)電學(xué)院,江蘇 南京 210016)
飛機(jī)起落架、渦輪葉片、飛機(jī)機(jī)翼等復(fù)雜構(gòu)件是航天設(shè)備的關(guān)鍵部件,對于保證裝備的性能和可靠性具有重要作用。新一代航空航天裝備的復(fù)雜結(jié)構(gòu)件尺寸大、加工特征數(shù)量多、差異大,其形狀復(fù)雜、成形精度難控制,而且其型面通常具有不規(guī)則的曲率分布。在生產(chǎn)過程中進(jìn)行機(jī)器人自動化噴涂作業(yè)時,由于構(gòu)件種類多、形狀復(fù)雜[1,2],往往存在無法準(zhǔn)確分類識別的情況。為了高效、準(zhǔn)確地完成航天設(shè)備復(fù)雜構(gòu)件自動化噴涂工作,其首要的任務(wù)就是對放在工作臺上的構(gòu)件進(jìn)行準(zhǔn)確的分類與識別。
目標(biāo)識別分類與檢測是深度學(xué)習(xí)技術(shù)應(yīng)用最廣泛的方向之一,近年來其主要的算法分為兩類:基于感興趣位置的方法和基于回歸的方法?;诟信d趣位置的方法主要代表有SPP-Net與R-CNN系列算法;基于回歸的方法主要代表是YOLO[3-6](you only look once)系列算法。
基于感興趣位置的方法又叫兩步走的方法,將目標(biāo)檢測分為兩個步驟:提取感興趣位置和進(jìn)行目標(biāo)檢測分類。此類算法需要先在圖像上提取若干個ROI(region of inte-rest)區(qū)域,再對這些區(qū)域進(jìn)行特征提取以及目標(biāo)檢測。此類算法由于提取了大量的ROI區(qū)域,因此計算量大,步驟復(fù)雜,運(yùn)行緩慢。
在這類兩步走的方法遇到瓶頸時,YOLO系列算法為目標(biāo)檢測提供了一種新的思路。YOLO系列算法是基于回歸的方法,又叫一步走的方法。其將物體檢測作為一個回歸問題進(jìn)行求解,輸入圖像經(jīng)過一次提取,便能得到圖像中所有物體的位置和其所屬類別及相應(yīng)的置信概率。
近年來目標(biāo)識別分類與檢測技術(shù)蓬勃發(fā)展,但是其主要的應(yīng)用方向是動物、行人、交通工具等生活中常見物體[7-11],其在航天航空復(fù)雜構(gòu)件分類識別領(lǐng)域研究較少,原因在于神經(jīng)網(wǎng)絡(luò)模型的訓(xùn)練需要大量樣本,而航天復(fù)雜構(gòu)件沒有公開的圖像數(shù)據(jù)集。為此,本文首先制作了航天設(shè)備復(fù)雜構(gòu)件的數(shù)據(jù)集,并采取平移、旋轉(zhuǎn)、縮放、調(diào)整亮度和對比度等數(shù)據(jù)增強(qiáng)的方式對數(shù)據(jù)集進(jìn)行擴(kuò)充。其次,本文研究了深度學(xué)習(xí)目標(biāo)檢測算法,對現(xiàn)有的YOLOv4目標(biāo)檢測算法進(jìn)行改進(jìn)并優(yōu)化,將原算法中殘差卷積塊的個數(shù)由5個調(diào)整為3個,并且各部分通道數(shù)縮減一半。只采用上采樣結(jié)構(gòu)而省略下采樣結(jié)構(gòu),減少了訓(xùn)練參數(shù),在保證檢測準(zhǔn)確率的同時,可以獲得較短的訓(xùn)練時間,并且能有效降低對計算機(jī)的使用性能要求。同時在訓(xùn)練中采用余弦退火衰減方法,動態(tài)調(diào)整學(xué)習(xí)率數(shù)值。實驗結(jié)果表明,本文提出的算法在驗證集上的mAP值達(dá)到了97.63%,誤差降至0.66,檢測精度高、準(zhǔn)確率高,訓(xùn)練速度快,性能優(yōu)于其它同類的算法,應(yīng)用于航天航空復(fù)雜構(gòu)件噴涂作業(yè)的分類識別中具有重要的意義和使用價值。
由于航天設(shè)備復(fù)雜構(gòu)件目標(biāo)檢測識別目前沒有開源的數(shù)據(jù)集,因此首先在Solidworks2017三維建模軟件上搭建三維模型,在各個角度進(jìn)行截圖制作圖像數(shù)據(jù)集。在復(fù)雜構(gòu)件分類識別任務(wù)中,分別截取自動傾斜器、發(fā)動機(jī)、機(jī)翼、渦輪、起落架5種構(gòu)件不同角度的圖像。在水平方向,依次將構(gòu)件旋轉(zhuǎn)不同角度,在每個角度上進(jìn)行截圖時,再將構(gòu)件在豎直方向上旋轉(zhuǎn)一定角度,在各個角度上獲得相應(yīng)的圖像。構(gòu)件部分圖像數(shù)據(jù)集如圖1所示。
圖1 部分復(fù)雜構(gòu)件數(shù)據(jù)集圖像
在標(biāo)簽文件中,分別記錄構(gòu)件在圖像中的位置坐標(biāo),并將5種構(gòu)件的分類標(biāo)簽設(shè)為0、1、2、3、4。將圖像絕對路徑和標(biāo)簽值打包生成TXT標(biāo)簽文件,完成分類識別任務(wù)的標(biāo)簽數(shù)據(jù)集制作。標(biāo)簽文件內(nèi)容由圖片絕對路徑、目標(biāo)左上角點和左下角點坐標(biāo)值(x,y)以及目標(biāo)類別組成。目標(biāo)分類值為0、1、2、3、4,分別代表自動傾斜器、發(fā)動機(jī)、機(jī)翼、渦輪、起落架5種航天設(shè)備復(fù)雜構(gòu)件。制作完成的數(shù)據(jù)集中共有1662張樣本。部分復(fù)雜構(gòu)件標(biāo)簽TXT文件內(nèi)容如圖2所示。
圖2 部分復(fù)雜構(gòu)件TXT標(biāo)簽內(nèi)容
數(shù)據(jù)增強(qiáng)是非常重要的提高目標(biāo)檢測算法魯棒性的手段[12,13]。數(shù)據(jù)增強(qiáng)的目的是讓圖片變得更加多樣。若對于原始圖像不進(jìn)行變換,則某一個物體在訓(xùn)練時,網(wǎng)絡(luò)能學(xué)習(xí)到的只有它固定的特征。但是實際上,從各個角度、在不同的背景、不同的光照條件去看同一個物體,也會具有不同的特征。在目標(biāo)檢測中若要增強(qiáng)數(shù)據(jù),不僅是直接對圖片進(jìn)行調(diào)整,還要考慮到圖片處理后物體回歸框的位置,回歸框的坐標(biāo)要隨著圖片進(jìn)行同步改變。數(shù)據(jù)增強(qiáng)后的圖片放入神經(jīng)網(wǎng)絡(luò)進(jìn)行訓(xùn)練可以提高網(wǎng)絡(luò)的魯棒性,降低各方面干擾因素對識別的影響。本文采用平移(translate)、旋轉(zhuǎn)(rotate)、縮放(scale)、仿射變換(affine transform)、調(diào)整亮度和對比度(adjust brightness and contrast)等數(shù)據(jù)增強(qiáng)方法,將數(shù)據(jù)集從1662張樣本擴(kuò)充到21 259張樣本。
數(shù)據(jù)增強(qiáng)算法如算法1所示。
算法1:數(shù)據(jù)增強(qiáng)
(1)# matshift為變換矩陣, 定義不同變換矩陣可完成
(2)# 圖像平移、 旋轉(zhuǎn)、 縮放、 仿射變換等不同操作
(3)# 讀取圖像
(4) img=cv.imread(‘D:/image.jpg’)
(5)# 圖像平移、 旋轉(zhuǎn)等操作
(6) dst1=cv.warpAffine(img,matshift,(640,640))
(7)# 調(diào)整圖像亮度和對比度
(8)dst2=cv.addWeighted(img,a,blank,1-a,b)
(9)# 圖像垂直翻轉(zhuǎn)
(10)dst3=cv.flip(img,0)
(11)# 圖像水平翻轉(zhuǎn)
(12)dst4=cv.flip(img,1)
(13) cv.imwrite(‘D:/image.jpg’, dst)
YOLOv4目標(biāo)檢測算法一共有6000多萬參數(shù),參數(shù)量十分龐大,計算耗時。尤其在輸入圖像大小采用608×608時,更要求計算機(jī)CPU顯存在6 G以上。本文對YOLOv4算法進(jìn)行改進(jìn),由于本次的復(fù)雜構(gòu)件模型特征明顯,構(gòu)件種類少,因此分類識別的任務(wù)不復(fù)雜,可以對YOLOv4算法進(jìn)行簡化。在保證檢測準(zhǔn)確率的同時,可以獲得較短的訓(xùn)練時間,并且能有效降低對計算機(jī)的性能要求。改進(jìn)后的YOLOv4算法具有更簡略的結(jié)構(gòu),將殘差卷積塊的個數(shù)由5個調(diào)整成3個,并且通道數(shù)縮減一半,仍然可以獲得較好的特征提取效果。
由于復(fù)雜構(gòu)件在工作臺上的擺放方式、位置相對固定,所以網(wǎng)絡(luò)中省略了SPPNet部分,圖像中目標(biāo)大小相似,因此無需提高網(wǎng)絡(luò)的感受野。只采用上采樣結(jié)構(gòu)而省略了下采樣結(jié)構(gòu),可以減少大量的訓(xùn)練參數(shù),精簡網(wǎng)絡(luò)結(jié)構(gòu)。整體的改進(jìn)后,最終網(wǎng)絡(luò)的總訓(xùn)練參數(shù)只有500多萬,在原來的基礎(chǔ)上縮小了近12倍。由于本次的分類檢測任務(wù)不復(fù)雜,物體種類少,位置相對固定,對網(wǎng)絡(luò)的優(yōu)化會在保證結(jié)果精確度的同時,極大縮短訓(xùn)練與檢測的時間。改進(jìn)的YOLOv4目標(biāo)檢測算法框架如圖3所示。
圖3 改進(jìn)的YOLOv4目標(biāo)檢測算法框架
該算法網(wǎng)絡(luò)各部分組成主要包括輸入層、卷積層、池化層、激活函數(shù)以及輸出層等。在運(yùn)算的過程中,采用Dropout[14]訓(xùn)練技巧,對神經(jīng)元進(jìn)行隨機(jī)舍棄,防止訓(xùn)練過程中產(chǎn)生過擬合的現(xiàn)象。使用了殘差跳躍結(jié)構(gòu),在增加網(wǎng)絡(luò)深度的同時,減少梯度消失現(xiàn)象的發(fā)生。
2.1.1 圖像輸入層
輸入層由二維圖像的像素值組成,本次訓(xùn)練的輸入?yún)?shù)是大小為[608,608,3]的張量。其中前兩個數(shù)字代表了圖像的長和寬,第三個數(shù)字代表了圖像的通道數(shù),本次訓(xùn)練采用的圖像是R,G,B三通道彩色圖像。
2.1.2 卷積層
卷積層由若干卷積單元組成,卷積單元的參數(shù)在不斷的優(yōu)化過程中不斷的改變,最終達(dá)到一個最優(yōu)值。卷積層的作用是特征提取,淺層的卷積層可以提取淺表的特征,如圖像中物體的邊緣、輪廓等,更深的卷積層可以在網(wǎng)絡(luò)不斷的訓(xùn)練中提取到更深層次、更復(fù)雜的特征。
2.1.3 池化層
池化操作是神經(jīng)網(wǎng)絡(luò)訓(xùn)練中一個重要的操作,它實際上是一種降采樣的方式。本次模型訓(xùn)練采用最大值池化,在所給定的N×N的池化窗口中,篩選出最大的像素值將其保留,并舍去其余的參數(shù)。通過池化操作可以減小數(shù)據(jù)的空間大小,保留更多的有效信息,這在一定程度上也控制了過擬合。在卷積層之間會周期性地插入池化層。最大池化操作如圖4所示。
圖4 最大池化操作過程
圖4中,原始的輸入大小為4×4,池化操作塊的大小為2×2,步長為2,最終得到的結(jié)果大小為2×2,長寬均為原來的一半,在減少參數(shù)的同時,保留了更多的有效值。
2.1.4 Leaky-ReLU激活函數(shù)
神經(jīng)網(wǎng)絡(luò)訓(xùn)練過程中常使用ReLU激活函數(shù)。ReLU激活函數(shù)將所有的輸入為負(fù)值的輸出都設(shè)為零,所以在輸入值小于0時不能起到激活的作用,容易導(dǎo)致梯度消失。Leaky-ReLU激活函數(shù)是對RELU激活函數(shù)的改進(jìn),給所有負(fù)值輸入賦予一個非零斜率,在輸入值小于0時依然可以起到激活的作用。Leaky-ReLU表達(dá)式為
(1)
式中:ai是(1,+∞)區(qū)間內(nèi)的固定參數(shù),xi為輸入值,yi為輸出值。
2.1.5 結(jié)果輸出層
網(wǎng)絡(luò)模型輸出層將前端獲取的結(jié)果轉(zhuǎn)換為固定長度的張量,其尺寸根據(jù)不同的模型結(jié)構(gòu)以及任務(wù)需求而改變。本次改進(jìn)的YOLOv4網(wǎng)絡(luò)模型輸出層張量長度為10(5+4+1)。其組成依次為:經(jīng)過softmax激活后的5種構(gòu)件分類值、構(gòu)件在圖像中的位置坐標(biāo)(左上角點與右下角點)、分類的置信度。輸出層張量與標(biāo)簽值之間的差值即為反向傳播時需要優(yōu)化的損失,通過不斷減小損失來使模型的效果達(dá)到最優(yōu)。
2.1.6 卷積塊
在深度學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)算法中,卷積層、池化層、激活函數(shù)并不是單獨存在,而是組合在一起形成卷積塊[15]。因此在代碼的編排中,將卷積塊設(shè)計成函數(shù)直接調(diào)用,可以極大地節(jié)省算法編排的時間,優(yōu)化算法的結(jié)構(gòu),使算法結(jié)構(gòu)清晰明了。本文算法在Python3.6-TensorFlow1.13框架下編寫,其卷積塊函數(shù)如算法2所示。
算法2:卷積塊
(1)def Conv2D_block(inputs) # 卷積塊函數(shù)定義
(3) output=BatchNormalization()(x)
(4) output=Dropout(0.7)(x)
(5) return Activation(Leaky_ReLU)(output)
2.2.1 學(xué)習(xí)率
學(xué)習(xí)率是深度學(xué)習(xí)中的關(guān)鍵一環(huán),在神經(jīng)網(wǎng)絡(luò)的訓(xùn)練中,對學(xué)習(xí)率做出適當(dāng)?shù)恼{(diào)整十分重要。本次訓(xùn)練中,在神經(jīng)網(wǎng)絡(luò)訓(xùn)練時采用改余弦退火衰減法,學(xué)習(xí)率會先上升再下降。
在上升過程中,學(xué)習(xí)率數(shù)值隨訓(xùn)練的輪次(Epoch)線性增長,模型訓(xùn)練速度逐漸加快。訓(xùn)練到指定輪次后,學(xué)習(xí)率開始逐漸衰減。在衰減過程中,隨著學(xué)習(xí)率數(shù)值的減少,模型可以得到很好的細(xì)化,逐漸達(dá)到最優(yōu)解。學(xué)習(xí)率上升時使用線性上升,下降時候模擬cos函數(shù)下降。學(xué)習(xí)率余弦退火衰減曲線如圖5所示。
圖5 學(xué)習(xí)率余弦退火衰減曲線
2.2.2 優(yōu)化器
神經(jīng)網(wǎng)絡(luò)訓(xùn)練過程中的本質(zhì)就是最小化損失,而在定義了損失函數(shù)后,優(yōu)化器的作用就是對梯度進(jìn)行優(yōu)化。神經(jīng)網(wǎng)絡(luò)訓(xùn)練過程中常見的優(yōu)化器有AdaGrad、RMSprop、Adam等。本次訓(xùn)練過程中使用Adam優(yōu)化器進(jìn)行優(yōu)化。Adam優(yōu)化器實現(xiàn)簡單,計算高效,對內(nèi)存需求少。其超參數(shù)具有很好的解釋性,并且無需調(diào)整或僅需很少的微調(diào)。
2.2.3 損失函數(shù)
本文提出的算法損失函數(shù)由3個部分組成,分別是目標(biāo)邊框坐標(biāo)損失(bounding_box_regression_loss)、置信度損失(condifence_loss)、分類損失(classification_loss),將3部分損失相加即為模型訓(xùn)練總損失??倱p失函數(shù)公式如式(2)所示
(2)
損失函數(shù)值中5項內(nèi)容分別是:目標(biāo)邊框中心(x,y)坐標(biāo)值損失、目標(biāo)邊框高與寬(w,h)的損失、置信度損失、無目標(biāo)邊框的置信度損失、分類損失(p),第一項與第二項組成目標(biāo)邊框坐標(biāo)損失,第三項與第四項組成置信度損失,第五項為分類損失。其中,S為YOLO算法劃分的網(wǎng)格數(shù),B為每個網(wǎng)格預(yù)測的邊界框數(shù),C為分類數(shù)。一般取λc oord=5,λnoobj=0.5,使樣本分布達(dá)到最優(yōu)值,obj與noobj分別表示有目標(biāo)與無目標(biāo)的情況。
本次訓(xùn)練圖像工作站為PC機(jī),實驗采用WIN10 64位操作系統(tǒng),CPU采用i9-9900k,顯卡采用RTX2080Ti,在Python-TensorFlow1.13框架下進(jìn)行,使用OpenCV4.2.0對圖像進(jìn)行數(shù)據(jù)增強(qiáng),所有的樣本尺寸為608×608×3。
對改進(jìn)的YOLOv4目標(biāo)檢測中網(wǎng)絡(luò)模型進(jìn)行100輪迭代后,模型逐漸收斂到一個較好的數(shù)值。其中訓(xùn)練時學(xué)習(xí)率采用余弦退火衰減法,上升階段采用線性增長,在第30輪迭代時學(xué)習(xí)率達(dá)到最大值0.001,隨后模擬cos函數(shù)下降。改進(jìn)的YOLOv4目標(biāo)分類識別網(wǎng)絡(luò)模型訓(xùn)練集和驗證集上的損失值變化曲線如圖6所示。
當(dāng)?shù)螖?shù)達(dá)到100次時,模型在訓(xùn)練集上的損失降至0.65,在驗證集上的損失降至0.66,模型能夠有效的收斂。在5類樣本驗證集上的mAP值達(dá)到了97.63%,可見模型具有較好的分類檢測性能,可以很好完成復(fù)雜構(gòu)件分類的任務(wù)。5類樣本驗證集上的mAP值如圖7所示。
驗證集上的部分預(yù)測結(jié)果圖像如圖8所示。
圖8 模型在驗證集上的部分預(yù)測結(jié)果
實驗一:本文算法采用余弦退火衰減方法動態(tài)調(diào)整學(xué)習(xí)率,在算法迭代過程中,學(xué)習(xí)率會根據(jù)訓(xùn)練輪次不斷調(diào)整,使模型訓(xùn)練效果達(dá)到最優(yōu)。此操作缺點是在訓(xùn)練時需要不斷更新學(xué)習(xí)率數(shù)值,增加了訓(xùn)練的時間。本次實驗將固定學(xué)習(xí)率值(learning_rate=0.001)與學(xué)習(xí)率余弦退火衰減作對比,實驗驗證固定學(xué)習(xí)率雖然訓(xùn)練速度更快,但是在損失值以及mAP上遠(yuǎn)低于本文算法,檢測性能差。其數(shù)據(jù)見表1。
表1 學(xué)習(xí)率改進(jìn)前后實驗數(shù)據(jù)對比
實驗二:本次實驗將未經(jīng)數(shù)據(jù)增強(qiáng)操作的原始數(shù)據(jù)集與經(jīng)過平移、旋轉(zhuǎn)、縮放、仿射變換的數(shù)據(jù)集分別送入本文提出的算法進(jìn)行訓(xùn)練。原始數(shù)據(jù)集數(shù)據(jù)量少,訓(xùn)練時間短,但是模型訓(xùn)練效果差,泛化能力弱,對于一些角度變換、光照強(qiáng)度變化的圖像樣本檢測能力弱,在驗證集上的損失遠(yuǎn)遠(yuǎn)大于經(jīng)過數(shù)據(jù)增強(qiáng)后的數(shù)據(jù)集。經(jīng)過數(shù)據(jù)增強(qiáng)前后實驗數(shù)據(jù)見表2。
表2 數(shù)據(jù)增強(qiáng)前后實驗數(shù)據(jù)對比
實驗三:本文將原YOLOv4算法進(jìn)行改進(jìn),將原算法中殘差卷積塊的個數(shù)由5個調(diào)整為3個,各部分通道數(shù)縮減一半,同時只采用上采樣結(jié)構(gòu)而省略下采樣結(jié)構(gòu),在不降低檢測精度的前提下大大簡化了網(wǎng)絡(luò)結(jié)構(gòu)。本次實驗將本文算法與原YOLOv4算法用相同的數(shù)據(jù)集進(jìn)行訓(xùn)練,實驗結(jié)果表明本文算法在訓(xùn)練精度上與原算法持平,但在訓(xùn)練時間上遠(yuǎn)遠(yuǎn)低于原算法,有效地縮短了訓(xùn)練的時間。實驗數(shù)據(jù)見表3。
表3 原YOLOv4與本文算法實驗數(shù)據(jù)對比
實驗四:本次實驗將本文算法與同類的目標(biāo)分類檢測算法YOLOv1、YOLOv3、SSD、RCNN等作綜合對比。模型訓(xùn)練集與驗證集所用圖片均為本文所提出的復(fù)雜構(gòu)件數(shù)據(jù)集,迭代次數(shù)為100輪。實驗結(jié)果表明,本文算法在訓(xùn)練時間、檢測精度上均高于同類算法,具有良好的性能。實驗結(jié)果見表4。
表4 不同算法實驗數(shù)據(jù)
本文針對目前深度學(xué)習(xí)技術(shù)在航天設(shè)備復(fù)雜構(gòu)件目標(biāo)識別檢測領(lǐng)域應(yīng)用較少、缺少圖像數(shù)據(jù)集等問題,首先在Solidworks三維建模軟件上搭建復(fù)雜構(gòu)件三維模型,通過在不同的角度截圖制作復(fù)雜構(gòu)件數(shù)據(jù)集,并采用平移、旋轉(zhuǎn)、縮放、仿射等方式對圖像進(jìn)行數(shù)據(jù)增強(qiáng)。同時提出了一種改進(jìn)的YOLOv4目標(biāo)分類識別算法,將原YOLOv4算法中殘差卷積塊的個數(shù)由5個調(diào)整為3個,各部分通道數(shù)縮減一半,同時只采用上采樣結(jié)構(gòu)而省略下采樣結(jié)構(gòu),在不降低檢測精度的前提下大大簡化了網(wǎng)絡(luò)結(jié)構(gòu),節(jié)省了訓(xùn)練和預(yù)測的時間。實驗數(shù)據(jù)結(jié)果表明,模型經(jīng)過100輪迭代后,在訓(xùn)練集上的損失降至0.65,在驗證集上的損失降至0.66,在5類樣本驗證集上的mAP值達(dá)到了97.63%,性能優(yōu)于同類算法。檢測速度快,檢測精度高,可以很好完成復(fù)雜構(gòu)件分類的任務(wù),創(chuàng)新性地將深度學(xué)習(xí)目標(biāo)檢測技術(shù)應(yīng)用到航天復(fù)雜構(gòu)件的分類與檢測。