衛(wèi)誠琨,周俊,張嘉
(201620 上海市 上海工程技術(shù)大學(xué) 機(jī)械與汽車工程學(xué)院)
熱熔堆積(FDM)型3D 打印是目前最成熟、應(yīng)用最廣的增材制造技術(shù)之一,其原理是熱塑性絲狀材料由供絲機(jī)構(gòu)送至熱熔噴頭,并在噴頭中加熱和熔化成半液態(tài),然后被擠壓出來,驅(qū)使打印機(jī)頭按照讀取的G-code 代碼路徑移動,打印材料隨路徑擠出后凝固聯(lián)結(jié),經(jīng)層層堆積完成產(chǎn)品的制作[1]。
FDM 型3D 打印進(jìn)程中,會因打印參數(shù)設(shè)置、打印設(shè)備調(diào)校、車間環(huán)境狀況等原因發(fā)生故障,如成型進(jìn)程中的產(chǎn)品表面會產(chǎn)生無法消除的缺陷(如圖1 所示),甚至造成打印設(shè)備的損壞。因此需及時發(fā)現(xiàn)故障以避免繼續(xù)打印造成進(jìn)一步的損失。
圖1 FDM 型3D 打印中的故障產(chǎn)品Fig.1 Faulty products in FDM type 3D printing
卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Network,CNN)是目前廣泛使用的圖像識別方法,可通過計算圖像對于各指定類別的匹配概率對圖像進(jìn)行分類[2-3]。FDM 型3D 打印發(fā)生故障時,其缺陷可通過監(jiān)測打印過程中產(chǎn)品的表面特征圖像,運(yùn)用CNN 對圖像進(jìn)行識別、分類等,及時判斷打印的故障并識別故障類型[4-6]。
FDM 型3D 打印進(jìn)程中的缺陷主要表現(xiàn)在4個區(qū)域:(1)打印層,即零件已完成部分與正在成型部分的交界處;(2)打印件外壁,即打印件四周外殼;(3)打印件的起始層(4)打印件的頂層[7]。打印中進(jìn)行故障診斷時,需對打印進(jìn)程中可能出現(xiàn)的故障進(jìn)行分類?,F(xiàn)將常見的打印故障歸納為表1 中的19 種類別。
表1 FDM 型3D 打印故障類別Tab.1 FDM type 3D printing failure categories
打印故障有多種,在每次打印進(jìn)程中,復(fù)數(shù)項(xiàng)的打印故障可能同時發(fā)生。觀測打印進(jìn)程是否發(fā)生故障,需對正在成型中的打印件上表面、側(cè)表面進(jìn)行監(jiān)視。上表面的監(jiān)測需要俯視機(jī)位的攝像模塊。但是表面故障一旦產(chǎn)生,即會漫布于整個打印件外壁,不存在局部完好的情況,因此對被測表面添加一個側(cè)視機(jī)位的攝像模塊。產(chǎn)品的已成型部分不會在后續(xù)打印進(jìn)程中發(fā)生改變,故側(cè)視機(jī)位攝像模塊只需監(jiān)測已成型與未成型交接部分,即觀察打印層的外壁狀況。
CNN 是一種前饋神經(jīng)網(wǎng)絡(luò),由一個或多個卷積層和池化層以及頂層的全連接層組成[8]。卷積層使神經(jīng)網(wǎng)絡(luò)能夠識別圖形中在不同區(qū)域反復(fù)出現(xiàn)且尺寸更小的圖樣,提升識別速度;池化層是對圖像進(jìn)行二次采樣,在不影響識別性能的前提下減少數(shù)據(jù)運(yùn)算量。因此,相比較其他深度、前饋神經(jīng)網(wǎng)絡(luò),CNN 需要考量的參數(shù)更少,效率更高,從而廣泛地應(yīng)用于圖像識別的領(lǐng)域中[9]。
本文基于CNN 對成型中零部件表面特征圖像進(jìn)行分類,從而進(jìn)行打印故障診斷。對每種故障均有一個專用CNN對其進(jìn)行“發(fā)生”與“未發(fā)生”的二元分類,獨(dú)立進(jìn)行判斷。與采用單CNN 多元分類相比,多CNN 二元分類對故障診斷系統(tǒng)按故障類型進(jìn)行模塊化處理,可更便捷地進(jìn)行后續(xù)故障識別能力的升級,每個CNN 在訓(xùn)練時更容易獲得泛化性,不易陷入過擬合。需要的圖像數(shù)據(jù)量更低,可減小圖像數(shù)據(jù)的采集規(guī)模[10]。
CNN 由眾多被稱為層的計算模塊前后連接而成。第一層為輸入層,最后一層為輸出層,中間為隱藏層。數(shù)據(jù)由輸入層輸入,經(jīng)由隱藏層,層層傳遞計算,最后得到輸出層的結(jié)果。本系統(tǒng)中打印故障的診斷CNN,其輸入層為256×256×1的三維矩陣,其中256 為打印件圖像的長寬像素,1 為圖像通道數(shù)。輸出層為二維向量[o1,o2]。其中,o1為該打印件圖像,表示打印進(jìn)程中已發(fā)生相應(yīng)故障的概率;o2為打印進(jìn)程正常的概率。
隱藏層除最后兩層外,每層又可分為3 個子層:卷積層、激活層、池化層,數(shù)據(jù)由三維矩陣的形式,經(jīng)過3 層計算后,輸出另一個三維矩陣,該輸出矩陣又將作為下一層中卷積層的輸入,如此傳遞,直至輸出層輸出結(jié)果。對于分類問題,隱藏層最后一層為Softmax 層,以對輸出數(shù)據(jù)進(jìn)行正則化,使其輸出向量的每個元素值均在0 到1 之間,從而可以指代對應(yīng)結(jié)果的概率。
卷積層由核和偏置的兩種三維矩陣組成。核與偏執(zhí)的通道數(shù)與輸入矩陣的通道數(shù)相同,輸入矩陣與核進(jìn)行卷積運(yùn)算后與偏執(zhí)進(jìn)行和運(yùn)算。經(jīng)由ReLU 激活函數(shù),在池化層進(jìn)行池化計算,以提升模型的魯棒性。卷積層中,核與偏執(zhí)均為需要學(xué)習(xí)的參數(shù);池化層中所定義的池化計算是在CNN 模型建立時已經(jīng)確定的,無需要進(jìn)行學(xué)習(xí)的參數(shù)。
故障診斷系統(tǒng)如圖2 所示,由圖像采集的攝像系統(tǒng)、圖像信息傳遞和故障診斷信息收集的中控系統(tǒng)、圖像分析及判斷是否發(fā)生故障的CNN計算系統(tǒng)組成。
圖2 故障診斷系統(tǒng)的組成Fig.2 Composition of fault diagnosis system
2.2.1 攝像系統(tǒng)
攝像系統(tǒng)包含兩個CMOS 攝像模塊和光源系統(tǒng)。本文采用的圖像數(shù)據(jù)設(shè)置為256×256 像素的單通道灰度圖片。每筆圖片數(shù)據(jù)均為256 維方型矩陣,矩陣元素為對應(yīng)像素的8 位灰度值,其區(qū)間為0 至28-1=255。故攝像模塊采用常見的30 W 像素、640×480 分辨率的CMOS 攝像模塊。
兩個攝像模塊分別設(shè)于俯視機(jī)位和側(cè)視機(jī)位。俯視機(jī)位的攝像模塊固定于打印機(jī)正上方,在不影響打印熱端走行機(jī)構(gòu)的前提下,完整覆蓋打印范圍的俯視向圖像采集。側(cè)視機(jī)位的攝像模塊固定于打印機(jī)側(cè)面,其高度略高于打印平臺歸零時所處的高度,使該攝像模塊能在整個打印進(jìn)程中始終捕捉打印層附近的外壁圖像,如圖3 所示。
圖3 俯視機(jī)位與側(cè)視機(jī)位Fig.3 Top view camera position and side view camera position
光源對圖像數(shù)據(jù)采集的效果至關(guān)重要,調(diào)整光源的亮度、色溫及位置,保證灰度圖像數(shù)據(jù)中打印件輪廓清晰,故障特征分明。
2.2.2 中控系統(tǒng)
中控系統(tǒng)由另一塊獨(dú)立的單板計算機(jī)構(gòu)成。其功能如下:(1)根據(jù)事先設(shè)定的采樣間隔時間,控制攝像系統(tǒng)的采樣。產(chǎn)品在打印中因故障而產(chǎn)生的缺陷,在發(fā)生故障后的一小段時間內(nèi)對其整體結(jié)構(gòu)及打印設(shè)備的影響有限,故在打印進(jìn)程中無需進(jìn)行實(shí)時拍攝,只需每隔一段時間對成型中產(chǎn)品圖像進(jìn)行采樣;(2)接收攝像系統(tǒng)采樣的單通道圖像數(shù)據(jù),并按照俯視組和測試組分別傳遞至CNN 計算系統(tǒng)中,作為相應(yīng)CNN 的輸入;(3)接收CNN 計算系統(tǒng)反饋的故障識別結(jié)果,根據(jù)該結(jié)果將打印進(jìn)程是否發(fā)生故障及故障類型的警報信息傳遞至遠(yuǎn)端監(jiān)控設(shè)備。
2.2.3 CNN 計算系統(tǒng)
CNN 計算系統(tǒng)由性能相對強(qiáng)勁的單板計算機(jī)獨(dú)自或并聯(lián)構(gòu)成,內(nèi)置19 個已經(jīng)訓(xùn)練完畢,即結(jié)構(gòu)與參數(shù)符合打印件故障識別的CNN。這19 個CNN 分為俯視組與測試組,依據(jù)其對應(yīng)打印故障的識別方位進(jìn)行分組。兩組分別接收由中控系統(tǒng)傳遞來的對應(yīng)機(jī)位攝像模塊采集的圖像信息。各組內(nèi),每筆圖像信息均需輸入組內(nèi)所有的CNN,每個收到圖像信息的CNN 均會執(zhí)行前向計算,從而各自進(jìn)行對應(yīng)故障診斷。
為使CNN 達(dá)到上述故障識別能力,需對CNN 進(jìn)行訓(xùn)練。CNN 采用監(jiān)督式學(xué)習(xí)進(jìn)行訓(xùn)練。監(jiān)督式學(xué)習(xí)是指神經(jīng)網(wǎng)絡(luò)模型通過擬合大量含標(biāo)簽樣本獲取最優(yōu)權(quán)重參數(shù),從而獲取預(yù)測能力的訓(xùn)練方式。打印故障識別的CNN 訓(xùn)練流程(如圖4 所示):(1)建立具備卷積層和池化層的結(jié)構(gòu)相同、參數(shù)不同的神經(jīng)網(wǎng)絡(luò)函數(shù)集;(2)以交叉熵作為損失函數(shù),以此定義不同參數(shù)下的CNN 識別故障類型的性能表現(xiàn);(3)收集一定數(shù)量規(guī)模的打印進(jìn)程故障數(shù)據(jù),以[打印進(jìn)程圖像 -故障類型]的方式進(jìn)行標(biāo)識,形成數(shù)據(jù)組,取其中70%的數(shù)據(jù)組作為訓(xùn)練集,剩余30%的數(shù)據(jù)組作為測試集;(4)以CNN 的一組隨機(jī)參數(shù)作為初始值,評估其在訓(xùn)練集上的識別性能,得到損失函數(shù)值,并以該值梯度下降法對參數(shù)進(jìn)行更新;(5)評估新參數(shù)下的CNN 在訓(xùn)練集上的識別性能并再次更新。如此反復(fù),直至損失函數(shù)收斂,得到具有最佳故障識別性能的CNN;(6)評估此訓(xùn)練完畢的CNN 在測試集上的故障識別性能。
圖4 基于CNN 的故障識別訓(xùn)練流程Fig.4 CNN-based fault recognition training process
CNN 的訓(xùn)練中分為超參數(shù)的設(shè)定和參數(shù)的訓(xùn)練,其中超參數(shù)應(yīng)在參數(shù)訓(xùn)練前設(shè)定。在訓(xùn)練集中隨機(jī)挑選20%的數(shù)據(jù)作為驗(yàn)證集,在驗(yàn)證集上進(jìn)行快速訓(xùn)練,評估并確定最佳的超參數(shù)。超參數(shù)設(shè)定完畢后,再用訓(xùn)練集余下的80%數(shù)據(jù)進(jìn)行參數(shù)的訓(xùn)練。模型中,網(wǎng)絡(luò)層數(shù)、核卷積步幅、學(xué)習(xí)率為超參數(shù),卷積層核與偏置為參數(shù)。
參數(shù)訓(xùn)練通過監(jiān)督式學(xué)習(xí)的方法。訓(xùn)練時,用Xavier 法設(shè)定卷積層和核與偏置的初始值。用交叉熵函數(shù)評估當(dāng)前參數(shù)在訓(xùn)練集上的識別性能。使用批訓(xùn)練的方式,即利用計算機(jī)并行計算的特性,同時計算當(dāng)前參數(shù)下多組輸入值的輸出值,并計算批中損失函數(shù)的均值:
式中:N——批中所包含的數(shù)據(jù)筆數(shù);t——正確解標(biāo)簽;y——在該組參數(shù)下得到的實(shí)際解。
得到損失函數(shù)值后,以該值為依據(jù),采用梯度下降法對參數(shù)進(jìn)行更新
式中:x——當(dāng)前參數(shù);x'——更新后參數(shù);η——學(xué)習(xí)率。評估新參數(shù)下的CNN 在訓(xùn)練集上的識別性能,并再次更新,如此反復(fù),直至損失函數(shù)收斂,得到具有最佳故障識別性能的CNN。
進(jìn)行訓(xùn)練數(shù)據(jù)采集時,機(jī)位設(shè)置與故障診斷設(shè)置一致,即俯視機(jī)位和側(cè)視機(jī)位。根據(jù)故障發(fā)生的階段特性,在打印進(jìn)程的1%階段、50%階段和90%階段拍攝3 次圖像,即一次打印采集6筆圖像數(shù)據(jù)。
對每種故障類型,采集發(fā)生故障與未發(fā)生故障圖像各500 張。為使打印件本身的形狀及尺寸不對CNN 的故障識別產(chǎn)生影響、CNN 專注于故障本身的圖像表征,每次打印時選擇形狀尺寸不同的打印模型。出于對操作性的考慮,打印模型如圖5 所示,選用方高柱、錐柱混合體、球體和一次成型桁架4 種。
圖5 訓(xùn)練數(shù)據(jù)采集所用的模型Fig.5 Model used for training data collection
正常打印時,發(fā)生故障的打印次數(shù)很少,為了盡可能多地收集發(fā)生故障的圖像數(shù)據(jù),可以對打印模型的Gcode 代碼做出調(diào)整,誘發(fā)各種故障以便加快采集進(jìn)程[11-13]。
為獲取真實(shí)的實(shí)驗(yàn)數(shù)據(jù),增加算法的說服性,本文根據(jù)圖5 中的方高柱和球體模型,選取表面有棱角或凸起的粗糙面圖片進(jìn)行實(shí)驗(yàn)驗(yàn)證,共有500 組數(shù)據(jù)集。其中,400 組數(shù)據(jù)集作為訓(xùn)練集,剩余100 組數(shù)據(jù)集作為測試集。所有圖像的尺寸歸一化為2 000×1 000 像素。部分樣本圖像如圖6 所示。
圖6 部分樣本圖像Fig.6 Partial image of samples
實(shí)驗(yàn)平臺選擇Linux Ubuntu16.04 系統(tǒng),Python 版本是3.6,PyTorch 版本是1.1.0,搭載了Intel Xeon E5-2643 CPU,96GB DRAM 和 Nvidia Quadro P2000 GPU。訓(xùn)練模型是基于卷積神經(jīng)網(wǎng)絡(luò)進(jìn)行改進(jìn)得到一個能夠針對熱熔堆積型3D 打印故障識別的新卷積神經(jīng)網(wǎng)絡(luò)模型。
整個預(yù)測過程如下:輸入訓(xùn)練數(shù)據(jù)集或者驗(yàn)證數(shù)據(jù)集中的每張圖片到模型內(nèi),經(jīng)過網(wǎng)絡(luò)層預(yù)測,在最后一層網(wǎng)絡(luò)層即Softmax 層輸出屬于該圖片的一維向量,由于訓(xùn)練及預(yù)測之前需進(jìn)行打標(biāo)簽,將數(shù)據(jù)集圖片分為3 類,即無故障、有故障、具體故障,確定該向量中的每一位數(shù)值對應(yīng)于數(shù)據(jù)集中的3 類,輸出值是一個包含3 個數(shù)值的一維向量,此一維向量中的3 個數(shù)值一一對應(yīng)為上述的3 類,因此在這3 個數(shù)值中選取最大的,計算出屬于哪一類的概率,則此模型預(yù)測該圖片屬于此類。故CNN模型的輸出準(zhǔn)確率即為本文3.1小節(jié)所介紹的,CNN 框架中最后一層Softmax 所輸出的值。
表2 為采用支持向量機(jī)(Support Vector Machine,SVM)和深度置信網(wǎng)絡(luò)(Deep neural network,DBN)兩種診斷方法與本文所建立的CNN 模型在學(xué)習(xí)速率為0.01 時的準(zhǔn)確率對比。
表2 實(shí)驗(yàn)效果數(shù)據(jù)Tab.2 Experimental data
通過對比測試可以發(fā)現(xiàn),基于CNN 的故障診斷模型不論是訓(xùn)練集的準(zhǔn)確性還是測試集的準(zhǔn)確性都具有非常好的識別率,相比于SVM 和DBN 兩種方法具有更好的分類性能。其中 DBN的分類模型實(shí)驗(yàn)數(shù)據(jù)結(jié)果最差,訓(xùn)練集準(zhǔn)確率與測試集準(zhǔn)確率僅為72.43%與73.35%。這表明CNN 在特征提取方面具有非常強(qiáng)大的優(yōu)勢。
本文提出的基于CNN 圖像識別的3D 打印故障診斷系統(tǒng),相對于SVM 以及DBN 模型具有更優(yōu)的分類性能,結(jié)合CNN 網(wǎng)絡(luò)的優(yōu)勢,可以直接從3D 打印件自適應(yīng)提取特征信息,降低了人工故障特征提取的不確定性,實(shí)現(xiàn)了不同打印階段的故障分類??蓮V泛地適用于FDM 型3D 打印設(shè)備。借助相對成熟的CNN 圖像識別技術(shù),可實(shí)現(xiàn)診斷系統(tǒng)的快速部署,對提升FDM 型3D 打印的效率、減少相關(guān)資源浪費(fèi)及能源損耗有一定助益。