李昌明,李東年,陳成軍,趙正旭
(青島理工大學機械與汽車工程學院,山東 青島 266520)
近年來隨著機器人在工業(yè)領域應用的普及,工業(yè)生產(chǎn)的自動化程度與日俱增,工業(yè)機器人憑借其高效性、準確性在工業(yè)自動化裝配中的應用不斷擴大。在工業(yè)自動化生產(chǎn)線上,零件識別起到了舉足輕重的作用[1]。零件識別技術發(fā)展比較早,從最初以統(tǒng)計理論為基礎的匹配識別開始到現(xiàn)在基于卷積神經(jīng)網(wǎng)絡的零件識別,在零件分類識別領域已經(jīng)形成許多成熟的技術。嚴華等[2]根據(jù)零件輪廓特征提出了基于邊界矩的用于機械零件識別的特征提取方法。郭幸荃[3]提出一種基于圖像模板匹配的零件識別算法,對零件的圖像與模板進行匹配,通過計算兩者的相似程度進行零件識別。夏慶觀等[4]提出了一種基于小波變換提取零件圖像特征的零件識別方法,并用實驗證明了該方法的有效性。
傳統(tǒng)的零件識別需要人工提取圖像特征,識別效率低,魯棒性較差。隨著卷積神經(jīng)網(wǎng)絡的興起,許多基于卷積神經(jīng)網(wǎng)絡的零件識別算法被提出。劉學平等[5]提出一種自適應邊緣優(yōu)化的YOLO3目標識別算法,當樣本圖片中存在較多殘缺零件干擾時,該算法能夠準確識別出目標零件。黃海松等[6]提出了一種基于 Mask R-CNN 的零件識別方法,該方法使用數(shù)據(jù)集增強技術提高零件識別的準確性。陳緒等[7]提出一種使用遷移學習的深度卷積神經(jīng)網(wǎng)絡模型,用來解決工業(yè)環(huán)境中零件的識別精度問題。此類方法依賴于零件輪廓與表面紋理進行零件識別,但在工業(yè)環(huán)境下,零件表面存在油污并且反光性較強,紋理不清晰,使得基于RGB的零件識別方法在實際工業(yè)環(huán)境中效果較差。
本文提出一種基于卷積神經(jīng)網(wǎng)絡與虛擬訓練集的零件識別方法,在OSG虛擬空間內對零件的三維模型渲染產(chǎn)生大量訓練集,然后構建了兩種不同深度與結構的卷積神經(jīng)網(wǎng)絡模型并使用虛擬深度圖像進行訓練,通過調節(jié)網(wǎng)絡結構,優(yōu)化網(wǎng)絡模型,提高模型對零件識別的準確率,訓練完成后,使用Kinect2.0深度相機采集零件深度圖像構建測試集,測試網(wǎng)絡模型對零件識別的準確率。
本文選用OSG對各種零件在不同角度下進行渲染,得到零件在不同角度下的深度圖像。首先通過Multigen Creator軟件為零件添加DOF節(jié)點,零件的所有面片都歸屬與一個DOF節(jié)點,然后利用OSGDB將模型讀入程序,通過更新回調實現(xiàn)對DOF節(jié)點的控制,使零件按程序讀入的文本實現(xiàn)對零件歐拉角的旋轉控制。相機位置在零件正上方900 mm處,對零件運動的每一幀進行拍照,圖像大小設置為512×424,將500 mm~1100 mm的深度值范圍轉化為0~255的圖像灰度值范圍內,灰度值編碼為:
PX=255-(255(dx-500)/600),dx=[500,1100]
(1)
其中,dx表示像素點的深度值,其取值范圍為500 mm~1100 mm;PX表示像素點的灰度值。通過對不同姿態(tài)的零件進行拍照生成深度圖像構成虛擬訓練集,本文中零件種類識別訓練集一共包含減速器裝配體中的6種零件,虛擬訓練集零件及編號如圖1所示。

(a)零件a (b)零件b (c)零件c

