陳學仕,蘇 通,漆為民
(江漢大學 人工智能學院,湖北 武漢 430056)
現(xiàn)代電子設備的質(zhì)量靠的不僅是電子組件的質(zhì)量和性能,而且很大程度上取決于印刷電路板(printed circuit board,PCB)的質(zhì)量。不可避免的是,電路板由于外觀不整潔、阻焊膜在板上分布不均、機器工作中故障等原因,會使得電路板印刷過程中PCB上電路線和焊盤中出現(xiàn)一些瑕疵,需要在生產(chǎn)過程中將瑕疵檢測出來。目前,印刷電路板瑕疵檢測方面的技術(shù)還不能實現(xiàn)多類別瑕疵點的判別,也達不到精準檢測出是哪種瑕疵的要求。謝騏陽等[1]提出機器視覺方法檢測PCB板瑕疵,首先對圖像進行預處理,然后通過圖像的對比確定PCB瑕疵的位置,進行瑕疵點的檢測,再結(jié)合形態(tài)學的腐蝕與膨脹算法去除噪聲和雜質(zhì)的干擾,找出圖像的不同之處并使用矩形框標記出來,最終實現(xiàn)PCB板檢測。陳夢雅等[2]提出一種基于參考法和非參考法結(jié)合的圖像邊緣檢測方法。陳燦等[3]提出基于RCNN的印刷電路板檢測,使用選擇性搜索、卷積神經(jīng)網(wǎng)絡提取特征和SVM進行分類。上述方法存在著模型較為復雜、不能夠長足學習到圖像特征的不足,使得PCB板瑕疵檢測精度不高、速度慢,不能夠檢測出是哪種瑕疵,不能正確分類到對應的瑕疵,還會存在漏檢誤檢的情況。
目前,目標檢測算法分為One Stage和Two Stage兩大類。Faster RCNN算法[4]是兩步檢測方法中最具有代表性的目標檢測算法,它的主要貢獻是提出了一個區(qū)域推薦網(wǎng)絡(region propos?al network,RPN)。圖像從輸入到檢測分為兩個步驟,第一步是識別出目標的前景框,第二步是對前景框進行細分,確定目標類別。與單步檢測方法相比,F(xiàn)aster RCNN首先使用標記框?qū)^(qū)域建議網(wǎng)絡進行訓練,然后使RPN能夠區(qū)分前景和背景,并為下一個特定類別檢測網(wǎng)絡提供多個建議框。由于Faster RCNN是將區(qū)域生成、特征提取、網(wǎng)絡訓練、目標分類和位置回歸于一體,與其他算法相比,F(xiàn)aster RCNN的精度有了顯著提高。本文基于改進的Faster RCN算法對印刷電路板進行學習,高效檢測出瑕疵點,并應用于工業(yè)生產(chǎn)車間檢測。將檢測出的不同瑕疵進行分類,計算出每類瑕疵檢測的準確率,并采取相應的處理措施。檢測到的照片是離線保存的,沒有實時性要求,這是為了盡可能保證檢測的準確性。
Faster RCNN是兩階段檢測模型典型代表,融合了區(qū)域生成網(wǎng)絡RPN與Fast RCNN網(wǎng)絡模型,它們是并列關(guān)系,各自都可以進行端到端的訓練,從而可以檢測出分類置信度和定位回歸框。Faster RCNN主要由特征提取網(wǎng)絡框架、RPN網(wǎng)絡和Fast RCNN網(wǎng)絡模型構(gòu)成。
Faster RCNN工作流程是將一張圖片輸入網(wǎng)絡之前,對圖片長寬進行調(diào)整,將長度調(diào)整到608,長寬比不會發(fā)生改變,圖片上下加灰色條,得到輸入網(wǎng)絡圖片大?。?08*608*3),因此圖片輸入到網(wǎng)絡中不會發(fā)生失真。之后特征提取網(wǎng)絡對圖片進行特征提取,得到共享特征圖大小(38*38*1 024),然后進行3*3卷積,再進行兩個1*1卷積,分別進行分類和回歸預測,得到融合區(qū)域生成網(wǎng)絡RPN。RPN得到建議框?qū)Ξ嬅嫖矬w進行粗略的篩選,并非完全準確預測,接下來還需要進一步調(diào)整。RPN的建議框大小并不是一樣大,通過傳入RoI Pooling層進行調(diào)整,然后在共享特征圖進行截取,再經(jīng)過分類預測和回歸預測網(wǎng)絡進行預測。Faster RCNN整體結(jié)構(gòu)如圖1所示。
圖1 Faster RCNN網(wǎng)絡結(jié)構(gòu)Fig.1 Faster RCNN network structure
Faster RCNN的整個過程是將特征提取網(wǎng)絡提取到的特征輸入到RPN中,生成前景和背景建議框,用于訓練RPN本身。此外,RPN的輸出被輸入到最終的檢測網(wǎng)絡中,以確定建議框中目標的具體類別。在測試階段,RPN確定是否屬于前景,然后進行最終的目標檢測以確定類別。在目標特征映射上,RPN首先用3*3卷積核對特征圖進行卷積,然后將得到結(jié)果分成兩個分支,連接多個完整的連接層分別進行分類和回歸。分類采用softmax函數(shù)和線性回歸進行坐標調(diào)整。通過RPN判斷是前景的建議框,然后在RoIPooling調(diào)整下,使其為一樣的尺寸輸入到最終的檢測網(wǎng)絡。檢測網(wǎng)絡負責目標分類和修正位置,并輸出最終的目標檢測結(jié)果。
特征提取網(wǎng)絡主要是由卷積層、下采樣層、Dropout層、全連接層等組成的卷積神經(jīng)網(wǎng)絡[5]。不同層組成方式提取的特征也不同,從而會對檢測的精度和時間等指標造成不同的影響。
本文采用Faster RCNN作為PCB缺陷檢測的基本框架,其骨干網(wǎng)絡采用多種經(jīng)典的卷積神經(jīng)網(wǎng)絡模型AlexNet、VGG16和殘差網(wǎng)絡ResNet作為實驗的骨干網(wǎng)絡。第一個實驗的特征提取網(wǎng)絡是AlexNet,并首次使用Dropout層,避免了模型過擬合的問題。第二個實驗的特征提取網(wǎng)絡VGG16是一個卷積神經(jīng)網(wǎng)絡CNN模型,采用連續(xù)的幾個小卷積核代替較大的卷積核。第三個特征提取網(wǎng)絡殘差網(wǎng)絡ResNet是一個深層的CNN模型,由于其獨特的殘差模,解決了深層網(wǎng)絡訓練中梯度消失的問題,可以訓練更深層網(wǎng)絡。目前常用的是ResNet50和ResNet101,本文采用ResNet101結(jié)構(gòu)(見圖2)。
圖2 ResNet101網(wǎng)絡結(jié)構(gòu)Fig.2 ResNet101 network structure
區(qū)域建議網(wǎng)絡分為兩個步驟。第一步是將圖像輸入網(wǎng)絡后,由特征提取網(wǎng)絡對圖像進行特征提取。每個像素作為特征圖上的定位點,由此生成3種比例、3種尺寸的建議框,所以一個定位點對應9個不同的建議框,這些建議框也被稱為anchors[6]。用anchors代替選擇性搜索算法來提取候選框,然后選擇包含目標的anchors,將篩選出的anchors輸入到RoI Pooling層提取特征,按照前景的概率從高到低排序。第二步對候選區(qū)域進行分類,預測目標位置。
人工手動校準的目標框被定義為真實框(ground truth)。計算出每一個anchors與真實框的面積,并定義了交并比(intersection over union,IoU)。如果A是真實的樣本框,B是候選區(qū)域框,則
Faster RCNN設定IoU>0.7的建議框用于正樣本訓練,IoU<0.3的建議框用于負樣本(背景)訓練,忽略IoU在0.3到0.7之間的建議框,不用于訓練。確定若干正樣本與負樣本后,這些樣例被用于訓練RPN識別前景和背景[7],RPN對建議框圖片進行一個簡單的3*3卷積后經(jīng)全連接層劃分為分類分支和回歸分支,分類分支用于判定該建議框是屬于前景或背景的概率,回歸分支用于對該建議框的中心點和長寬4個參數(shù)進行修正。假設一個anchor產(chǎn)生K個建議框,則分類別產(chǎn)生2K個scores,4K個坐標偏移量用來學習分類和坐標回歸。RPN結(jié)構(gòu)如圖3所示。
圖3 RPN結(jié)構(gòu)Fig.3 RPN structure
Faster RCNN中的多任務損失函數(shù)由分類損失函數(shù)與回歸損失函數(shù)[8]組成,具體表達式為
式中,i表示第i個建議框;pi表示第i個建議框為前景的概率,前景時p i=1,背景時p i=0;ti表示預測的anchors坐標值,是對應的真實樣例框坐標值。Ncls和Nreg分別表0示分類和回歸項的權(quán)重。Lcls表示前景和背景的對數(shù)損失,即
Lreg表示邊框回歸損失,即
式中,smoothL1是一種損失函數(shù),筆者使用一個分段函數(shù)來作為RPN網(wǎng)絡的損失函數(shù)。此函數(shù)在0點附近使用平方損失函數(shù),這樣使得它更加平滑,因此被稱為平滑L1損失函數(shù),
在Faster RCNN基礎上,首先將特征提取網(wǎng)絡ResNet101進行改變,然后使用特征金字塔網(wǎng)絡(feature pyramid network,F(xiàn)PN)、多尺度訓練、錨點框、聚類作為基礎改進措施,改進損失函數(shù)。
AlexNet提取特征網(wǎng)絡一般前面若干層都是由卷積層、池化層等組成,末端是由幾層全連接層組成。卷積層能夠知道哪個位置有哪些東西,但是不知道他們之間的關(guān)聯(lián)關(guān)系,因此不采用AlexNet網(wǎng)絡。由于印刷電路板上的瑕疵較小,如果直接采用VGG16,雖然卷積提取到的特征圖尺寸不會發(fā)生變化,但是下采樣會使得特征丟失,從而會直接影響最后的檢測精度,故此特征網(wǎng)絡不是最佳選擇。本文采用的特征提取網(wǎng)絡對ResNet中的殘差塊結(jié)構(gòu)進行了小改進,在原有的殘差單元結(jié)構(gòu)中增加小的殘差塊,使網(wǎng)絡能夠在更細粒度上表示多尺度特征,并增加每一層網(wǎng)絡的感受野,解決網(wǎng)絡深度增加時帶來的梯度消失問題,實現(xiàn)單位映射之間連接路線,能夠提取目標更深層次的特征,實現(xiàn)較好的識別效果。這樣改進的本質(zhì)就是分組卷積,使算法能更好地對瑕疵進行分類。
此步驟主要變化是修改anchor尺寸以適配PCB數(shù)據(jù)集,采用的方法是聚類算法。
在原來Faster RCNN算法中,錨框的縱橫比包括1∶2、1∶1和2∶1三種比例,3種尺寸大小,所以每個像素點有9個錨框,這些比例是從標準VOC數(shù)據(jù)集中獲得的。由于不同數(shù)據(jù)集的寬高比不同,如果直接使用默認錨框比例,則有些目標無法準確識別。因此,本文采用K-means聚類方法來提高錨框的縱橫比,K-means[9]算法是一種多迭代的聚類方法。首先選取K個值作為聚類中心,然后計算其他對象到每個聚類中心的距離,將對象加入離它最近的聚類中心,經(jīng)過多次添加形成聚類。本文采用聚類的方法來重新生成9個簇點,達到給定的訓練次數(shù)或者給定的閾值就停止訓練,9個錨框的比例和尺寸大小都是通過訓練得到。
FPN主要解決目標檢測中的多尺度問題。通過簡單改變網(wǎng)絡連接,在不增加原模型計算量的前提下,大幅度提高了小目標檢測的性能[10]。高階特征用于上采樣,低階特征用于自頂向下連接,并對每一層進行預測。每層金字塔網(wǎng)絡輸出相應比例尺的目標分類和定位盒。頂部的金字塔特征圖對較大的目標有較好的檢測效果,而底部的金字塔特征圖可以增強對小目標的檢測效果。在嵌入金字塔特征網(wǎng)絡后,分別對各層的RPN進行訓練和回歸。金字塔每層的RPN將不同尺度目標的候選盒輸入細分檢測網(wǎng)絡,得到目標回歸盒和缺陷分類。
構(gòu)造多尺度金字塔,期望模型能夠具備檢測不同大小尺度物體的能力。FPN將不同的特征進行融合再分級預測。輸入為骨干網(wǎng)絡每一層的輸出:將特征進行上采樣,再與上一層特征相加得到FPN結(jié)構(gòu)每一層的輸出,F(xiàn)PN結(jié)構(gòu)和骨干網(wǎng)絡是相互獨立的。在bottom-up路徑中,取ResNet網(wǎng)絡最后4個殘差塊生成的4個特征圖,它們相對于原圖的尺度縮小倍數(shù)為{4,8,16,32}。尺寸縮小32倍的特征圖經(jīng)過1*1卷積得到M 5,M 5一邊經(jīng)過3*3卷積得到P5,一邊經(jīng)過2倍上采樣(尺寸放大一倍),再與尺寸縮小16倍的特征圖進行堆疊,依次下去,得到融合后不同尺度的特征圖P4、P3、P2。FPN網(wǎng)絡結(jié)構(gòu)如圖4所示。
圖4 FPN網(wǎng)絡結(jié)構(gòu)Fig.4 FPN network structure
IoU損失函數(shù)只考慮檢測框和目標框重疊面積,沒有解決邊界框不重合時的問題[11],沒有考慮邊界框的中心距離信息,沒有考慮邊界框?qū)捀弑鹊某叨刃畔?。因此,IoU存在以下缺點:第一,如果兩個框沒有相交,則IoU=0,這時無法反映兩個框的距離(相似程度),并且損失函數(shù)此時不存在梯度,無法通過梯度下降進行訓練;第二,即使相同的IoU也不能代表檢測框的定位效果相同[12]。
同時考慮到框回歸的3個幾何因素:重疊區(qū)域、中心點距離、寬高比,采用下面的損失函數(shù),
式中,R(B,BGT)表示預測框與GT框的懲罰項(在IoU損失函數(shù)中,R(B,BGT)=0),即
式中,b和bgt表示預測框與GT框的中心點,p2表示歐式距離,c表示預測框B與真實框的最小外接矩陣的對角線距離,如圖5所示,綠色框表示真實框,黑色框表示預測框,c和d分別表示最小外接矩形的對角線距離和兩個框中心點的歐氏距離。
圖5 參數(shù)c和d的示意圖Fig.5 Schematic diagram of parameters c and d
改進后的Faster RCNN總損失函數(shù)由分類損失函數(shù)和回歸損失函數(shù)兩部分組成,
本次數(shù)據(jù)集總共有漏孔、缺口、斷路、短路、毛刺、余銅6種類別,加上背景類,總共7個類別。各類別之間框的數(shù)量相對較平均。
本文的實驗環(huán)境配置:在百度AI Studio平臺下,RAM為32 G,GPU為v100,顯存為16 G,實驗所用深度學習框架為百度公司開發(fā)的PaddlePaddle 1.8.0,訓練迭代次數(shù)設置為15 000輪。
PCB瑕疵數(shù)據(jù)集:來自工業(yè)生產(chǎn)線上工業(yè)相機拍攝PCB裸板,其中包含3 860張圖像以及6種缺陷(漏孔、缺口、斷路、短路、毛刺、余銅),用于檢測、分類和配準任務。隨機選擇2 260張圖像作為訓練集,1 000張圖像作為驗證集,600張圖像作為測試集。檢測前電路板樣例如圖6所示。
圖6 電路板圖Fig.6 Circuit board diagram
目前常用的目標檢測評價方法有平均精度(average precision,AP)、平均精度均值(mean average precision,mAP)、準確率(P)和召回率[13]。設TP表示在正樣本集中被預測為正樣本的個數(shù);FN表示在正樣本集中被預測為負樣本的個數(shù);FP表示在負樣本集中被預測為正樣本的個數(shù);FN表示在負樣本集中被預測為負樣本的個數(shù),則P、召回率、AP和mAP分別為
特征提取網(wǎng)絡模型是Faster RCNN的核心部分,卷積神經(jīng)網(wǎng)絡提取的特征好壞影響后續(xù)訓練質(zhì)量的好壞。因此,選取AlexNet、VGG16、ResNet101三個卷積神經(jīng)網(wǎng)絡作為骨干網(wǎng)絡分別進行實驗,骨干網(wǎng)絡再結(jié)合FPN網(wǎng)絡和錨框聚類方法為基礎訓練策略。結(jié)合遷移學習思想,在有預訓練基礎模型上進行訓練,這樣可以大大減少訓練時間。增大訓練輪數(shù)有助于網(wǎng)絡收斂得更好,可提高mAP。設置訓練輪數(shù)為15 000,IoU的閾值分別為0.5和0.75進行比較,IoU為0.5時訓練結(jié)果更好,所以最終IoU閾值設置為0.5,初始學習率0.000 1,實驗結(jié)果見表1。
表1 使用不同骨干網(wǎng)絡效果對比Tab.1 Comparison of effects of using different backbone networks
表1的實驗數(shù)據(jù)顯示,以ResNet深殘差網(wǎng)絡作為骨干網(wǎng)時,模型在電路板上的瑕疵檢測平均精度最高,說明深度殘差網(wǎng)絡能更好地擬合目標函數(shù)。由于深度殘差網(wǎng)絡使用殘差模塊來增加模型的深度,這樣就避免了梯度消失的問題,因此模型的學習能力和檢測速度均得到了顯著提高,與其他網(wǎng)絡模型相比,深度殘差網(wǎng)絡的搭建層數(shù)比較多,因此提高精度的同時,也導致檢測速度略有下降。
在選取深度殘差網(wǎng)絡作為骨干網(wǎng)絡基礎上,對損失函數(shù)smoothL1和DIoU再進行對比,得出最優(yōu)的一個損失函數(shù)性能。采用ResNet101作為骨干網(wǎng)絡,融合FRP網(wǎng)絡和錨框聚類方法為基礎訓練策略[14],使用改進后的損失函數(shù)替換原損失函數(shù),實驗結(jié)果見表2。
表2 使用不同損失函數(shù)檢測效果對比Tab.2 Comparison of detection effects using different loss functions
表2的數(shù)據(jù)顯示,在以IoU=0.5的mAP作為評價指標時,訓練相同輪數(shù)條件下,當損失函數(shù)DIoU作為邊界框回歸損失函數(shù)時,模型在PCB檢測中的mAP值達到92.6%,比原來損失函數(shù)smoothL1在平均精度上提高了5.4%,在平均精度均值評價指標上提高了4.9%,在速度上也有小幅提高。結(jié)果表明,以DIoU為邊界框回歸損失函數(shù)可以有效地改善模型的訓練過程,并促進模型收斂到最優(yōu)值。
將原始Faster RCNN算法和改進后的算法進行對比,F(xiàn)aster RCNN在骨干網(wǎng)絡、融合金字塔特征、損失函數(shù)、錨點框聚類[15]等改進后,訓練相同輪數(shù),結(jié)果見表3。
表3 Faster RCNN算法和改進Faster RCNN算法對比Tab.3 Comparison between the Faster RCNN algorithm and the improved Faster RCNN algorithm
表3的實驗數(shù)據(jù)表明,采用改進后的Faster RCNN算法對PCB板瑕疵進行檢測,每一個類別瑕疵點AP比Faster RCNN都上升了約20%。每張圖片瑕疵點平均有3.88個,而原Faster RCNN算法平均檢測出3.61個瑕疵點,故還存在漏檢的情況,改進后的算法平均每張圖檢測出3.86個瑕疵點,漏檢情況得到改善。YOLO系列屬于單階段目標檢測算法,在YOLO9000上也訓練了對應的瑕疵檢測模型,經(jīng)過對比的實驗后精度遠高于單階段目標檢測算法,精度和速度要求可滿足工業(yè)界的需要。但是改進后的Faster CRNN在速度上還有提升空間,實驗數(shù)據(jù)見表4。
表4 改進后Faster RCNN算法與YOLO9000算法檢測效果對比Tab.4 Detection effect comparison of improved Faster RCNN algorithm and YOLO9000 algorithm
本文算法檢測出電路板的瑕疵點及其標注結(jié)果見圖7。
圖7 檢測出不同瑕疵點圖Fig.7 Different defect points detected
本文在原Faster RCNN算法的基礎上進行優(yōu)化,通過3種骨干網(wǎng)絡實驗對比,選取了效果最好的ResNet101,邊框回歸函數(shù)使用了損失函數(shù)DIoU。不再使用原來anchors的每個定位點3個默認尺寸和默認比例,而是直接用聚類方法訓練9個錨框給每一個定位點。損失函數(shù)DIoU和聚類方法使得目標定位更加準確,大幅提高了PCB板瑕疵檢測的平均精度和模型整體平均精度均值,但在速度上還有待進一步改進。