曾 凱,李 響,賈建梅,文繼鋒,王 翔
(南京南瑞繼保電氣有限公司,南京 211102)
隨著印刷電路板行業的迅速發展,PCB 板的質量檢測是各企業非常重視的環節.目前,主流的檢測方法是采用人工目檢的方式或者采用基于傳統機器視覺的PCB 缺陷檢測(automatic optical inspection,AOI)方式.人工目檢的缺點是顯而易見的,不僅檢測準確率不高、還耗費大量的人力物力,不是一種很好的應用方案.AOI的檢測方式檢測速度快、無損傷,相比于人工目檢,其檢測范圍更寬、檢測精度更高.目前AOI的檢測方法大都依賴于傳統的機器視覺技術,王玉萍等[1]對參考圖像使用邊緣檢測算子提取特征,與待測缺陷圖像匹配得出缺陷區域.陳壽宏等[2]先利用方向梯度直方圖(HOG)對待檢測的焊點圖像提取形狀紋理等特征,接著使用支持向量機(SVM)并選擇合適的核函數進行初步分類,對誤檢焊點采用HOG+SVM 多分類算法進行二次分類.
受限于傳統機器視覺算法的局限性,AOI的檢測方式還是需要通過復雜的參數調整與不斷的人工修正來達到較好的檢測效果,而且為了防止漏掉焊接異常的PCB,往往會將檢測參數門檻設置較高值,這樣會產生大量的焊接異常誤報信息,此時需要經驗豐富的生產人員去判斷焊接異常信息是否確實為誤報信息,會消耗大量的人力,且檢測效率不高.
隨著人工智能技術日益發展,以深度學習為代表的機器學習技術在圖像識別領域得到廣泛關注[3].將基于深度學習的圖像分析技術應用在PCB 缺陷檢測領域具有非常廣闊的前景.王永利等[4]先采用差分算法提取圖像中的缺陷區域,再設計一個結構簡單的卷積神經網絡用于缺陷特征的提取及分類,實現了PCB上缺陷的檢測,但是該方法中缺陷區域檢測任務及分類任務是割裂開的,且特征提取網絡簡單,對于復雜場景下的特征提取能力不足.孫燦等[5]同樣是采用差分算法來識別缺陷區域,其采用了結構相對更復雜的Inception-ResNet-v2 分類網絡來提取更多高層次的特征,但在部分圖像中存在缺陷區域較小且形狀相近的情況,實際應用識別準確率還有待提升.耿振宇[6]提出了應用Faster R-CNN 算法來對PCB 表面進行缺陷檢測,以解決傳統網絡對小目標的識別效果較差的問題,該算法可以同時進行分類與回歸的任務,但是網絡冗余度較高,推理效率方面不太理想,對硬件資源要求較高,部署應用的條件較為苛刻.
為了提升深度學習模型檢測識別的準確度,如今主流的檢測算法往往會采用復雜且深層次的網絡結構,伴隨而來的是龐大的計算量及硬件資源的占用,工業部署應用的條件比較苛刻.因此,為了更好的滿足工業部署應用的要求,一方面需要采用推理效率高、檢測效果好的深度學習檢測算法,另一方面還需要對檢測模型進行壓縮優化.
深度學習模型的壓縮優化技術[7,8]是指利用神經網絡參數的冗余性和網絡結構的冗余性來精簡模型,在不影響任務完成度的情況下,得到參數量更少、結構更精簡的模型.
綜合上述現狀,本文以深度學習目標檢測技術為核心思想,應用工業界綜合表現優秀的YOLOv3-spp目標檢測算法來構建焊接缺陷檢測模型,并且為了提升檢測效率、降低部署成本進行了模型的裁剪優化.基于該優化算法設計了PCB 焊接缺陷檢測方案,開發了PCB-Checker 焊接缺陷檢測軟件.
基于深度學習目標檢測技術的智能圖像分析功能是本軟件的實現關鍵技術之一.缺陷檢測模型的好壞直接影響到PCB 板上焊接缺陷的識別準確度及識別速度,采用優秀的目標檢測算法、融合以各種模型壓縮優化和加速手段,可以極大的提升模型的健壯度、泛化能力及推理效率.
本文基于以下步驟實現缺陷檢測模型的訓練及部署,整體流程圖如圖1所示.

