吳良武,周永霞,王宇航,朱鈺萍
1.中國計量大學 信息工程學院,杭州 310018
2.杭州市藍弧視覺科技有限公司,杭州 310018
柔性電路板(flexible printed circuit,FPC)是一種廣泛應用于生活生產中的電子器件,在電子設備、手機、電腦和醫療設備等領域都得到大量使用。金手指是FPC上用于導電進行信號傳輸的金黃色導電觸片。金手指在生產、搬運過程中容易對表面的鍍金造成一定的損傷,造成不同的缺陷,其中劃痕是金手指中最常見的缺陷之一。金手指表面的劃痕會降低FPC的導電性能減弱信號的傳輸效果,影響設備的正常使用,所以必須將存在缺陷的元件檢測出來,對其進行返工或報廢處理。
傳統的金手指劃痕缺陷檢測是人工實現的,通過肉眼鑒別生產出的FPC有無缺陷。人工識別是非常費時費力的,而且長時間地使用肉眼容易造成視覺疲勞,可能會造成對缺陷的誤檢和漏檢。由于缺陷區域較小以及背景的干擾,使用傳統的圖像處理方法和基于深度學習的分類模型檢測后,都存在大量漏檢和誤檢的情況,無法達到工廠的生產要求。
2015年,美國伯克利大學的Long等[1]提出了全卷積網絡(fully convolutionl network,FCN),該網絡將神經網絡末端的全連接層替換成了卷積層,使其可以接受任意大小的圖片作為輸入。FCN是將卷積神經網絡結構應用到圖像語義分割中的開山之作,隨后的語義分割模型基本都采用了這種結構。FCN提出后不久,基于其改進的語義分割網絡U-Net[2]誕生。與FCN相比,U-Net的網絡結構是完全對稱的,encoder部分和decoder部分是非常相似的;而FCN的decoder部分較為簡單,只使用了反卷積操作。劉孝保等[3]首先使用Focal-Loss優化后的U-Net網絡對缺陷進行分割和定位;然后結合卷積神經網絡(CNN)和反向傳播神經網絡(BPNN)構建主從特征與分類層;最后通過級聯特定模糊規則的模糊神經網絡對鋁型材表面缺陷進行分割,取得了較好的分割效果;任秉銀等[4]針對U-Net對微小缺陷分割效果不佳的情況,在分類網絡中加入分割網絡并且加入注意力機制對U-Net網絡進行改進,很好地完成對手機屏幕輕微劃痕的準確檢測。
語義分割是對圖像中的每一像素進行細粒度的分類,檢測效果會更加精準,因此本文選擇該方法對金手指表面的劃痕進行檢測。由于劃痕的形狀大小不一,目前主流分割模型[1-2,5-6]對劃痕的分割效果不夠理想;而金字塔結構能夠獲取多尺度特征信息,于是本文基于PSP-Net[6]模型結構,提出了多注意力機制金字塔池化方法對金手指表面的劃痕進行分割。主干網絡采用ResNet50[7]來提取特征圖,然后將獲得的特征圖輸入到多注意力機制金字塔池化模塊(multi-attention mechanism Pyramid pooling module,MAMPPM)進行特征增強,接著與原始特征圖拼接后通過一個卷積層得到最終分割結果。實驗結果表明,本文提出的方法能夠很好地分割出金手指表面的劃痕,并且劃痕邊緣區域的分割效果相比于其他模型更加光滑和細膩,在MIOU和MPA指標上也有較大的提升,優于常用的分割模型;并且目前已在工廠實際生產中進行測試,每1 000份產品中的漏檢率大約為5%,基本符合工廠的生產需求。
金手指表面的劃痕形狀和深淺各不相同,通過高分辨率工業相機在環形光源的照射下獲取的圖片能夠突出劃痕的形狀和深淺,如圖1所示。金手指表面并不是光滑的經過光源的反射后,拍攝得到的圖片中背景區域和劃痕區域有一定的相似性。因此分割模型需要將劃痕區域的特征進行增強,以便更好地將背景和劃痕區分出來。

