劉 佳,卞方舟,陳大鵬,李為斌
南京信息工程大學 自動化學院B-DAT&CICAEET,南京 210044
人手指尖檢測在人機交互領域有著十分重要的意義。指尖檢測方法主要可分為傳統方法和基于深度學習的方法。傳統的方法利用Kinect獲取深度圖像,結合凸包與曲率分析法來檢測指尖[1],但該方法在手部有遮擋情況下的效果有待提升;王艷等[2]提出一種將Hu不變矩和指尖個數相結合的靜態手勢識別方法,該方法在識別靜態手勢上效果顯著;楊洋等[3]提出用YCbCr色彩空間來檢測膚色,以便對輸入的圖像進行手勢區域分割,該方法易受有類膚色的背景影響;Wang等[4]提出了一種融合二維輪廓和三維深度信息來檢測指尖并利用卡爾曼濾波來跟蹤指尖的三維位置的方法;孟浩等[5]提出一種基于深度信息的指尖檢測-跟蹤-監督的融合算法,該方法在指尖跟蹤速度上有待提高。傳統的方法大多利用手部特征來檢測指尖,對手部輪廓的完整性、光照強度、背景復雜度等都有一定的要求,因此這些方法或多或少都存在一些缺陷,指尖檢測的準確率與實時性有待提高。
近些年,隨著深度學習快速發展,越來越多的研究嘗試利用深度學習的相關方法來解決指尖檢測的問題。例如,贠衛國等[6]通過構建深度卷積神經網絡(convolutional neural network,CNN)來對手勢進行分類,提出了一種基于深度學習的多特征融合的手勢識別方法;Huang等[7]提出了一種具有雙層級聯結構的CNN模型,該模型第一層網絡用于生成手部區域框,第二層用于檢測指尖并返回精確位置;Nguyen等[8]提出一種把RGB-D圖像和卷積神經網絡相結合的指尖檢測方法,此方法可以同時處理靜態與動態場景;Wu等[9]提出一種基于神經網絡熱圖回歸的指尖檢測解決方案,通過構建的YOLSE網絡,該方案可以從單個RGB圖像中檢測出指尖。以上方法大多需要訓練一個單獨的模型,導致訓練成本高,實用性差,并且為了追求準確率將網絡堆疊層數加深,導致平均運行時間變長,實時性表現不佳,因此在實時性上有待優化。
預測高斯熱圖方法主要應用在人體姿態估計上,受到此方面研究的啟發,本文利用預測高斯熱圖與深度學習方法設計一個精確、魯棒的指尖檢測模型,以實現快速且準確地檢測出指尖并識別手勢。該模型結合了卷積神經網絡(CNN)與全卷積神經網絡(FCNN)的特點,是一種可以同時進行指尖位置預測和識別手勢的統一卷積神經網絡(unified-gesture-and-fingertip-network,UGF-Net)。
如圖1所示,本文提出的指尖檢測算法主要包含以下步驟:首先使用深度學習目標檢測算法YOLO[10-12]對輸入的原始圖像進行檢測,并裁剪手部候選區域;將裁剪的手部區域作為UGF-Net網絡的輸入,利用CNN[13-14]的全連接層來預測不同手勢中可見的指尖數目以進行手勢分類,然后利用FCNN輸出各指尖的熱圖,并根據熱圖中的高斯概率分布獲取多組指尖位置的集合,通過計算平均值來預測最終的指尖位置。

圖1 指尖檢測算法流程框圖Fig.1 Flow chart of fingertip detection algorithm
本文使用YOLO目標檢測算法來提取手部區域。YOLO是由Joseph Redmon等提出的一種以實時性為優先級的目標檢測算法,它將物體檢測問題轉換為回歸問題來求解,直接利用輸入圖像的特征值來預測目標對象的空間位置、范圍以及條件類別概率,檢測速度非常快。YOLOv2通過使用anchor機制、批歸一化以及維數聚類等多種優化方式來改進原始YOLOv1的檢測過程,在保持原有速度的同時提升了檢測精度[15]。本文提出了一種基于YOLOv2的手部區域檢測算法,如圖2所示。