圖1 基于深度學習的缺陷檢測模型的訓練及部署流程圖
基于AOI 機器識別導出的大量有焊接缺陷的圖像樣本,建立初始樣本庫.對存在有焊接缺陷的圖像樣本進行人工分類.本文中,將焊接缺陷共分為以下13 類:芯片虛焊、電阻電容虛焊、少錫、橋接、偏移、管腳偏移、缺件、反貼、電阻立碑、芯片立碑、電容立碑、側立和缺錫.統計樣本庫中各分類的樣本數量,梳理出樣本庫中的正負樣本、難易樣本.針對少分類、難識別的圖像樣本,通過復制圖像后的隨機數據增強方法來擴充樣本得到分類相對均衡的訓練樣本庫.
采用的數據增強方法包括光學變換、幾何變換、增加噪聲、數據源擴充等4 大類方法.其中,光學變換包括亮度、對比度等調節方法;幾何變換包括擴展、裁剪和鏡像等操作方法;增加噪聲表示在原始圖像上增加一定的擾動,比如高斯噪聲;數據源擴充表示將檢測的目標背景進行替換.
利用專家經驗對訓練樣本庫中焊接缺陷的關鍵區域使用開源工具進行人工標注,標注后使用腳本轉換形成YOLOv3-spp 算法支持的標注文件.訓練樣本庫按4:1的比例隨機建立訓練樣本集和測試樣本集.
目標檢測領域的深度學習方法[9,10]主要分為兩類:two-stage的目標檢測算法;one-stage的目標檢測算法.前者是先由算法生成一系列作為樣本的候選框,再通過卷積神經網絡進行樣本分類;后者則不用產生候選框,直接將目標邊框定位的問題轉化為回歸問題處理.相對來說two-stage 在檢測準確率和定位精度上占優,one-stage 在算法速度上占優.YOLO 系列算法[11]在實際應用中是one-stage 目標檢測方法中性能及精度最好的方法之一.YOLOv3[12,13]是YOLO 系列中成熟且優秀的算法,它整合了大量的計算機視覺前沿技術,能顯著改善目標檢測的性能.YOLOv3-spp 算法在標準的YOLOv3 算法基礎上增加了SPP 模塊,該模塊借鑒了空間金字塔的思想,通過SPP 模塊實現了局部特征和全局特征的融合,豐富了特征圖的表達能力.尤其是對于YOLOv3 這種復雜的多目標檢測,YOLOv3-spp算法相比YOLOv3 標準算法在精度等指標上都有幾個百分點的提升.
本文采用Ultralytics 官方提供的PyTorch 框架下的YOLOv3-spp 開源算法,在訓練樣本集中訓練得到中間模型文件.
在測試樣本集中,對中間模型文件進行模型評估,評估指標綜合考慮深度學習模型的mAP (多分類平均精度)、Precision (準確率)、Recall (召回率)等主流指標.如果評估指標未達到技術規范或推廣應用的要求,針對指標效果不佳的分類采取各類優化方法,比如細分類、重新標注、數據增強等方式來重新建立訓練樣本集和測試樣本集.通過反復迭代訓練、評估的過程,得到最優的基礎模型文件及訓練樣本庫.
本文設置標準訓練的epoch為250 輪,訓練結果如表1所示.本文表格中,P表示準確率、R表示召回率、mAP@0.5 表示在交并比為0.5 時的多分類平均精度、Params 表示參數量、Size of weights 表示模型文件的大小、Infer_time 表示單張圖像在硬件配置為Tesla T4的GPU 服務器上的推理耗時.

