應(yīng) 俊,劉 迅,曾學(xué)仁,方 亮,田 楠
(1.上海擴博智能技術(shù)有限公司,上海 201100;2.中國三峽新能源(集團)股份有限公司西北分公司,蘭州 730070)
關(guān)于缺陷檢測應(yīng)用的研究大致可分為兩類:基于機器視覺的缺陷檢測方法,如LBP+SVM;基于深度學(xué)習(xí)的缺陷檢測方法?;跈C器視覺的方法存在2 個問題:受環(huán)境、光照、生產(chǎn)工藝等影響,手工提取的特征信噪比較低,有效信息不足,導(dǎo)致準(zhǔn)確率不高,達不到工業(yè)應(yīng)用要求;選擇合適的特征比較耗時,無法滿足實時性檢測要求。
自從ImageNet[1]競賽使用卷積神經(jīng)網(wǎng)絡(luò)[2]以來,深度學(xué)習(xí)算法取得了巨大的進步。特別是受益于大規(guī)模、高質(zhì)量的開源數(shù)據(jù)集,例如ImageNet[1],PASCAL VOC[3],MS COCO[4],開發(fā)出了大量的目標(biāo)檢測算法,其中影響深遠(yuǎn)的主要算法 有Faster R-CNN[5],SSD[6],YOLO[7-8]以 及CornerNet[9]。Faster R-CNN 算法輸入1 000×600分辨率圖片,SSD 算法輸入300×300 或512×512分辨率圖片,YOLO 算法輸入416×416 或512×512 分辨率圖片,CornerNet 算法輸入511×511 分辨率圖片。
兩階段算法最早由R-CNN 提出。兩階段算法生成一系列ROI(感興趣區(qū)域),然后用卷積神經(jīng)網(wǎng)絡(luò)對其分類。R-CNN 算法采用傳統(tǒng)的選擇性搜索方法來生成ROI,每個區(qū)域都從圖片中提取并單獨進入卷積神經(jīng)網(wǎng)絡(luò),因此產(chǎn)生了大量冗余計算。Faster R-CNN 算法提出RPN(區(qū)域候選網(wǎng)絡(luò))來替代選擇性搜索算法,它本身輸入的是一系列設(shè)定好的先驗框(即錨點框),這種設(shè)計使得算法更有效率且允許該網(wǎng)絡(luò)實現(xiàn)端到端訓(xùn)練。之后,其他的一些研究著重于整合子類別信息、選擇更好的特征、提高速度、級聯(lián)優(yōu)化手段以及更好的訓(xùn)練方法。
與此同時,YOLO 和SSD 開啟了一階段算法,移除了ROI 池化階段并且直接在一個網(wǎng)絡(luò)中檢測物體。一階段算法通常比兩階段算法速度更快,且能保持一定的準(zhǔn)確率。SSD 算法在不同特征層設(shè)置了不同尺度的先驗框,基于此進行分類和回歸。YOLO 算法直接預(yù)測物體的坐標(biāo)和類別,即沒有錨點框。然而,YOLO 和SSD 仍未能在精度上超越兩階段算法,直到RetinaNet[10]被發(fā)明出來。文獻[10]指出密集的錨點框生成導(dǎo)致正負(fù)樣本極度不均衡,這種不均衡導(dǎo)致模型難以訓(xùn)練和優(yōu)化,因此提出一種新的損失函數(shù)——Focal Loss(焦點損失),用于動態(tài)調(diào)節(jié)錨點框的權(quán)重,至此一階段算法才在性能上超越兩階段算法。
國內(nèi)在缺陷檢測應(yīng)用方面已有一定的進展:劉恒等人[11]基于多源域遷移學(xué)習(xí)實現(xiàn)液晶面板缺陷檢測;盧穎穎等人[12]采用邊緣特征提取實現(xiàn)電鍍件缺陷檢測;彭趕等人[13]采用局部閾值分割和局部區(qū)域?qū)Ρ榷确治鰧崿F(xiàn)手機屏幕缺陷檢測;馬麗萍等人[14]使用頻譜分析法進行汽車安全帶表面缺陷檢測;趙欣洋等人[15]和胡嘉成等人[16]分別使用Faster R-CNN 和卷積神經(jīng)網(wǎng)絡(luò)對缺陷檢測問題進行研究并取得了良好的進展,但檢測速度和模型魯棒性距離實際工業(yè)應(yīng)用要求仍有一定距離。
目前,尚沒有任何一個算法能夠直接應(yīng)用在5 456×3 632 超大分辨率的葉片圖片上。在上述算法中,SSD 算法在VOC 數(shù)據(jù)集上展現(xiàn)了出色的推理速度和高精度,且該框架具有高度的可移植性。綜合考慮SSD 算法的速度、準(zhǔn)確性和靈活性,本文基于SSD 算法開發(fā)一套適合于風(fēng)機葉片缺陷檢測的算法。
風(fēng)機葉片的獨特性帶來了大量繁雜的背景,而且各種臟污噪音對前景造成極大干擾,同時算法需要具備完整的旋轉(zhuǎn)不變性,并解決大規(guī)模空間搜索問題。為此,針對以下方面進行優(yōu)化:
(1)空間范圍非常小。
在風(fēng)機葉片圖像中,感興趣的缺陷區(qū)域通常很小且稀疏,而不是像COCO 數(shù)據(jù)集中典型且特征突出的物體。風(fēng)機葉片尺寸非常大,但缺陷通常非常小,即便在圖片分辨率很高的情況下,缺陷范圍也只有很少的像素,比如15 個。為此,提出基于SSD 算法優(yōu)化的缺陷檢測方法。
(2)完備的旋轉(zhuǎn)不變性。
由于葉片拍攝的角度是隨機的,葉片缺陷對象可以有0°~360°任意角度;但屬于開源數(shù)據(jù)集的COCO 數(shù)據(jù)集或者VOC 數(shù)據(jù)集中的物體,絕大部分是直立的,幾乎不會出現(xiàn)任意角度的物體。為此,提出基于葉片分割的角度旋轉(zhuǎn)方法。
(3)輸入超大分辨率圖像。
由于葉片風(fēng)機輸入圖片非常大但目標(biāo)又通常很小,大多數(shù)算法都無法直接使用。為此,提出基于原圖裁剪的缺陷檢測方法。
實際圖片中葉片前景的區(qū)域占比約為30%~70%。在葉尖部位這一比例可以降至10%以下。大量的背景區(qū)域會增加識別過程的耗時,背景中復(fù)雜的信息也會干擾算法對葉片缺陷的識別。因此,本文設(shè)計了分割算法,將葉片前景提取出來(見圖1)。
圖1 提取葉片前景
缺陷多數(shù)沿著葉長方向發(fā)展(長且窄),而現(xiàn)有檢測算法的缺陷標(biāo)注框為正矩形(而非旋轉(zhuǎn)的矩形),為了盡可能減少斜向缺陷帶來的干擾,本文利用算法將葉片旋轉(zhuǎn)到豎直方向(見圖2),這樣斜向缺陷框也旋轉(zhuǎn)為正矩形框,且緊密貼合缺陷區(qū)域。分3 個步驟實現(xiàn)這一過程:
圖2 葉片旋轉(zhuǎn)
(1)計算葉片的最小外接矩形。
(2)根據(jù)矩形的長短邊計算葉片的角度,并旋轉(zhuǎn)圖片(同步旋轉(zhuǎn)缺陷的標(biāo)注框)。
(3)旋轉(zhuǎn)后,葉片處于豎直方向,將葉片區(qū)域切割出來(同步平移缺陷的標(biāo)注框)。
SSD 算法(圖3)于2015 年首次被提出,其重用了Faster R-CNN 的錨點框機制,采用多尺度特征圖抽樣,其中大特征圖負(fù)責(zé)小目標(biāo)檢測,小特征圖負(fù)責(zé)大目標(biāo)檢測,并將VGGNet 中的全鏈接更改為全卷積網(wǎng)絡(luò)。本文對SSD 算法進行優(yōu)化,擴展SSD 骨干結(jié)構(gòu),更新多尺度特征層(稱為Neck 層),并將Cross Entropy Loss(交叉熵?fù)p失)優(yōu)化為Focal Loss,增加了IOU Loss(交并比損失)。
圖3 SSD 算法網(wǎng)絡(luò)結(jié)構(gòu)
目標(biāo)檢測網(wǎng)絡(luò)的骨干網(wǎng)絡(luò)主要用于提取原始圖片中的高階特征,在圖像分類任務(wù)中,ResNet被廣泛應(yīng)用,并且有很多變種和應(yīng)用。本文選擇ResNet50-d(圖4)來替代VGGNet,并在最后骨干網(wǎng)絡(luò)的其中3 個階段將3×3 卷積網(wǎng)絡(luò)替換為DCN(可變形卷積網(wǎng)絡(luò)),該結(jié)構(gòu)有P1,P2,P3,P4,P5 共5 個階段。
圖4 ResNet50-d 的殘差模塊結(jié)構(gòu)
SPP(空間金字塔池化)由SPPNet 首次提出,該設(shè)計可以使用固定的k×k(k 為池化核的寬和高)池化核獲得不同大小感受野的特征,因為池化層沒有參數(shù),所以SPP 可以在少量增加模型計算量的情況下,極大地增加模型的感受野。本文在骨干網(wǎng)絡(luò)P5 階段增加了SPP 結(jié)構(gòu)。
多尺度特征層(Neck 分支)優(yōu)化如圖5 所示,其中圖5(a)為經(jīng)典的FPN(特征金字塔)結(jié)構(gòu),圖5(b)為PANet 結(jié)構(gòu)(比FPN 多了一層自下而上結(jié)構(gòu)),圖5(c)為NASNet 所采用的FPN 結(jié)構(gòu),圖5(d)為BiFPN(雙向特征金字塔)結(jié)構(gòu)。為了獲取更多的特征表達,本文采用BiFPN 來替代SSD 中的多尺度特征。特征圖的P3,P4,P5 為BiFPN 層的輸入,未使用P6 和P7。
圖5 多尺度特征層(Neck 分支)優(yōu)化
檢測分支和SSD 一致,由兩層卷積層組成:3×3 Conv Layer+1×1 Conv Layer。每層輸出的預(yù)測值為A×(K+4),A 為該層錨點框數(shù)量,K 為類別總數(shù),4 為xywh offset 的預(yù)測值。
權(quán)重指數(shù)平滑:訓(xùn)練神經(jīng)網(wǎng)絡(luò)時,通常對訓(xùn)練的模型參數(shù)保存一份移動平均數(shù)。使用權(quán)重的移動平均數(shù)來評估模型,通常比使用模型最終訓(xùn)練的權(quán)重效果要好。使用EMA(指數(shù)移動平均數(shù))來計算模型訓(xùn)練過程的權(quán)重平均數(shù),公式如下:
式中:WEMA為指數(shù)移動平均權(quán)重;W 為當(dāng)期更新的權(quán)重;λ 為衰減因子,取λ=0.999 8。
Label Smooth(標(biāo)簽平滑):傳統(tǒng)的硬編碼標(biāo)簽非0 即1,但預(yù)測值使用的是Sigmoid 激活函數(shù),Sigmoid 函數(shù)若要得到0 或者1 時,輸入的值必須非常小或者非常大,反而容易造成模型過擬合,所以采用對原始硬編碼標(biāo)簽進行平滑的處理方法。標(biāo)簽平滑公式如下:
式中:y′為標(biāo)簽平滑后的樣本標(biāo)簽;ε 為平滑系數(shù),取ε=0.05;K 為模型類別總數(shù);i 為預(yù)測類別;y 為實際類別。
為了快速收斂,本文拋棄了SSD 基于最大IOU 匹配的規(guī)則,而是直接采用寬高規(guī)則匹配,即按該gt-bbox(人工標(biāo)注的缺陷框)和當(dāng)前層的錨點框計算寬高比。若寬高比小于設(shè)定的閾值(本文中為4),則該錨點框為正例;反之為負(fù)例。
對于每個gt-bbox,計算其落在哪個網(wǎng)格內(nèi),并根據(jù)四舍五入規(guī)則找出最近的2 個網(wǎng)格,將這3 個網(wǎng)格都認(rèn)為是負(fù)責(zé)預(yù)測該gt-bbox 的網(wǎng)格,如圖6 所示。
圖6 預(yù)測gt-bbox 的網(wǎng)格
對于分類和回歸損失,分別采用Focal Loss和Smooth L1 Loss,并新增了IOU Loss,即模型總損 失由Focal Loss,Smooth L1 Loss,IOU Loss三部分組成。
邊界框回歸對于缺陷檢測至關(guān)重要。在SSD中,僅使用Smooth L1 Loss 作為回歸損失,但該損失和最終評估指標(biāo)mAP(平均精度均值)相關(guān)性并不高。IOU Loss 也有其他變種,比如GIOU(通用IOU 損失)、DIOU(距離IOU 損失)、CIOU(完全IOU 損失)等,這些變種的提出都是為了解決上述問題。本文在Smooth L1 Loss 基礎(chǔ)上,增加了IOU Loss。
本文采用ResNet50-d-DCN 作為骨干網(wǎng)絡(luò),使用BiFPN 作為Neck 層,預(yù)測分支和SSD 完全相同。首先,基于ImageNet 預(yù)訓(xùn)練ResNet50-d-DCN 網(wǎng)絡(luò)[17],對于BiFPN 和預(yù)測分支,使用xavier初始化策略。訓(xùn)練中使用了SGD(隨機梯度下降)優(yōu)化器,共迭代150 000 次,初始學(xué)習(xí)率為0.01,在80 000 次和120 000 次時學(xué)習(xí)率分別縮小10倍,L2 正則化項系數(shù)為0.000 5,動量為0.9,多尺度訓(xùn)練尺度為320~608,批量為16。
基于blade defects test data(葉片缺陷試驗數(shù)據(jù))的消融實驗結(jié)果見表1。
表1 基于blade defects test data 的消融實驗結(jié)果
本節(jié)將逐步展示上述技巧或模塊的有效性。
A→B:使用未作任何優(yōu)化的ResNet-50 代替vgg16;此時mAP 略微下降,考慮到ResNet-50參數(shù)量小于vgg16,故將ResNet-50 優(yōu)化為ResNet-50d,并將其中的3×3 卷積網(wǎng)絡(luò)替換為DCN,并在P5 階段增加SPP 層;據(jù)此,得到一個mAP50為74.2%的模型B。
B→C:針對網(wǎng)絡(luò)結(jié)構(gòu)的Neck 進行優(yōu)化嘗試,使用了BiFPN 結(jié)構(gòu);采用EMA 和Label Smooth 訓(xùn)練技巧,模型的mAP50提升到78.8%。
C→D:嘗試優(yōu)化損失函數(shù)來提升mAP,因為調(diào)整損失函數(shù)一般只會影響訓(xùn)練過程,而幾乎不會影響推理時間;為此,增加了IOU 損失和正例匹配規(guī)則,模型的mAP50提升到82.1%。
本文共采集12 000 余張真實缺陷圖片,按照8:1:1 原則構(gòu)建訓(xùn)練、驗證和測試數(shù)據(jù)集。統(tǒng)計結(jié)果顯示:在IOU 為0.5 時,模型在測試數(shù)據(jù)集的mAP 為82.1%,召回率為90.3%。
為驗證優(yōu)化后的SSD 算法性能,在相同的實驗環(huán)境,分別采用Faster R-CNN 算法、YOLO 算法、SSD 算法和優(yōu)化后的SSD 算法以mAP 為指標(biāo)進行比較,如表2 所示。
表2 4 種算法在測試數(shù)據(jù)集上的mAP
在相同的實驗環(huán)境下(Tesla V100),對比4 種算法的實時性能,如表3 所示??梢钥吹絻?yōu)化后的SSD 算法檢測速度仍有31 幀/s,基本達到實時性的要求。
表3 4 種算法的實時性能比較
優(yōu)化后的SSD 算法預(yù)測效果如圖7 所示。
圖7 模型預(yù)測效果
本文基于風(fēng)機葉片缺陷提出了一種新的缺陷檢測算法,并結(jié)合大量的目標(biāo)檢測工程技術(shù)來優(yōu)化檢測算法在該應(yīng)用場景上的檢測精度,通過實踐應(yīng)用,表明深度學(xué)習(xí)算法在企業(yè)級項目中有著很好的魯棒性和商業(yè)價值。后續(xù)將會繼續(xù)巡檢更多的風(fēng)機以豐富訓(xùn)練數(shù)據(jù),并探討和推動風(fēng)機葉片缺陷檢測算法的應(yīng)用,比如基于缺陷檢測結(jié)果來分析風(fēng)機葉片的健康程度,基于缺陷檢測結(jié)果來預(yù)測年發(fā)電量損失以及制訂維修計劃等。