王海航,韓文花,王 坤
(上海電力大學(xué) 自動(dòng)化工程學(xué)院,上海 200090)
近年來(lái),隨著計(jì)算機(jī)視覺(jué)技術(shù)的發(fā)展,在面對(duì)大量金屬缺陷數(shù)據(jù)時(shí),傳統(tǒng)的漏磁檢測(cè)[1]、渦流檢測(cè)[2]、邊緣檢測(cè)[3]等檢測(cè)方法,容易出現(xiàn)漏檢、誤檢情況,檢測(cè)效率較低,而基于深度學(xué)習(xí)的計(jì)算機(jī)目標(biāo)檢測(cè)技術(shù)[4]能夠準(zhǔn)確地檢測(cè)金屬表面缺陷。其中兩步(two-stage)檢測(cè)算法有Fast R-CNN[5]、Faster R-CNN[6]、Mask R-CNN[7]、AM-R-CNN[8]等,此類(lèi)算法首先通過(guò)候選網(wǎng)絡(luò)(region proposal network,RPN)確定候選框,然后使用網(wǎng)絡(luò)對(duì)候選框內(nèi)物體進(jìn)行識(shí)別,檢測(cè)精度雖然較高,但檢測(cè)速度較慢。通過(guò)在快速區(qū)域卷積網(wǎng)絡(luò)(faster region-based convolutional network,F(xiàn)aster R-CNN)中引入多級(jí)感興趣區(qū)域(regions of interst,ROI)池化結(jié)構(gòu),對(duì)零件表面缺陷進(jìn)行檢測(cè)[9],可將3種零件的mAP值達(dá)到97%左右,但檢測(cè)速度FPS僅有4.9,檢測(cè)速度較慢;使用多重特征融合網(wǎng)絡(luò)(multilevel feature fusion network,MFN)檢測(cè)缺陷目標(biāo)詳細(xì)位置[10],在NEU-DET金屬數(shù)據(jù)集上的mAP達(dá)到82.3%,檢測(cè)速度FPS為20;將特征融合和級(jí)聯(lián)網(wǎng)絡(luò)結(jié)合的Faster R-CNN檢測(cè)金屬表面缺陷[11],檢測(cè)精度可達(dá)90%以上,F(xiàn)PS僅有12.26。以YOLO系列[12-14]、SSD[15]為主的單步(one-stage)檢測(cè)算法,直接使用先驗(yàn)框?qū)δ繕?biāo)物體進(jìn)行檢測(cè),速度較快,精度會(huì)略微下降。在Yolov3主干網(wǎng)絡(luò)淺層增加一組先驗(yàn)框[16],對(duì)金屬表面缺陷檢測(cè)的mAP達(dá)到80%,F(xiàn)PS達(dá)到50;通過(guò)注意力級(jí)聯(lián)網(wǎng)絡(luò)對(duì)金屬表面缺陷進(jìn)行檢測(cè)[17],mAP值達(dá)到81.8%;在SSD網(wǎng)絡(luò)中引入注意力機(jī)制[18],對(duì)紡織物表面缺陷檢測(cè),mAP值達(dá)到79.8%,F(xiàn)PS為19.2。以上的方法雖然檢測(cè)效果尚可,但是依舊存在漏檢、檢測(cè)速度慢的情況。
為了進(jìn)一步提高深度神經(jīng)網(wǎng)絡(luò)檢測(cè)缺陷表面的精度與速度問(wèn)題,結(jié)合YOLOX算法對(duì)金屬表面缺陷檢測(cè)。在YOLOv4主干網(wǎng)絡(luò)CSPDarknet中加入Focus網(wǎng)絡(luò),避免了下采樣過(guò)程中特征信息丟失問(wèn)題;加強(qiáng)特征融合層采用PANet結(jié)構(gòu),增強(qiáng)網(wǎng)絡(luò)的表征能力;通過(guò)消融實(shí)驗(yàn)驗(yàn)證Anchor-Free機(jī)制、SimOTA動(dòng)態(tài)正樣本匹配方法對(duì)檢測(cè)速度影響;通過(guò)解耦頭與耦合頭實(shí)驗(yàn),驗(yàn)證解耦頭對(duì)算法收斂速度影響;并在金屬表面缺陷數(shù)據(jù)集上進(jìn)行了實(shí)驗(yàn)測(cè)試,結(jié)果表明,YOLOX算法對(duì)金屬表面缺陷具有不錯(cuò)的檢測(cè)效果。
圖1是YOLOX的全部網(wǎng)絡(luò)框架,由主干網(wǎng)絡(luò)CSPDarknet、加強(qiáng)特征提取網(wǎng)絡(luò)、YOLO Head預(yù)測(cè)頭組成。
主干網(wǎng)絡(luò)是由CSPNet和Darknet框架組合而成的CSPDarknet網(wǎng)絡(luò),主干網(wǎng)絡(luò)由1個(gè)Focus層、1個(gè)基本卷積塊、4個(gè)殘差塊串聯(lián)組成,具有5個(gè)主要特點(diǎn):殘差網(wǎng)絡(luò)Residual、CSPnet網(wǎng)絡(luò)結(jié)構(gòu)、Focus網(wǎng)絡(luò)結(jié)構(gòu)、SiLU激活函數(shù)、SPP結(jié)構(gòu)。
殘差網(wǎng)絡(luò)Residual主干部分是一次1×1的卷積和一次3×3的卷積;殘差邊部分不做任何處理,直接將主干的輸入與輸出相結(jié)合,其特點(diǎn)是容易優(yōu)化,能夠通過(guò)增加相當(dāng)?shù)纳疃葋?lái)提高準(zhǔn)確率,殘差塊的跳躍連接,在提高網(wǎng)絡(luò)收斂速度同時(shí),緩解了在深度神經(jīng)網(wǎng)絡(luò)中增加深度帶來(lái)的梯度消失問(wèn)題。
CSPNet網(wǎng)絡(luò)結(jié)構(gòu)如圖2所示,圖2(a)、圖2(b)分別為ResNe(X)t結(jié)構(gòu)、 CSPResNe(X)t網(wǎng)絡(luò),CSPNet將原來(lái)殘差塊的堆疊進(jìn)行了一個(gè)拆分,主干邊由一個(gè)基本卷積塊和殘差塊的堆疊組成,副邊僅經(jīng)過(guò)一個(gè)基本卷積塊連接到最后。將CSPNte應(yīng)用到Y(jié)OLOX主干提取網(wǎng)絡(luò)中,不僅增強(qiáng)了圖片特征提取能力,而且降低了內(nèi)存成本,使模型在保持輕量化同時(shí),而不失準(zhǔn)確性。