圖2 手部區域檢測流程圖Fig.2 Flow chart of hand area detection
基于YOLOv2的手部區域檢測算法的具體實現過程如下:
(1)圖像預處理
首先將原始圖像640×480縮放為224×224的輸入圖像,然后將輸入圖像劃分為7×7個單元格,每個單元格的尺寸大小為32×32,單元格將用于預測一定數量的候選邊界框(bounding box)。尺寸縮放的目的一是為了降低計算復雜度,二是便于等比例劃分單元格且保證每個候選框中僅有一個中心單元格。
(2)先驗框聚類
與YOLOv1直接預測邊界框的坐標位置不同,YOLOv2引入了Faster R-CNN中的anchor機制,通過預測先驗框(anchor box)中的偏移量和置信度來獲取手部區域的位置和類別概率。在Faster R-CNN中,先驗框的尺寸參數均是人工設定的,這存在一定的局限性和主觀性。YOLOv2利用K-means算法來聚類分析訓練樣本中真實邊界框的位置信息,以找出最佳的先驗框的坐標。由于設置先驗框的主要目的是提高候選框和真實邊界框的“交并比”(IOU),因此采用IOU值為評價標準,即K-means的距離度量可定義為式(1),其中centroid是聚類時被選作中心的邊框,box表示為其他邊框。

(3)位置預測
經實驗測試,最終選取5個聚類中心作為先驗框,并將特征圖劃分為7×7個單元格,每個單元格都將預測5個候選邊界框(對應于先驗框的數量),每個候選框包含5個預測值tx、ty、tw、th和Conf( )bbox。其中(tx,ty)表示候選框相對于單元格坐標的偏移量,(tw,th)表示的是尺寸縮放。根據以下四個公式可計算出候選框的位置和范圍:

其中,(cx,cy)表示中心單元格與圖像左上角的橫縱距離、(pw,ph)表示先驗框的尺寸大小、σ表示的是sigmoid激活函數,作用是將邊界框的中心點約束在當前單元格內。bx、by、bw、bh就是候選框的中心點和尺寸。如圖3所示,藍色實線矩形表示候選框,紅色虛線矩形表示先驗框。

圖3 邊界框位置參數預測Fig.3 Prediction of boundary box location parameters
置信度Conf(bbox)由兩部分組成,一是單元格中是否存在目標實例,二是邊界框的準確率,其定義如式(6)所示。如果目標存在,則Pr(Obj)為1,置信度Conf(bbox)等于IOU;否則,Pr(Obj)為0,置信度Conf(bbox)也等于0。

每個單元格不僅能輸出候選框的5個預測值,同時還能預測條件類別概率Pr(Classi|Object),它表示單元格中存在目標實例且屬于某一類別的概率。在檢測過程中,可以根據式(7)計算得到各個單元格的類別概率值:

(4)篩選邊界框
類別概率值包含了預測的類別信息和邊界框的準確度。本文中候選框的總數是特征圖尺寸與先驗框數目的乘積(即為7×7×5=245)。首先根據式(6)和式(7)過濾掉一些置信度較低的候選框,然后根據經驗設定一個固定閾值(本文設定為0.7),并過濾掉那些類別概率值小于該閾值的候選框,最后利用非極大值抑制(nonmaximum suppression,NMS)篩選出最佳的手部區域邊界框。如圖4所示,圖中的紫色矩形框即為篩選出的最佳手部區域邊界框。

圖4 手部區域提取結果Fig.4 Hand region extraction results
手勢區域檢測完成以后,再對裁剪出的手勢區域進行指尖檢測與手勢識別。在文獻[13]中,指尖的位置信息是直接從CNN的全連接層中回歸得到的,經實驗分析可知,該方法對單點指尖具有較好的識別率,但在多點指尖檢測任務中表現一般,并且它需要訓練多個模型用于檢測不同手勢中的指尖。熱圖回歸方法最初用于人體關節點的預測任務,Pfister等[16]提出了一種基于關節點的人體姿態估計算法,首先利用FCNN輸出人體各個關節點的熱圖,每個熱圖中均分布了一組高斯概率,通過計算高斯峰值來預測各個關節點的位置。在計算復雜度和實時性等方面,該方法的表現結果明顯優于直接對關節位置進行回歸的方法。
1.2.1 高斯熱圖回歸
預測高斯熱圖這種方法主要應用在人體姿態估計,可以輸出人體關節關鍵點實現人體姿態估計。本文受到此方面研究的啟發,將這個方法應用在指尖檢測上,首先利用FCN輸出手部各個關節點的熱圖,每個熱圖中均分布了一組高斯概率,通過計算高斯峰值來預測各個指尖的位置。
文中使用argmax算法來計算關鍵點的坐標,計算得出的峰值就是關鍵點的坐標值。如式(8)所示,已知一個映射g:X→Y,x的取值范圍為S,argmax的結果為使得g(x)取得最大值的x的點集。