(d)零件d (e)零件e (f)零件f圖1 訓練集零件及編號
本文使用Kinect2.0深度相機采集零件真實深度圖像構成測試集,深度相機在距離水平面900 mm處,通過背景差分法去除背景部分,調節(jié)零件姿態(tài)進行拍照獲取不同角度下的零件真實深度圖像。采集場景如圖2所示。

圖2 測試集采集場景
由于Kinect 2.0深度相機自身精度原因和周圍環(huán)境的干擾導致直接采集得到的真實深度圖像含有一定的黑洞與噪音,為改善測試集的質量,提高零件識別準確率,對采集的深度圖像進行修復處理。將深度圖像內灰度值為0的像素點標記為可疑黑洞,然后計算該像素點鄰域內是否含有非0灰度值的像素點,若含有,則將此像素標記為黑洞,若不含有,則將此像素點標記為背景像素點。首先計算每個黑洞點鄰域內灰度值的眾數(shù),然后將該眾數(shù)值賦予該黑洞點,實現(xiàn)零件深度圖像黑洞填充。黑洞填充完成后,使用中值濾波方式對深度圖像進行平滑修復處理,圖3為修復前后深度圖像對比圖。

(a) 深度圖像修復前 (b)深度圖像修復后圖3 深度圖像修復對比圖
在對卷積神經(jīng)網(wǎng)絡模型進行訓練之前,將圖像訓練集根據(jù)零件種類打包,每個文件夾存放一種零件的虛擬深度圖像,每個零件對應的文件夾編號即為零件的種類標簽。深度圖像訓練集打包完成后,壓縮合成為tfrecord文件,tfrecord是Tensorflow支持的一種數(shù)據(jù)格式,內部使用了“Protocol Buffer”二進制數(shù)據(jù)編碼方案,方便網(wǎng)絡模型訓練時更加快速地讀入訓練集。
卷積神經(jīng)網(wǎng)絡(CNN)是當前計算機視覺領域廣泛使用的深度學習網(wǎng)絡,相比于傳統(tǒng)的人工神經(jīng)網(wǎng)絡,卷積神經(jīng)網(wǎng)絡包含有卷積層和池化層,卷積層采用局部連接和權值共享的方式進行連接,從而顯著降低了參數(shù)數(shù)量[8]。池化層在連續(xù)的卷積層中間,用于壓縮數(shù)據(jù)和參數(shù)量,大幅降低網(wǎng)絡輸入維度,有效的防止過擬合,使網(wǎng)絡具有更高的魯棒性。卷積神經(jīng)網(wǎng)絡可以直接以原始圖片作為輸入,而無需進行復雜的特征提取等預處理工作,端到端的實現(xiàn)目標檢測,卷積公式為:
(2)
其中,x表示特征圖對應的像素值;j表示第j個卷積核;l表示卷積神經(jīng)網(wǎng)絡中的第l層;N表示卷積核所在的區(qū)域;k與b分別表示卷積核與偏置;f表示激活函數(shù)[9]。
由于不同網(wǎng)絡深度、不同的層級結構都會對卷積神經(jīng)網(wǎng)絡模型的訓練速度及訓練精度造成影響[10]。本文構建了兩種不同深度與層級的卷積神經(jīng)網(wǎng)絡模型用來識別零件,通過對比選擇合適的網(wǎng)絡結構,卷積神經(jīng)網(wǎng)絡結構參數(shù)如表1所示。

表1 卷積神經(jīng)網(wǎng)絡結構參數(shù)
網(wǎng)絡的輸入為224 × 244固定尺寸的3通道深度圖像,所有的卷積層均采用尺寸為3×3的卷積核進行卷積操作,為了更完整的保留圖像信息,提高零件識別準確率,所有卷積步長均為1[11]。池化方式全部采用最大池化(Max-pooling),池化核尺寸為2×2,池化步長均為2。激活函數(shù)全部采用ReLU激活函數(shù),對卷積神經(jīng)網(wǎng)絡全連接層添加Dropout隨機滅活一部分神經(jīng)元減輕網(wǎng)絡模型的過擬合,同時對全連接層引入Xavier初始化避免梯度爆炸或梯度消失。
通過對全連接層添加Softmax函數(shù)實現(xiàn)零件的分類,Softmax函數(shù)可將全連接層輸出映射成(0~1)中的值,用來表示每個類別的概率值,其定義函數(shù)為:
(3)
其中,Vi表示每個輸出分類的概率,c為所有分類個數(shù)。
本文零件分類網(wǎng)絡模型均使用交叉熵為損失函數(shù),如式(4)所示,交叉熵損失函數(shù)使用概率分布q來表達概率分布p的準確程度,通過計算兩個概率分布的距離表示兩個概率分布的接近程度,其中p表示的是標簽值,q表示的是預測值,這兩個概率分布距離越短說明預測值越靠近標簽值。

