張 鯤, 鄧明星
(武漢科技大學汽車與交通工程學院, 武漢 430065)
FPCB 作為現在電子產品中不可或缺的電子零部件,其質量的檢測在整個工藝過程中具有非常重要的地位。 深度學習是近年來比較新型有效的一種算法,被大量地運用到了缺陷檢測領域。 葛路等學者[1]探討了深度學習模型在工業產品表面缺陷檢測領域的應用。 研究是以Cp 工業產品缺陷檢測為著眼點,在設計檢測方案時應用深度學習模型并輔助圖像處理等相關技術,通過實驗分析得到最佳應用模型。 潘甜等學者[2]提出了基于深度學習的飛機蒙皮缺陷檢測的方法,能快速定位飛機蒙皮表面會出現裂紋、撞擊和腐蝕的問題。 田浩杰等學者[3]提出了基于深度學習來實現線圈炮缺陷的自動檢測與分類,采用雙邊濾波算法進行樣本圖像增強,降低噪聲對成像的影響,并基于單樣本幾何變換的數據增強策略擴充樣本數量,提高模型的適應性。 張浩等學者[4]提出了一種基于深度學習在海纜表面缺陷檢測的系統,為了減小模型的復雜程度,采用了RPN Loss+Fast RCNN Loss 的聯合訓練方法。 楊凱等學者提出了一種基于深度學習的缺陷檢測模型,該方法主要通過改進的VGG16 模型進行缺陷識別。 陳宗仁等學者[5]提出一種基于深度學習的金屬機械零件表面缺陷檢測方法,采用中值濾波方法對金屬機械零件圖像中的脈沖噪聲進行檢測和濾波處理,然后再引入深度學習算法。 針對車載導航導光板表面缺陷像素值分布不均且普遍較小、背景復雜多變等特點,王昊等學者[6]提出了基于改進掩膜區域卷積神經網絡模型檢測車載導航導光板。 劉瑞珍等學者[7]提出了一種基于深度學習的偏光片缺陷實時檢測算法,設計了一個新的并行模塊用于構建偏光片缺陷檢測網絡,模塊將不同尺寸大小的卷積核相混合,與傳統的卷積層相比,可以融合不同尺度的特征并能提取到更豐富的缺陷特征。 王鳴霄等學者[8]提出了一種基于兩級分層深度卷積神經網絡的排水道缺陷自動識別與分類系統。 施愷杰等學者[9]提出了一種低成本、高效率的缺陷檢測方法,設計了一種兩段式的網絡結構,第一部分是從原始圖像的各層特征圖中逐像素地學習特征來完成分割,第二部分則是將分割后的圖像進行整合后判斷是否存在裂縫。 針對鑄件X 射線圖像獲取困難、人工及傳統方法效率低且漏判率高的問題,于宏全等學者[10]提出了一種基于深度學習的鑄件缺陷檢測方法。 上述的方法,用了很多的神經網絡訓練和搭建技巧去提升網絡檢測的準確率,但是沒有從根本上解決網絡缺陷圖片數量不夠,導致準確率難以提升的問題。 本文提出了利用傳統圖像處理方法對圖像進行預處理增強圖像質量和圖片多樣性,并結合優化深度學習的方法,設計出了一種完全可以滿足實際檢測PFCB 需求的自動檢測算法。
深度學習的方法要應用到缺陷識別的領域必不可少的一項因素是缺陷數據集,所以在進行算法研究前,首先在FPCB 廠家進行了數據采集,并對數據進行了劃分。
研究采集了FPCB 在生產過程中可能出現的6種缺陷,如圖1 所示。 由圖1 可知,6 種缺陷分別包括:黑色異物、凸起、缺口、開路、短路、白色異物,這些缺陷圖的分辨率都是100×100 的灰色圖像。

圖1 FPCB 缺陷圖Fig. 1 FPCB defect map
6 種缺陷圖的數量如圖2 所示。 由圖2 可以發現,每種缺陷圖的數量都較少并且分布得不均勻,把采集到的缺陷圖像以7 ∶3 的比例按類別隨機分為訓練集和驗證集。

圖2 缺陷圖像數量Fig. 2 Number of defective images
在把數據送入神經網絡訓練之前還會進行預處理的操作,數據預處理可以有數據增強的效果,并在現有基礎上提高網絡的準確率。
圖像預處理的3 種主要方法如圖3 所示,分別包括:圖像濾波、灰度變換和圖像轉換。

