劉 佳,卞方舟,陳大鵬,李為斌
南京信息工程大學(xué) 自動化學(xué)院B-DAT&CICAEET,南京 210044
人手指尖檢測在人機(jī)交互領(lǐng)域有著十分重要的意義。指尖檢測方法主要可分為傳統(tǒng)方法和基于深度學(xué)習(xí)的方法。傳統(tǒng)的方法利用Kinect獲取深度圖像,結(jié)合凸包與曲率分析法來檢測指尖[1],但該方法在手部有遮擋情況下的效果有待提升;王艷等[2]提出一種將Hu不變矩和指尖個數(shù)相結(jié)合的靜態(tài)手勢識別方法,該方法在識別靜態(tài)手勢上效果顯著;楊洋等[3]提出用YCbCr色彩空間來檢測膚色,以便對輸入的圖像進(jìn)行手勢區(qū)域分割,該方法易受有類膚色的背景影響;Wang等[4]提出了一種融合二維輪廓和三維深度信息來檢測指尖并利用卡爾曼濾波來跟蹤指尖的三維位置的方法;孟浩等[5]提出一種基于深度信息的指尖檢測-跟蹤-監(jiān)督的融合算法,該方法在指尖跟蹤速度上有待提高。傳統(tǒng)的方法大多利用手部特征來檢測指尖,對手部輪廓的完整性、光照強(qiáng)度、背景復(fù)雜度等都有一定的要求,因此這些方法或多或少都存在一些缺陷,指尖檢測的準(zhǔn)確率與實(shí)時性有待提高。
近些年,隨著深度學(xué)習(xí)快速發(fā)展,越來越多的研究嘗試?yán)蒙疃葘W(xué)習(xí)的相關(guān)方法來解決指尖檢測的問題。例如,贠衛(wèi)國等[6]通過構(gòu)建深度卷積神經(jīng)網(wǎng)絡(luò)(convolutional neural network,CNN)來對手勢進(jìn)行分類,提出了一種基于深度學(xué)習(xí)的多特征融合的手勢識別方法;Huang等[7]提出了一種具有雙層級聯(lián)結(jié)構(gòu)的CNN模型,該模型第一層網(wǎng)絡(luò)用于生成手部區(qū)域框,第二層用于檢測指尖并返回精確位置;Nguyen等[8]提出一種把RGB-D圖像和卷積神經(jīng)網(wǎng)絡(luò)相結(jié)合的指尖檢測方法,此方法可以同時處理靜態(tài)與動態(tài)場景;Wu等[9]提出一種基于神經(jīng)網(wǎng)絡(luò)熱圖回歸的指尖檢測解決方案,通過構(gòu)建的YOLSE網(wǎng)絡(luò),該方案可以從單個RGB圖像中檢測出指尖。以上方法大多需要訓(xùn)練一個單獨(dú)的模型,導(dǎo)致訓(xùn)練成本高,實(shí)用性差,并且為了追求準(zhǔn)確率將網(wǎng)絡(luò)堆疊層數(shù)加深,導(dǎo)致平均運(yùn)行時間變長,實(shí)時性表現(xiàn)不佳,因此在實(shí)時性上有待優(yōu)化。
預(yù)測高斯熱圖方法主要應(yīng)用在人體姿態(tài)估計上,受到此方面研究的啟發(fā),本文利用預(yù)測高斯熱圖與深度學(xué)習(xí)方法設(shè)計一個精確、魯棒的指尖檢測模型,以實(shí)現(xiàn)快速且準(zhǔn)確地檢測出指尖并識別手勢。該模型結(jié)合了卷積神經(jīng)網(wǎng)絡(luò)(CNN)與全卷積神經(jīng)網(wǎng)絡(luò)(FCNN)的特點(diǎn),是一種可以同時進(jìn)行指尖位置預(yù)測和識別手勢的統(tǒng)一卷積神經(jīng)網(wǎng)絡(luò)(unified-gesture-and-fingertip-network,UGF-Net)。
如圖1所示,本文提出的指尖檢測算法主要包含以下步驟:首先使用深度學(xué)習(xí)目標(biāo)檢測算法YOLO[10-12]對輸入的原始圖像進(jìn)行檢測,并裁剪手部候選區(qū)域;將裁剪的手部區(qū)域作為UGF-Net網(wǎng)絡(luò)的輸入,利用CNN[13-14]的全連接層來預(yù)測不同手勢中可見的指尖數(shù)目以進(jìn)行手勢分類,然后利用FCNN輸出各指尖的熱圖,并根據(jù)熱圖中的高斯概率分布獲取多組指尖位置的集合,通過計算平均值來預(yù)測最終的指尖位置。
圖1 指尖檢測算法流程框圖Fig.1 Flow chart of fingertip detection algorithm
本文使用YOLO目標(biāo)檢測算法來提取手部區(qū)域。YOLO是由Joseph Redmon等提出的一種以實(shí)時性為優(yōu)先級的目標(biāo)檢測算法,它將物體檢測問題轉(zhuǎn)換為回歸問題來求解,直接利用輸入圖像的特征值來預(yù)測目標(biāo)對象的空間位置、范圍以及條件類別概率,檢測速度非???。YOLOv2通過使用anchor機(jī)制、批歸一化以及維數(shù)聚類等多種優(yōu)化方式來改進(jìn)原始YOLOv1的檢測過程,在保持原有速度的同時提升了檢測精度[15]。本文提出了一種基于YOLOv2的手部區(qū)域檢測算法,如圖2所示。
圖2 手部區(qū)域檢測流程圖Fig.2 Flow chart of hand area detection
基于YOLOv2的手部區(qū)域檢測算法的具體實(shí)現(xiàn)過程如下:
(1)圖像預(yù)處理
首先將原始圖像640×480縮放為224×224的輸入圖像,然后將輸入圖像劃分為7×7個單元格,每個單元格的尺寸大小為32×32,單元格將用于預(yù)測一定數(shù)量的候選邊界框(bounding box)。尺寸縮放的目的一是為了降低計算復(fù)雜度,二是便于等比例劃分單元格且保證每個候選框中僅有一個中心單元格。
(2)先驗(yàn)框聚類
與YOLOv1直接預(yù)測邊界框的坐標(biāo)位置不同,YOLOv2引入了Faster R-CNN中的anchor機(jī)制,通過預(yù)測先驗(yàn)框(anchor box)中的偏移量和置信度來獲取手部區(qū)域的位置和類別概率。在Faster R-CNN中,先驗(yàn)框的尺寸參數(shù)均是人工設(shè)定的,這存在一定的局限性和主觀性。YOLOv2利用K-means算法來聚類分析訓(xùn)練樣本中真實(shí)邊界框的位置信息,以找出最佳的先驗(yàn)框的坐標(biāo)。由于設(shè)置先驗(yàn)框的主要目的是提高候選框和真實(shí)邊界框的“交并比”(IOU),因此采用IOU值為評價標(biāo)準(zhǔn),即K-means的距離度量可定義為式(1),其中centroid是聚類時被選作中心的邊框,box表示為其他邊框。
(3)位置預(yù)測
經(jīng)實(shí)驗(yàn)測試,最終選取5個聚類中心作為先驗(yàn)框,并將特征圖劃分為7×7個單元格,每個單元格都將預(yù)測5個候選邊界框(對應(yīng)于先驗(yàn)框的數(shù)量),每個候選框包含5個預(yù)測值tx、ty、tw、th和Conf( )bbox。其中(tx,ty)表示候選框相對于單元格坐標(biāo)的偏移量,(tw,th)表示的是尺寸縮放。根據(jù)以下四個公式可計算出候選框的位置和范圍:
其中,(cx,cy)表示中心單元格與圖像左上角的橫縱距離、(pw,ph)表示先驗(yàn)框的尺寸大小、σ表示的是sigmoid激活函數(shù),作用是將邊界框的中心點(diǎn)約束在當(dāng)前單元格內(nèi)。bx、by、bw、bh就是候選框的中心點(diǎn)和尺寸。如圖3所示,藍(lán)色實(shí)線矩形表示候選框,紅色虛線矩形表示先驗(yàn)框。
圖3 邊界框位置參數(shù)預(yù)測Fig.3 Prediction of boundary box location parameters
置信度Conf(bbox)由兩部分組成,一是單元格中是否存在目標(biāo)實(shí)例,二是邊界框的準(zhǔn)確率,其定義如式(6)所示。如果目標(biāo)存在,則Pr(Obj)為1,置信度Conf(bbox)等于IOU;否則,Pr(Obj)為0,置信度Conf(bbox)也等于0。
每個單元格不僅能輸出候選框的5個預(yù)測值,同時還能預(yù)測條件類別概率Pr(Classi|Object),它表示單元格中存在目標(biāo)實(shí)例且屬于某一類別的概率。在檢測過程中,可以根據(jù)式(7)計算得到各個單元格的類別概率值:
(4)篩選邊界框
類別概率值包含了預(yù)測的類別信息和邊界框的準(zhǔn)確度。本文中候選框的總數(shù)是特征圖尺寸與先驗(yàn)框數(shù)目的乘積(即為7×7×5=245)。首先根據(jù)式(6)和式(7)過濾掉一些置信度較低的候選框,然后根據(jù)經(jīng)驗(yàn)設(shè)定一個固定閾值(本文設(shè)定為0.7),并過濾掉那些類別概率值小于該閾值的候選框,最后利用非極大值抑制(nonmaximum suppression,NMS)篩選出最佳的手部區(qū)域邊界框。如圖4所示,圖中的紫色矩形框即為篩選出的最佳手部區(qū)域邊界框。
圖4 手部區(qū)域提取結(jié)果Fig.4 Hand region extraction results
手勢區(qū)域檢測完成以后,再對裁剪出的手勢區(qū)域進(jìn)行指尖檢測與手勢識別。在文獻(xiàn)[13]中,指尖的位置信息是直接從CNN的全連接層中回歸得到的,經(jīng)實(shí)驗(yàn)分析可知,該方法對單點(diǎn)指尖具有較好的識別率,但在多點(diǎn)指尖檢測任務(wù)中表現(xiàn)一般,并且它需要訓(xùn)練多個模型用于檢測不同手勢中的指尖。熱圖回歸方法最初用于人體關(guān)節(jié)點(diǎn)的預(yù)測任務(wù),Pfister等[16]提出了一種基于關(guān)節(jié)點(diǎn)的人體姿態(tài)估計算法,首先利用FCNN輸出人體各個關(guān)節(jié)點(diǎn)的熱圖,每個熱圖中均分布了一組高斯概率,通過計算高斯峰值來預(yù)測各個關(guān)節(jié)點(diǎn)的位置。在計算復(fù)雜度和實(shí)時性等方面,該方法的表現(xiàn)結(jié)果明顯優(yōu)于直接對關(guān)節(jié)位置進(jìn)行回歸的方法。
1.2.1 高斯熱圖回歸
預(yù)測高斯熱圖這種方法主要應(yīng)用在人體姿態(tài)估計,可以輸出人體關(guān)節(jié)關(guān)鍵點(diǎn)實(shí)現(xiàn)人體姿態(tài)估計。本文受到此方面研究的啟發(fā),將這個方法應(yīng)用在指尖檢測上,首先利用FCN輸出手部各個關(guān)節(jié)點(diǎn)的熱圖,每個熱圖中均分布了一組高斯概率,通過計算高斯峰值來預(yù)測各個指尖的位置。
文中使用argmax算法來計算關(guān)鍵點(diǎn)的坐標(biāo),計算得出的峰值就是關(guān)鍵點(diǎn)的坐標(biāo)值。如式(8)所示,已知一個映射g:X→Y,x的取值范圍為S,argmax的結(jié)果為使得g(x)取得最大值的x的點(diǎn)集。
如圖5所示,在對高斯熱圖進(jìn)行argmax處理的時候,圖中0.8為最大值,它的位置就是關(guān)鍵點(diǎn)激活的對應(yīng)像素點(diǎn)。
圖5 高斯熱圖回歸Fig.5 Gauss thermograph regression
本文利用FCNN來得到輸出,并在全卷積特征圖后面接一個轉(zhuǎn)換模塊,將空間高斯熱圖轉(zhuǎn)換為關(guān)鍵點(diǎn)坐標(biāo)點(diǎn)集合,通過取集合的平均值來回歸指尖位置的最終輸出,如式(9)所示:
1.2.2 UGF-Net
結(jié)合兩種檢測方法的優(yōu)勢,本文設(shè)計了一種同時用于指尖檢測和手勢識別的統(tǒng)一卷積神經(jīng)網(wǎng)絡(luò)UGF-Net算法,該算法通過預(yù)測手指類別的概率來識別不同手勢,并利用FCNN回歸指尖的坐標(biāo)信息集合,然后通過取集合的平均值來回歸最終的指尖位置輸出。圖6顯示的是UGF-Net網(wǎng)絡(luò)結(jié)構(gòu)。
圖6 指尖檢測網(wǎng)絡(luò)結(jié)構(gòu)Fig.6 Fingertip detection network structure
由圖可知,UGF-Net網(wǎng)絡(luò)是以VGG16-Net[17-18]作為主干網(wǎng)絡(luò),主要包含兩個部分。第一部分是卷積神經(jīng)網(wǎng)絡(luò)模塊,它含有若干卷積層和全連接層;第二部分是全卷積神經(jīng)網(wǎng)絡(luò)模塊,它只含有較少的卷積核和上采樣層。在基于UGF-Net網(wǎng)絡(luò)的指尖檢測任務(wù)中,考慮到計算復(fù)雜度和實(shí)時性等性能要求。該模型首先將網(wǎng)絡(luò)的輸入尺寸設(shè)定為128×128,然后利用VGG16的前五個Block輸出手勢圖像的特征圖,并將該特征圖用于后續(xù)的研究工作。
在指尖坐標(biāo)位置檢測任務(wù)中,在得到手勢圖像的特征圖后,通過最終層輸出大小為4×4×512的手勢特征圖。然后采用雙線性插值的上采樣方法擴(kuò)張最后卷積層輸出的特征圖的尺寸,將尺寸轉(zhuǎn)換為12×12×512,接著使用一個3×3的卷積核將新的特征圖生成一組表征指尖的熱圖集合。利用熱圖得到10組指尖的位置集合,最后通過計算指尖坐標(biāo)集合的平均值來預(yù)測最終的指尖位置。
在手勢識別任務(wù)中,本文首先將特征圖映射成一組長度為8 192的特征向量。然后利用全連接層來輸出各個指尖的概率,如果概率值大于預(yù)先設(shè)定的閾值P(本文設(shè)定為0.5),則表示能檢測到對應(yīng)的指尖;如果概率值小于閾值P,則不能檢測到指尖。最后通過一組一維向量來表示不同姿態(tài)的手勢。例如日常交流中“勝利”手勢可表示為[0,1,1,0,0],圖6中手形則表示為[1,1,1,1,1]。
SCUT-Ego-Gesture數(shù)據(jù)集[9]是由華南理工大學(xué)人機(jī)智能交互實(shí)驗(yàn)室建立并公開的一組手勢數(shù)據(jù)集,它包含16種不同姿態(tài)的手勢,共收集了59 111張以自我為中心的彩色手勢圖像。該數(shù)據(jù)已預(yù)先標(biāo)注了手部區(qū)域包圍框、指尖點(diǎn)以及部分關(guān)節(jié)點(diǎn)的二維坐標(biāo)信息。本文選用前8類單手交互樣本進(jìn)行手部區(qū)域分割和指尖檢測模型的訓(xùn)練,如圖7所示。
圖7 單手手勢樣本Fig.7 Sample of one hand gesture
本實(shí)驗(yàn)的硬件平臺選用高性能的英偉達(dá)GeForce GTX1080顯卡,英特爾i5-7400處理器,主頻3 GHz,16 GB顯存,32 GB內(nèi)存。軟件方面則選用了tensorflow深度學(xué)習(xí)框架,并基于并行計算架構(gòu)CUDA和CUDNN完成并行優(yōu)化。
在指尖識別模型訓(xùn)練過程中,本實(shí)驗(yàn)選用了Adam優(yōu)化算法來更新神經(jīng)網(wǎng)絡(luò)權(quán)重,其中參數(shù)初始學(xué)習(xí)率lr為1E-5,參數(shù)β1和β2分別為0.9和0.999,模糊因子ε設(shè)置為1E-8。本實(shí)驗(yàn)的迭代次數(shù)epoch為100,數(shù)據(jù)批處理大小batch_size設(shè)置為8。
2.2.1 測試集實(shí)驗(yàn)結(jié)果
圖8顯示了指尖檢測算法在手勢測試集上可視化的結(jié)果,圖(a)表示了在不同光照變化環(huán)境下的檢測結(jié)果,可以看出,本文指尖檢測算法均能夠準(zhǔn)確地裁剪出手勢圖像,并檢測出指尖點(diǎn)的二維坐標(biāo)。圖(b)表示了在不同復(fù)雜背景下的檢測結(jié)果,可以看出,本文指尖檢測算法在復(fù)雜情形中仍然表現(xiàn)出了較高的識別率和較好的魯棒性。
圖8 指尖檢測算法結(jié)果展示Fig.8 Fingertip detection algorithm results display
2.2.2 實(shí)時視頻圖像檢測結(jié)果
圖9顯示了本文指尖檢測算法在視頻圖像中的實(shí)時表現(xiàn)結(jié)果,其中紫色方框表示了基于YOLOv2的手部區(qū)域檢測的結(jié)果,彩色實(shí)心圓表示的是基于UGF-Net網(wǎng)絡(luò)所預(yù)測得到的指尖坐標(biāo)位置。
圖9(a)顯示了正常情況下用戶的手勢的檢測結(jié)果,圖片依次為手勢一到手勢八,均能檢測準(zhǔn)確;圖9(b)顯示了不同指尖角度的情況下的檢測結(jié)果,包括用戶的手勢離相機(jī)較遠(yuǎn)且有45°傾斜時、用戶手勢90°垂直于相機(jī)平面、用戶手勢離相機(jī)較遠(yuǎn)等情況。圖9(c)表示的復(fù)雜環(huán)境下的檢測結(jié)果,包括環(huán)境中有類膚色物體的出現(xiàn)。綜上所述可知,本文指尖檢測算法在不同情況中均表現(xiàn)出了較好的準(zhǔn)確性和魯棒性。此外,本文算法的平均幀率達(dá)到了34.51 frame/s,滿足實(shí)時性的要求。
圖9 實(shí)時指尖檢測算法結(jié)果展示Fig.9 Real time fingertip detection algorithm results display
與傳統(tǒng)方法相對比,傳統(tǒng)的指尖檢測方法大多利用手部的特征來檢測指尖,對手部輪廓的完整性、外界光照強(qiáng)度、背景復(fù)雜度等都有一定的要求,因此檢測速度與精度都有待于提高。受到人體姿態(tài)估計方面研究的啟發(fā),UGF-Net算法使用基于高斯熱圖的輸出方式,由于高斯熱圖輸出的特征圖較大,因此它的空間泛化能力強(qiáng)。并且使用全連接層進(jìn)行預(yù)測不同手勢中可見的指尖數(shù)目以進(jìn)行手勢分類,來提高指尖預(yù)測的精度。UGF-Net算法在保證檢測精度的情況下適當(dāng)?shù)販p少了網(wǎng)絡(luò)的堆疊層數(shù),有效地提高了速度,因此實(shí)時性得到了改善。
UGF-Net算法通過實(shí)驗(yàn)驗(yàn)證,在上文提到的復(fù)雜情況下,指尖檢測的準(zhǔn)確率與實(shí)時性相對于傳統(tǒng)方法來說都有了較大的提升。
為了準(zhǔn)確地評估UGF-Net算法的準(zhǔn)確性和實(shí)時性,本次實(shí)驗(yàn)選取了在SCUT-Ego-Gesture數(shù)據(jù)上表現(xiàn)結(jié)果較為突出的三種指尖檢測算法進(jìn)行比較分析,它們分別是Hand-RCNN、HF-Net、RGB-D&CNN以及YOLSE。表1描述了本文算法與其他指尖檢測算的性能比較結(jié)果,包括準(zhǔn)確率、召回率、平均誤差以及運(yùn)行速度。
表1 各指尖檢測算法性能對比Table 1 Performance comparison of fingertip detection algorithms
通過上述分析可得,本節(jié)描述的基于UGF-Net網(wǎng)絡(luò)的指尖檢測算法在準(zhǔn)確率、召回率上相對于Hand-RCNN、HF-Net、RGB-D&CNN以及YOLSE有所提高,平均誤差也所降低,運(yùn)行速度相對于YOLSE來說有所降低,但相比于其余兩個網(wǎng)絡(luò)結(jié)構(gòu)來說速度有所提升。因此該UGF-Net算法在整體性能上相對于其他指尖檢測算法有所提升,指尖檢測效果也更為優(yōu)異。
如圖10所示,規(guī)定檢測出指尖為“1”,沒有檢測出指尖為“0”,將選用的8種手勢分別用一維向量來表示。例如,第一個手勢可表示為[0,1,0,0,0],第六個手勢可以表示為[1,0,0,0,1]。
圖10 各手勢的向量表示Fig.9 Vector representation of gestures
指尖檢測的準(zhǔn)確性如表2所示,分別進(jìn)行了100組實(shí)驗(yàn),分別記錄了每組檢測到的指尖個數(shù),根據(jù)結(jié)果可知,其中第三個手勢和第七個手勢分別出現(xiàn)了一次誤判的情況,可能是由于測試時手部比劃手勢存在晃動的情況,以至于模糊導(dǎo)致的誤判斷,但是整體準(zhǔn)確率達(dá)到99.8%,因此該指尖檢測算法的性能可靠,可滿足要求。
表2 各指尖檢測準(zhǔn)確性結(jié)果Table 1 Accuracy results of fingertip detection
本文設(shè)計了一個基于深度學(xué)習(xí)的指尖檢測系統(tǒng),它由手部區(qū)域算法和指尖檢測算法兩部分組成。首先利用YOLOv2網(wǎng)絡(luò)訓(xùn)練一個手部區(qū)域檢測模型,用于定位二維空間內(nèi)的手勢位置信息,并將檢測到手勢區(qū)域裁剪出來用作指尖檢測部分的輸入。在指尖檢測部分,設(shè)計了一個UGF-Net網(wǎng)絡(luò)用于精細(xì)的手勢識別和指尖檢測,首先利用CNN的全連接層來預(yù)測不同手勢中可見的指尖數(shù)目以進(jìn)行手勢分類,然后利用FCNN輸出并可視化各指尖的熱圖,并根據(jù)熱圖中的高斯概率分布獲取多組指尖位置的集合,通過計算平均值來預(yù)測最終的指尖位置。該算法目前通過指尖檢測信息可判斷簡單的八種手勢,接下來將研究更多的手勢姿態(tài),以能夠更加地貼合生活實(shí)際,使其具有一定的現(xiàn)實(shí)意義。