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