圖1 金手指劃痕圖Fig.1 Golden finger scratched diagram
針對圖片存在背景干擾的問題,本文首先采用去除全連接層的ResNet50模型獲取圖像的特征圖,并使用擴張卷積[8]策略來增大感受野以獲取更多的特征信息;然后在PSP-Net的金字塔池化模塊(pyramid pooling module,PPM)中的每一層引入了CBAM[9]和ECA[10]兩種注意力機制,在注意力機制的輸出端串聯邊界細化(boundary refinement,BR)模塊[11]實現對劃痕邊緣區域的精細化,使邊緣的分割效果更加準確;采用級聯的方式將金字塔不同層建立聯系進行特征增強,最后將不同層的輸出與最初獲取的特征圖拼接后通過卷積層得到最終的預測分割圖,模型完整結構如圖2所示。

圖2 完整模型結構圖Fig.2 Complete model structure diagram
考慮到劃痕區域會受到背景的干擾,需要一個深度網絡提取更多的特征信息,本文采用ResNet50模型獲取輸入圖片的特征圖,輸入圖片的大小為112×112,bath-size為32。
ResNet50總共有50層,模型的最后一層是用于分類的全連接層,語義分割中并不需要該層,因此實際上使用了前49層提取特征。ResNet50的第一部分是一個單獨的卷積層,受VGG-Net[12]模型的啟發,為了減少網絡的參數量,本文采用3層3×3的卷積層堆疊在一起替代原模型中第一層7×7的卷積層。卷積層后是一個3×3的最大池化層,為了保留更多的特征信息,池化層中stride和padding都設為1。模型的第二部分由4個layer共16個bottleneck堆疊構成,bottleneck的結構如圖3所示。輸入的特征圖首先使用1×1大小的卷積核進行降維,經過3×3大小的卷積處理后再通過1×1大小的卷積核對通道數進行還原以保證輸出的通道數與輸入的通道數一致,降維再還原的過程有效減少了模型的計算量;每個卷積層后都串聯了批量歸一化層(batch normalization,BN)和ReLU激活函數,BN層能夠對輸入數據進行歸一化處理,防止網絡在反向傳播中出現梯度爆炸或梯度消失,使得訓練過程更加穩定;ReLU激活函數增加了網絡的非線性因素同時可以防止梯度消失。

圖3 Bottleneck結構圖Fig.3 Bottleneck structure
使用降采樣方法增加感受野和降低計算量,但是這會降低空間分辨,本文ResNet50的layer3和layer4中采用擴張卷積策略在不降低空間分辨率的情況下增大感受野,使得卷積輸出包含較大范圍內的信息并且具有較高的空間分辨率以便對目標的定位更加精準。經過layer4之后得到32×3×8×8的4維特征張量。
PSP-Net的金字塔池化模塊(PPM)將提取的特征圖按不同層分別分成1×1、2×2、3×3、6×6共4種包含不同大小的子區域的特征圖,如圖4顯示,接著使用1×1的卷積將不同尺寸的特征圖通道數降為原來的1/4,之后全部上采樣使其與輸入特征圖的大小相同并與輸入特征圖進行拼接,最終將全局和局部特征信息融合到一起。

圖4 金字塔池化模塊Fig.4 Pyramid pooling module
但是4種帶有不同局部信息的特征圖在上采樣過程中會丟失部分信息,并且原模型只是將不同尺寸的特征圖簡單拼接,沒有進一步利用不同層的特征信息。針對上述的不足,本文將金字塔不同層建立聯系對劃痕區域進行特征增強。具體做法如下:首先將金字塔的第一層通過雙線性插值增大到與第二層特征圖相同的尺寸;接著與第二層的特征圖進行逐元素求點積,求點積后的結果輸入到CBAM注意力機制中;輸出結果與第二層的特征圖逐元素求和,然后將求和結果與CBAM模塊和BR模塊串聯,構成了多注意力機制特征增強模塊(multi-attention mechanism feature enhancement module,
MAMFEM),如圖5。圖中1×1的卷積操作是為了相乘和相加過程中通道數能夠保持一致。