表1 標準訓練模型的參數
稀疏化訓練就是精度和稀疏度的博弈過程,即需要保證稀疏后的模型在保持高精度的同時實現高稀疏度.
本文采用L1 正則化施加到BN 層的縮放因子γ上的方法來進行稀疏訓練[14].L1 正則化可以對模型參數進行限制,產生稀疏化的模型,同時增加模型的泛化能力.在YOLO 算法的損失函數中疊加了針對縮放因子γ的L1 正則表達式,因此在訓練過程中很多通道的縮放因子γ正則項都會逐漸趨于0.
設置epoch為350 輪,在訓練集上進行稀疏化訓練.訓練過程中BN 層權值的分布情況如圖2所示.圖2(a)為正常訓練時的BN 權值變化圖,總體上是在1 附近的類正態分布;圖2(b)為稀疏訓練BN 權值變化圖,訓練過程中大部分值逐漸被壓到接近0,BN 層對應通道輸出值也近似于常量,因此非常適合于后續的剪枝過程.

圖2 正常訓練和稀疏訓練過程中的BN 權值值變化
稀疏化模型的評估結果如表2所示.

表2 稀疏化訓練模型的參數
可以觀察到,在稀疏化訓練后,模型的mAP@0.5指標下降了3 個點左右,模型參數量、推理耗時等指標基本不變.
模型剪枝[15,16]包括通道剪枝和層剪枝兩種類型,兩者都是利用BN 層的γ系數評價對應通道的重要性來達到剪枝的目的.因此,稀疏訓練是否充分將直接影響剪枝的效果.
通道剪枝的大致原理是,統計所有參與剪枝層的BN 參數γ權重值并進行排序,依據剪枝率確定參數閾值,將所有小于閾值的通道全部減掉,如果有依賴則將依賴的對應部分也剪掉.如果一層中所有的通道都需要被移除,為了保證網絡結構不變,需保留剪枝參數所設置的最小通道值.
本文設置初始通道剪枝率為0.5,對剪枝后的模型在測試樣本集中進行評估,與剪枝前的模型比較P、mAP@0.5 等綜合指標.剪枝率先以0.1的級差進行嘗試性剪枝后評估,到了臨界值時再以0.01的級差進行微調,迭代剪枝并評估找到最佳的通道剪枝率參數.即以犧牲最小的準確率指標為代價,剪除更多的通道來提升模型性能,得到最佳的通道剪枝率參數及最佳的通道剪枝模型文件.
本文中,不同的通道剪枝率下檢測模型的參數如表3所示.

表3 不同通道剪枝率下模型的參數
可以觀察到,稀疏化模型在剪枝率為0.66 時,通道剪枝過程達到“最佳剪枝點”,mAP@0.5 指標僅下降0.01,參數量及模型文件大小均減少70%左右,單張圖片推理耗時下降為原來的60%左右.
通道剪枝能大大減小模型的參數和計算量,降低模型對資源的占用.層剪枝可以進一步減小計算量,提高模型的推理速度.
YOLOv3 層剪枝是對每一個殘差單元中shortcut捷徑連接的前一個CBL (Conv+BN+Leaky_ReLU)的BN 層進行評價,對各層的γ均值進行排序,取最小的進行層剪枝.為保證YOLOv3 結構完整,每剪一個shortcut 捷徑連接結構,會同時剪掉一個shortcut和它前面的兩個CBL 卷積層結構.
本文以全局剪枝率為0.66 時生成的通道剪枝模型文件為基礎執行層剪枝.分別嘗試不同層剪枝shortcut個數時的模型指標,如表4所示.