圖2 CSPNet網(wǎng)絡(luò)結(jié)構(gòu)
Focus網(wǎng)絡(luò)結(jié)構(gòu)如圖3所示,在一張三通道的圖片中每隔一個(gè)像素拿到一個(gè)值,這時(shí)獲得了圖中的4個(gè)獨(dú)立的特征層,對(duì)4個(gè)獨(dú)立特征層進(jìn)行堆疊,將寬高信息集中到通道信息,拼接后的特征通道相對(duì)于原來(lái)三通道變成十二通道。將3個(gè)通道中的一個(gè)通道做了下采樣,能夠減少圖片信息的丟失,提升模型運(yùn)行速度。

圖3 Focus網(wǎng)絡(luò)結(jié)構(gòu)
將激活函數(shù)改進(jìn)為SiLU激活函數(shù),其函數(shù)關(guān)系式、函數(shù)圖像分別如式(1)、圖4所示,函數(shù)圖像是平滑的ReLU激活函數(shù),結(jié)合Sigmoid函數(shù)和ReLU的優(yōu)點(diǎn),SiLU具備無(wú)上界有下界、平滑、非單調(diào)的特性,SiLU在深層模型上的效果優(yōu)于ReLU

圖4 SiLU函數(shù)圖像
(1)
SPP結(jié)構(gòu)(圖1中SPPBottleneck部分)應(yīng)用在主干網(wǎng)絡(luò)的最后一個(gè)殘差塊,經(jīng)過(guò)一個(gè)基本卷積塊后,將每個(gè)特征圖分割成4種不同網(wǎng)格分別進(jìn)行池化操作。在不同尺寸特征圖上提取特征,提高了特征提取的精度,訓(xùn)練圖像尺寸的多樣性比單一尺寸的訓(xùn)練圖像更容易使得網(wǎng)絡(luò)收斂,增加網(wǎng)絡(luò)感受野。
特征金字塔網(wǎng)絡(luò)(feature pyramid networks,F(xiàn)PN)選擇雙向PANet結(jié)構(gòu),該結(jié)構(gòu)主要特點(diǎn)是自底向上和自頂向下的雙向融合網(wǎng)絡(luò)結(jié)構(gòu),將“short-cut”引入到最底層和最高層之間,減短了層與層之間的距離,加快了模型運(yùn)行時(shí)間。從主干網(wǎng)絡(luò)的第二、第三、第四個(gè)殘差塊提取特征信息,將提取底層特征信息經(jīng)過(guò)卷積、上采樣分別與其它特征層屬性進(jìn)行特征融合,經(jīng)過(guò)下采樣、卷積的自頂向下的結(jié)構(gòu),將融合后特征信息與下采樣同尺寸特征進(jìn)行再融合,獲取圖片的一些更深的語(yǔ)義特征。在預(yù)測(cè)頭部分,根據(jù)獲取的3個(gè)不同尺寸特征圖片,依次對(duì)大、中、小目標(biāo)進(jìn)行目標(biāo)檢測(cè),根據(jù)置信度對(duì)錨框進(jìn)行篩選,確定目標(biāo)物體的最佳位置。
YOLOX預(yù)測(cè)頭結(jié)構(gòu)如圖5所示,與傳統(tǒng)YOLO Head的耦合預(yù)測(cè)頭相比,YOLOX預(yù)測(cè)頭采用輕量解耦形式,對(duì)每一特征圖使用1×1卷積調(diào)整特征圖通道數(shù),將物體類(lèi)別判斷、錨框坐標(biāo)回歸和特征點(diǎn)是否具有物體劃分為兩個(gè)分支。每個(gè)分支經(jīng)兩個(gè)3×3卷積、一個(gè)1×1卷積進(jìn)行特征提取、通道整合,單獨(dú)對(duì)類(lèi)別、錨框坐標(biāo)、特征點(diǎn)是否具有物體進(jìn)行預(yù)測(cè),將3部分預(yù)測(cè)結(jié)果組合到一起,解耦檢測(cè)頭機(jī)制提升了YOLOX的性能和收斂速度,為檢測(cè)一體化帶來(lái)可能。錨框、類(lèi)別損失函數(shù)分別使用IOU損失函數(shù)、二分類(lèi)交叉熵?fù)p失函數(shù)(binary cross entropy loss,BCELoss),計(jì)算公式如式(2)、式(3)所示