(4)
本文在Win10系統(tǒng)下通過Tensorflow搭建網(wǎng)絡1與網(wǎng)絡2,采用一臺具有2顆Intel Xeon十二核2.2GHz E5-2650V4的處理器、4塊NVIDIA TITANXP (PASCAL 架構)GPU卡、128G內存的服務器對兩個網(wǎng)絡模型進行訓練,訓練集為不同姿態(tài)下的6種零件各300張,學習率設置為0.000 1,batch size設置為20,訓練步數(shù)設置為2000。兩種網(wǎng)絡損失函數(shù)與訓練準確率隨訓練步數(shù)關系如圖4,圖5所示,其中橫坐標X軸為迭代步數(shù),圖4a、圖5a的縱坐標Y軸為損失函數(shù)值,圖4b、圖5b的縱坐標Y軸為訓練準確率。

(a) 損失函數(shù)變化圖 (b) 訓練準確率變化圖圖4 網(wǎng)絡1實驗結果

(a) 損失函數(shù)變化圖 (b) 訓練準確率變化圖圖5 網(wǎng)絡2實驗結果
由損失函數(shù)與訓練準確率得知,網(wǎng)絡1損失函數(shù)在訓練迭代800步后趨于收斂,訓練準確率收斂于0.9~1.0之間,當?shù)?300步時,訓練準確率收斂于1.0。網(wǎng)絡2損失函數(shù)在迭代600步后趨于收斂,訓練準確率收斂于0.95~1.0之間左右,迭代800步后,其訓練準確率維持在1.0,訓練過程中當損失函數(shù)震蕩,其訓練準確率會同步下降。通過對比兩個不同結構的網(wǎng)絡得知,當網(wǎng)絡深度越深,損失函數(shù)震蕩幅度相對較小,訓練準確率提升較快,其擬合性較好。
訓練完成后測試網(wǎng)絡模型對零件識別的準確率,測試集由100張Kinect2.0采集的深度照片組成,6種零件各100張。測試集準確率如圖6所示,由測試集準確率得,網(wǎng)絡1在零件c的識別率與零件d的識別率較低,其余零件的識別率都在90%以上,而網(wǎng)絡2在零件c與零件d的識別率都在90%左右,其余零件識別率為95%以上,魯棒性較強。由測試結果查看,零件c識別錯誤情況為錯誤識別成了零件d,零件d識別錯誤成零件c。零件c與零件d皆為軸桿,但是零件d有螺紋,零件c與零件d在一定的姿態(tài)下辨識度并不高,故這兩件相似的零件存在較多錯誤識別的情況。網(wǎng)絡2在所有測試集上的平均準確率為94.8%,優(yōu)于文獻[12]基于SVM的零件識別的平均準確率93.2%。

圖6 兩種網(wǎng)絡模型的測試集準確率
本文針對工業(yè)自動化裝配的零件識別問題,以卷積神經(jīng)網(wǎng)絡為平臺建立了零件分類識別系統(tǒng)。利用OSG虛擬仿真技術制備大量深度圖像訓練集提高模型訓練的泛化能力,有效地解決了傳統(tǒng)零件識別方法中的零件的無紋理、光照、噪聲等問題。對Kinect 2.0采集的深度圖像測試集修復處理后進行測試,使用網(wǎng)絡2的平均準確率高達94.8%,優(yōu)于傳統(tǒng)基于特征提取和模板匹配的方法,能滿足自動化工業(yè)流水線上的零件分類的要求,相比于傳統(tǒng)的人工分類識別,能明顯提高工業(yè)生產(chǎn)效率。