表4 通道剪枝率0.66 時,不同剪層個數下模型的參數
可以觀察到,隨著shortcut 剪除的個數增加,P、R和mAP@0.5 都會不同程度的下降,當剪除shortcut個數為8 時,R和mAP@0.5 出現了大幅度的下滑,且差距比較大,如果再提升剪枝層數,效果非常差.為了保持最大化的剪枝效果,采用剪除7 個shortcut的方式,即為最佳的層剪枝點.雖然各項指標都下降比較明顯,但是可以在后續的微調訓練中恢復.經過層剪枝后的模型,參數量及模型文件大小相比標準模型減少74%左右,單張圖片推理耗時下降為標準模型的52%左右.
微調訓練的目的在于恢復剪枝后的模型精度指標,保證剪枝前后的模型評估指標總體上相差不大.
模型蒸餾[17,18]是指將擁有復雜網絡結構的老師模型中學習到的知識遷移到相對簡單網絡結構的學習模型中,在蒸餾的過程中,小模型學習到了大模型的泛化能力,保留了接近于大模型的性能.
對最佳的剪枝模型文件進行微調訓練,并引入模型蒸餾技術,將YOLOv3-spp 標準化訓練模型作為老師模型,將最佳的剪枝模型作為學生模型,通過老師模型指導學生模型進行微調訓練的方式,得到最終的輕量化模型文件.經過微調訓練后,剪枝后的模型文件參數量保持不變,但是mAP@0.5 等指標都有了一定程度的恢復.
本文以全局剪枝率為0.66、層剪枝為7 個shortcut后生成的模型文件為基礎執行微調訓練,設置epochs為80 輪,訓練得到輕量化模型.各階段的模型文件在測試樣本集上的評估指標,如表5所示.

表5 各階段模型指標比較表
從表5中對比數據可以看出,稀疏模型相較于標準模型在R、mAP@0.5 下降3 個多點,但是經過剪枝及微調處理后指標會有所提升.輕量化模型在P、R及mAP@0.5 等指標上比標準模型僅下降2 個點左右,但是參數量及模型大小減少74%左右,推理時間下降為標準模型的50%左右,取得了較好的模型壓縮效果.
圖3展示了剪枝微調后模型在測試樣本集上的焊接缺陷推理情況.

圖3 推理模型在測試集上的推理示例
經過微調訓練后的輕量化模型文件的格式是PyTorch,在部署應用中,先用腳本將其轉換為通用的onnx 格式模型文件.onnx (開放神經網絡交換)是一種針對深度學習所設計的開放式的通用文件格式,用于存儲訓練好的模型,它使得不同的人工智能框架(如PyTorch、TensorFlow、Mxnet 等)可以采用相同格式存儲模型數據并交互,支持模型在不同框架之間進行轉移.
采用Intel 推出的深度學習加速組件OpenVINO的Model Optimizer 模塊對模型進行量化優化處理,可以根據需要將模型中參數精度由32 位浮點型量化成16 位浮點型,模型大小可以縮小一半,同時保證有限的精度損失,以進一步提升模型在檢測應用時的推理速度.本文為了保證檢測的準確率,未進行模型量化處理.
本文調用OpenVINO 組件提供的Inference Engine C++推理接口函數,加載檢測模型文件,以待檢測的初篩局部圖像為輸入,經過檢測模型的前向推理運算,得到缺陷分類及缺陷位置的信息,完成AI 推理的應用及展示.一般而言,剪枝微調后的模型在OpenVINO 加速框架下,使用intel CPU、GPU 等硬件平臺進行推理還可以獲得30%以上的速度提升.
圖4展示了PCB-Checker 軟件的模塊劃分及功能分類,支持缺陷信息展示、缺陷圖瀏覽、缺陷圖智能分析、缺陷圖定位和缺陷過濾等功能.

