產(chǎn)世兵,劉寧鐘,沈家全
(南京航空航天大學(xué) 計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院,江蘇 南京 211106)
近年來電子工業(yè)技術(shù)發(fā)展迅速,PCB(printed circuit board)電路板從簡(jiǎn)單板向現(xiàn)在的高密度、高精度、多層化和多樣化板方向發(fā)展。同時(shí),在體積縮小、性能提高、污染減少、品種增多等方面也在不斷進(jìn)步,這些使得電路板在未來還會(huì)保持強(qiáng)大的市場(chǎng)潛力以及生命力。
目前大多數(shù)工業(yè)流水線上都是由人工配合機(jī)器進(jìn)行生產(chǎn),這種生產(chǎn)方式可能會(huì)因?yàn)槿祟惖囊曈X疲勞等因素,造成電路板上出現(xiàn)一些缺陷,例如元器件誤插和漏插等問題。但是,在嚴(yán)密的工業(yè)和國(guó)防應(yīng)用的領(lǐng)域中,為了實(shí)現(xiàn)信息化和智能化的要求,需要大量的PCB電路板,這種精密的部件不能容忍半點(diǎn)差錯(cuò),否則會(huì)導(dǎo)致系統(tǒng)運(yùn)行不暢甚至是無法運(yùn)行。所以,在PCB電路板投入使用之前必須對(duì)其進(jìn)行缺陷檢測(cè)。
對(duì)于PCB電路板的傳統(tǒng)檢測(cè)方式有人工檢測(cè)和自動(dòng)光學(xué)設(shè)備檢測(cè)等。PCB電路板作為大批量生產(chǎn)的產(chǎn)品,需要一種與之契合的快速的、高效的檢測(cè)方式。隨著制造技術(shù)的高速發(fā)展,傳統(tǒng)的檢測(cè)方式根本無法滿足生產(chǎn)的高效性要求。為了提高元器件檢測(cè)的準(zhǔn)確度和速度,該文提出了一個(gè)輕量級(jí)的目標(biāo)檢測(cè)網(wǎng)絡(luò),實(shí)現(xiàn)了對(duì)PCB電路板元器件的快速識(shí)別與精確定位。
自動(dòng)光學(xué)檢測(cè)設(shè)備[1],用于在生產(chǎn)過程中對(duì)PCB板的品質(zhì)檢測(cè)。自動(dòng)光學(xué)檢測(cè)設(shè)備集光學(xué)、精密機(jī)械、識(shí)別診斷算法和計(jì)算機(jī)技術(shù)于一體。檢測(cè)時(shí),設(shè)備通過電荷耦合器件或激光自動(dòng)掃描PCB,采集圖像后,利用計(jì)算機(jī)處理,再與數(shù)據(jù)庫中的標(biāo)準(zhǔn)數(shù)據(jù)進(jìn)行對(duì)比,檢測(cè)出PCB板上的缺陷。盡管自動(dòng)光學(xué)檢測(cè)能夠解決人類檢測(cè)的一些弊端,但是該技術(shù)的可靠性仍然不夠,嚴(yán)重依賴于計(jì)算機(jī)圖像處理技術(shù),如果圖像處理算法不夠有效,將導(dǎo)致誤判。
在機(jī)器視覺方面,主要包括傳統(tǒng)的圖像檢測(cè)算法和基于深度學(xué)習(xí)的目標(biāo)檢測(cè)算法。傳統(tǒng)的圖像檢測(cè)算法主要包括圖像預(yù)處理、特征提取、ROI提取[2]等步驟,實(shí)現(xiàn)待檢測(cè)元器件的提取。圖像預(yù)處理是對(duì)圖像進(jìn)行灰度化、增強(qiáng)和平滑的處理;特征提取是利用Harris[3]算子的角點(diǎn)檢測(cè)算法來提取角點(diǎn);ROI提取是一種根據(jù)角點(diǎn)坐標(biāo)確定ROI區(qū)域的方法,能提取出待檢測(cè)元器件所在區(qū)域的圖像。
深度學(xué)習(xí)作為計(jì)算機(jī)科學(xué)研究領(lǐng)域的一個(gè)熱點(diǎn),受到了學(xué)術(shù)界和工業(yè)界的廣泛關(guān)注,并取得了一系列顯著的成果,近年來,深度神經(jīng)網(wǎng)絡(luò)在目標(biāo)檢測(cè)領(lǐng)域表現(xiàn)出了巨大的優(yōu)勢(shì)。
近年來,一系列基于深度卷積神經(jīng)網(wǎng)絡(luò)的目標(biāo)檢測(cè)算法被開發(fā)出來,例如,F(xiàn)aster RCNN[4]、YOLO[5]、SSD[6]和RefineDet[7]。Faster RCNN采用區(qū)域建議網(wǎng)絡(luò)(RPN)從候選框中確定目標(biāo),然后通過分類定位來進(jìn)行分類。Faster RCNN是一種端到端的目標(biāo)檢測(cè)方法,實(shí)現(xiàn)了接近實(shí)時(shí)的速率和最優(yōu)的性能。在YOLO中,目標(biāo)檢測(cè)任務(wù)被視為回歸任務(wù),邊界框的坐標(biāo)和框中包含的目標(biāo)的置信度以及各個(gè)類別的概率都是直接從整個(gè)圖像的所有像素獲得。使用YOLO,每個(gè)圖像只需要“瞥一眼”就可以知道圖像中包含的目標(biāo)類別以及位置分布。SSD在整個(gè)圖像上采用了多尺度的局部特征回歸,在保持快速檢測(cè)的同時(shí)保證高精確度。在RefineDet中,它在檢測(cè)框架中引入了傳輸連接塊和對(duì)象檢測(cè)模塊,可以在保持高效率的同時(shí)提高精度。
這些基于深度卷積神經(jīng)網(wǎng)絡(luò)的檢測(cè)模型已經(jīng)實(shí)現(xiàn)了很高的檢測(cè)精度。但是,深度卷積模型附帶大量參數(shù),并且會(huì)產(chǎn)生大量計(jì)算成本,從而無法有效地進(jìn)行實(shí)時(shí)檢測(cè)。由于處理資源有限,因此將CNNs用于實(shí)時(shí)應(yīng)用需要高效的計(jì)算方法。最近,在學(xué)術(shù)界出現(xiàn)了大量的輕量級(jí)網(wǎng)絡(luò),例如GoogleNet[8]、MobileNet-v2[9]、ShuffleNets[10-11]、PeleeNet[12]和Xception[13]。與CNNs相比,它們都具有較低的計(jì)算成本,同時(shí)保持了相近的甚至更高的精確度。ShuffleNet-v1[10]使用逐點(diǎn)分組卷積和通道混合的方式來減少計(jì)算成本,與使用Faster RCNN檢測(cè)算法的MobileNet-v2相比,具有優(yōu)越的性能。ShuffleNet-v2[11]提出了輕量級(jí)網(wǎng)絡(luò)的四個(gè)設(shè)計(jì)標(biāo)準(zhǔn)。根據(jù)這些設(shè)計(jì),作者指出了ShuffleNet-v1的一些缺點(diǎn),并在此基礎(chǔ)上進(jìn)行了改進(jìn)。在PeleeNet中,作者提出了DenseNet[14]體系結(jié)構(gòu)的一種變體,稱為PeleeNet,它改用傳統(tǒng)的卷積運(yùn)算方式,該模型旨在滿足對(duì)內(nèi)存和計(jì)算預(yù)算上的嚴(yán)格約束。
該文提出的基于Faster R-CNN和PeleeNet網(wǎng)絡(luò)結(jié)合實(shí)現(xiàn)的輕量級(jí)小目標(biāo)檢測(cè)網(wǎng)絡(luò),可以用于快速準(zhǔn)確地定位PCB電路板上的元器件并且進(jìn)行準(zhǔn)確識(shí)別。
受PeleeNet和Faster RCNN的啟發(fā),建立了一個(gè)用于小目標(biāo)檢測(cè)的輕量級(jí)網(wǎng)絡(luò),該網(wǎng)絡(luò)可以有效地從小目標(biāo)中提取特征,同時(shí)減小網(wǎng)絡(luò)開銷。輕量級(jí)小目標(biāo)檢測(cè)網(wǎng)絡(luò)總體結(jié)構(gòu)如圖1所示,該結(jié)構(gòu)一共包含五個(gè)階段。前四個(gè)階段是特征提取網(wǎng)絡(luò),不同于原本的PeleeNet結(jié)構(gòu),舍棄了原文結(jié)構(gòu)的最后一個(gè)階段,并且舍棄了階段3的平均池化層,獲得一個(gè)256維的特征圖用于區(qū)域建議網(wǎng)絡(luò)和ROI Pooling。
圖1 網(wǎng)絡(luò)結(jié)構(gòu)
PeleeNet是一種輕量型的卷積神經(jīng)網(wǎng)絡(luò),如圖2所示,它主要由兩種結(jié)構(gòu)組成:stem block和dense block。stem block結(jié)構(gòu),在增加很少的額外計(jì)算量的前提下,增強(qiáng)了網(wǎng)絡(luò)的特征表達(dá)能力,使特征圖的語義信息更加豐富。它利用雙通道的方式進(jìn)行特征提取并進(jìn)行融合。不同于原始的stem block結(jié)構(gòu),該文首先在max pool前添加一個(gè)1×1 conv層,這是因?yàn)樵谠缴畹木W(wǎng)絡(luò)層中語義信息更加抽象,感受野更大,普通的3×3卷積核無法提取小物體的特征,使用1×1卷積核來提取特征,該特征具有相對(duì)較小的感受野,在深層網(wǎng)絡(luò)對(duì)提取小目標(biāo)特征有利。而且1×1卷積核執(zhí)行非線性運(yùn)算,可以大大提高模型的非線性特征表達(dá)能力。另一個(gè)通道使用1×1大小和3×3大小的卷積核來提取特征,然后對(duì)兩個(gè)通道進(jìn)行融合。其中,3×3卷積核在小物體特征提取的初始階段具有較大的視野,可以減少特征提取初始階段的信息丟失。
圖2 PeleeNet
其次,受到shuffleNet-v2的啟發(fā),相同的網(wǎng)絡(luò)結(jié)構(gòu),卷積層的輸入輸出通道數(shù)會(huì)大大影響模型的速度。假設(shè)一個(gè)1×1卷積層的輸入特征通道數(shù)是c1,輸出特征尺寸是h和w,輸出特征通道數(shù)是c2,那么經(jīng)過1×1卷積層的浮點(diǎn)計(jì)算量(float-point operations,F(xiàn)LOPs)的公式如下:
FLOPs=hwc1c2
(1)
接下來計(jì)算內(nèi)存訪問消耗時(shí)間(memory access cost,MAC),經(jīng)過1×1的卷積后,輸入和輸出的特征的尺寸大小并不變化,那么計(jì)算公式如下:
MAC=hw(c1+c2)+c1c2
(2)
根據(jù)均值不等式,可以得到式(3):
(3)
把式(1)和式(2)代入式(3),可以得到(c1-c2)2≥0,該等式的成立條件是c1=c2,也就是輸入輸出特征通道數(shù)相等時(shí),在FLOPs給定的前提下,MAC可以達(dá)到最小值。shuffleNet-v2通過實(shí)驗(yàn)證明輸入輸出特征通道數(shù)相同時(shí),模型的檢測(cè)速度最快。這也就表明了輸入輸出通道數(shù)相同時(shí),內(nèi)存訪問消耗時(shí)間最小,模型的速度最快。所以為了提升模型的檢測(cè)速度,分別統(tǒng)一了stem block和dense layer中的輸入輸出特征通道數(shù)。
最后,在PeleeNet中,作者結(jié)合SSD構(gòu)建目標(biāo)檢測(cè)網(wǎng)絡(luò),但是SSD在小目標(biāo)檢測(cè)中表現(xiàn)并不好,所以該文結(jié)合Faster RCNN構(gòu)建目標(biāo)檢測(cè)網(wǎng)絡(luò)。在原始的Faster RCNN中,作者利用ROI Pooling層使生成的候選框映射成固定大小的特征圖。但是,ROI Pooling會(huì)使小目標(biāo)在pooling之后導(dǎo)致物體結(jié)構(gòu)失真,會(huì)影響后層的目標(biāo)框的回歸定位,對(duì)于大目標(biāo)的檢測(cè)準(zhǔn)確率影響不大,但對(duì)小目標(biāo)的影響很大。為了解決小目標(biāo)在ROI Pooling時(shí)結(jié)構(gòu)失真的問題,受SINet[15]的啟發(fā),使用Context-Aware ROI Pooling代替原文中的ROI Pooling層。如圖3所示,分別為原文ROI Pooling和CAROI Pooling的結(jié)果,其中(1)為原圖;(2)為原圖的建議區(qū)域;(3)為ROI Pooling的結(jié)果,會(huì)有重影;(4)為CAROI Pooling的結(jié)果,沒有重影。
圖3 ROI Pooling和CAROI Pooling的結(jié)果
該文使用Context-Aware ROI Pooling代替ROI Pooling層,解決了Pooling后物體失真的問題,明顯提升了小目標(biāo)檢測(cè)的精度。
RPN區(qū)域建議網(wǎng)絡(luò)將優(yōu)化的PeleeNet網(wǎng)絡(luò)提取的特征圖作為輸入,文中特征圖大小為原圖大小的1/16,輸出為一系列的建議框,每個(gè)建議框都有得分。為了生成區(qū)域建議框,通過3×3的窗口在特征圖上滑動(dòng),每個(gè)窗口都映射到256維的特征向量,然后對(duì)特征向量進(jìn)行目標(biāo)分類和回歸。如圖4所示,每個(gè)滑動(dòng)窗口都預(yù)測(cè)9個(gè)不同長(zhǎng)寬比例和尺度的建議框。
圖4 RPN層
在Faster RCNN原文中,特征圖的大小為原圖大小的1/32,也就是特征圖上的每個(gè)點(diǎn)對(duì)應(yīng)原圖上的32×32個(gè)像素點(diǎn),原文采用的建議框比例和尺度分別為(0.5,1,2)和(8,16,32),建議框映射到原圖上的大小也就是(256,512,1 024)。該文前面提到了用作RPN網(wǎng)絡(luò)輸入的特征圖大小為原圖大小的1/16,所以將建議框的尺度改為(16,32,64),映射到原圖上的大小為(256,512,1 024)。但是這樣的建議框的大小用在文中的數(shù)據(jù)集上并不合適,根據(jù)先驗(yàn)知識(shí)和實(shí)驗(yàn)表明,文中的數(shù)據(jù)集最適合的建議框的比例和尺度為(0.5,1,2)和(8,16,32),映射到原圖上的大小為(128,256,512)。
在使用ImageNet與訓(xùn)練模型初始化文中的網(wǎng)絡(luò)時(shí),實(shí)驗(yàn)結(jié)果表現(xiàn)并不好,這是由于ImageNet數(shù)據(jù)分布和文中的PCB板元器件數(shù)據(jù)集分布完全不同,差異較大。所以在網(wǎng)絡(luò)初始化時(shí),利用Kaiming[16]初始化方式,實(shí)驗(yàn)結(jié)果表明效果很好。
在訓(xùn)練時(shí),模型的迭代次數(shù)為300 k,區(qū)域建議網(wǎng)絡(luò)的批量大小為256,在每次迭代中,模型都會(huì)預(yù)測(cè)建議框的類別和邊界框。然后將預(yù)測(cè)框Bp與真實(shí)框Bg的交并比大于0.7的作為正樣本,將交并比小于0.3的作為負(fù)樣本,拋棄交并比在0.3~0.7之間的樣本,并且保證正負(fù)樣本的數(shù)量比例為1∶1。IOU的定義如下:
(4)
其中,area(Bp∩Bg)表示Bp與Bg的交集,area(Bp∪Bg)表示Bp與Bg的并集。
將所有的正樣本和負(fù)樣本都輸入到損失函數(shù)中。另外使用多任務(wù)損失函數(shù)來訓(xùn)練網(wǎng)絡(luò),其目的是使得分類和定位的誤差最小。多任務(wù)損失函數(shù)定義如下:
L(pi,loci)=Lcls+λLreg
(5)
其中,i表示每個(gè)迭代中預(yù)測(cè)框的索引,Lcls是分類的softmax損失函數(shù),Lreg是預(yù)測(cè)框的回歸損失函數(shù),使用的是smoothL1損失。Ncls和Nreg分別表示每個(gè)迭代批次的圖片區(qū)域的個(gè)數(shù)和預(yù)測(cè)框的數(shù)量。在這里,設(shè)置λ=2,是為了使Lcls和Lreg的權(quán)重一樣。損失函數(shù)定義如下:
(6)
該網(wǎng)絡(luò)模型通過隨機(jī)梯度下降來訓(xùn)練。在訓(xùn)練階段,使用0.000 1的權(quán)重衰減和0.9的動(dòng)量。對(duì)于前100k迭代,學(xué)習(xí)率設(shè)置為0.001,對(duì)于接下來的200k迭代,學(xué)習(xí)率設(shè)置為0.000 1。RPN批量大小設(shè)置為256。為了抑制冗余框,基于置信度得分對(duì)建議框采用了非極大值抑制算法。
在該數(shù)據(jù)集中具有很多小目標(biāo),小目標(biāo)大小占據(jù)整個(gè)圖片的比例很小,難以檢測(cè)。小目標(biāo)難以檢測(cè)的原因包括:分辨率低,圖像模糊,攜帶的信息少。由此導(dǎo)致特征表達(dá)能力弱,也就是在提取特征的過程中,能提取到的特征非常少,這不利于對(duì)小目標(biāo)的檢測(cè)。在MS COCO數(shù)據(jù)集中,對(duì)小目標(biāo)、中目標(biāo)和大目標(biāo)的定義如表1所示。
表1 MS COCO小、中、大目標(biāo)的定義
為了解決小目標(biāo)檢測(cè)精度不高的問題,在小目標(biāo)數(shù)據(jù)集上做出了兩點(diǎn)改進(jìn)。第一點(diǎn),通過對(duì)包含小目標(biāo)的圖像進(jìn)行oversampling操作。第二點(diǎn),通過在每個(gè)包含小目標(biāo)的圖像中多次復(fù)制粘貼小目標(biāo)來處理,復(fù)制目標(biāo)時(shí),確保不會(huì)和已經(jīng)存在的目標(biāo)有任何交疊。這增加了小目標(biāo)位置的多樣性,同時(shí)確保這些目標(biāo)出現(xiàn)在正確的上下文中。
該數(shù)據(jù)集是從PCB板生產(chǎn)線上通過高精度相機(jī)拍照而得到的,一般為CCD相機(jī)或者是CMOS相機(jī)。原圖大小為2 048×2 048的分辨率,為了獲取更多小目標(biāo)的特征信息,將原圖切割成1 024×1 024大小的圖片作為訓(xùn)練集。但是,PCB的數(shù)據(jù)集很難獲取,能獲取到的數(shù)據(jù)量很少,很難滿足本章提出的網(wǎng)絡(luò)訓(xùn)練達(dá)到收斂的需求,并且容易出現(xiàn)過擬合的狀況。為了解決訓(xùn)練時(shí)所需的數(shù)據(jù)量,采用深度學(xué)習(xí)中數(shù)據(jù)增廣的方式來增加訓(xùn)練數(shù)據(jù)集,讓數(shù)據(jù)集盡可能多樣化,使得訓(xùn)練的模型具有更強(qiáng)的泛化能力。
使用的數(shù)據(jù)增廣的方法主要包括:水平或垂直翻轉(zhuǎn),旋轉(zhuǎn),縮放,裁剪,平移,對(duì)比度調(diào)整,色彩抖動(dòng)和添加噪聲等。經(jīng)過數(shù)據(jù)增廣過后的數(shù)據(jù)集,用作訓(xùn)練數(shù)據(jù)的有20 664張,用作測(cè)試數(shù)據(jù)的一共有3 036張。數(shù)據(jù)集一共包含元器件11類,總的分為電容、芯片、電阻、三極管和二極管五個(gè)大類,每個(gè)大類下有若干個(gè)小類,其中小目標(biāo)類為第7類,它們的最大尺寸不超過32×32。
這部分將在提供的數(shù)據(jù)集上測(cè)試結(jié)果。同時(shí),對(duì)提出的模型性能進(jìn)行分析,并與其他方法進(jìn)行了比較。實(shí)驗(yàn)環(huán)境為基于Caffe深度學(xué)習(xí)框架,CPU為i7-8700k,顯卡為RTX 2080 Ti 11 GB顯存,物理內(nèi)存為16 GB,操作系統(tǒng)為Ubuntu 16.04。
在該模型中,使用廣泛應(yīng)用的召回率、準(zhǔn)確率和mAP標(biāo)準(zhǔn)來評(píng)估性能。召回率表示總樣本中有多少個(gè)正例被分為正例,定義為:
(7)
準(zhǔn)確率表示被分為正例的目標(biāo)中實(shí)際為正例的比率,定義為:
(8)
其中,TP表示將正樣本預(yù)測(cè)為正的數(shù)量,F(xiàn)P表示將負(fù)樣本預(yù)測(cè)為正的數(shù)量,F(xiàn)N表示將正樣本預(yù)測(cè)為負(fù)的數(shù)量。
平均均值精度mAP是反映整體性能的檢測(cè)指標(biāo),定義為:
(9)
如表2所示,通過消融實(shí)驗(yàn)表現(xiàn)了模型各個(gè)部分的重要性,統(tǒng)一通道數(shù)可以很大提升檢測(cè)速度,其他各個(gè)組件對(duì)mAP的提高有不錯(cuò)的效果。
表2 各個(gè)組件的表現(xiàn)
實(shí)驗(yàn)結(jié)果如表3所示,在該數(shù)據(jù)集上運(yùn)行了VGG16[17]模型、ResNet50[18]模型以及文中利用PeleeNet改進(jìn)后的模型。
表3 實(shí)驗(yàn)結(jié)果對(duì)比
通過表中數(shù)據(jù)對(duì)比可以看到,文中模型在保證mAP沒有多少降低的前提下,在速度上有很大的提升。同時(shí),在小目標(biāo)的檢測(cè)精度上也有不錯(cuò)的結(jié)果。部分實(shí)驗(yàn)結(jié)果如圖5所示。
圖5 檢測(cè)結(jié)果
基于PeleeNet網(wǎng)絡(luò)和Faster RCNN目標(biāo)檢測(cè)模型設(shè)計(jì)了一個(gè)輕量級(jí)卷積神經(jīng)網(wǎng)絡(luò)檢測(cè)模型,該模型在PCB板元器件數(shù)據(jù)集上具有較好的精度和較高的速度。
該檢測(cè)模型在PeleeNet的基礎(chǔ)上改變stem block的結(jié)構(gòu),統(tǒng)一通道數(shù)量,并且結(jié)合Faster RCNN和CAROI Pooling,同時(shí)通過先驗(yàn)知識(shí)設(shè)計(jì)了anchor box的大小來提高檢測(cè)速度和保持檢測(cè)精度。實(shí)驗(yàn)結(jié)果表明,該檢測(cè)模型在PCB板元器件檢測(cè)上有很好的效果。
在小目標(biāo)的問題上,對(duì)小目標(biāo)數(shù)據(jù)集進(jìn)行了增廣,提升了小目標(biāo)的檢測(cè)精度。但是,該檢測(cè)模型仍然存在一些缺陷。例如,雖然模型速度有提高,但提高的幅度不夠大,而且精度也有下降。在以后的工作中,將把工作重心放在提升模型速度和精度上。