圖5 多注意力機制特征增強模塊Fig.5 Multi-attention mechanism feature enhancement module
本文數據集中代表背景的像素值為0,代表劃痕的像素值為1,數據集圖片中背景區域占據了圖片的絕大部分;又因為第一層的特征圖是經過全局平均池化后得到的,所以該特征圖中元素的值趨近于0。經過雙線性插值上采樣后與第二層逐元素求點積使得第二層中的元素的值都減小了,這相當于弱化了劃痕的特征信息,不利于對劃痕的分割。于是將點積的結果通過CBAM獲取重要特征后再與第二層進行逐元素求和,得到的新的特征圖中背景區域是兩個非常小的數求和之后的結果,依然是一個很小的數,而劃痕區域是一個較大的數與一個相對較小的數求和后的結果,結果依然是一個較大的數,并且比原來的值更大,所以通過逐元素求點積再逐元素求和的操作,使得第二層背景區域的特征信息基本不受影響的情況下,增強了劃痕區域的特征信息,具體運算流程如圖6。圖中是金字塔第一層與第二層進行特征增強的示例,金字塔第一層和第二層子區域較大因此包含更多的背景信息,所以數值較小,而金字塔的第三、第四層的子區域相對較小,包含相對較多的劃痕信息,因此數值會較大,特征增強效果也會更明顯。

圖6 逐元素相乘再相加運算流程Fig.6 Element-wise multiplication and addition operation process
在加入MAMFEM后將輸出與第二層的原始特征圖拼接,并與ECA模塊和BR模塊串聯得到新的第二層輸出。
第一層與第二層融合后的輸出按照與第一層相同的方法進行雙線性插值得到與金字塔第三層相同尺寸的特征圖,輸出結果再與第三層進行逐元素求點積以及逐元素求和的操作,最后與第三層原始特征圖拼接得到新的第三層輸出;然后繼續按照相同的方法將新的第三層輸出結果與第四層進行融合得到新的第四層輸出;最后將金字塔所有層全部上采樣,并與帶有全局特征信息的特征圖進行拼接。整個模塊通過級聯的方式將金字塔不同層建立聯系并進行特征融合,逐層增強劃痕區域的特征信息,同時采用不同的注意力機制獲取重要的特征信息,顧本文將其稱為多注意力機制金字塔池化模塊,結構如圖7所示。

圖7 多注意力機制金字塔池化模塊Fig.7 Multi-attention mechanism pyramid pooling module
CBAM是一種結合了通道注意力和空間注意力的注意力機制,能夠獲取每個特征通道和特征空間的重要程度,利用獲得的重要程度來抑制當前任務中不重要的特征,結構如圖8所示;通過實驗發現使用CBAM能夠將不重要的特征信息降低多個數量級,而本文數據集圖片中背景的占比很大,通過CBAM能夠很好地抑制背景對分割的影響。ECA模塊是一種超輕量通道注意力機制,ECA-Net作者通過剖析SE-Net[13]中的通道注意力模塊后,證明避免降維和適當的跨通道交互對通道注意力的重要性;于是給定輸入后在不降低維度的情況下進行逐通道平均池化,通過考慮每個通道和它k個近鄰來捕獲局部跨通道交互;本文提出的多注意力機制金字塔模塊中存在通道拼接的過程,于是便考慮使用ECA模塊來捕獲重要通道提升分割效果。BR模塊能夠進一步提高對邊緣區域分割的準確性,其結構類似于殘差塊的結構,如圖9所示。

圖9 邊界細化模塊Fig.9 Boundary refinement module
交叉熵可以判定實際的輸出和期望的輸出的接近程度,交叉熵損失函數在語義分割中使用廣泛,公式1是一個二分類的交叉熵損失函數的表達式,其中P表示預測值,y表示真實值。當y=1時,L=-lb P,因為對數函數是單調遞增函數,所以L是P的單調遞減函數,即預測值P越大(接近1)靠近真實值,那么損失函數L的值就越小;P越小(近0)遠離真實值,L的值越大。同理,當y=0時,L=-lb(1-P),此時L是P的單調遞增函數,即預測值P越大(接近1)遠離真實值,損失函數的值越大;當P越小時(接近0)靠近真實值,L的值越大。但是交叉熵損失函數對于正負樣本會公平處理,當正樣本占比比較小時,會被更多的負樣本淹沒,因此當正負樣本不均衡時很難挖掘出正樣本。