圖4 PCB-Checker 軟件模型劃分及功能列表
PCB-Checker 軟件典型的操作流程如圖5所示:① 從AOI 檢測儀器上導出初篩的缺陷檢測圖像目錄,利用工程管理模塊新建工程;② 點擊觸發掃描流程,分析并展示待檢目錄下異常PCB的板卡型號、異常元件編號、異常引腳編號等信息,并開啟基于深度學習的分析子線程;③ 在所設置的間隔時間內(默認10 s),對一部分圖像運行推理輸出結果,并刷新表格化界面的內容;④ 持續對未進行過智能分析的圖像進行推理輸出,直至所有圖像都完成分析,結束分析子線程;⑤ 導入初篩缺陷圖像所屬PCB的整板圖像文件及元件位置坐標文件,標記若干組元件名稱及元件像素坐標,完成整板圖的導入;⑥ 在表格化的缺陷信息展示界面中,對智能分析后確實存在缺陷的條目進行校核.可以利用缺陷類型過濾功能進行過濾展示,結合缺陷局部圖在PCB 整板圖中的定位展示功能,完成PCB 焊接缺陷的定位識別.

圖5 PCB-Checker 軟件典型操作流程
由于PCB 板上元件的集成度非常高,元件尺寸很小,AOI 檢測形成的缺陷成像一般是缺陷區域的特寫,因此需要將缺陷局部圖定位至PCB 整板圖中的具體位置并進行可視化的展示,以提升生產效率.本系統基于一元線性回歸算法實現了局部缺陷圖的定位顯示功能.
PCB 板在設計完畢后支持導出一張整板圖像文件及一個包含各元件坐標分布的文本文件.在PCB-Checker軟件中導入該整板原圖或者是經過裁切、翻轉、縮放等處理后的整板圖,并同時導入元件坐標文件,以PCB板類型和正反面標識為索引,存儲每一對導入的信息到配置文件中.
基于導入的整板圖及元件坐標文件,提供可視化界面允許在PCB 整板圖中鼠標左鍵單擊標記若干枚元件的位置坐標,以獲取多組包含元件名稱及坐標的信息,如圖6所示.若干組必須是兩組及以上的信息,一般來說記錄的信息越多,擬合出來的函數系數能更具有泛化能力,但是過多也存在過擬合的情況,建議是標記4 組或者5 組信息即可.

圖6 PCB 整板圖中元件坐標標記界面
采用一元線性回歸算法,推算出PCB 整板圖像中元件的像素坐標與坐標文件中記錄的坐標之間的關系表達式為:

其中,yp表示圖像中某元件的像素y坐標值;yf表示坐標文件中某元件的像素y坐標值;xp表示圖像中某元件的像素x坐標值;xf表示坐標文件中某元件的像素x坐標值;k1、k2、b1、b2為需要進行計算的一元線性回歸方程的參數值.
從標記元件的名稱及坐標信息中,通過若干組包含元件名稱及像素坐標的散點信息,分別擬合出y坐標、x坐標的線性關系,計算得到的k1、k2、b1、b2參數值.
從PCB 焊接缺陷局部圖像所對應的缺陷描述文件中,獲取該局部圖像所對應的元件名稱.再從PCB元件坐標文本文件中查找到該名稱所對應的坐標位置,即yf、xf的值.基于推導出的坐標關系表達式及元件名稱、坐標位置,計算出該元件在PCB 整板圖像中的像素坐標位置,即yp、xp的值.
PCB-Checker 提供了界面并列展示PCB 焊接異常局部圖及其在PCB 整板圖中的定位位置,達到可以在PCB 整板圖上快速定位異常局部圖位置的目的.軟件采用組件式架構設計[19,20],其主界面如圖7所示.

圖7 PCB-Checker 軟件主界面
本文介紹了一種基于深度學習技術的PCB 焊接缺陷檢測識別系統.系統以YOLOv3-spp的目標檢測算法為基礎,設計采用模型剪枝、模型蒸餾及模型量化等手段來壓縮模型,以犧牲有限準確率為代價大幅提升了AI 缺陷檢測的速度.另外,本系統還基于一元線性回歸算法實現了焊接缺陷局部圖的定位展示功能.PCB-Checker 系統界面簡潔、運行穩定,在南瑞繼保電氣有限公司智能制造中心多條電力PCB 生產線進行了實際應用,結果表明該軟件提升了生產效率和質量管控能力.