王健,孫榮春,王瑩
(長春理工大學 電子信息工程學院,長春 130022)
隨著人工智能的不斷進步,使得人機關系變得更加密切,因此,人機交互的工具也變得尤為重要,常見人機交互工具主要有鍵盤和鼠標,但是它們卻需要人類學習和適應,而且在操作與速度上均受到限制,不夠自然。于是人們開始探索更加自然便捷的人機交互方式。而手作為人體結構中最為靈活的部分,同文字和語音語言一樣,是一種比較直觀的交互方式。然而在人機交互過程中,能夠讓計算機準確的識別出手勢的含義,就顯得尤為重要。
目前,手勢識別主要可分為基于數據手套的手勢識別和基于視覺的手勢識別兩種。前者最早起源于Grimes教授領導創(chuàng)造的數據手套,該數據手套通過多個傳感器追蹤人的手勢信息進行手勢識別。至今基于數據手套的手勢識別不斷得到發(fā)展,如呂蕾[1]采用數據手套采集手部的運動數據,運用特征點模板匹配的方法進行手勢識別,該方法在25類手勢中取得98.9%的準確率;而王賦攀[2]通過數據手套與視覺數據相結合。采集3指彎曲度數據并結合視覺模型的方法,有效地簡化了手勢建模與匹配之間的關系,實現了手勢的快速識別。然而,基于數據手套的手勢識別率雖然比較高,但是穿戴設備比較繁瑣且價格高昂。
基于視覺的手勢識別相較于數據手套更受人們的歡迎,它能給人更多的活動自由,應用范圍也得到了擴大,如Feng Bin等人[3]提出從深度圖中提取手勢輪廓和形狀的方式進行手勢識別;朱越[4]提出了一種根據手勢輪廓像素變化的手勢識別方法。通過結合RGB和HSV雙顏色空間,在四種常用的手勢中取得了90%的準確率。但是傳統視覺上的手勢識別在手勢采集過程中不可避免的會存在各種復雜信息,比如遮擋、強光等。導致手勢在分割階段比較困難,從而影響手勢的準確率。但是,隨著Kinect相機的出現,基于深度信息的手勢識別逐漸步入人們的眼簾,深度相機很大程度上解決了手勢復雜,以及光照變化的影響,如譚臺哲[5]提出了基于形狀的手勢識別方法,利用膚色和視差信息從圖像中將目標區(qū)域分割出來,然后再進行手勢識別,取得了相對不錯的效果,但是這種傳統的手勢分割方式在實時性上卻有些不足。
隨著深度學習的不斷發(fā)展,深度學習技術在目標檢測上的識別率不斷增加,其中YOLO[6]、SSD[7]等網絡不斷被人們優(yōu)化,由于神經網絡是通過訓練數據來獲取目標的特征,避免了傳統方法中復雜的特征提取過程。在網絡結構及實時性上得到了很大的改善,因此本文針對上述問題,提出了采用深度圖與RGB圖結合的方式作為輸入,基于雙通道的Mask RCNN網絡的手勢檢測方法,在檢測手勢的同時實現對手勢與背景的分割。本文的主要創(chuàng)新點如下:
(1)首先采用形態(tài)學的方法消除深度圖中的間隙、隨機噪聲,達到對深度圖中空洞的優(yōu)化,再使用雙邊濾波的方法使深度圖中的邊界變得平滑,輪廓更加明顯,減少了訓練過程中提取冗余信息。
(2)在圖像輸入階段,增加一個深度圖的特征提取通道,采用RGB圖像和深度圖像的雙通道輸入網絡,豐富了手勢的空間信息,優(yōu)化了遮擋以及強光帶來的影響。
(3)針對訓練集數據較少,提出采用擾動交疊率算法,通過正負樣本變換,產生擾動標簽來避免過擬合現象。
隨著深度相機的技術的成熟,深度相機種類也不斷增加,但是無論哪種相機拍攝得到的深度圖都會存在各種噪點和空洞的現象。因此,在融合前需要對深度圖作降噪處理,針對此問題,本文提出采用形態(tài)學和雙邊濾波結合的方法對深度圖做預處理。
目前,常見的圖像濾波算法主要有高斯濾波、均值濾波等方法。這些濾波的方法對普通RGB圖中的隨機噪聲有較好的效果,但是對于深度圖中的像素值,會出現邊緣信息丟失等現象,破壞深度信息。而形態(tài)學濾波對深度圖中隨機噪聲和間隙具有較好的效果,再結合雙邊濾波的方法,能夠使處理后的圖像效果更好,更便于提取深度信息。
形態(tài)學濾波[8]主要是基于數學形態(tài)學思想,通過固定形態(tài)的結構元對圖像進行濾波處理,其中膨脹、腐蝕運算是最基本的運算。
形態(tài)學操作中,f被B膨脹定義為:
f被B腐蝕定義為:
其中,f表示原圖像;是B表示結構元素;S和F表示的分別是B和f的定義域。開運算是指先腐蝕后膨脹的運算過程,而閉運算與開運算相反。
開運算過程主要是對去除孤立毛刺有不錯的效果,閉運算主要是對空洞填充,并且能夠修復細小裂縫。然而無論哪一種運算幅度偏大或者偏小效果都會不佳,所以需要開閉運算組合使用,因此,采用的是將這兩種運算進行平均后使用。
開閉濾波公式為:
閉開濾波公式為:
采用的組合濾波公式為:
然而結構元的尺寸以及形狀的選取對形態(tài)學濾波也起著至關重要的作用,本文經過實驗分析得知,當空洞區(qū)域較大時,采取矩形結構元素較為合適。
高斯濾波在消除噪聲的同時,也容易對圖像的輪廓等信息造成破壞,針對此問題,在高斯濾波的基礎上提出了雙邊濾波[9]的方法,它是一種非線性濾波的方法,通過結合圖像的空間鄰近度和相似度的一種處理方式,不僅考慮了像素的歐式距離,還考慮了像素范圍域中的輻射差異,既不破壞邊緣信息又達到了去噪的目的。
高斯函數如下:
其中,(i,j)表示當前點的位置;(x,y)表示中心點的位置。雙邊濾波是在高斯函數的基礎上增加了一個來約束圖像灰度值變化的函數。
其中,I(i,j)表示圖像在點(i,j)的像素值;I(x,y)表示中心點(x,y)的像素值;σr是值域標準差;雙邊濾波的權系數H=HsHr。
隨著目標檢測的發(fā)展進步,基于深度學習的手勢識別技術不斷成熟,能夠從大量的數據中學習到深層特征,避免了傳統方法中復雜的特征提取過程,優(yōu)化了網絡結構。本文采用的是基于 Kaiming He等人[10]提出的 Mask RCNN 神經網絡,該網絡結構與Faster RCNN[11]相比如圖1所示。
圖1 改進Mask RCNN網絡結構圖
Mask RCNN是在Faster RCNN的基礎上修改的,主要是將Faster RCNN中原有的RoI Pooling層替換了RoIAlign,將原來的最鄰近插值換成了雙線性內插的方法,取消了兩次量化操作,使用浮點數作為像素點的坐標。以及添加了并列的FCN層(mask層),實現了目標與背景的像素級的實例分割。
本文算法是基于Mask RCNN改進的,為了能夠有效地利用不同的視覺信息,避免遮擋、光照強度等影響因素對識別準確率的影響,提出在原有主干網絡的基礎上增加了一個深度圖的特征提取通道,用來提取深度圖像的特征信息,本文的網絡結構如圖2所示。
圖2 改進的Mask RCNN網絡結構圖
改進的Mask RCNN網絡主要分為4個部分。
(1)主干網絡
主干網絡是RGB圖像和深度圖像的特征提取網絡,因為RGB圖像更多描繪的是表觀信息,而深度圖像反映的是目標的空間信息,更容易刻畫出目標的形狀,所以提出采用RGB圖像和深度圖像結合的雙通道輸入結構,考慮到手勢的復雜度以及相似性,若要更加精細地提取特征,提高特征提取層的抽象能力,應該增加網絡的層數,而傳統的卷積神經網絡隨著網絡深度的增加,在網絡訓練過程中會出現梯度消失或者梯度爆炸,網絡無法收斂等現象,最終無法繼續(xù)訓練。如圖3所示,ResNet網絡[12]提出了一種新方式,它將輸入以繞道的方式傳給輸出,保護了信息的完整性,解決了傳統網絡加深后梯度消失或者梯度爆炸的現象,所以本文中的兩個通道的特征提取網絡均采用以ResNet-50為基礎的主干網絡,ResNet-50網絡結構如圖4所示,它前面有一個7×7的卷積層(名為conv1),中間有四個塊(名為conv2_x到conv5_x),最后是平均池化層(Avg Pool)和全連接層(FC),因為采用的是雙通道結構,所以本文去除了ResNet-50最后的平均池化層和全連接層,在特征提取階段,雙通道進行權值共享,權值共享的目的主要是為了增加兩個通道在特征學習時的聯系,它不僅能夠減少訓練的參數,而且還提高了網絡訓練識別的效率。在特征融合的過程中,在通道維度上通過串聯的方式將深度特征圖與彩色特征圖進行融合,構成最終的RGB-D特征圖。也就是說,假設彩色特征圖和深度特征圖的大小均為W×H×C,其中W、H、C代表特征圖的寬、高以及通道數,在通道維度上進行融合,融合后的特征圖大小為W×H×(2C)。
圖3 殘差單元結構
圖4 ResNet-50網絡
(2)RPN網絡
RPN(Region Proposal Network)即目標建議網絡,是用來生成可能存在的手勢區(qū)域,其本質是通過比例不同的窗口在特征圖上進行滑動,如圖5所示,然后生成候選區(qū)域(Anchors),圖中以16×16為基準面積,包含三個窗口,他們的比例分別是 2∶1、1∶1、1∶2的窗口,另外兩個分別表示面積大小為8×8和32×32的窗口,同樣包含長寬比為 2∶1、1∶1、1∶2的窗口,RPN 利用以上九種大小比例不同的窗口對特征圖進行滑動提取生成候選區(qū)域,文獻[13]中對不同的anchors進行了分類,分類指標為模型生成的候選框和任意一個標記框的交疊率(intersection-over-union,IoU),正樣本的規(guī)定分為如下幾種:
圖5 RPN算法示意圖
①選取IoU值最大的那個作為正樣本。
②如果IoU>0.7,則作為正樣本。
對于第二種IoU的值也有選取IoU>0.5的,一般第二種情況下,足夠滿足正樣本的個數,但對于少數極端情況,也會有IoU值全都不大于0.7的時候,此時可采用第一種。
負樣本的規(guī)定如下:
③如果IoU<0.3,則作為負樣本,剩下的舍棄不用。
IoU值的計算公式為:
其中,sa和sg分別表示網絡生成的候選框面積和正確的標記框面積,分子表示兩個面積的交集,分母表示兩個面積的并集。
(3)ROI Align層
針對Faster RCNN中ROI Pooling在對比例大小不同尺度的特征圖池化為固定尺度特征圖的過程中,采用的是最鄰近插值的方法,該方法通過四舍五入的方式采取了兩次量化的操作,從而產生了兩次誤差,該操作對目標分類沒有什么影響,但是對像素級的實例分割就產生了很大的影響,最終會導致分割出現偏差的問題。
然而Mask RCNN中ROI Align層在生成候選區(qū)域ROI特征圖上取消了兩次粗糙的量化操作,它通過對x方向和y方向線性插值的方法,保留浮點型坐標,然后使原圖像像素與特征圖像素進行精準的匹配對齊,使得在面對小目標的檢測以及實例分割的時候,能達到更加精確的特征點定位的要求。
(4)分類回歸及分割
根據ROIAlign層形成的固定尺寸的特征圖進行全連接操作和分割操作,在全連接層分支做出目標框的定位和分類,在分割分支通過卷積層的計算對手勢進行像素級的實例分割。
本文的模型完成三個任務,即手勢框的檢測、手勢與背景的分類以及手勢與背景的分割。所以損失函數采用的是多任務的損失函數,定義為:
其中,Lcls表示分類損失函數;Lbox表示邊界框的損失函數;Lmask表示分割損失函數。其中分類誤差和邊界框誤差參考文獻[14]中的公式,分割誤差的公式為:
其中,yij是區(qū)域m×m坐標點(i,j)的標簽值,該點第K類的預測值為,mask分支對每一個ROI定義了一個Km×m維的矩陣,K和m×m表示的是K個分類對應的分辨率區(qū)域,通過sigmod函數對每一個像素求相對熵,從而得到平均相對熵誤差Lmask。然后判斷不同的ROI屬于哪一個分類,最后采用該類分支的相對熵作為誤差值進行計算。
CNN網絡在訓練過程中往往需要大量的數據,但是當圖片較少,訓練次數越高越容易發(fā)生過擬合現象,避免過擬合的方式主要有加強損失層的正則化、數據增廣以及Dropout等方法,但這些方法效果都不太明顯,所以本文針對此問題,提出采用擾動交疊率(DisturbIoU)算法,在訓練過程中,給訓練數據添加擾動標簽,以此來達到降低擬合程度的效果。因為正負樣本是在訓練時根據IoU的值以及正確的標記框的標簽來決定的,所以本文在每1 000次迭代中按一定的噪聲率抽取一些迭代的IoU設為0.5,沒有被抽取到的設為0.7,IoU的變化主要影響的是類別標記。也就是說,在將IoU值變化后,那些原本應標記為正標簽或者負標簽的數據可能變?yōu)榱素摌撕灮蛘哒龢撕?,因此數據中就生成了擾動的標簽,而在RPN反向傳播的階段,會傳播該擾動標簽在損失層上產生的噪聲梯度。
DisturbIoU算法步驟:
IoU的變化會對候選區(qū)域的類別標記產生影響。每個候選區(qū)域首先經過擾動交疊率算法,從而產生擾動標記表示為p=p[p0,p1],其中p0和p1分別表示候選框為背景和目標的概率,p是由IoU的大小決定的。
其中,N是每次迭代的次數;N=1 000;I^服從伯努利分布。
DisturbIoU算法中的噪聲率是用來決定訓練集中錯誤標簽的數量,錯誤標簽越高標簽越不可信,在文獻[15]中可以看出噪聲率為10%的時候可以達到較高的準確率,噪聲率偏高或者偏低都會造成準確率和收斂速度降低,所以本文設定噪聲率為10%,在提高準確率的同時也提高了收斂速度。
本節(jié)內容首先介紹的是本次實驗的軟硬件設備、所使用的數據集以及參數設置,然后是本文所提出的采用RGB圖像和深度圖像作為輸入結合雙通道Mask RCNN網絡和其他一些基本方法在相同數據集上的對比實驗方法。最后詳細對比了不同方法之間的性能,驗證了本文所提出的方法的有效性。
(1)實驗環(huán)境
本次實驗的環(huán)境使用的系統是windows10,并 配 置 py-mask-rcnn網 絡 算 法(https://github.com/matterport/Mask_RCNN),采用 tensotflow1.13.1-gpu,搭建的深度學習框架,選用Python 3.6作為主要的編程語言,在計算機硬件方面采用的顯卡是NVIDIA GeForce GTX 1080Ti,本文算法的所有訓練和測試工作均是在GPU的環(huán)境下完成的。
(2)數據集
本文選的數據集是Microsoft Kinect and Leap Motion(下文簡稱 MKLM)數據集[16]和 CUST-The NUS hand posture datasets II(下文簡稱CUST-NUS)數據集。MKLM數據集包含RGB圖,Depth圖以及confidence圖。該數據集共有10類手勢,由14個不同的人執(zhí)行的手勢,每個手勢重復10次,總共有1 400個手勢,本文只使用了RGB圖和Depth圖,該手勢是在室內拍攝,有少量光照變化,無遮擋變化,屬于簡單背景下的手勢圖片。CUSTNUS數據集是由實驗室根據NUS數據集制作的數據集,該數據集共有10類手勢,1至10類分別以字母a_HN到j_HN命名,由6個不同的人執(zhí)行,每個人重復40次,共包含2 400個彩色圖、深度圖對。該數據集背景復雜(含有人臉,其他相似的干擾手勢,以及不同的光照等,屬于相對較難的手勢數據集。首先通過開源軟件對數據集進行標注,未標注的樣例以及標注的手勢樣例如圖6和圖7所示,通過標注工具使用連續(xù)的線段把整個手勢的輪廓邊緣準確的標注出來,按照Pascal VOC數據的標準進行標注,包含了路徑、標注的形式文件名、類別名以及連接點的坐標。
圖6 未標注手勢樣例
圖7 已標注手勢示例
(3)參數設置
根據以上具體實現方法,進行了模型的訓練,其中隨機從1 400個樣本的MKLM數據集中選取1 000個樣本作為訓練集,同理,從CUST-NUS數據集中選取1 900個樣本作為訓練集進行訓練,其余作為測試集,參數設置依據參考文獻[17]并通過實驗進行微調,設置迭代次數為8 000次,其中學習率設置為0.001和0.000 1的權重衰減率。
(1)設置不同的實驗方法
為了驗證本文算法的有效性,本文使用兩種數據集分別對輸入圖像情況和使用算法情況這兩個方面進行了對比試驗,主要分為以下幾種方式:采用RGB圖像作為輸入的單通道網絡、采用RGB圖和未預處理過的深度圖作為輸入的雙通道網絡、采用RGB圖和預處理后的深度圖作為輸入的雙通道網絡,但是不使用DisturbIoU算法、以及本文提出的采用RGB和深度圖像作為輸入結合雙通道Mask RCNN的網絡。以下簡稱為單通道RGB網絡、雙通道RGB-D*網絡、雙通道RGB-D網絡、本文網絡。除了以上所講的輸入和使用算法情況上不同之外,其余各部分網絡均與本文所提的網絡框架以及參數的設置都相同,如學習率、迭代次數、權重衰減等。
(2)不同實驗方法的性能分析
本文根據以上不同的實驗方法,對已標注的數據集進行了模型的訓練與測試,其中在CUSTNUS數據集下的部分檢測結果如圖8和圖9所示。在簡單背景條件下得到的手勢都相對清晰,但是當光照條件不均勻或者變化時,采用單通道RGB網絡和雙通道RGB-D*網絡識別得到的結果中出現了少數如圖8(a)到圖8(d)所示的錯識以及目標框過大的現象,但是采用本文算法后,以上問題得到了很好的解決,如圖9所示。
圖8 其他三種方法檢測結果示例
圖9 本文方法檢測結果示例
因為RGB圖像更多描繪的是表觀信息,而處理后的深度圖像反映的是目標的空間信息,更容易刻畫出目標的形狀,無論是在簡單背景條件下還是復雜背景條件下,本文算法都能夠較好的完成手勢分類與定位,同時也準確實現了手勢與背景的精確分割。在測試識別的結果中,本文網絡相對于其他網絡結構獲得了比較大的改善。
同時,本文對兩個數據集的檢測結果進行了統計,檢測結果如表1、表2所示,在簡單背景條件下的識別率沒有太大的差距,但是在復雜背景條件下與本文算法相比較,其他三種方法就有了明顯的差距,由表1和表2可以看出,由于添加深度特征提取通道,雙通道RGB-D*網絡相較于單通道RGB網絡在兩個數據集的測試結果中識別率都得到了不錯的提升,可知深度數據與彩色數據結合有益于網絡學習更強的特征信息,進而提高手勢的識別率。而雙通道RGB-D*與雙通道RGB-D相比可以得出,經過預處理后再輸入到網絡中的深度圖更容易獲得準確的特征信息,避免了冗余信息對識別率的影響。因此,可以得出本文算法在識別率上相比其他網絡有著很好的效果。表3中可以看出,在MKLM和CUST-NUS數據集中的測試數據和訓練數據的識別率之差分別減少了1.27%和2.03%,可以看出DisturbIoU算法很好地避免了過擬合的問題。
表1 MKLK數據集不同方法的比較
表2 CUST-NUS數據集不同方法的比較
表3 兩個數據集的手勢識別率比較/%
本文基于傳統Mask RCNN的網絡結構的基礎上,提出了雙通道的Mask RCNN的網絡結構,該網絡結構采用RGB圖像和降噪處理后的深度圖像作為輸入,并將兩種圖像結合ResNet-50網絡分別進行特征提取,然后將兩種特征圖進行融合用于手勢的檢測與分割。并提出采用DisturbIoU算法來避免訓練過擬合的問題,本文算法相比較于傳統算法在手勢的檢測性能以及分割的準確度有不錯的效果,目前,本文中只是較簡單的特征融合,在今后的工作中,將會探索更加有效的特征融合方式,能夠充分利用彩色圖像的信息和深度圖像的信息。同時優(yōu)化算法結構,加快網絡訓練問題。