Dice系數是一種用來度量集合相似度的函數,如公式(2)所示,用于計算兩個樣本的相似程度。公式(2)中|X?Y|表示X和Y的交集,|X|和|Y|分別表示X、Y的元素個數,分子中的系數2是因為分母中存在重復計算X和Y的共同元素,S的取值范圍為[0,1];在語義分割任務中X表示ground truth,Y表示predictions。Dice系數的另外一種形式如公式(3)所示,在計算Dice Loss[14]時通常使用公式(4)這種形式,其中TP表示將正類正確預測為正類的個數;FP表示將負類錯誤預測為正類的個數;FN表示將正類錯誤預測為負類的個數;smooth是一個極小的數,可以防止分母預測為0,并起到平滑loss的作用。Dice Loss在訓練過程中更傾向于挖掘正樣本(前景區域),解決正負樣本不均衡問題。

本文訓練使用的圖像中,前景(劃痕區域)的占比較小,屬于樣本不均衡問題[15],因此將Dice Loss作為本文模型訓練時的損失函數之一。但是Dice Loss在正樣本為小目標時存在震蕩的情況,會造成訓練過程不穩定,而交叉熵損失函數訓練過程則較為穩定,所以本文最后將兩種損失函數相結合作為本文模型的損失函數。PSP-Net中添加了輔助分支來優化學習過程,本文保留了輔助分支,并在多次實驗后將輔助分支的權重設為0.8,最后結合Dice Loss和交叉熵損失函數得到本文最終的損失函數,見公式(5):

公式(5)中的Aux_CE_Loss表示采用交叉熵損失函數形式的輔助Loss,Aux_Dice_Loss表示采用Dice Loss形式的輔助Loss。本文在選取損失函數時嘗試使用過Focal Loss、Lovasz Loss等適用于樣本不均衡的損失函數,但是在訓練過程中出現了nan或是訓練效果不佳的情況,不適用于本文的方法。
本文使用的數據集是杭州藍弧視覺科技有限公司使用工業相機在搭建的機臺上拍攝得到的,并在原圖的基礎上裁剪出分辨率為112×112共1 000張包含劃痕的圖片,部分數據集原始圖片見圖10。本文使用Labelme標注工具制作分割標簽圖,然后使用ImageEnhance進行數據增強,生成包含6 000張彩圖和6 000張標簽圖的數據集。本文的數據集采用VOC2007格式,分割的類別數為2,因為標簽圖中背景的像素值為0,劃痕的像素值為1,所以生成的標簽圖看上去是全黑的圖片,經過OpenCV處理后,部分數據集標簽圖片見圖11,圖中紅色區域代表劃痕,黑色區域代表背景。數據集按9∶1的比例分成訓練集和驗證集。

圖10 劃痕數據集原始圖Fig.10 Original image of scratch dataset

圖11 劃痕數據集標簽圖Fig.11 Label image of scratch dataset
實驗使用的硬件環境為RTX 2080Ti顯卡、Inteli7-9800x處理器和32 GB內存。軟件環境為Windows10操作系統、OpenCV3.4.1、Python3.7、tensorflow-gpu2.1和pytorch1.4.0開發環境。
本文使用的深度學習框架為pytorch,總共訓練140個epoch,采用Adam優化器,初始學習率為10-4,學習率調整策略為StepLR;StepLR中的步數設為1,沖量為0.9,即每訓練完一個epoch后學習率變為上一個epoch的學習率乘以0.9。訓練過程采用基于遷移學習[16]的策略:前40個epoch的batch-size為32,接 著50個epoch的batch-size改為16,最后50個epoch的batch-size為8,在每次更改batch-size大小的同時,學習率也需恢復成初始學習率10-4。
本文選取平均交并比(MIOU)和平均像素準確度(MPA)作為模型的評價指標。交并比(IOU)是兩個集合(真實值與預測值)交集與并集的比例,MIOU是計算每一類的IOU然后求平均,能夠很好地反映分割的精度,計算公式見公式(6):