圖5 YOLOX預(yù)測(cè)頭結(jié)構(gòu)
Lreg=-log(IOU(Bgt,Bpred))
(2)
(3)
其中,Bgt、Bpred分別為真實(shí)框位置、預(yù)測(cè)框位置;ti為真實(shí)在每幅圖像中的one-hot向量,pi為預(yù)測(cè)類(lèi)別的分?jǐn)?shù)。
基于Anchors目標(biāo)檢測(cè)器為獲得良好的性能,需要在訓(xùn)練前通過(guò)聚類(lèi)分析獲得一組最優(yōu)先驗(yàn)框。聚類(lèi)得到的先驗(yàn)框一般不能通用,而且錨框會(huì)增加預(yù)測(cè)頭的計(jì)算復(fù)雜度以及生成結(jié)果的大小,Anchor Free機(jī)制可以很好地改善這些問(wèn)題。Anchor Free機(jī)制將每個(gè)位置的預(yù)測(cè)個(gè)數(shù)從原來(lái)的3個(gè)減少到1個(gè),直接預(yù)測(cè)錨框的4個(gè)值,即網(wǎng)格左上角偏移量、預(yù)測(cè)框的寬和高。Anchor Free機(jī)制能夠降低檢測(cè)器參數(shù)量,提升模型檢測(cè)速度。
對(duì)于一個(gè)CNN目標(biāo)檢測(cè)器,一個(gè)好的樣本匹配方法對(duì)模型的性能具有很大的提升,在YOLOX中,使用了SimOTA這種高級(jí)動(dòng)態(tài)正樣本分配方法。對(duì)于每個(gè)真實(shí)框需獲取空間位置與所有特征點(diǎn),保證特征點(diǎn)落在物體真實(shí)框內(nèi)、特征點(diǎn)距離物體中心較近。通過(guò)Cost代價(jià)矩陣表示每個(gè)真實(shí)框和特征點(diǎn)之間的代價(jià)關(guān)系,主要由3部分構(gòu)成:真實(shí)框與特征點(diǎn)預(yù)測(cè)框重合程度、真實(shí)框與當(dāng)前特征點(diǎn)預(yù)測(cè)框種類(lèi)預(yù)測(cè)準(zhǔn)確度、真實(shí)框與特征點(diǎn)距離較近。
Cost代價(jià)矩陣中元素可由式(4)計(jì)算獲得,Cost代價(jià)矩陣的目的是自適應(yīng)找到當(dāng)前特征點(diǎn)應(yīng)該去擬合的真實(shí)框,重合度越高越需要擬合,分類(lèi)越準(zhǔn)越需要擬合,在一定半徑內(nèi)越需要擬合,在SimOTA中,不同目標(biāo)設(shè)定不同的正樣本數(shù)量(dynamick)
(4)