如圖5所示,在對高斯熱圖進行argmax處理的時候,圖中0.8為最大值,它的位置就是關鍵點激活的對應像素點。

圖5 高斯熱圖回歸Fig.5 Gauss thermograph regression
本文利用FCNN來得到輸出,并在全卷積特征圖后面接一個轉換模塊,將空間高斯熱圖轉換為關鍵點坐標點集合,通過取集合的平均值來回歸指尖位置的最終輸出,如式(9)所示:

1.2.2 UGF-Net
結合兩種檢測方法的優勢,本文設計了一種同時用于指尖檢測和手勢識別的統一卷積神經網絡UGF-Net算法,該算法通過預測手指類別的概率來識別不同手勢,并利用FCNN回歸指尖的坐標信息集合,然后通過取集合的平均值來回歸最終的指尖位置輸出。圖6顯示的是UGF-Net網絡結構。

圖6 指尖檢測網絡結構Fig.6 Fingertip detection network structure
由圖可知,UGF-Net網絡是以VGG16-Net[17-18]作為主干網絡,主要包含兩個部分。第一部分是卷積神經網絡模塊,它含有若干卷積層和全連接層;第二部分是全卷積神經網絡模塊,它只含有較少的卷積核和上采樣層。在基于UGF-Net網絡的指尖檢測任務中,考慮到計算復雜度和實時性等性能要求。該模型首先將網絡的輸入尺寸設定為128×128,然后利用VGG16的前五個Block輸出手勢圖像的特征圖,并將該特征圖用于后續的研究工作。
在指尖坐標位置檢測任務中,在得到手勢圖像的特征圖后,通過最終層輸出大小為4×4×512的手勢特征圖。然后采用雙線性插值的上采樣方法擴張最后卷積層輸出的特征圖的尺寸,將尺寸轉換為12×12×512,接著使用一個3×3的卷積核將新的特征圖生成一組表征指尖的熱圖集合。利用熱圖得到10組指尖的位置集合,最后通過計算指尖坐標集合的平均值來預測最終的指尖位置。
在手勢識別任務中,本文首先將特征圖映射成一組長度為8 192的特征向量。然后利用全連接層來輸出各個指尖的概率,如果概率值大于預先設定的閾值P(本文設定為0.5),則表示能檢測到對應的指尖;如果概率值小于閾值P,則不能檢測到指尖。最后通過一組一維向量來表示不同姿態的手勢。例如日常交流中“勝利”手勢可表示為[0,1,1,0,0],圖6中手形則表示為[1,1,1,1,1]。
SCUT-Ego-Gesture數據集[9]是由華南理工大學人機智能交互實驗室建立并公開的一組手勢數據集,它包含16種不同姿態的手勢,共收集了59 111張以自我為中心的彩色手勢圖像。該數據已預先標注了手部區域包圍框、指尖點以及部分關節點的二維坐標信息。本文選用前8類單手交互樣本進行手部區域分割和指尖檢測模型的訓練,如圖7所示。

圖7 單手手勢樣本Fig.7 Sample of one hand gesture
本實驗的硬件平臺選用高性能的英偉達GeForce GTX1080顯卡,英特爾i5-7400處理器,主頻3 GHz,16 GB顯存,32 GB內存。軟件方面則選用了tensorflow深度學習框架,并基于并行計算架構CUDA和CUDNN完成并行優化。
在指尖識別模型訓練過程中,本實驗選用了Adam優化算法來更新神經網絡權重,其中參數初始學習率lr為1E-5,參數β1和β2分別為0.9和0.999,模糊因子ε設置為1E-8。本實驗的迭代次數epoch為100,數據批處理大小batch_size設置為8。
2.2.1 測試集實驗結果
圖8顯示了指尖檢測算法在手勢測試集上可視化的結果,圖(a)表示了在不同光照變化環境下的檢測結果,可以看出,本文指尖檢測算法均能夠準確地裁剪出手勢圖像,并檢測出指尖點的二維坐標。圖(b)表示了在不同復雜背景下的檢測結果,可以看出,本文指尖檢測算法在復雜情形中仍然表現出了較高的識別率和較好的魯棒性。