式中k+1表示類別數(包括k個目標類和1個背景類),i表示真實值,j表示預測值,pij表示將i預測為j;像素準確度(PA)表示正確分類的像素點和所有像素點的比例,MPA是計算每一類正確分類的像素點數和該類的所有像素點數的比例然后求平均,計算公式見公式(7):

式中k+1表示類別數(包括k個目標類和1個背景類),pij表示把本屬于i類的卻預測為j類的像素點總數。
2.3.1 訓練策略對比
本文訓練中采用了遷移學習的思想,凍結前40個epoch,batch-size為32訓練得到的權重,將Batch-size減小為16后使用前40個epoch訓練得到的權重繼續訓練,對模型進行微調(fine tune),經過50個epoch訓練后進行相同的操作:凍結訓練得到的權重,將batch-size減小為8后使用前面凍結的權重繼續訓練50個epoch。采用遷移學習策略訓練和采用不同batch-size大小訓練的結果對比見表1。由表1可以看出,本文提出的模型采用遷移學習的訓練方法后,在MIOU和MPA指標上都有顯著的提高,驗證了本文訓練策略的有效性。

表1 采用遷移學習策略訓練結果對比Table1 Comparison of training results using transfer learning strategies 單位:%
2.3.2 消融實驗分析
為了驗證本文方法的有效性和改進的必要性,通過設定不同的消融實驗來進行驗證,實驗結果見表2。

表2 消融實驗對比Table 2 Comparison of ablation experiments單位:%
由表2可以看出PSP-Net中的PPM在加入MAMFEM之后,模型在MIOU以及MPA指標上立馬有了顯著的提升,相比于原始的模型分別高出了5.96個百分點和10.94個百分點,這是MAMFEM將金字塔的不同層建立連接實現特征增強的效果,表明MAMFEM的使用對模型性能提升的有效性。MAMFEM后加入concat操作,與原金字塔池化得到的特征圖進行拼接,使得原來金字塔層的特征信息得到保留,更加豐富的語義信息在模型性能上也帶來了一定的提升,可以看到在concat操作后,MIOU和MPA分別提升了1.44個百分點和1.08個百分點,指標的提升表明了concat操作的有效性。通過表2中第四行和第五行的數據可以看出,單獨加入ECA模塊后模型的分割效果非但沒有得到改善反而變差了;這是因為ECA模塊是將k個鄰域的通道進行交互來捕獲重要通道,concat操作將兩個不同的輸出首尾相連,但是連接處區域的通道幾乎沒有相關性,因此在連接處的跨通道交互會破壞原來的通道,如圖12紅色區域所示;雖然其他區域的通道沒有遭到破壞,但是隨著一層一層的級聯,金字塔底層被破壞的通道數和受影響的通道數會增加,導致分割效果變差;而通過增大k增大交互的范圍,使得連接處靠近左側的通道與左側通道相關性增強,靠近右側的通道與右側通道相關性增強,可以減輕對通道破壞,實驗結果表明本文方法在k取7時效果最好。

圖12 ECA模塊實現原理圖Fig.12 ECA module implementation schematic diagram
由表2第六行可知,concat后加入BR模塊提高了對邊緣區域的分割能力,分割效果有了一定的改善。表2第七行的數據表明將ECA和BR模塊串聯后使用,模型的分割能力有了較為明顯的提升;雖然單獨加入ECA模塊會破壞部分通道,但是串聯類似殘差塊的BR模塊后,被破壞的通道得到了一定的改善,同時ECA模塊對重要通道的捕獲效果得到保留以及BR模塊對邊緣區域分割準確度的提高,使得分割能力有了較大的提升。
2.3.3 對比實驗分析
為了驗證本文方法的優越性,分別選用了U-Net、PSP-Net及Deeplab v3+[17]3個分割模型對金手指劃痕訓練集進行訓練并將訓練結果使用驗證集進行測試對比。經過實驗,各模型測試得到的MIOU和MPA見表3。從表3可以看出本文的方法在MIOU指標上是最高的,達到了86.03%,相比較于U-Net以及PSP-Net有了大幅提升,分別高出了14.36個百分點、9.67個百分點,對比當前較為流行的Deeplab v3+模型同樣也有明顯的提升,高出了5.78個百分點;通過表3的數據對比,本文的方法在MPA指標上同樣是最高的,達到了94.35%,對比U-Net、PSP-Net、Deeplab v3+分別高出了20.19個百分點、14.11個百分點和9.26個百分點。