圖3 圖像預處理方法Fig. 3 Image preprocessing method
圖像濾波也可以稱為圖像平滑處理,其操作對象為灰度圖像。 根據圖像中噪聲類型和分布情況,可以選擇將圖像濾波的方法搭配使用以完成對圖像的去噪處理。 圖像濾波的原理就是選擇合適的濾波器在圖像窗口上移動,利用設計的濾波器中窗口函數與圖像窗口建立某種數學關系以達到去除噪聲的目的,目前常用的濾波器有線性濾波、非線性濾波和卷積核濾波,對應過來就是圖像的均值濾波、中值濾波和高斯濾波等。 其中,均值濾波法在削弱隨機噪聲上效果突出,但是會使圖像變得模糊,因為在進行噪聲濾除時,對于圖像的邊緣也是同樣處理,這就會造成圖像中本來明顯的邊緣變得模糊。 均值濾波的公式具體如下:
中值濾波使用的是非線性濾波器來對圖像進行平滑,將其與均值濾波做對比,可以發現中值濾波處理后的圖像不僅留存了一些小的細節部分,而且噪聲也明顯減弱。 中值就是把給定的變量按從小到大的順序進行排列,排列之后取中間變量值、即中值。對應來看,中值濾波可理解為,設計一個結構元素在圖像上滑動,并將元素內像素灰度值升降排序后的中值設置為此元素的中心灰度值。 例如,假設有一個3×3 的窗口,其窗口內的像素灰度值從小到大為g1,g2,g3,g4,g5,g6,g7,g8,g9,則窗口中心灰度值可表示為:
高斯濾波同均值濾波有個相同點,都是使用線性濾波器,可以去除圖像高斯噪聲(噪聲的概率密度分布函數服從正態分布)。 高斯濾波需要先尋找高斯掩膜、并根據高斯分布,然后再對掩膜內像素點通過卷積完成相加,此時得到的值就是窗口的中心值,最后對圖像中的像素點重復進行該過程。 高斯模板的計算方式可用如下公式來描述:
其中,σ決定高斯函數寬度,假設當σ=0.8 時,高斯濾波核的計算為:
而高斯濾波窗口中心處像素值可表示為:
在本系統實驗中,對比使用了上述各濾波方式,根據濾波圖像后續的處理情況,結合均值和中值兩種濾波方式來對缺陷圖像進行組合濾波,最后表現出不錯的去噪效果。 濾波前后圖像效果對比圖如圖4 所示。

圖4 濾波前后對比圖Fig. 4 Comparison before and after filtering
灰度變換針對圖像中的像素點來進行運算。 在采集圖像時,由于環境因素的影響,最后攝取的圖像呈現出對比度不夠或亮暗影調的比率較小(動態范圍)的效果。 針對這一問題,使用灰度變換的方法可以很好地改善圖像效果,此方法就是設計一個變換函數來改變輸入圖像的灰度值。 使用合適的灰度變換方法不僅能對圖像進行增強,而且目標區域的特征會變得凸顯。 常用的灰度變換關系為線性變換。 灰度變換是通過某變換關系來達到改變圖像灰度值的目的,數學表達式可理解為:
假設有輸入圖像f(x,y),線性變換后的輸出圖像g(x,y),兩圖像的灰度范圍分別為[a,b],[c,d],其為線性關系,用數學公式可表示為:
根據k的取值大小,有如下幾種情況:
(1)當k >1 時,會使圖像灰度取值的變化范圍變大,也就是圖像對比度的增大,使用此方法可以改善曝光不足的情況。
(2) 當k=1 時,不改變圖像整體的灰度取值變化范圍,但是灰度取值區間會隨a和c的大小而上下平移,其結果就是使整個圖像更暗或更亮。
(3) 當0<k <1 時,變換輸出后圖像灰度取值范圍會變小,圖像對比度變小。
(4)當k <0 時,相當于把圖像的灰度值進行反轉,結果就是圖像中亮的變暗,暗的變亮。
本方法中對攝取的缺陷圖像使用了灰度線性變換算法以改善圖像,質量方便后續的處理。 使用此方法達到增強對比度的效果,處理前后的對比效果如圖5 所示。

