李 聞, 李小春, 閆昊雷
(空軍工程大學(xué)信息與導(dǎo)航學(xué)院,西安 710000)
現(xiàn)在絕大多數(shù)印刷電路板(PCB)存在著設(shè)計(jì)或制作的缺陷,從而導(dǎo)致電子設(shè)備無法正常運(yùn)行,因此快速而又準(zhǔn)確地檢測出PCB板中的缺陷成為了近些年的研究熱點(diǎn)。
PCB缺陷檢測可以分為兩大類:傳統(tǒng)的PCB缺陷檢測和基于深度學(xué)習(xí)的PCB缺陷檢測。傳統(tǒng)的PCB缺陷檢測存在著檢測效率低、檢耗時間長、誤檢率高且受人為主觀因素影響大等問題,極大地降低了企業(yè)的產(chǎn)能,無法滿足現(xiàn)代化印刷電路板檢測的需求。而基于深度學(xué)習(xí)的PCB缺陷檢測主要以實(shí)現(xiàn)自動光學(xué)檢測(Automated Optical Inspection,AOI)[1]為目標(biāo),要求深度學(xué)習(xí)網(wǎng)絡(luò)可以準(zhǔn)確且快速地從圖像中識別出目標(biāo)。其中較為成熟的算法可以分為兩大類。一類是以R-CNN[2],F(xiàn)ast R-CNN[3]和Faster R-CNN[4]等為代表的基于區(qū)域提名的兩階段目標(biāo)檢測算法,例如HU等[5]在Faster R-CNN中提出了一種改進(jìn)的特征金字塔架構(gòu),有效地利用了深層特征圖的語義信息,但是卻沒有充分地利用淺層特征圖的信息,導(dǎo)致PCB缺陷定位不準(zhǔn)確;TSAI等[6]提出基于CNN的模型并結(jié)合支持向量回歸(SVR)實(shí)現(xiàn)了對漏焊的檢測。另一類是以SSD[7]和YOLO[8-11]系列網(wǎng)絡(luò)為代表的基于回歸方法的目標(biāo)檢測算法。例如文獻(xiàn)[12]采用密集連接網(wǎng)絡(luò)(DenseNet)結(jié)構(gòu)代替YOLO v3的原有網(wǎng)絡(luò)結(jié)構(gòu),提高特征提取能力,并增大網(wǎng)絡(luò)預(yù)測尺度,提高對于小尺寸缺陷的檢測能力;LI 等[13]將Faster R-CNN與YOLO v2進(jìn)行融合,實(shí)現(xiàn)了對橋連、漏焊等6種焊接問題的檢測。但是以上這些方法不能很好地兼顧檢測精度和檢測速度,而且這些檢測方法不適用于一些尺寸較小的缺陷檢測,同時最新的YOLO v4和YOLO v5算法由于采用過多的模塊進(jìn)行堆疊,不容易集成到工業(yè)檢測的設(shè)備中。所以,為了提高對PCB板上尺寸較小的缺陷目標(biāo)的檢測精度和速度,本文通過對聚類算法和網(wǎng)絡(luò)模型進(jìn)行改進(jìn),提出了一種改進(jìn)的YOLO v3網(wǎng)絡(luò)的PCB缺陷檢測方法。
YOLO v3網(wǎng)絡(luò)是在YOLO v1網(wǎng)絡(luò)和YOLO v2網(wǎng)絡(luò)基礎(chǔ)上改進(jìn)而來的,具體來講,YOLO v3網(wǎng)絡(luò)由基礎(chǔ)骨干網(wǎng)絡(luò)Darknet 53和檢測網(wǎng)絡(luò)兩部分組成。Darknet-53由5個殘差塊構(gòu)成,借鑒了殘差神經(jīng)網(wǎng)絡(luò)的思想。每個殘差塊由多個殘差單元構(gòu)成,通過輸入與兩個數(shù)碼累積造型(DBL)單元進(jìn)行殘差操作,構(gòu)建殘差單元。其中,DBL單元是YOLO v3的基本構(gòu)成單元,包括卷積、批歸一化(BN)和Leaky ReLU激活函數(shù)。
在檢測網(wǎng)絡(luò)中,YOLO v3對輸入圖像上采樣和融合操作,分別通過8×8,16×16 和32×32這3個不同尺度的融合特征圖對目標(biāo)進(jìn)行獨(dú)立檢測,其中,深層特征圖提供豐富的語義信息,淺層特征圖提供待檢測目標(biāo)的位置信息,使YOLO v3網(wǎng)絡(luò)既可以檢測大目標(biāo),也可以檢測小目標(biāo)。
同時,YOLO v3網(wǎng)絡(luò)借鑒Faster R-CNN網(wǎng)絡(luò)和SSD網(wǎng)絡(luò)中的Anchor Boxes思想,通過k-means聚類算法對所有真實(shí)目標(biāo)框的長寬進(jìn)行聚類分析,得到了9個Anchor Boxes。
由于本文數(shù)據(jù)集PCB缺陷檢測數(shù)據(jù)集中的目標(biāo)均為小目標(biāo),而原網(wǎng)絡(luò)采用的聚類算法與網(wǎng)絡(luò)結(jié)構(gòu)均不適用于本文的研究對象,因此,本文針對以上兩點(diǎn)進(jìn)行改進(jìn)。
原YOLO v3利用k-means聚類算法獲得適用于COCO數(shù)據(jù)集的Anchor Boxes,但并不適用于本文數(shù)據(jù)集,而且k-means聚類算法在聚類迭代的過程中采用歐氏距離、曼哈頓距離等作為相似性指標(biāo)存在很大的問題,且k值的選擇具有非常大的主觀性[14],同時,由于圖像在采集過程中不可避免地會出現(xiàn)異常點(diǎn),它們遠(yuǎn)離數(shù)據(jù)的樣本空間,而k-means聚類算法會將這些異常點(diǎn)參與到聚類中心的計(jì)算中,導(dǎo)致聚類結(jié)果出現(xiàn)嚴(yán)重偏差[15]。因此,本文首先采用DBSCAN聚類算法分析聚類包含的點(diǎn)以及聚類個數(shù),解決孤立點(diǎn)對聚類結(jié)果的影響,并為k-means聚類算法自適應(yīng)地確定k值;然后再采用自定義距離公式的k-means聚類算法來確定聚類中心,即
D(X,Y)=1-IOU(X,Y)
(1)
式中:X為真實(shí)的目標(biāo)框;Y為聚類框大?。籌OU(X,Y)為目標(biāo)的中心框與聚類框之間的交并比。
最終通過DBSCAN聚類算法確定k-means聚類算法中k的最大值為9,最終聚類結(jié)果如圖1所示,圖中,星號表示異常點(diǎn)。
圖1 聚類結(jié)果分析Fig.1 Analysis of clustering results
由圖1可以發(fā)現(xiàn),本文的聚類算法忽略了異常點(diǎn),擁有更好的聚類中心。但是本文數(shù)據(jù)集的Anchor Boxes較為密集且尺寸較小,雖然一般來說Anchor Boxes數(shù)量越多,預(yù)測效果越好,但是會導(dǎo)致計(jì)算量增大以及Anchor Boxes冗余,因此,本文采用重疊度Avg IOU(平均交并比)進(jìn)一步分析,從而選取更適合本文數(shù)據(jù)集的Anchor Boxes。其中,Avg IOU計(jì)算方法為
(2)
式中:n為樣本的總數(shù);k為樣本聚類中心的總數(shù);ni為第i個聚類中心的樣本數(shù)。
其次,培訓(xùn)組的編制太少,極大影響培訓(xùn)效果。目前,B公司東北營銷區(qū)域的培訓(xùn)組僅有2名培訓(xùn)人員,而目前正常運(yùn)營的經(jīng)銷商合計(jì)100余個,在此種情況下,培訓(xùn)組人員必然無法針對所有的經(jīng)銷商進(jìn)行兼顧,雖然有兼職內(nèi)訓(xùn)師,但在工作節(jié)奏越來越快、工作壓力越來越大的大環(huán)境下,對于培訓(xùn)工作,兼職內(nèi)訓(xùn)師也多是應(yīng)付了事。
然后令k取值1~9,分別對數(shù)據(jù)集中樣本進(jìn)行上述的聚類分析,其結(jié)果如圖2所示??梢钥闯?,隨著k值增加,平均交并比的值雖然越來越高,但是最終曲線逐漸趨于平穩(wěn),而且曲線在k=9處的函數(shù)值和k=3處的函數(shù)值相差不大,且考慮到本文數(shù)據(jù)集中的目標(biāo)均為小目標(biāo),因此選擇了3個聚類中心,分別為(8,14),(13,14),(10,18)。
圖2 Avg IOU結(jié)果Fig.2 Analysis of Avg IOU
2.2.1 SE Block模塊
由于原網(wǎng)絡(luò)在特征提取時將每一層提取的特征圖的特征通道視為同等重要,并沒有考慮到不同特征通道對待檢測目標(biāo)的重要程度不同,因此本文引入了SE Block模塊[16],其目的是通過學(xué)習(xí)一組權(quán)重值來表示每個特征通道的重要程度,并按照權(quán)重值的大小將特征通道進(jìn)行重新排列,從而突出了那些有用的特征通道,并削弱用處不大的特征通道。具體結(jié)構(gòu)如圖3所示。
圖3 SE Block結(jié)構(gòu)圖Fig.3 Structure of SE Block
圖中,第1個模塊為壓縮(Squeeze)模塊,該模塊在特征圖上順著空間維度來進(jìn)行特征壓縮,將每個維度大小為w×h的二維特征通道變成一個實(shí)數(shù)zc,該實(shí)數(shù)在某種程度上具有尺度為w×h大小的全局感受野,然后再將所有實(shí)數(shù)組合,得到一個1×1×c的特征向量,即
(3)
第2個模塊是激勵(Excitation)模塊,該模塊將壓縮模塊得到的1×1×c向量,經(jīng)過一系列指定的操作后得到尺寸為1×1×c大小的每個特征通道的重要性權(quán)重值。需要注意的是在該映射過程中,并非直接將兩個向量進(jìn)行連接,而是先通過全連接的方式進(jìn)行一個c/r的降維操作,再通過ReLU函數(shù)進(jìn)行特征映射,然后通過全連接的方式從c/r恢復(fù)成c大小,最后使用sigmoid激活函數(shù)來得到其重要性權(quán)重值。通過乘法將確定的每個通道的重要性權(quán)值分別加權(quán)到每個通道中。
2.2.2 多尺度特征融合結(jié)構(gòu)設(shè)計(jì)
上文中SE Block模塊只是針對每個尺度特征通道的重新標(biāo)定及排列,接下來將通過設(shè)計(jì)多尺度特征融合來提高對PCB缺陷檢測的性能。淺層特征圖擁有更多目標(biāo)細(xì)節(jié)信息,更利于小目標(biāo)的定位;而深層特征圖擁有較大的感受野以及豐富的語義信息,能提高小目標(biāo)的檢測精度,其中不同層級的特征圖可視化對比見圖4。
圖4 不同層級的特征圖可視化Fig.4 Visualization of feature maps at different levels
圖4(a)是截取的擁有缺失孔缺陷的圖像,圖4(b)為經(jīng)過第2個卷積模塊得到的特征圖。圖4(c)為經(jīng)過第5個卷積模塊得到的特征圖。可以很明顯地看出,淺層特征圖相對深層特征圖有更多的細(xì)節(jié)信息,特征也更加明顯,但是如果只利用淺層特征會導(dǎo)致檢測精度不高。因此,為了使網(wǎng)絡(luò)能夠充分利用淺層特征和深層語義信息,本文首先在第2個殘差模塊中增加了2個殘差單元,從而獲取了更多的淺層特征;其次將SE Block模塊輸出的重新標(biāo)定后的特征圖首先依次進(jìn)行卷積核上采樣操作;然后通過特征通道權(quán)重值的大小,采用依序進(jìn)行特征通道的對位相加(Add)代替原網(wǎng)絡(luò)中連接的特征融合方式,這是因?yàn)閷ξ幌嗉拥娜诤戏绞娇梢栽黾用恳痪S的信息量,同時使網(wǎng)絡(luò)加強(qiáng)了對檢測任務(wù)有用特征通道的利用,減少了參數(shù)量,特征融合的整體結(jié)構(gòu)如圖5所示。
圖5 多尺度特征融合結(jié)構(gòu)圖Fig.5 Structure diagram of multi-scale feature fusion
圖6 改進(jìn)后的特征圖Fig.6 The improved feature map
從圖中可以看出,缺失孔缺陷表達(dá)能力更強(qiáng),細(xì)節(jié)信息更加豐富。為了獲取更多小目標(biāo)的特征信息,將輸出層前包含的6個DBL單元和1個1×1卷積核單元,改為2個DBL單元以及2個殘差單元,其中,殘差單元增強(qiáng)了網(wǎng)絡(luò)對小目標(biāo)特征的表達(dá)能力,而DBL單元解決了梯度消失的問題。
本文進(jìn)行的實(shí)驗(yàn)是在Ubuntu18.04操作系統(tǒng)下配置的。實(shí)驗(yàn)采用的硬件配置為:中央處理器Intel(R) Core(TM)i9-9900CPU @2.30 GHz;圖形處理器NVIDIA GeForce RTX 2080Ti,使用的開發(fā)框架為Tensorflow。
3.1數(shù)據(jù)集
本文中采用的PCB缺陷數(shù)據(jù)集包含693張圖像,6種缺陷:缺失孔(Missing hole)、鼠標(biāo)咬傷(mouse bite)、開路(open circuit)、短路(short circuit)、毛刺(spur)、偽銅(pseudo copper)。但是,由于該數(shù)據(jù)集的數(shù)據(jù)量太小,為了防止網(wǎng)絡(luò)陷入過擬合狀態(tài),因此本文將圖像進(jìn)行曝光度調(diào)整、水平翻轉(zhuǎn)等數(shù)據(jù)增強(qiáng)操作。最終數(shù)據(jù)按照訓(xùn)練集和測試集8∶1的比例隨機(jī)劃分,訓(xùn)練集包含9704張圖像,測試集包含1213張圖像。
本文在選擇經(jīng)過COCO預(yù)訓(xùn)練的YOLO v3算法權(quán)重的基礎(chǔ)上對超參數(shù)進(jìn)行了設(shè)定,整個訓(xùn)練過程分為100個epoch,動量為0.9,權(quán)重衰減系數(shù)為0.000 5,學(xué)習(xí)率設(shè)置為0.000 1,Batch_size設(shè)置為8,總迭代次數(shù)為33 820。整個訓(xùn)練過程的損失函數(shù)變化情況見圖7,最終經(jīng)過100個epoch迭代訓(xùn)練后網(wǎng)絡(luò)收斂至0.1,說明網(wǎng)絡(luò)訓(xùn)練的結(jié)果比較理想,可以進(jìn)行測試工作。
圖7 損失函數(shù)曲線Fig.7 Loss function curve
測試所用的評價指標(biāo)主要有:準(zhǔn)確率P、召回率R、平均精度均值mAP、檢測時間Time和加權(quán)調(diào)和平均值Fβ,β為1。
P=NTP/(NTP+NFP)
(4)
R=NTP/(NTP+NFN)
(5)
mAP=(∑AP)/M(class)
(6)
(7)
3.3.1 不同聚類算法實(shí)驗(yàn)結(jié)果分析
為了檢驗(yàn)本文的聚類算法是否有效,表1展示了采用不同聚類算法在不同網(wǎng)絡(luò)結(jié)構(gòu)下對PCB缺陷數(shù)據(jù)集上的檢測精度和檢測時間的對比。
表1 不同聚類算法的檢測精度和檢測時間對比Table 1 Comparison of different clustering algorithms on detection precision and speed
從表2中可以看出,在YOLO v3網(wǎng)絡(luò)基礎(chǔ)上,采用本文改進(jìn)的聚類算法,與DBSCAN+k-means聚類算法相比,平均精度均值提升了1.3%,檢測時間縮短了0.027 s;在改進(jìn)網(wǎng)絡(luò)結(jié)構(gòu)的基礎(chǔ)上,采用本文改進(jìn)的聚類算法,平均精度均值提升了1.5%,檢測時間縮短了0.019 s。由此可見,聚類算法的改進(jìn)能較好地提升平均精度均值,檢測速度也得到明顯提高,使缺陷檢測能力更強(qiáng)。圖8對不同聚類算法檢測結(jié)果進(jìn)行了更直觀的對比,采用DBSCAN+k-means聚類算法導(dǎo)致針對同一缺陷出現(xiàn)了兩個檢測框,這是Anchor Boxes的數(shù)量冗余導(dǎo)致的,而采用本文改進(jìn)聚類算法檢測的結(jié)果,不僅避免了重疊檢測,而且檢測的精度更高。
圖8 不同聚類算法檢測結(jié)果對比Fig.8 Detection results of different clustering algorithms
3.3.2 本文改進(jìn)網(wǎng)絡(luò)的實(shí)驗(yàn)分析
圖9展示了在改進(jìn)聚類算法的基礎(chǔ)上本文改進(jìn)網(wǎng)絡(luò)實(shí)驗(yàn)結(jié)果,可以發(fā)現(xiàn)原始的YOLO v3網(wǎng)絡(luò)只能檢測出原始圖像中的短路和缺失孔,而利用改進(jìn)的YOLO v3網(wǎng)絡(luò)結(jié)構(gòu)可以檢測出所有缺陷,可見,本文改進(jìn)的YOLO v3網(wǎng)絡(luò)結(jié)構(gòu)對各類缺陷小目標(biāo)檢測準(zhǔn)確率有了明顯改善。為了更直觀地說明本文檢測算法的優(yōu)越性,從檢測數(shù)據(jù)集中選擇了6種典型的缺陷,利用改進(jìn)前后的YOLO v3網(wǎng)絡(luò)結(jié)構(gòu)對檢測結(jié)果進(jìn)行放大對比(見圖10),發(fā)現(xiàn)原始的YOLO v3網(wǎng)絡(luò)無法檢測出開路、毛刺、鼠咬這3種缺陷,對短路的檢測仍出現(xiàn)了2種檢測框,同時,檢測框中出現(xiàn)了過多的背景信息,而采用本文改進(jìn)的YOLO v3網(wǎng)絡(luò)不僅能夠檢測出6種缺陷,而且減少了檢測框中出現(xiàn)的背景信息,檢測精度和定位精度都有明顯改善。
圖9 不同算法檢測結(jié)果對比圖Fig.9 Comparison of detection results of different algorithms
圖10 各類缺陷放大檢測結(jié)果Fig.10 Various defects amplification inspection results
為進(jìn)一步驗(yàn)證本文完整改進(jìn)方案相較原YOLO v3網(wǎng)絡(luò)的檢測性能,選取目標(biāo)檢測算法評價指標(biāo)中的準(zhǔn)確率P、召回率R和加權(quán)調(diào)和平均值F1,其中YOLO v3仍采用k-means聚類算法,其結(jié)果見表2。
表2 YOLO v3網(wǎng)絡(luò)改進(jìn)前后性能指標(biāo)對比Table 2 Performance indexes before and after YOLO v3 improvement
從表2中可以看出,相較于原始的YOLO v3網(wǎng)絡(luò),本文完整的改進(jìn)方案(聚類改進(jìn)+模型改進(jìn))在PCB缺陷數(shù)據(jù)集上的準(zhǔn)確率、召回率、加權(quán)調(diào)和平均值均有明顯提升,表明了本文改進(jìn)方案的有效性。
3.3.3 不同檢測網(wǎng)絡(luò)的實(shí)驗(yàn)分析
為了更全面地測評本文改進(jìn)的YOLO v3網(wǎng)絡(luò)的檢測性能,將本文算法與目前主流目標(biāo)檢測網(wǎng)絡(luò)Faster R-CNN,SSD,YOLO v3的檢測結(jié)果進(jìn)行對比實(shí)驗(yàn),數(shù)據(jù)集均采用本文選取的PCB缺陷數(shù)據(jù)集,并選取平均精度均值與對單張圖像的檢測時間兩項(xiàng)指標(biāo)對各算法進(jìn)行評價,實(shí)驗(yàn)結(jié)果如表3所示。
表3 不同目標(biāo)檢測算法結(jié)果對比Table 3 Inspection results of different algorithms
從表3中可以看出,相比分別以VGG16和ResNet-101為主干網(wǎng)絡(luò)的Faster R-CNN,本文完整的改進(jìn)方案在平均精度均值上分別提升了29%和6%,同時檢測時間也大幅度縮短。這主要是因?yàn)镕aster R-CNN的先驗(yàn)框是預(yù)先設(shè)定好的,無法調(diào)節(jié),造成先驗(yàn)框無法適配本文數(shù)據(jù)集中的缺陷小目標(biāo),且存在先驗(yàn)框冗余的現(xiàn)象,導(dǎo)致網(wǎng)絡(luò)檢測效果不理想以及檢測時間過長;典型的單階段目標(biāo)檢測算法SSD雖然在檢測精度上略低于兩階段目標(biāo)檢測算法Faster R-CNN,但是在檢測速度方面卻有著較大的提升;原始的YOLO v3網(wǎng)絡(luò)雖然在檢測時間上比本文完整的改進(jìn)方案縮短0.003 s,但是檢測精度明顯低于本文完整的改進(jìn)方案;與上面前3種算法檢測結(jié)果對比,本文完整的改進(jìn)方案在檢測精度和檢測速度上均得到較大提升。
針對目前通用的目標(biāo)檢測算法對PCB缺陷檢測的精度不高、效率低的問題,本文提出了一種基于改進(jìn)YOLO v3算法的PCB缺陷檢測方法。實(shí)驗(yàn)結(jié)果表明,相較于目前典型的其他幾種缺陷檢測網(wǎng)絡(luò),本文改進(jìn)算法對缺陷小目標(biāo)的準(zhǔn)確率和檢測效率均有明顯提高,且與改進(jìn)前的網(wǎng)絡(luò)相比,雖然檢測速度略有降低,但檢測精度明顯提升。因此,為滿足工業(yè)實(shí)時化檢測的要求,下一步將在優(yōu)化輕量型網(wǎng)絡(luò)結(jié)構(gòu)方面進(jìn)行探索研究,實(shí)現(xiàn)對PCB缺陷更加快速且精準(zhǔn)的檢測。