圖8 指尖檢測算法結果展示Fig.8 Fingertip detection algorithm results display
2.2.2 實時視頻圖像檢測結果
圖9顯示了本文指尖檢測算法在視頻圖像中的實時表現結果,其中紫色方框表示了基于YOLOv2的手部區域檢測的結果,彩色實心圓表示的是基于UGF-Net網絡所預測得到的指尖坐標位置。
圖9(a)顯示了正常情況下用戶的手勢的檢測結果,圖片依次為手勢一到手勢八,均能檢測準確;圖9(b)顯示了不同指尖角度的情況下的檢測結果,包括用戶的手勢離相機較遠且有45°傾斜時、用戶手勢90°垂直于相機平面、用戶手勢離相機較遠等情況。圖9(c)表示的復雜環境下的檢測結果,包括環境中有類膚色物體的出現。綜上所述可知,本文指尖檢測算法在不同情況中均表現出了較好的準確性和魯棒性。此外,本文算法的平均幀率達到了34.51 frame/s,滿足實時性的要求。

圖9 實時指尖檢測算法結果展示Fig.9 Real time fingertip detection algorithm results display
與傳統方法相對比,傳統的指尖檢測方法大多利用手部的特征來檢測指尖,對手部輪廓的完整性、外界光照強度、背景復雜度等都有一定的要求,因此檢測速度與精度都有待于提高。受到人體姿態估計方面研究的啟發,UGF-Net算法使用基于高斯熱圖的輸出方式,由于高斯熱圖輸出的特征圖較大,因此它的空間泛化能力強。并且使用全連接層進行預測不同手勢中可見的指尖數目以進行手勢分類,來提高指尖預測的精度。UGF-Net算法在保證檢測精度的情況下適當地減少了網絡的堆疊層數,有效地提高了速度,因此實時性得到了改善。
UGF-Net算法通過實驗驗證,在上文提到的復雜情況下,指尖檢測的準確率與實時性相對于傳統方法來說都有了較大的提升。
為了準確地評估UGF-Net算法的準確性和實時性,本次實驗選取了在SCUT-Ego-Gesture數據上表現結果較為突出的三種指尖檢測算法進行比較分析,它們分別是Hand-RCNN、HF-Net、RGB-D&CNN以及YOLSE。表1描述了本文算法與其他指尖檢測算的性能比較結果,包括準確率、召回率、平均誤差以及運行速度。

表1 各指尖檢測算法性能對比Table 1 Performance comparison of fingertip detection algorithms
通過上述分析可得,本節描述的基于UGF-Net網絡的指尖檢測算法在準確率、召回率上相對于Hand-RCNN、HF-Net、RGB-D&CNN以及YOLSE有所提高,平均誤差也所降低,運行速度相對于YOLSE來說有所降低,但相比于其余兩個網絡結構來說速度有所提升。因此該UGF-Net算法在整體性能上相對于其他指尖檢測算法有所提升,指尖檢測效果也更為優異。
如圖10所示,規定檢測出指尖為“1”,沒有檢測出指尖為“0”,將選用的8種手勢分別用一維向量來表示。例如,第一個手勢可表示為[0,1,0,0,0],第六個手勢可以表示為[1,0,0,0,1]。

圖10 各手勢的向量表示Fig.9 Vector representation of gestures
指尖檢測的準確性如表2所示,分別進行了100組實驗,分別記錄了每組檢測到的指尖個數,根據結果可知,其中第三個手勢和第七個手勢分別出現了一次誤判的情況,可能是由于測試時手部比劃手勢存在晃動的情況,以至于模糊導致的誤判斷,但是整體準確率達到99.8%,因此該指尖檢測算法的性能可靠,可滿足要求。

表2 各指尖檢測準確性結果Table 1 Accuracy results of fingertip detection
本文設計了一個基于深度學習的指尖檢測系統,它由手部區域算法和指尖檢測算法兩部分組成。首先利用YOLOv2網絡訓練一個手部區域檢測模型,用于定位二維空間內的手勢位置信息,并將檢測到手勢區域裁剪出來用作指尖檢測部分的輸入。在指尖檢測部分,設計了一個UGF-Net網絡用于精細的手勢識別和指尖檢測,首先利用CNN的全連接層來預測不同手勢中可見的指尖數目以進行手勢分類,然后利用FCNN輸出并可視化各指尖的熱圖,并根據熱圖中的高斯概率分布獲取多組指尖位置的集合,通過計算平均值來預測最終的指尖位置。該算法目前通過指尖檢測信息可判斷簡單的八種手勢,接下來將研究更多的手勢姿態,以能夠更加地貼合生活實際,使其具有一定的現實意義。