圖5 灰度變換前后對比圖Fig. 5 Comparison diagram before and after grayscale transformation
圖像轉換包括圖像縮放、翻轉和拉長。 轉換的參數如縮放比例、翻轉角度、拉長長度,這些參數在每次訓練時都是隨機的。 因此,能夠顯著增強了數據的多樣性,并有效地避免了網絡訓練的過程中出現過擬合。
卷積神經網絡(Convolutional Neural Network,CNN)是一類包含卷積計算且具有深度結構的前饋神經網絡,可以有效實現端到端的特征提取,是圖像識別的常用模型之一。 在卷積神經網絡的發展歷程中,出現過許多經典的網絡結構,這些經典CNN 網絡的研發都曾極大地促進了領域的發展。 LeCun 等學者[11]在1998 年提出的LeNet 模型是CNN 的開篇之作,對神經網絡的發展有著重要意義,但當時并未受到廣泛關注。 2017 年,Krizhevsky 等學者[12]提出的AlexNet 模型具有更深的網絡結構,成為了當年ImageNet 圖像識別競賽的冠軍,可以說AlexNet的出現使得已經沉寂多年的深度學習領域開啟了黃金時代。 隨后,在ImageNet 競賽中不斷涌現出經典的網絡模型。 Visual Geometry Group 提出的VGG 系列模型[13],在AlexNet 的基礎上構建了更深的網絡結構,性能提升較大。 接著,2015 年又推出了InceptionNet[14],通過拓寬網絡結構取得了較好的效果,提供了CNN 模型構建的另一種思路。 He 等學者[15]提出了ResNet、即深度殘差網絡,其對殘差塊的運用十分具有開創性。 本論文所提出的算法就是基于殘差塊的思想進行搭建的,并對傳統的損失函數做了改進,得到了最終的網絡框架。
本文提出的神經網絡架構如圖6 所示。 由圖6可看到,網絡所用到的卷積核都是3×3 的卷積核,因為較小的卷積核可以有效減少參數,并且通過小尺寸的卷積核的堆疊可以達到和大尺寸卷積核相同的感受野。 網絡結構中最主要的結構是下采樣結構和跳連結構,跳連結構和下采樣結構的區別在于經過跳連結構的特征在輸入和輸出尺寸上不會發生變化,而經過下采樣的結構輸出相當于輸入的一半,跳連結構的作用是用來加深網絡的有效深度,下采樣結構是防止網絡在提取圖片特征時丟失圖片細節。該網絡結構接受要檢測的圖片,首先經過一個3×3的卷積提取特征,再經過一個最大池化層擴大感受野去除冗余信息,然后再經過跳連結構和下采樣結構進行圖片特征細節提取,最后經過平均池化層和全連接層得到最終的檢測結果輸出。 該網絡架構對提取圖片細節有較好的效果,可以有效處理所遇到的缺陷問題。

圖6 神經網絡架構圖Fig. 6 Architecture diagram of neural network
傳統損失函數的數學定義公式為:
其中,yi,j為預期輸出值;y′i,j為深度學習模型預測值;f為softmax激活函數;c為類別疵病數;N為一個批量的數據量。
該損失函數有2 個缺點。 數據集中每種樣本缺陷的數量是不一樣的,所以如果按照上面的損失函數進行訓練就會導致樣本數多的那個疵病類別預測率較高而對于樣本數較少的疵病類別預測效果特別差,這是錯誤的。 另一個傳統損失函數對于難預測的樣本和易預測樣本對于損失函數的貢獻是一樣的,難預測樣本和易預測樣本定義,對于某個疵病樣本預測值為0.7 的、較樣本預測值為0.6 來說為相對易預測樣本,而網絡應該是對于難預測的樣本給予更多的注意力。 改進的損失函數見下式:
與傳統的損失函數相比,改進后的損失函數多了2 個超參數、即α,β,MX是某類缺陷參與訓練的樣本累加數,當某類缺陷樣本數,參與損失函數訓練越多,α越小,代表其在損失函數中權重越小,就可以解決傳統損失函數中的第一個問題。 當預測值越靠近1 時,該樣本就是越容易區分的樣本,β值越小,在損失函數中的權重也就越小,就可以解決傳統損失函數的第二個問題。
把收集到的缺陷圖片,利用文章所提到的傳統圖像處理方法進行圖像預處理,再按照前文所提到的劃分數據集的策略,把圖像劃分為訓練集和驗證集,把劃分好的訓練集輸入到利用深度學習搭建的網絡結構中訓練。 在該網絡中,本文改進了網絡結構和損失函數,每20 輪利用驗證集進行驗證,訓練過程中準確率的變換情況如圖7 所示,在訓練200 輪后網絡收斂,在驗證集上的準確率達到了92.41%的準確率。

圖7 網絡訓練準確率Fig. 7 Accuracy of network training
網絡基本參數的設定見表1。 由表1 可知,實驗選用的是Adam 優化器,學習率設定的為0.1,批次大小設定為32,訓練輪次設定為200 輪。 把相同的數據集、連同網絡基本參數設定為表1 中的基本參數,比較各個網絡的性能,性能對比見表2。 由表2 可以看到,文中所提算法在該數據集上的準確率最高,在檢測時間上也在可以接受的范圍之內,該網絡性能可以滿足FPCB 的檢測要求。

表1 網絡基本參數設定Tab. 1 Configuration of basic network parameters

表2 網絡性能對比Tab. 2 Comparison of network performance
隨著電子工業的快速發展,FPCB 的應用也越來越多,為確保FPCB 生產的合格率,針對目前自動化檢測的需要,設計開發了一套缺陷檢測算法,該算法把傳統圖像處理技術與深度學習方法進行了結合來對FPCB 進行缺陷檢測。 由于本文提出的缺陷檢測算法可替代傳統人工判定缺陷,極大地提高了檢測的準確度和速度,該工作對FPCB 的生產制造有著重大的意義。