表3 MIOU和MPA對比Table 3 Comparison of MIOU and MPA單位:%
表3的數據對比可以看出,本文提出的方法可以顯著提高分割的精確度。
各模型的分割效果圖如圖13所示。從左到右分別是原始圖、標簽圖、U-Net分割效果圖、PSP-Net分割效果圖、Deeplab v3+分割效果圖以及本文方法分割效果圖。U-Net的分割效果如圖13第三列所示,U-Net缺少類似金字塔的結構獲取多尺度信息,劃痕的特征信息較難獲取,導致分割效果相對較差,有些區域沒能分割出來,有些則是將背景錯分為劃痕。由圖13第四列可以看出,PSP-Net在分割效果上比較粗糙,劃痕存在分割斷斷續續的情況,邊緣區域分割也不夠精細,造成有些邊緣區域出現了鋸齒狀,與標簽圖的光滑邊緣差別較大;PSP-Net中缺少注意力機制和邊界細化模塊,不同金字塔層之間也沒有關聯,對于淺劃痕區域、與背景相近的區域和邊緣區域的特征信息較難提取,使得分割效果不佳。Deeplabv3+分割效果則相對較好,如圖13第五列所示,Deeplab v3+模型中使用了空間金字塔池化模塊,能夠獲得多尺度的信息,并且該模型引入了新的Decoder模塊:在上采樣過程中首先使用雙線性插值恢復到原始圖像四分之一大小的特征圖,接著與Encoder中相同大小的特征圖拼接,并采用3×3的卷積進一步融合特征獲取更多的低層特征,最后再使用雙線性插值得到與原圖像相同大小的分割圖。但是Deeplab v3+的分割圖在有些較淺且與背景相似度較高的劃痕區域,還是存在分割不完整以及邊緣區域分割不夠精細的情況;這是因為缺少了注意力機制對重要特征進行挖掘以及缺少邊界細化模塊提高對劃痕邊緣區域分割的準確度。

圖13 不同模型分割效果Fig.13 Different model segmentation renderings
本文提出的方法,一方面通過金字塔池化獲取了多尺度信息,不同尺度的特征圖包含了不同的特征信息,小尺度的金字塔層包含了更多的背景信息而大尺度的相對包含了更多劃痕區域的信息,通過雙線性插值級聯后,增強了劃痕區域的特征信息。另一方面,本文模型使用不同的注意力機制來重點獲取更多劃痕的特征信息,邊界細化模塊進一步提高劃痕邊緣像素點的分割準確度,使得邊緣的分割效果更加光滑,見圖13第六列。
本文針對傳統圖像處理方法以及基于深度學習的分類模型由于劃痕形狀大小不一,檢測效果不佳的問題,采用PSP-Net的模型結構并提出了多注意力機制的金字塔池化模塊(MAMPPM)實現對劃痕的語義分割。實驗結果表明,本文提出的方法,在采用級聯的方式連接不同金字塔層實現不同尺度的特征融合并加入注意力機制與邊界細化模塊后,可以增強模型對劃痕區域以及邊緣區域的信息提取能力,能夠有效分割出不同形狀和大小的劃痕。對于劃痕的分割,本文仍然存在不足,需要改進的方面主要有:(1)對于淺而細的劃痕存在分割不完整,分割精度有待提高,對于距離相近的兩條劃痕分割存在黏連的情況,因此對于邊緣的分割還可以更精細;(2)本文數據集是在環形光源拍攝得到的,不同光源的成像效果不同,因此可以采集不同光源下的圖片獲得更多的劃痕樣本,擴充數據集提升分割的準確度。