SimOTA具體流程如下所示:
(1)計(jì)算每個(gè)真實(shí)框與當(dāng)前特征點(diǎn)預(yù)測(cè)框的重合程度;
(2)獲取重合度最高的10個(gè)預(yù)測(cè)框與真實(shí)框的IOU和,得到每個(gè)真實(shí)框的k;
(3)計(jì)算每個(gè)真實(shí)框和當(dāng)前特征點(diǎn)預(yù)測(cè)框的種類(lèi)準(zhǔn)確度;
(4)判斷真實(shí)框的中心是否落在特征點(diǎn)的一定半徑內(nèi);
(5)計(jì)算Cost代價(jià)矩陣;
(6)將Cost最低的k個(gè)點(diǎn)作為該真實(shí)框的正樣本。
實(shí)驗(yàn)環(huán)境是在windows10系統(tǒng)下運(yùn)行,CPU是Core(TM)i7-10700,內(nèi)存大小為32 G,顯卡為NVIDIA GeForce RTX 2070 SUPER,顯存大小為8 G,使用Python語(yǔ)言在Pycharm軟件上進(jìn)行編程,使用的框架為pytorch。


圖6 6種缺陷類(lèi)型圖片
在目標(biāo)檢測(cè)中,為了對(duì)模型的檢測(cè)性能進(jìn)行評(píng)估對(duì)比,一般使用平均準(zhǔn)確率(average precision,AP)和平均準(zhǔn)確率均值(mean average precision,mAP)兩個(gè)指標(biāo)評(píng)價(jià)模型精度,使用網(wǎng)絡(luò)每秒檢測(cè)圖片數(shù)量(frames per second,F(xiàn)PS)評(píng)價(jià)模型檢測(cè)速度。平均準(zhǔn)確率由精確率(P)、召回率(R)計(jì)算獲得,式(5)~式(7)分別為精確率、召回率、平均準(zhǔn)確率計(jì)算公式
(5)
(6)

(7)
其中,TP為預(yù)測(cè)對(duì)的正樣本個(gè)數(shù),F(xiàn)P為預(yù)測(cè)為正樣本但實(shí)際為負(fù)樣本個(gè)數(shù),F(xiàn)N為預(yù)測(cè)對(duì)的負(fù)樣本個(gè)數(shù)。
針對(duì)解耦檢測(cè)頭對(duì)模型收斂速度影響問(wèn)題,使用YOLOv3模型分別在解耦、耦合預(yù)測(cè)頭下測(cè)試收斂速度,圖7為兩種檢測(cè)頭平滑后的模型損失隨迭代次數(shù)變化的曲線。從曲線明顯看出,在主干模型相同的前提下,耦合檢測(cè)頭在迭代次數(shù)達(dá)到130次左右,驗(yàn)證損失大約為6.68時(shí),基本保持不變;解耦頭卻在迭代次數(shù)100次左右時(shí),驗(yàn)證損失達(dá)到6.60左右后不再下降,從而驗(yàn)證解耦頭能夠加快模型收斂速度。

