高玉龍,張應(yīng)中
(大連理工大學(xué) 機(jī)械工程學(xué)院,大連 116024)
加工特征是零件上具備加工語義的一組抽象完備的基礎(chǔ)形狀集合,例如:孔、盲孔、鍵槽等.一般的機(jī)械結(jié)構(gòu)可以看作是毛坯與一系列加工特征的組合.加工特征是計算機(jī)輔助制造的依據(jù)和基礎(chǔ),是聯(lián)系CAD/CAM的紐帶[1].從20世紀(jì)80年代以來,加工特征識別一直是工業(yè)界和學(xué)術(shù)界的熱點研究方向.目前已經(jīng)存在多種特征識別方法[2,3],如:基于邏輯規(guī)則的方法、基于屬性面鄰接圖的方法及混合圖與規(guī)則的方法等.這些方法都是針對CAD 實體模型且借助邏輯的思想.雖然也有部分基于機(jī)器學(xué)習(xí)的方法,但其特征的構(gòu)造仍未能擺脫邏輯規(guī)則的設(shè)計.目前,加工特征識仍存在很多問題和挑戰(zhàn),包括識別效率問題、識別結(jié)果的魯棒性問題及交叉特征的識別問題.其中,交叉特征識別是業(yè)界公認(rèn)的難點.例如:一個凹槽特征與其他特征相交后,其凹槽面就有可能被分割或者被延伸,特征邊界與相鄰邊界拓?fù)潢P(guān)系就會發(fā)生變化,采用符號推理的方法識別就很可能失效.
近年來,深度學(xué)習(xí)在計算機(jī)視覺領(lǐng)域取得了巨大的成功.其中卷積神經(jīng)網(wǎng)絡(luò)(CNN)具有強(qiáng)大的特征提取能力而得到廣泛應(yīng)用[4].與此同時,三維CNN 方法在特征識別方面也得到了初步的發(fā)展[5,6],為解決加工特征識別問題提供了新的方向.典型的卷積網(wǎng)絡(luò)的輸入為二維、三維乃至多維矩陣數(shù)據(jù),例如:圖像格式和3D 體素(Voxels).Zhang 等[7]基于3D 體素網(wǎng)格數(shù)據(jù),提出了一個采用3D 卷積神經(jīng)網(wǎng)絡(luò)模型的加工特征的識別方法—FeatureNet.該方法首先將CAD 邊界拓?fù)浣Y(jié)構(gòu)網(wǎng)格化為3D 體素結(jié)構(gòu),再經(jīng)由訓(xùn)練的卷積神經(jīng)網(wǎng)絡(luò)進(jìn)行分類,識別預(yù)先指定的加工特征.但網(wǎng)格化的3D 數(shù)據(jù)存在大量的數(shù)據(jù)冗余,并且受到分解體元分辨率影響,計算成本過高.Shi 等[8]利用多視圖的方法,構(gòu)建了特征識別器MsvNet.該方法神經(jīng)網(wǎng)絡(luò)參數(shù)量巨大,訓(xùn)練和識別效率不高.三維點云是一種特殊的CAD 模型編碼方式.斯坦福大學(xué)Qi 等[9]基于對點云的研究,提出一個針對三維點云數(shù)據(jù)的卷積神經(jīng)網(wǎng)絡(luò)模型—PointNet.該網(wǎng)絡(luò)模型克服了輸入點云的無序性、幾何變換不變性等缺點,直接將點云作為數(shù)據(jù)輸入,提取其中的數(shù)據(jù)特征.馬耀龍[10]基于PointNet 提出了用于加工特征識別的卷積神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu),但主要面向具有單個特征的方體模型,與實際應(yīng)用有較大差距.
本文提出基于加工面3D 點云數(shù)據(jù)的深度學(xué)習(xí)方式,能夠自動識別加工特征.主要貢獻(xiàn)如下:(1) 提出一個生成特征加工面并適應(yīng)CNN 網(wǎng)絡(luò)學(xué)習(xí)的三維點云數(shù)據(jù)樣本的方法;(2)基于PointNet,設(shè)計并優(yōu)化了加工特征識別卷積神經(jīng)網(wǎng)絡(luò)模型的網(wǎng)絡(luò)結(jié)構(gòu),通過大量數(shù)據(jù)訓(xùn)練實驗,實現(xiàn)對給定的一組加工面集的加工特征魯棒性識別.
點云是構(gòu)成目標(biāo)表面的大量點集合,由一組三維點向量構(gòu)成.以下是點云數(shù)據(jù)主要特性:一是無序性,點云是一組點數(shù)據(jù)的集合,其中點的排列順序并不影響其表達(dá)的幾何形狀.這意味著這些點以任意順序進(jìn)行組合,都仍表示原來的三維模型;二是點之間的相互關(guān)系,一個零件模型的點云來自于同一個距離空間,點不是孤立的,只是彼此之間的距離、位置有所不同,意味著相鄰點之間能夠形成一個有意義的子集,即局部結(jié)構(gòu);三是在幾何變換下的點集拓?fù)洳蛔冃?空間旋轉(zhuǎn)和平移點云都不能改變點云的分類和點集的分割.
PointNet[9]是一個直接將點集作為輸入的CNN 模型.在PointNet 中,通過權(quán)值共享的MLP,其輸入的每一個點xi∈RD(i=1,…,N),都被提取出一個特征向量;通過最大池化操作模擬的對稱函數(shù),所有的特征向量被聚合為了一個對輸入點排列不變的全局特征向量,解決了點云的無序性問題.為了解決點云的幾何變換不變性問題,PointNet 在輸入點云時引入了Tnet 數(shù)據(jù)對齊網(wǎng)絡(luò).該網(wǎng)絡(luò)現(xiàn)根據(jù)點云預(yù)測出一個3×3的線性變換矩陣,將輸入點云先變換到恰當(dāng)?shù)木€性空間后,再進(jìn)行點云特征的提取與分類操作.
PointNet 在點云分類與語義分割等問題上有較好的表現(xiàn),但其僅針對了單個點的特征提取,缺乏捕獲局部結(jié)構(gòu)的能力.Qi 等[11]在PointNet 基礎(chǔ)上,設(shè)計了一個層次化的CNN 結(jié)構(gòu):PointNet++,該模型可以更好地捕獲局部空間結(jié)構(gòu),但其效果提升不明顯.
如前所述,加工特征可以定義為零件上一組具有特定加工語義的形狀,不同的加工語境下有不同的加工特征定義.本文討論的加工特征,主要是由切削成形的特定幾何形狀,例如:孔、通槽、圓角、凹槽等.加工特征不受模型的幾何變換(例如旋轉(zhuǎn)、移動等) 影響.Zhang 等在文獻(xiàn)[7]提出的FeatureNet 庫中定義了24 個常用加工特征,如圖1所示.本文為了比較,也采用了該文獻(xiàn)中的加工特征分類方法.
按照本文討論的加工特征定義,組成加工特征的所有面都被稱為加工面.除了圓(倒)角特征的加工面外,其他加工面一般都是凹面,即由凹邊連接的幾何面.一組連續(xù)鄰接的加工面集構(gòu)成一個獨立的加工特征.
圖1給出的加工特征都是獨立存在的,其加工面未遭到破壞.但在實際零件中,加工特征常常會相交,特征相交會造成加工面幾何邊界被分割或者被延伸.如圖2所示,圖2(a)是一個典型的盲槽特征,設(shè)為A,圖2(b)是添加了另外一個通槽特征B 后的變化情況.一個魯棒性好的特征識別系統(tǒng)應(yīng)該對被破壞的A 特征,仍然能被識別為盲槽特征,B 特征識別為通槽特征.
圖1 FeatureNet 庫中定義的24 個常用加工特征[7]
圖2 特征相交造成加工面變化
基于PointNet 技術(shù),本文提出如圖3所示的基于加工面三維點云數(shù)據(jù)深度學(xué)習(xí)加工特征自動識別框架,具體內(nèi)容如下.
圖3 加工特征識別系統(tǒng)框架
(1)構(gòu)建基于特征加工面3D 點云數(shù)據(jù)樣本
鑒于深度學(xué)習(xí)給成需要盡量多的數(shù)據(jù)樣本,本文采用FeatureNet[7]提供的24 種特征的STL 文件作為深度學(xué)習(xí)的基礎(chǔ)數(shù)據(jù);通過特征提取、點云采樣創(chuàng)建基本點云數(shù)據(jù)樣本庫.神經(jīng)網(wǎng)絡(luò)的訓(xùn)練效果跟訓(xùn)練數(shù)據(jù)的質(zhì)量和數(shù)量有較大關(guān)系.為使神經(jīng)網(wǎng)絡(luò)得到更高的訓(xùn)練,使用了數(shù)據(jù)歸一化、數(shù)據(jù)增強(qiáng)等技術(shù)處理數(shù)據(jù).最后將數(shù)據(jù)樣本隨機(jī)分為訓(xùn)練樣本和測試樣本,形成最終的加工特征點云數(shù)據(jù)集.
(2)構(gòu)建和訓(xùn)練CNN 加工特征識別器
在PointNet 基礎(chǔ)上,構(gòu)建CNN 深度學(xué)習(xí)模型.使用上述的點云數(shù)據(jù)集訓(xùn)練網(wǎng)絡(luò)模型,同時在訓(xùn)練和測試過程中依據(jù)反饋結(jié)果信息,優(yōu)化網(wǎng)絡(luò)結(jié)構(gòu)及調(diào)整參數(shù).最終采用上述測試效果最好的網(wǎng)絡(luò)模型作為加工特征識別器.
(3)基于CNN 加工特征識別器加工特征識別
在訓(xùn)練優(yōu)化好的CNN 加工特征識別器上,進(jìn)行特征識別.系統(tǒng)首先對識別零件進(jìn)行邊界分割.按照凹面組成加工特征原則,將一個邊界模型零件分割為多個加工面集,具體分割算法將在另文介紹.識別時,每次取一個加工面集,即任意輸入一個加工面集,系統(tǒng)首先將其采樣為點云,然后經(jīng)過本文提出的數(shù)據(jù)處理過程轉(zhuǎn)換為標(biāo)準(zhǔn)化的點云輸入.最后系統(tǒng)通過神經(jīng)網(wǎng)絡(luò)自動分類,給出最終的分類結(jié)果.
訓(xùn)練一個神經(jīng)網(wǎng)絡(luò)需要大量的樣本數(shù)據(jù).按照上述總體方案設(shè)計,需要大量的包含加工特征的3D 點云樣本數(shù)據(jù).現(xiàn)實中要采集獲取龐大的3D 點云樣本數(shù)據(jù)(大于1 萬個模型數(shù)據(jù)) 是一項勞動強(qiáng)度很大的工作.本文采用FeatureNet[7]中提供的、以隨機(jī)參數(shù)為24 類加工特征生成的共計24 000 個STL 文件作為基礎(chǔ)的特征數(shù)據(jù)庫.基于這些STL 模型,按照如圖4所示的流程,得到點云數(shù)據(jù)樣本庫.接下來介紹流程中的關(guān)鍵步驟.
圖4 數(shù)據(jù)樣本構(gòu)造流程圖
3.1.1 提取特征加工面集
FeatureNet 中生成這些特征數(shù)據(jù)的方式為在邊長為0.1 m的立方體上,以隨機(jī)的參數(shù)對立方體進(jìn)行加工除料操作.因此通過切除部分體積而形成的面就是要提取的特征加工面集.該三維模型是以STL 格式存儲的,因此提取特征面集就是從文件中選出那些屬于特征面集的三角片.就本方法而言,采用對偶邏輯可以使任務(wù)更簡單,即去除掉那些非特征面集.如果某三角片的3 個頂點有一個坐標(biāo)同時為0 或者10 (采用厘米為長度單位),那么該三角片就一定不是特征面集.
3.1.2 對特征加工面采樣獲取點云
本文的神經(jīng)網(wǎng)絡(luò)是直接通過點云來進(jìn)行訓(xùn)練的,因此,點云的獲取質(zhì)量直接決定了神經(jīng)網(wǎng)絡(luò)的質(zhì)量和識別的準(zhǔn)確率.本文利用PCL 庫中提供的
pcl_mesh_sampling 點云采樣程序,實現(xiàn)了特征面集的均勻點云采樣,并為每個特征面集采樣出800 個均勻的點云數(shù)據(jù).圖5(a)是一個矩形凹槽特征面邊界顯示,圖5(b)是該矩形凹槽特征面采樣點云顯示.
圖5 矩形凹槽的采樣
3.1.3 數(shù)據(jù)歸一化與數(shù)據(jù)增強(qiáng)
在實際應(yīng)用中,加工特征會以任意的姿態(tài)、大小出現(xiàn)在空間中的任意位置.此外,神經(jīng)網(wǎng)絡(luò)需要固定點云數(shù)量輸入,對不同大小的特征面進(jìn)行固定點采樣會造成點云的密度不同.因此為了使得神經(jīng)網(wǎng)絡(luò)能夠識別加工特征的多種角度和位置,并消除密度不同的影響,本文將點云數(shù)據(jù)歸一化到以原點為中心,半徑為1的球中,并且對數(shù)據(jù)繞3 個坐標(biāo)軸方向隨機(jī)90°、180°、270°旋轉(zhuǎn).
通過以上處理,可以得到24 類加工特征的訓(xùn)練數(shù)據(jù),每類特征有1 000 個訓(xùn)練數(shù)據(jù),共計24 000 個訓(xùn)練數(shù)據(jù),每個數(shù)據(jù)有800 個點.但如后文所述,訓(xùn)練時采用的點云數(shù)量為512.因此,為了使每個加工特征模型被充分的訓(xùn)練,將800 個點隨機(jī)分成6 份,形成最終的訓(xùn)練數(shù)據(jù)集,共計144 000 個訓(xùn)練數(shù)據(jù).
PointNet 是一種能夠直接輸入無序的三維點云數(shù)據(jù)的神經(jīng)網(wǎng)絡(luò).本文將加工特征面集采樣得到的點云表示為一組3D 點{Pi|i=1,…,n},其中每個點Pi由其(x,y,z)三坐標(biāo)的值來表示.本文以PointNet 框架為基礎(chǔ),構(gòu)建了如圖6所示的卷積神經(jīng)網(wǎng)絡(luò)架構(gòu).該架構(gòu)主要由數(shù)據(jù)對齊層Tnet、卷積層、池化層、全連接層和輸出層5 個部分構(gòu)成.圖6(a)中標(biāo)明了每一層卷積的通道數(shù)以及全連接層的神經(jīng)元數(shù);圖6(b)是對數(shù)據(jù)對齊層的細(xì)化.
執(zhí)行分類任務(wù)的神經(jīng)網(wǎng)絡(luò),本質(zhì)上是對輸入特征向量到類別向量的一個映射.在本文的任務(wù)中,輸入數(shù)據(jù)為規(guī)模為n的三維點云數(shù)據(jù),也就是n×3的矩陣.事實上,模型訓(xùn)練時數(shù)據(jù)會成批次輸入到神經(jīng)網(wǎng)絡(luò),因此輸入的數(shù)據(jù)維度為batch×n×3.為了保證點云經(jīng)過幾何變換后,保證原有的幾何特征和所對應(yīng)的類別標(biāo)簽不變,在正式開始卷積操作之前,加入了數(shù)據(jù)對齊層Tnet.該層的結(jié)構(gòu)如圖6(b)所示,最終輸出一個9 維的向量,并重整為一個3×3的矩陣.先將點云數(shù)據(jù)通過該矩陣變換到合適的空間,使數(shù)據(jù)對齊后,再進(jìn)行卷積.
值得一提的是,由于卷積層采用了權(quán)值共享的卷積核,所以點云的數(shù)據(jù)規(guī)模n,并不會增加網(wǎng)絡(luò)模型的可訓(xùn)練參數(shù)量.點云的數(shù)量n代表了對加工特征的采樣精細(xì)程度.理論上來說,n越大,點云對原加工特征的代表性越好,識別效果也會越好,但計算成本也會增加.所以點云數(shù)量n是一個重要的參數(shù).本文在確定點云數(shù)量時,做了如下實驗:將點云數(shù)量分別固定為64、128、256、512,樣本數(shù)量均為144 000 個.使用圖6所示的模型分別在不同點云數(shù)量的數(shù)據(jù)集上進(jìn)行訓(xùn)練,訓(xùn)練結(jié)果如表1所示.通過對點云數(shù)量和單步訓(xùn)練時間的線性擬合,可以得到二者之間的相關(guān)系數(shù)為0.953,即訓(xùn)練時間和點云數(shù)量基本呈線性相關(guān).當(dāng)點云數(shù)量為512 時,識別率超過了99%,而此時訓(xùn)練時間為109.28 min,并沒有到不可接受的程度.因此本文選擇固定點云數(shù)量為512.
圖6 卷積神經(jīng)網(wǎng)絡(luò)架構(gòu)
表1 4 種規(guī)格點云訓(xùn)練測試結(jié)果
模型的中間層按照功能分為卷積層、池化層、全連接層幾個部分.卷積的過程就是對每個點數(shù)據(jù)進(jìn)行特征提取的過程.每一層卷積都對上層數(shù)據(jù)進(jìn)行1 維卷積操作.根據(jù)點的無序性,點云數(shù)據(jù)沒有上下文的關(guān)聯(lián),因此將卷積核的大小設(shè)置為1,通道數(shù)如圖6(a)所示.此外,為解決梯度消失與爆炸問題,本文在每一對相鄰層連接之間加入了BatchNormalization 層,并采用了SELU 激活函數(shù).
池化層接在最后一層卷積之后.多層卷積操作為每個點提取了128 個特征,形成了n×128的矩陣.通過最大池化操作將得到每個點數(shù)據(jù)特征聚集為一個128 維全局的特征向量.該聚集操作使網(wǎng)絡(luò)結(jié)構(gòu)對于點云的順序不敏感,解決了點云的無序性問題.
全連接層是神經(jīng)網(wǎng)絡(luò)中解決分類問題的經(jīng)典結(jié)構(gòu).本文將池化得到的全局特征向量作為原來點云特征的編碼,輸入到兩層全連接層,最后輸出一個24 維的分類向量,以Softmax 函數(shù)作為激活函數(shù),將24 維輸出向量值映射到區(qū)間[0,1],表示網(wǎng)絡(luò)結(jié)構(gòu)預(yù)測該點云屬于某一類的概率,概率最大值對應(yīng)類別就是該點云的預(yù)測類別.
損失函數(shù)是為了衡量模型的輸出特征類別與實際特征類別之間的差距.損失函數(shù)的輸出值越大,模型的識別效果就越差.訓(xùn)練的過程就是優(yōu)化模型參數(shù)減少損失值過程.本文中使用的損失函數(shù)為交叉熵?fù)p失函數(shù),使用的優(yōu)化器為NAdam 優(yōu)化器,其decay 設(shè)置為1e-4.根據(jù)實驗與經(jīng)驗對參數(shù)調(diào)整,神經(jīng)網(wǎng)絡(luò)的其他訓(xùn)練參數(shù)如下:
(1)點云數(shù)量設(shè)置為512;
(2)最大訓(xùn)練迭代次數(shù)epoch 設(shè)置為200;
(3)Batch 大小設(shè)置為32;
(4)采用Exponential scheduling 技術(shù)來動態(tài)調(diào)整學(xué)習(xí)率.學(xué)習(xí)率初始化為0.01,每30 步下降為原來的0.1.
對上述網(wǎng)絡(luò)模型開展了實驗,實驗訓(xùn)練數(shù)據(jù)庫有144 000 個數(shù)據(jù),每種特征識別點云數(shù)量固定為512.每一個數(shù)據(jù)都有一個標(biāo)簽代表類別.數(shù)據(jù)以65%,15%,20%的比例分為訓(xùn)練集、驗證集和測試集.在訓(xùn)練集中訓(xùn)練,在驗證集中驗證當(dāng)前模型訓(xùn)練效果,在測試集中對模型做最終識別率測試.實驗環(huán)境為Windows 10操作系統(tǒng),AMD R5-4600H+GTX1650 4 GB 顯存+16 GB內(nèi)存的高性能筆記本,在TensorFlow2.1 深度學(xué)習(xí)框架上實現(xiàn)了上述網(wǎng)絡(luò)模型.24 種加工特征識別結(jié)果如表2.
表2 24 類特征識別率
本文方法與FeatureNet和MSVNet 兩種方法進(jìn)行了比較,比較結(jié)果如表3所示.因為不同的環(huán)境運行效率不同,因此本文列出訓(xùn)練時間的對比僅供參考.本文提出的卷積神經(jīng)網(wǎng)絡(luò)僅有64 824 個訓(xùn)練參數(shù),在109 min的時間里迭代訓(xùn)練了106 步后,驗證識別率趨于穩(wěn)定.在測試集的測試結(jié)果表明,24 類特征的綜合識別率為99.12%,達(dá)到了先進(jìn)水平.相比于FeatureNet[7]和MsvNet[8],本文提出的方式訓(xùn)練參數(shù)分別減少了485倍和1 971 倍,訓(xùn)練時間分別減少了3.6 倍和8 倍.實驗結(jié)果可以說明,本方法的時間復(fù)雜度和空間復(fù)雜度均優(yōu)于另外兩種方式.
表3 3 種不同方式對比
此外,為了驗證本方法的適用性,本文構(gòu)造了如圖7所示的零件模型來驗證對于交叉特征識別的魯棒性.如圖7(a)所示,該零件模型包含有6 個加工特征,每個特征的加工面集分別是:通槽1:F1={f1,f2,f3}、矩形盲槽1:F2={f1,f4,f5,f6,f7}、圓角:F3={f14,f15}、通槽2:F4={f16,f17,f18}、通槽3:F5={f19,f20,f21}、矩形盲槽2:F6={f8,f9,f10,f11,f12,f13}.從圖7(b)可以看出,這些特征大部分是相交特征.
圖7 零件模型及加工特征面集
將以上特征面集分別通過本文提出的數(shù)據(jù)處理方式得到加工面的點云數(shù)據(jù),然后輸入到識別器中進(jìn)行識別.經(jīng)過測試,除了圖7(b)(1)中矩形通槽被錯誤的識別為三角形通槽,其他5 個特征均能準(zhǔn)確的識別出結(jié)果.未能識別的通槽帶有尾翼狀的底面延伸,這在訓(xùn)練數(shù)據(jù)集中并沒有涉及,今后可以通過分割處理后能夠正確識別.
本文基于PointNet,提出一個面向加工面點云數(shù)據(jù),采用CNN 神經(jīng)網(wǎng)絡(luò)的機(jī)械加工特征識別方法.包括構(gòu)建適應(yīng)加工特征識別CNN 網(wǎng)絡(luò)學(xué)習(xí)的加工面三維點云數(shù)據(jù)樣本,設(shè)計和改進(jìn)了加工特征識別卷積神經(jīng)網(wǎng)絡(luò)模型的網(wǎng)絡(luò)結(jié)構(gòu),優(yōu)化了識別參數(shù),對特征相交使加工面遭到破壞后特征仍能準(zhǔn)確識別,實現(xiàn)對加工面集點云數(shù)據(jù)的魯棒性識別.網(wǎng)絡(luò)模型結(jié)構(gòu)通用性高、識別準(zhǔn)確度高、識別速度快,與體素CNN 網(wǎng)絡(luò)結(jié)構(gòu)和多視圖的方法相比,本文的方法有更好的表現(xiàn).
交叉特征的識別仍然是目前一個亟待解決的難題.本文實現(xiàn)了獨立加工面集的特征魯棒識別,下一步將融合幾何邊界模型的分割,將一個復(fù)雜的零件分割成簡單的加工面集,就可以采用本文方法分別識別,實現(xiàn)復(fù)雜零件加工特征的魯棒性識別.