王淑青,魯 濠,魯東林,劉逸凡,要若天
(1.湖北工業(yè)大學(xué)電氣與電子工程學(xué)院,湖北武漢 430068;2.華中科技大學(xué)武漢光電國家研究中心,湖北武漢 430074; 3.武漢大學(xué)電氣與自動化學(xué)院,湖北武漢 430072)
印制電路板(printed circuit board)簡稱PCB板[1],是一種重要的電子部件,作為元器件電氣連接的載體,在電子設(shè)備中應(yīng)用十分廣泛。PCB板在生產(chǎn)校驗過程中,其表面缺陷是大部分PCB板質(zhì)量問題的來源[2]。常見的PCB板分為裸板與組裝板兩類,檢測方法通常采用半自動化的人工檢測方法,由于PCB裸板線路復(fù)雜,人工檢測極易導(dǎo)致漏檢、錯檢等情況,往往需要重復(fù)工序來保證合格度,檢測效率低,人工成本高。主要檢測方法包括在線測試、功能測試等,通過電氣性質(zhì)進(jìn)行驗證測試,這些方法雖然能夠精準(zhǔn)地檢測出缺陷,然而測試流程不能復(fù)用、測試器具成本高、編寫功能復(fù)雜等因素導(dǎo)致其應(yīng)用受到限制。
隨著深度學(xué)習(xí)以及神經(jīng)網(wǎng)絡(luò)的發(fā)展[3-4],使用機(jī)器視覺進(jìn)行PCB板缺陷檢測被廣泛地研究,這種非接觸式的自動化檢測方法容易檢測出微小模糊的缺陷,提升整個質(zhì)檢環(huán)節(jié)的效率。王濤等人提出一種改進(jìn)的粒子群算法對PCB板進(jìn)行檢測,提高了收斂率與抗噪性能,然而檢測結(jié)果依然受噪聲影響較大[5];董靜毅等人對圖像分割方法以及機(jī)器學(xué)習(xí)檢測方法在PCB板檢測的應(yīng)用進(jìn)行了對比討論,表明了人工神經(jīng)網(wǎng)絡(luò)在缺陷檢測的優(yōu)越性[6];J SHEN等人提出一種輕量級的檢測模型完成對PCB板的缺陷檢測以及字符識別等功能,結(jié)果表明對小目標(biāo)的檢測精度高,有良好的魯棒性[7]。
在上述研究基礎(chǔ)之上,為滿足人工神經(jīng)網(wǎng)絡(luò)在移動端以及低成本微小型計算機(jī)上部署的需求,選擇在目前檢測精度較高的YOLOv5網(wǎng)絡(luò)上進(jìn)行改進(jìn),將其應(yīng)用在PCB板表面缺陷檢測中[8]。在主干網(wǎng)絡(luò)中應(yīng)用輕量化模型ShuffleNetV2結(jié)構(gòu),以減少網(wǎng)絡(luò)計算參數(shù),剔除冗余的特征圖,在保證識別精度的情況下,大幅降低計算成本與內(nèi)存占用。改進(jìn)FPN模塊,在增加有限計算量的情況下,增加上下文信息傳遞。使用PReLU函數(shù)代替ReLU激活函數(shù),解決過大梯度流過時引發(fā)的神經(jīng)元崩壞問題,提高模型的收斂性[9]。在擴(kuò)充包含多個小缺陷的PCB裸板數(shù)據(jù)集上進(jìn)行驗證,實驗結(jié)果表明,該方法訓(xùn)練速度快、模型結(jié)構(gòu)和參數(shù)壓縮、檢測精度與效率較高。
PCB板生產(chǎn)過程中制作環(huán)節(jié)極容易產(chǎn)生缺陷,會對后面的加工環(huán)節(jié)產(chǎn)生較大影響。目前PCB裸板的缺陷主要可分為開孔缺失、開路缺陷、短路缺陷、線路缺損、毛刺以及銅缺六大類,缺陷多為小目標(biāo)缺陷,且背景與缺陷分離不明顯[10]?;谄髽I(yè)檢測需求,需要簡化檢測模型,提升小目標(biāo)檢測精度,在保證檢測速度的情況下滿足工業(yè)檢測高精度的要求。
系統(tǒng)整體設(shè)計構(gòu)架為:首先為保證獲取PCB裸板圖片的分辨率高,不缺失檢測目標(biāo),采用分區(qū)域式圖像采集。將PCB板劃分為4個區(qū)域,使用相機(jī)平移和垂直移動進(jìn)行拍攝,相鄰區(qū)域有一定重合,這樣既能規(guī)避因圖像低分辨率而導(dǎo)致小目標(biāo)缺陷未能識別,同時也能避免因圖像邊緣失真導(dǎo)致缺陷不完整。其次在服務(wù)器上用標(biāo)注好的PCB板數(shù)據(jù)集對模型進(jìn)行有監(jiān)督的學(xué)習(xí)訓(xùn)練,調(diào)整參數(shù)獲得最優(yōu)權(quán)重。將訓(xùn)練好的模型移植到工業(yè)小型計算機(jī)中,適配PCB裸板缺陷檢測,由機(jī)械臂或自動化分揀工具挑選出有缺陷的電路板。
近年來,深度學(xué)習(xí)作為一項熱門技術(shù),可以通過提取對象深層次的特征來識別和定位目標(biāo),在工業(yè)檢測領(lǐng)域得到越來越多的應(yīng)用。目前主流的目標(biāo)檢測框架分為one-stage檢測框架,如YOLO、SSD等[11];two-stage檢測框架,如Fast-RCNN、Faster-RCNN等。one-stage算法的主要特征是直接通過主干網(wǎng)絡(luò)來給出目標(biāo)分類與位置信息,不使用RPN網(wǎng)絡(luò)(區(qū)域推薦網(wǎng)絡(luò)),速度更快,但由于候選區(qū)域未進(jìn)行篩選,存在冗余信息,因此精確度比two-stage算法低。two-stage算法的主要特征是先提取感興趣的CNN卷積特征,第一步訓(xùn)練RPN網(wǎng)絡(luò),第二步訓(xùn)練檢測的網(wǎng)絡(luò),這樣操作準(zhǔn)確度更高,但速度比one-stage的算法稍慢。本文采用的YOLOv5網(wǎng)絡(luò)構(gòu)架如圖1所示,主要分為Input,Backbone,Neck以及Output四個部分。
圖1 YOLOv5s網(wǎng)絡(luò)結(jié)構(gòu)
(1)Input:內(nèi)嵌數(shù)據(jù)增強(qiáng),采用與YOLOv4同樣的處理,對于小目標(biāo)檢測實現(xiàn)隨機(jī)裁剪、縮放、排列的形式進(jìn)行圖片拼接。其次增加自適應(yīng)錨框計算,在不同的數(shù)據(jù)集自適應(yīng)地選擇最合適的錨點值來初始化錨框。采用自適應(yīng)圖片縮放,針對不匹配的圖片進(jìn)行合適的裁剪填充,將尺寸歸一化,提高網(wǎng)絡(luò)的推理速度。
(2)Backbone:提出了Focus結(jié)構(gòu),對圖片和特征圖進(jìn)行切片操作,分隔像素值進(jìn)行采樣來保持圖片的原始信息。提取高度和寬度信息到Channels,使得Input channels提升為原來的4倍,再將新的圖片進(jìn)行卷積操作,得到無損失信息的二倍采樣圖。采用兩種CSPNet結(jié)構(gòu),將梯度的變化融入到特征圖內(nèi),增強(qiáng)梯度表現(xiàn)的同時減少計算量。
(3)Neck:采用SPP模塊,自上而下,通過上采樣得到的高、低特征層拼接,實現(xiàn)特征融合并得到新的特征圖,而后通過PAN(路徑融合網(wǎng)絡(luò))自下而上由弱到強(qiáng)傳遞特征,使得特征層實現(xiàn)更多的特征融合。
(4)Output:采用GIOU_Loss作為Bounding box的損失函數(shù),相比較YOLOv4采用的CIOU_Loss,優(yōu)化了非極大值抑制效果。
近些年,人工深度神經(jīng)網(wǎng)絡(luò)的研究越來越成熟,在目標(biāo)識別、圖像分類、目標(biāo)檢測方面取得了很大的進(jìn)展。一些主干網(wǎng)絡(luò)例如ResNet和VGG等已經(jīng)能夠獲取比較精準(zhǔn)的圖像分類,然而人工神經(jīng)網(wǎng)絡(luò)的網(wǎng)絡(luò)層、參數(shù)量以及配置及要求不斷增加[12-13]。復(fù)雜的網(wǎng)絡(luò)模型通常包含大量參數(shù)量以及計算復(fù)雜度,其適用于成本高、即時性要求低的應(yīng)用場景。而特定的場景,需要達(dá)到低延遲、高速率、低成本的要求,例如將深度神經(jīng)網(wǎng)絡(luò)模型應(yīng)用在移動設(shè)備端或者微型計算機(jī)上,完成準(zhǔn)確且快速的實時檢測[14]。為了滿足需求,一些輕量級的網(wǎng)絡(luò)模型如MobileNet、ShuffleNet、GostNet等相繼提出。ShuffleNet2針對內(nèi)存消耗依舊過大等問題,在許多方面進(jìn)行了適應(yīng)性的改進(jìn),以滿足更快更準(zhǔn)確的要求,ShuffleNet2與ShuffleNet1的改進(jìn)對比如圖2所示。
圖2 ShuffleNet2與ShuffleNet1結(jié)構(gòu)對比
ShuffleNet2主要根據(jù)4個重要指標(biāo)對網(wǎng)絡(luò)進(jìn)行優(yōu)化:
(1)ShuffleNet2的輸入與輸出通道設(shè)置為相同數(shù)量,使得內(nèi)存消耗為最少。假定特征圖大小為h×w,輸入與輸出的通道的數(shù)量分別為C1與C2,以寬和高的卷積為1*1為例。根據(jù)FLOPs和MAC計算公式:
B=h·w(C1*(1*1)*C2)=h·w·C1·C2
(1)
MAC=h·w·C1+h·w·C2+(1*1)*C1*C2=h·w(C1+C2)+C1·C2
(2)
由均值不等式
(3)
從而
(4)
式中:B為FLOPs(每s浮點運算次數(shù));w、h分別為特征圖寬和高;MAC為網(wǎng)絡(luò)層內(nèi)存訪問及讀寫消耗成本。
故當(dāng)C1=C2,即輸入通道與輸出通道相等時,內(nèi)存消耗量最小。
(2)ShuffleNet2減少了分組卷積的使用。雖然分組卷積在神經(jīng)網(wǎng)絡(luò)的應(yīng)用能夠減少參數(shù)量,然而單方面的參數(shù)量減小并不能直接提升模型速度,大量使用分組卷積會顯著增加MAC。同樣假定特征圖大小為h×w,輸入與輸出的通道的數(shù)量分別為C1與C2,以寬和高的卷積為1*1為例,分組數(shù)為g。每個卷積核會單獨與C1/g個Channel內(nèi)包含的特征進(jìn)行卷積操作,此時FLOPs和MAC計算公式為:
(5)
(6)
MAC與FLOPs的關(guān)系為:
(7)
可以看出在FLOPs不變的情況下,分組越多,內(nèi)存訪問消耗成本就會越大。
(3)ShuffleNet2減少了網(wǎng)絡(luò)分支的數(shù)量。通常來講,網(wǎng)絡(luò)的結(jié)構(gòu)與參數(shù)量共同影響計算速度,分支加量比層數(shù)加量更加影響推理速度。
(4)ShuffleNet2減少了能夠增加內(nèi)存消耗的Element-wise(基本元素操作),這些操作包含Add、Relu、short cut等。雖然元素操作只增加少量FLOPs,然而其映射到MAC上就會造成一定量的內(nèi)存損耗與時間損耗,因此其造成的內(nèi)存消耗也不容忽視,減少元素操作的比重可以減小內(nèi)存消耗。
ShuffleNet2引入一種新的運算方式channel split,特征圖輸入時將通道平均分為2個分支,2個分支做同等映射操作,分別都包含3個連續(xù)的卷積;將輸入通道與輸出通道設(shè)置為相同,同時不再采用組卷積;2個分支在分成2個組后,其有相對獨立的特性,組合方式由concat(連接)代替Add(相加),滿足式(5)和式(6)中提及的不增加分支數(shù)量以及減小Element-wise操作。在完成不同分值特征提取后,對2個分支連接起來的結(jié)果采取channel shuffle(通道隨機(jī)洗牌),保證2個通道的特征能夠交錯從而不會丟失特征信息,這樣操作使得網(wǎng)絡(luò)不需要通過大量地concat來保證特征信息的完整性。下采樣過程中,每個分支直接保留輸入的信息,隨后將這些分支連接在一起,最終使得特征圖的空間減小為一半,而通道數(shù)翻倍。
根據(jù)ShuffleNet2的特點,在YOLOv5s網(wǎng)絡(luò)的基礎(chǔ)上,將主干網(wǎng)絡(luò)部分原始卷積Conv與C3模塊替換為Inverted Residual卷積模塊,同時根據(jù)式(1)原則設(shè)置主干網(wǎng)絡(luò)的輸入輸出通道數(shù)相等,經(jīng)過優(yōu)化后的主干網(wǎng)絡(luò)在最后輸出層前保留SPP模塊,有利于整合輸出尺寸與多尺度特征融合,改進(jìn)的主干網(wǎng)絡(luò)結(jié)構(gòu)如圖3所示。
圖3 改進(jìn)backbone結(jié)構(gòu)對比
在PCB板的檢測中,缺陷大多為小目標(biāo),因此需要增強(qiáng)網(wǎng)絡(luò)對于小目標(biāo)的特征提取能力。ShuffleNet2添加小卷積核來提取對于小目標(biāo)的檢測,然而模型在堆積更多的卷積層后,由于不同大小的感受野之間缺乏交流,模型的特征表達(dá)能力不足,容易引發(fā)特征分辨率與感受野沖突,無法將兩者有效結(jié)合[15]。
目標(biāo)檢測中,為確保高分辨率輸入特征接收完整,通常采取的累積卷積層操作會增加網(wǎng)絡(luò)結(jié)構(gòu)的復(fù)雜度。因此在不堆疊網(wǎng)絡(luò)結(jié)構(gòu)的基礎(chǔ)上,提出在FPN模塊的基礎(chǔ)上添加2個新的模塊CEM(上下文抽取模塊)和AM(注意力引導(dǎo)模塊),結(jié)構(gòu)如圖4所示。
圖4 改進(jìn)的FPN模塊
CEM接收自下而上通道采集的特征信息,通過不同比率的多路徑擴(kuò)展卷積,使上下文的信息表達(dá)豐富??煞蛛x的卷積層使獲取的特征圖來自于不同的感受野,在不同比率路徑中使用可變卷積,提高了空間變換建模的能力,將不同維度學(xué)習(xí)的特征歸一化。連接方式采用密集連接,將每個擴(kuò)展層的輸入輸出相連,共同傳遞到下一個擴(kuò)展層,有效地整合多尺度特征信息,從而加強(qiáng)上下層之間的特征強(qiáng)傳遞。
AM由CxAM和CnAM兩個部分組成,主要為了剔除CEM接收的感受野中冗余的信息,消除在語義與位置間傳遞的錯誤信息。
CxAM(上下文注意力模塊)可以獲取不同子區(qū)域之間的語義依賴,當(dāng)包含多尺度感受野的特征信息傳遞進(jìn)來時,CxAM通過提煉各個子區(qū)域之間的相關(guān)性,使得輸出特征語義更加清晰。
CnAM(內(nèi)容注意模塊)會捕捉更為精準(zhǔn)的目標(biāo)位置信息,使用卷積層對特定特征映射進(jìn)行轉(zhuǎn)換,消除因可變卷積操作導(dǎo)致的圖像位置偏移與幾何信息損壞。
主干網(wǎng)絡(luò)采用的ShuffleNet2結(jié)構(gòu),其卷積層激活函數(shù)為ReLu激活函數(shù),為非飽和激活函數(shù),也是目前人工神經(jīng)網(wǎng)絡(luò)比較常見的激活函數(shù),其計算公式為:
(8)
ReLu的兩大優(yōu)勢為克服了梯度消失問題以及提升了訓(xùn)練速度[16]。然而使用ReLu激活函數(shù)也有缺點:訓(xùn)練時當(dāng)負(fù)值或非常大的梯度流過神經(jīng)元時,會造成ReLu神經(jīng)元“死亡”,無論之后怎樣更新參數(shù),神經(jīng)元的梯度為0,同時ReLu的輸出為非負(fù)數(shù),梯度更新的隨機(jī)性差。為了解決上述不足,采用其變體函數(shù)PReLu激活函數(shù)來代替ReLu,其結(jié)構(gòu)對比見圖5。
圖5 激活函數(shù)結(jié)構(gòu)對比
PReLu在ReLu以及Leaky ReL的基礎(chǔ)上進(jìn)行了優(yōu)化,不僅解決了ReLu的兩大缺點,同時也解決了Leaky ReLu無法學(xué)習(xí)導(dǎo)致對于正負(fù)結(jié)果預(yù)測不一致的缺點,其計算公式為:
(9)
式中:α為0到1正態(tài)分布的隨機(jī)數(shù);i為不同的通道。
PReLu在反向傳播的過程中,當(dāng)激活函數(shù)值小于0時,仍可以給出一個非零的計算梯度,在模型只增加極少參數(shù)的情況下解決了反向神經(jīng)元崩壞的問題。并且隨機(jī)學(xué)習(xí)動量因子α滿足0到1的正態(tài)分布,在反向傳播過程中增加了梯度的隨機(jī)性,提高參數(shù)的泛化性,避免陷入局部最優(yōu)。
訓(xùn)練數(shù)據(jù)圖片部分來源于公開PCB板缺陷數(shù)據(jù)集,由于缺陷種類及數(shù)量不足,可能影響模型泛化性,因此在原圖片集基礎(chǔ)上,通過工廠實際拍攝擴(kuò)充圖片,并將部分無缺陷樣本采取人工合成缺陷的方式加工為包含多種缺陷的樣本。采取隨機(jī)翻轉(zhuǎn)、加噪等方式對差異大、數(shù)量少的缺陷擴(kuò)充樣本容量[17]。最后得到4 000張圖片,采集的缺陷種類如圖6所示,將圖片數(shù)量按照9:1劃分訓(xùn)練集與測試集。
圖6 PCB板缺陷種類
本實驗環(huán)境為Ubuntu16.04操作系統(tǒng),采用pytorch框架,GPU為GeForce RTX 2070 SUPER,內(nèi)存為16 GB,加速庫為CUDA 11.1.96。
采用Labelmg標(biāo)注工具對數(shù)據(jù)集進(jìn)行標(biāo)注。劃分為6種缺陷。選擇預(yù)訓(xùn)練模型為改進(jìn)后的YOLOV5s模型。訓(xùn)練優(yōu)化采用Adam算法,Batch-size設(shè)置為16;總迭代次數(shù)設(shè)置為800次;動量因子值為0.9;權(quán)重衰減系數(shù)設(shè)置為0.000 5;采用預(yù)熱重啟更新學(xué)習(xí)率,初始學(xué)習(xí)速率設(shè)置為0.001。本文選取的評價指標(biāo)為精準(zhǔn)度(Precision)、召回率(Recall),經(jīng)過平滑后的訓(xùn)練結(jié)果曲線如圖7所示。
圖7 改進(jìn)算法的精準(zhǔn)度與召回率曲線
在訓(xùn)練集上對改進(jìn)后的算法模型與原算法模型分別進(jìn)行對比實驗,兩種算法的模型性能參數(shù)對比如表1所示。
表1 算法性能參數(shù)對比
從圖7可以看出輕量化后的模型訓(xùn)練效果較好,精準(zhǔn)率與召回率迭代至550輪左右趨于穩(wěn)定,數(shù)值較高且較快地收斂,符合輕量化目標(biāo)檢測模型在小型計算機(jī)平臺上的檢測精度與速度要求[18]。精確率P和召回率R的計算公式如式(10)所示:
(10)
式中:TP為正類預(yù)測為正類的數(shù)量;FN為正類預(yù)測為負(fù)類的數(shù)量;FP為負(fù)類預(yù)測為正類的數(shù)量。
在測試集對PCB裸板缺陷進(jìn)行測試。測試圖片包含600個缺陷樣本,查準(zhǔn)率為98.3%,誤檢率為3.2%,漏檢率為0.6%。驗證結(jié)果如圖8所示。
圖8 測試集PCB板缺陷檢測效果
圖8中檢測框上的數(shù)值表示置信度,即判定該缺陷屬于這類缺陷的概率,最高為1。在查準(zhǔn)的情況下,置信度越高,代表檢測效果越可靠;在誤檢的情況下,置信度通常較低,表明檢測目標(biāo)無缺陷或誤檢為其他種類缺陷[19]。
由于線路開路與銅缺等類型的缺陷與少量PCB板正常紋路接近,模型提取這類缺陷特征時存在干擾,會造成誤檢的情況,生產(chǎn)中通常設(shè)置一定置信度閾值將誤檢樣本進(jìn)行篩除??傮w上檢測精度較高,置信度均值在90%以上,可以將該算法應(yīng)用于PCB板質(zhì)量檢測中。
將改進(jìn)后的網(wǎng)絡(luò)算法與原網(wǎng)絡(luò)算法、Faster RCNN、YOLOv4三種算法進(jìn)行對比,在硬件平臺相同的情況下,盡量保證適合每種算法最優(yōu)的輸入圖像尺寸與訓(xùn)練批次。測試結(jié)果如表2所示。
表2 4種算法性能指標(biāo)對比
由表2可知,本文算法在精準(zhǔn)率提高的同時,檢測速率也進(jìn)行了優(yōu)化;與YOLOv4、Faster RCNN、YOLOv5s相比,精準(zhǔn)度分別提升了9.4%、8.1%和2.9%,召回率分別提升了4.7%、9.5%和5.9%。在檢測速度上,由于運行內(nèi)存占量的大幅下降,改進(jìn)后的算法比原網(wǎng)絡(luò)稍低,但也達(dá)到了56幀/s的檢測速率,完全能夠滿足生產(chǎn)線實時檢測的要求[20-21]。
本文針對人工PCB板缺陷檢測效果較差、傳統(tǒng)人工神經(jīng)網(wǎng)絡(luò)參數(shù)多、計算力要求高、無法在小型計算機(jī)上部署的問題,提出優(yōu)化YOLOv5s算法,使用ShuffleNet2輕量化模塊改進(jìn)主干網(wǎng)絡(luò),大幅降低了參數(shù)量與計算力。在FPN模塊添加上下文抽取和注意力機(jī)制來增強(qiáng)上下文表達(dá)和特征信息傳遞。在神經(jīng)元上使用PreLu激活函數(shù)來解決訓(xùn)練中神經(jīng)元崩壞的問題。
改進(jìn)后的算法檢測精度提高,同時壓縮模型,降低硬件要求,能夠?qū)崿F(xiàn)工業(yè)小型計算機(jī)系統(tǒng)對PCB板實時檢測需求。由于樣本容量有限,一些缺陷類別訓(xùn)練樣本較少,存在少量正常線路誤檢的問題,后續(xù)將會擴(kuò)展缺陷樣本、繼續(xù)優(yōu)化算法,完善對更多小目標(biāo)缺陷的檢測識別。