圖7 不同檢測(cè)頭下驗(yàn)證損失隨迭代次數(shù)變化曲線
YOLOX模型訓(xùn)練時(shí),引入遷移學(xué)習(xí)思想,設(shè)置預(yù)訓(xùn)練次數(shù)為400次,學(xué)習(xí)率設(shè)定為0.001,Batch_size大小為8,預(yù)訓(xùn)練后解凍主干網(wǎng)絡(luò)再進(jìn)行50次的全訓(xùn)練,學(xué)習(xí)率為0.0001,Batch_size大小為2。圖8為模型訓(xùn)練的損失曲線,從圖8中可以明顯看出,對(duì)凍結(jié)主干網(wǎng)絡(luò)的模型預(yù)訓(xùn)練400次,訓(xùn)練損失降至6附近后開(kāi)始波動(dòng),驗(yàn)證損失降至5.80左右,預(yù)訓(xùn)練模型基本趨于穩(wěn)定。解凍主干網(wǎng)絡(luò)進(jìn)行50次全參數(shù)訓(xùn)練對(duì)模型進(jìn)行微調(diào),訓(xùn)練、驗(yàn)證損失進(jìn)一步減少,降至4.64、4.58后基本不變,模型訓(xùn)練達(dá)到飽和。

圖8 訓(xùn)練損失函數(shù)曲線
使用YOLOX算法訓(xùn)練后,6種缺陷類(lèi)型的平均準(zhǔn)確率均值(mAP)如圖9所示,平均準(zhǔn)確率越大,代表對(duì)某類(lèi)目標(biāo)識(shí)別越準(zhǔn)確,效果較好。mAP是評(píng)價(jià)模型整體性能的一項(xiàng)指標(biāo),mAP越大,表明模型對(duì)數(shù)據(jù)集各類(lèi)別綜合性能較好。從圖9中可以看出裂紋缺陷圖片的平均準(zhǔn)確率63.63%為最低,劃痕、斑塊、夾雜圖片的平均準(zhǔn)確率均超過(guò)90%,最高的劃痕平均準(zhǔn)確率達(dá)到98.37%,檢測(cè)準(zhǔn)確率接近百分之百。模型對(duì)整體類(lèi)別檢測(cè)的平均準(zhǔn)確率均值(mAP)高達(dá)83.78%,表明模型的整體準(zhǔn)確率較高。

圖9 6種金屬缺陷平均準(zhǔn)確率均值
為了驗(yàn)證YOLOX檢測(cè)的效果,分別使用YOLOv4、YOLOX對(duì)6種缺陷圖片進(jìn)行檢測(cè)對(duì)比,如圖10所示。其中左側(cè)圖、右側(cè)圖分別為YOLOv4、YOLOX檢測(cè)效果圖。從圖中可以看出,YOLOv4檢測(cè)的裂紋、斑塊、劃痕、夾雜相較于YOLOX檢測(cè)結(jié)果,存在明顯的漏檢情況,壓入氧化鐵皮和麻點(diǎn)兩類(lèi)缺陷雖檢測(cè)框大致相同,但是,在置信度方面,YOLOX大致可達(dá)到0.9以上,YOLOv4有部分檢測(cè)框低于0.8。在一定要求的置信度情況下,YOLOX能夠準(zhǔn)確地對(duì)各類(lèi)金屬表面缺陷進(jìn)行定位,具有更好的檢測(cè)效果。

圖10 YOOLOv4和YOLOX檢測(cè)效果對(duì)比
表1為各不同算法對(duì)此金屬缺陷數(shù)據(jù)集檢測(cè)效果性能對(duì)比,從表1中可以看出,F(xiàn)aster R-CNN雖然檢測(cè)精度可達(dá)81.78%,但檢測(cè)速度FPS只有7,檢測(cè)速度遠(yuǎn)低于YOLOX;SSD和YOLOv4檢測(cè)精度均能達(dá)到76%左右,檢測(cè)速度FPS只有46,明顯慢于YOLO系列檢測(cè)算法;相比于原始YOLOv3、YOLOv4算法,YOLOX算法在各種類(lèi)型金屬缺陷上檢測(cè)精度均有較大地提升,mAP值分別提升13.20%、7.51%,速度上也有進(jìn)一步地提升;根據(jù)數(shù)據(jù)集使用聚類(lèi)獲得先驗(yàn)框的改進(jìn)YOLOv3算法,mAP值達(dá)到73.77%,比原始YOLOv3精度提高3%左右,YOLOX算法相比于Kmean加權(quán)YOLOv3算法精度提升了10.01%;在YOLOv3淺層增加提取層后,將先驗(yàn)框從3組增至4組,裂紋、壓入氧化鐵皮類(lèi)別檢測(cè)精度略高于YOLOX算法,其它4種金屬表面缺陷遠(yuǎn)低于YOLOX算法,YOLOX總體精度較前者提升了3.68%左右。FPS達(dá)到65,檢測(cè)速度相較于其它幾種檢測(cè)算法具有較大地提升。幾種算法綜合比較下來(lái),YOLOX算法對(duì)各類(lèi)金屬表面缺陷檢測(cè)具有較好的效果。

表1 不同算法檢測(cè)性能對(duì)比
為了驗(yàn)證所提方法的有效性,對(duì)Focus網(wǎng)絡(luò)、雙向PANet、解耦頭等模塊進(jìn)行消融實(shí)驗(yàn),主干網(wǎng)絡(luò)選用去除相應(yīng)模塊的CSPDarknet,通過(guò)檢測(cè)精度和檢測(cè)速度對(duì)比子模塊性能。如表2所示,從表2可以看出,F(xiàn)ocus網(wǎng)絡(luò)、雙向PANet比表1中的YOLOv3、Kmean加權(quán)Yolov3檢測(cè)精度、速度均有提升。YoloX主干網(wǎng)絡(luò)和加強(qiáng)特征網(wǎng)絡(luò)選定后,單獨(dú)對(duì)解耦頭、Anchor-Free、SimOTA這3個(gè)tricks進(jìn)行驗(yàn)證,單獨(dú)加入3個(gè)tricks,檢測(cè)精度比Yolov4分別提升2.41%、2.50%、2.90%;檢測(cè)速度方面,解耦頭FPS與YOLOv4均為59,Anchor-Free、SimOTA的FPS為60。將3個(gè)tricks兩兩相組合,可以明顯看出Anchor-Free、SimOTA兩者組合對(duì)模型性能提升最大,mAP達(dá)到80.73%,檢測(cè)速度FPS為63。3個(gè)tricks都加入模型后,檢測(cè)精度進(jìn)一步提升,達(dá)到83.78%,檢測(cè)速度FPS達(dá)到65。

表2 消融實(shí)驗(yàn)
針對(duì)金屬鋼材表面缺陷,結(jié)合YOLOX的目標(biāo)檢測(cè)算法,在主干網(wǎng)絡(luò)中引入Focus結(jié)構(gòu)加強(qiáng)圖片特征提取,預(yù)測(cè)端采用解耦頭、Anchor Free機(jī)制以及SimOTA動(dòng)態(tài)正樣本匹配等方法提高了模型的收斂、檢測(cè)速度。通過(guò)解耦頭和耦合頭實(shí)驗(yàn)對(duì)比,驗(yàn)證解耦頭能夠加快模型收斂速度;通過(guò)幾種模塊的消融測(cè)試,驗(yàn)證不同模塊對(duì)模型的性能影響。在圖片目標(biāo)檢測(cè)精度方面,比YOLOv3、YOLOv4分別提高13.20%、7.51%;在檢測(cè)速度方面,F(xiàn)PS達(dá)到65,每秒比YOLOv3、YOLOv4多檢測(cè)圖片10張、6張,表明YOLOX算法對(duì)表面缺陷具有不錯(cuò)的檢測(cè)效果,可以推廣到檢測(cè)業(yè)的各種場(chǎng)景,推動(dòng)檢測(cè)產(chǎn)業(yè)的智能化升級(jí)。下一步準(zhǔn)備對(duì)需檢測(cè)數(shù)據(jù)集進(jìn)行圖片預(yù)處理,通過(guò)一些深度學(xué)習(xí)的知識(shí),對(duì)數(shù)據(jù)集圖片進(jìn)行超清分辨率處理,獲取更清晰的數(shù)據(jù)集圖片,進(jìn)一步提高算法的檢測(cè)精度。