楊劉濤,孫 瑾,張 哲
(南京航空航天大學(xué) 民航學(xué)院,南京 210016)
隨著計(jì)算機(jī)科學(xué)的快速發(fā)展,對(duì)人機(jī)交互技術(shù)提出了新的挑戰(zhàn)和更高的要求.傳統(tǒng)的人機(jī)交互方式,如鼠標(biāo)、鍵盤和觸摸屏等,并非是一種自然的交互方式,所以尋找新的人機(jī)交互手段具有重要的意義[1],研究符合人類自然習(xí)慣的人機(jī)交互技術(shù),尤其是手部交互技術(shù)成為國內(nèi)外關(guān)注的熱點(diǎn).
基于手勢(shì)的人機(jī)交互由于操作的靈巧性,更容易提供一種自然、和諧、智能的交互方式,被認(rèn)為是下一代人機(jī)交互的趨勢(shì).目前手勢(shì)交互主要采用接觸式測(cè)量和非接觸式測(cè)量兩種方式.接觸式測(cè)量是目前最為成功的人機(jī)交互技術(shù),通過在手部安裝傳感器(例如電磁跟蹤器)或者佩戴裝有傳感器的手套實(shí)現(xiàn)手部交互.這種方式一方面價(jià)格成本昂貴,更重要的是屬于入侵性的交互方法,人的動(dòng)作容易受到硬件設(shè)備的約束,阻礙人手進(jìn)行自然的肢體動(dòng)作,在自然性和精度方面受到限制,而且無法提供豐富感知.相比較,基于視覺的手部交互采用非接觸式測(cè)量技術(shù),具有非侵犯性、代價(jià)小、方面使用等優(yōu)點(diǎn),使自然和諧的人機(jī)交互成為可能.基于視覺的手勢(shì)的人機(jī)交互的關(guān)鍵技術(shù)之一是手勢(shì)識(shí)別.但由于圖像特征受背景、光照等影響,干擾手部準(zhǔn)確定位和識(shí)別,且人手由于自遮擋的問題,也會(huì)導(dǎo)致姿態(tài)識(shí)別的歧義性和多樣性.手勢(shì)識(shí)別分為靜態(tài)手勢(shì)識(shí)別與動(dòng)態(tài)手勢(shì)識(shí)別,靜態(tài)手勢(shì)識(shí)別研究的重點(diǎn)在于手勢(shì)的姿態(tài)和手勢(shì)的形狀[2],于對(duì)單幀圖像進(jìn)行信息處理;動(dòng)態(tài)的手勢(shì)識(shí)別則是捕捉一個(gè)連貫的手勢(shì)動(dòng)作進(jìn)行識(shí)別,包括手型的旋轉(zhuǎn)、形變和運(yùn)動(dòng)軌跡[3,4].
近些年來,深度卷積網(wǎng)絡(luò)在圖像識(shí)別和分類領(lǐng)域取得了出色的成績,而基于視覺的靜態(tài)手勢(shì)識(shí)別在本質(zhì)上是也屬于圖像分類問題.本文將深度卷積網(wǎng)絡(luò)引入靜態(tài)手勢(shì)識(shí)別中,旨在提高識(shí)別精度,克服攝像機(jī)視點(diǎn)變化等因素的影響.同時(shí)由于人手是典型的鏈?zhǔn)浇Y(jié)構(gòu),指節(jié)、手掌和關(guān)節(jié)等各個(gè)部位之間必然發(fā)生復(fù)雜的遮擋和自遮擋關(guān)系,導(dǎo)致觀測(cè)信息缺失.本通過建立雙視點(diǎn)手勢(shì)庫,解決自遮擋問題,提高識(shí)別率.
卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Network,CNN))是一種端到端的學(xué)習(xí)模型,模型中的參數(shù)可以通過傳統(tǒng)的梯度下降方法進(jìn)行訓(xùn)練,經(jīng)過訓(xùn)練的卷積神經(jīng)網(wǎng)絡(luò)能夠?qū)W習(xí)到圖像中的特征,并且完成對(duì)圖像特征的提取和分類[5].
典型的卷積神經(jīng)網(wǎng)絡(luò)由輸入層、卷積層、激活層、池化層和全連接層,最后在全連接層使用softmax函數(shù)輸出分類結(jié)果.
網(wǎng)絡(luò)的訓(xùn)練需設(shè)置損失函數(shù),使用隨機(jī)梯度下降法(SGD)等方法來最小化損失函數(shù),通過誤差的反向傳播以及小批量隨機(jī)(minibatch stochastic)實(shí)現(xiàn)對(duì)大批量樣本的訓(xùn)練[6].
目前用于圖像分類的卷積神經(jīng)網(wǎng)絡(luò)主要有AlexNet[7]、VGGNet[8]和GoogLeNet[9]等網(wǎng)絡(luò)結(jié)構(gòu),本文方法選用GoogLeNet作為訓(xùn)練的網(wǎng)絡(luò)結(jié)構(gòu),主要原因有以下兩點(diǎn):
1)GoogLeNet在傳統(tǒng)卷積神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)的基礎(chǔ)上提出了Inception 結(jié)構(gòu).該結(jié)構(gòu)采用不同大小的卷積核,可采集融合不同尺度的特征,同時(shí)在3×3和5×5的卷積核之前采用1×1卷積核來進(jìn)行降維.這樣的結(jié)構(gòu)使網(wǎng)絡(luò)具有稀疏的結(jié)構(gòu),在增加網(wǎng)絡(luò)深度的同時(shí),使用較少的連接參數(shù),防止過擬合,加強(qiáng)泛化性能.
2)為了避免梯度消失,網(wǎng)絡(luò)額外增加了2個(gè)輔助的softmax層用于向前傳導(dǎo)梯度.這對(duì)于深層的網(wǎng)絡(luò)結(jié)構(gòu)具有很重要的意義,且本文將其用于手勢(shì)識(shí)別,不同手勢(shì)之間只有細(xì)微的差別,所以梯度本身較小,經(jīng)實(shí)驗(yàn)發(fā)現(xiàn),在如VGGNet等深層的網(wǎng)絡(luò)中,梯度會(huì)在傳播的過程消失,造成網(wǎng)絡(luò)的不收斂.
建立一個(gè)可供網(wǎng)絡(luò)訓(xùn)練與測(cè)試的大批量樣本集是使用卷積神經(jīng)網(wǎng)絡(luò)進(jìn)行分類的關(guān)鍵與難點(diǎn)之一.目前主要存在的大型圖像庫有:COCO[10]、ImageNet[11]、PASCAL[12]和SUN[13]等.這類大型圖像庫內(nèi)容覆蓋面廣,但均沒有含有手勢(shì)細(xì)節(jié)的庫,使其無法在手勢(shì)識(shí)別中應(yīng)用.文獻(xiàn)[14]列出了現(xiàn)有22種手勢(shì)庫,但均為單視點(diǎn)手勢(shì)庫,不適用于本文方法.
人手是典型的鏈?zhǔn)浇Y(jié)構(gòu),在單一視點(diǎn)下指節(jié)、手掌和關(guān)節(jié)等各個(gè)部位之間必然發(fā)生復(fù)雜的遮擋和自遮擋關(guān)系,導(dǎo)致觀測(cè)信息缺失.如圖1所示,假設(shè)在圖1(a)的視點(diǎn)下使用攝像
(a)歧義視點(diǎn)下圖像 (b)可能的手勢(shì)種類
圖1 自遮擋造成的歧義
Fig.1 Ambiguous gestures caused by self-occlusion
機(jī)采集手部圖像,由于該視點(diǎn)下手的自遮擋造成了信息缺失、產(chǎn)生歧義,圖1(b)中的各種手勢(shì)都會(huì)采集到相同的圖像,所以直接采用圖1(a)視點(diǎn)圖像進(jìn)行識(shí)別時(shí)極易發(fā)生誤判.此時(shí)就需要引入另一個(gè)視點(diǎn),結(jié)合兩個(gè)視點(diǎn)的信息來消除歧義,提高識(shí)別精度.
前述介紹的單視點(diǎn)手勢(shì)識(shí)別樣本庫無法滿足本文的雙視點(diǎn)識(shí)別的需求.為此本文使用poser 8中的手部模型建立主視圖C1,俯視圖C2兩個(gè)視點(diǎn)下的手勢(shì)庫.通過對(duì)手部模型進(jìn)行三個(gè)方向的轉(zhuǎn)動(dòng),對(duì)同一手勢(shì)建立多幅特征圖.依據(jù)人手可轉(zhuǎn)動(dòng)范圍,如圖2所示,設(shè)定X軸、Z軸轉(zhuǎn)動(dòng)角度在[-90°,90°],Y軸轉(zhuǎn)動(dòng)范圍[-180°,90°],每次轉(zhuǎn)動(dòng)20°,每種手勢(shì)有880種姿態(tài)展現(xiàn).為驗(yàn)證本文方法對(duì)相似手勢(shì)的識(shí)別能力,該手勢(shì)庫設(shè)置20種常見手勢(shì),如圖4所示.其中包含多種相似手勢(shì),如1和6、2和7,以驗(yàn)證本文方法在自遮擋情況下對(duì)他們的識(shí)別能力.
圖2 手模型的轉(zhuǎn)動(dòng)軸Fig.2 Axis of hand model
目前的卷積神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu),單張的圖像可視為一個(gè)三維張量D(i,j,k),其中i為紅、綠、藍(lán)三顏色通道索引,j、k為圖像每個(gè)像素的空間索引.而在網(wǎng)絡(luò)訓(xùn)練時(shí)則批量輸入圖像,則可視為增加一維圖像樣本索引s,即一個(gè)四維張量D(i,j,k,s).
圖3 手勢(shì)圖像庫中20種手勢(shì)Fig.3 20 kinds of gesture in the dataset
在卷積層使用卷積核對(duì)上一層的數(shù)據(jù)進(jìn)行卷積運(yùn)算[6],如公式(1)所示:
(1)
公式(1)中,D′l,j,k為卷積的輸出結(jié)果,代表在通道l上,位于第j行、第k列的像素值.Di,j+m-1,k+n-1為顏色通道i上,位于第j+m-1行、第k+n-1列的像素值.kl,i,m,n為卷積核K的元素.
由公式(1)可知,網(wǎng)絡(luò)在進(jìn)行卷積時(shí),樣本的空間位置及顏色通道由卷積核K的參數(shù)建立相互連接,但在網(wǎng)絡(luò)計(jì)算過程中,每幅圖像之間(即s通道)是相互獨(dú)立的.而雙視點(diǎn)的手勢(shì)圖像庫中,每一個(gè)手勢(shì)對(duì)應(yīng)兩個(gè)視點(diǎn)下的手勢(shì)圖像,若將兩個(gè)視點(diǎn)下的圖像分別輸入同一網(wǎng)絡(luò),則無法建立兩個(gè)視點(diǎn)間的連接關(guān)系.
由于poser 8中攝像機(jī)和手的相對(duì)位置固定,常規(guī)拼接方法會(huì)造成手勢(shì)圖像的大小與位置相對(duì)固定,而在對(duì)真實(shí)手勢(shì)圖像進(jìn)行采集時(shí),由于手的運(yùn)動(dòng)造成攝像機(jī)相對(duì)位置不固定,真實(shí)手的圖像大小和位置與樣本庫有很大差異,這會(huì)造成訓(xùn)練后的網(wǎng)絡(luò)即使能夠正確識(shí)別模型手,但在識(shí)別真實(shí)手時(shí)出現(xiàn)很大誤差,網(wǎng)絡(luò)出現(xiàn)過擬合,泛化能力差.為模擬真實(shí)手勢(shì)樣本中手部圖像位置與大小的變化,增強(qiáng)網(wǎng)絡(luò)的泛化能力,本文提出以下拼接方法:
1)手勢(shì)庫中的手勢(shì)圖像大小為490×500,為了使拼接后圖像不出現(xiàn)拉伸變形,首先設(shè)置寬高比為1:2的矩形窗口.如圖4所示,由于手勢(shì)1在手勢(shì)庫所有手勢(shì)中,手相對(duì)于整張圖像的占比最大,手的寬度為140,為此裁剪基準(zhǔn)矩形窗口寬度應(yīng)大于140,以保證窗口包含完整手勢(shì)圖像;由于寬高比為1:2,為保證窗口高度不超出圖像范圍,窗口寬度應(yīng)小于250.設(shè)置窗口寬度在140~250之間隨機(jī)取值(即窗口大小在圖4中介于實(shí)線窗口與虛線窗口之間),140為圖像中手勢(shì)的寬度,用該矩形窗口遍歷整個(gè)圖像,并計(jì)算每一步窗口內(nèi)的像素和S,如公式(2)所示:
(2)
其中I(i,j)為原始圖像第i行、第j列的灰度值,由于手勢(shì)樣本為RGB圖像,需先將該圖像轉(zhuǎn)換為灰度圖后再計(jì)算(此處將手勢(shì)樣本轉(zhuǎn)化為灰度圖僅是用于確定矩形窗口位置,最終剪切后的樣本仍為RGB圖像);(k,l)為矩形窗口左上頂點(diǎn)的位置;width為矩形窗口寬度.
圖4 遍歷圖像的窗口大小設(shè)置Fig.4 Size of window
2)由于背景為黑色,灰度值為0,當(dāng)S值為最大時(shí),窗口包含了整個(gè)手部圖像.分別選取兩個(gè)視點(diǎn)中使S最大的矩形窗口位置(k,l).此處矩形窗口位置(k,l)不唯一,(k,l)值不同時(shí),手在窗口中的相對(duì)位置也不同.隨機(jī)選取其中一個(gè)(k,l),剪切該窗口位置的圖像.
3)對(duì)兩個(gè)視點(diǎn)下圖像分別按照步驟2的方法進(jìn)行剪切,最后將拼接圖像的大小縮放為統(tǒng)一的大小,本文實(shí)驗(yàn)中使用GoogLeNet,所以縮放到其輸入層的圖像大小為224×224,拼接流程如圖5所示.由于矩形窗口大小和窗口左上頂點(diǎn)位置(k,l)的隨機(jī)選取,手的大小和位置也具有隨機(jī)性,以此來模擬手與攝像機(jī)相對(duì)位置的變化、消除樣本大小和位置過于固定帶來的過擬合問題.
4)對(duì)每個(gè)樣本進(jìn)行兩次上述步驟1至步驟3的操作,由于取值的隨機(jī)性,每次操作都會(huì)有不同的圖像,實(shí)現(xiàn)對(duì)手勢(shì)庫的進(jìn)一步擴(kuò)充.
按照上述步驟完成雙視點(diǎn)手勢(shì)的拼接后,每種手勢(shì)1760張手勢(shì)圖,20種手勢(shì)共35200個(gè)樣本,將手勢(shì)庫分為訓(xùn)練集與測(cè)試集(測(cè)試集與訓(xùn)練集的劃分方式將在4.1與4.2中詳細(xì)說明),使用訓(xùn)練集訓(xùn)練GoogLeNet,使用測(cè)試集測(cè)試其分類的準(zhǔn)確率.
圖5 手勢(shì)樣本剪切拼接流程Fig.5 Process to cut and stitch gesture
本文使用python 2.7與Berkeley AI Research 發(fā)布的Caffe[15](Convolutional Architecture for Fast Feature Embedding)構(gòu)建GoogLeNet網(wǎng)絡(luò)模型,在CPU為Intel(R) Xeon(TM) E5-2609 v4 1.70GHz,內(nèi)存32.00 GB,GPU為NVIDIA 1070Ti的PC機(jī)上進(jìn)行訓(xùn)練.訓(xùn)練時(shí)使用帶動(dòng)量的隨機(jī)梯度下降法,以加速訓(xùn)練,參照GoogLeNet[9]中的參數(shù)設(shè)置,動(dòng)量值定為0.9;經(jīng)多次實(shí)驗(yàn),基礎(chǔ)學(xué)習(xí)率為0.0001時(shí),網(wǎng)絡(luò)收斂效果最佳,并在迭代次數(shù)為70000次左右時(shí),損失函數(shù)不再明顯下降,所以選取學(xué)習(xí)率為0.0001,最大迭代次數(shù)為70000次.
為驗(yàn)證本文方法對(duì)自遮擋手勢(shì)的識(shí)別能力,我們分別用單視點(diǎn)手勢(shì)庫和本文的雙視點(diǎn)方法訓(xùn)練網(wǎng)絡(luò).在實(shí)驗(yàn)時(shí),共設(shè)置兩個(gè)測(cè)試集,測(cè)試集1挑選每種手勢(shì)中信息基本完整、自遮擋現(xiàn)象不明顯的姿態(tài)加入測(cè)試集,包含4400個(gè)樣本;測(cè)試集2則挑選4400個(gè)存在自遮擋的手勢(shì)樣本.其余26400個(gè)樣本為訓(xùn)練集,即訓(xùn)練集占總樣本數(shù)的3/4.
在使用訓(xùn)練集對(duì)網(wǎng)絡(luò)完成訓(xùn)練后,用兩個(gè)測(cè)試集分別測(cè)試C1、C2視點(diǎn)與雙視點(diǎn)下的識(shí)別精度.測(cè)試結(jié)果如圖6所示.由圖6可知,使用測(cè)試集1進(jìn)行測(cè)試時(shí),本文方法對(duì)各類手勢(shì)的識(shí)別精度達(dá)到97%以上,均高于單視點(diǎn)下;在使用測(cè)試集2時(shí),由于自遮擋導(dǎo)致的信息不足,兩種方法識(shí)別精度都有所下降,但相比于單視點(diǎn),使用本文方法識(shí)別精度得到了大幅提高.其中,第6類與第8類手勢(shì)的識(shí)別精度明顯下降,此兩種手勢(shì)識(shí)別錯(cuò)誤的圖像如圖7所示,由于第6類與第8類手勢(shì)即使在雙視點(diǎn)下,也會(huì)大量出現(xiàn)自遮擋的情況,圖像本身的信息不足導(dǎo)致了識(shí)別精度下降,若繼續(xù)增加視點(diǎn),補(bǔ)充信息,就能提高識(shí)別率.同時(shí),本文方法以圖像拼接來融合多視點(diǎn)信息,增加視點(diǎn)并不會(huì)增加網(wǎng)絡(luò)復(fù)雜程度與計(jì)算量.
圖6 使用不同測(cè)試集的20種手勢(shì)識(shí)別精度對(duì)比Fig.6 Accuracy comparison using different test sets
為驗(yàn)證本文方法的泛化能力,使用與4.1相同的訓(xùn)練集訓(xùn)練,使用真實(shí)手圖像進(jìn)行測(cè)試,使用樣本如圖8所示,分類結(jié)果如圖9,其縱坐標(biāo)為網(wǎng)絡(luò)最后一個(gè)softmax層的輸出,表示分類的概率,當(dāng)某一類概率最大時(shí),則將該樣本識(shí)別為此類,由于輸出中大部分結(jié)果數(shù)值很小,為能比較這些值的差異,對(duì)其取對(duì)數(shù)后繪圖.圖9對(duì)本文方法和傳統(tǒng)拼接方法進(jìn)行了對(duì)比,并標(biāo)記出了分類概率最大的點(diǎn).可以看出使用傳統(tǒng)拼接方法對(duì)樣本1和樣本4的分類出現(xiàn)了錯(cuò)誤,而本文方法對(duì)圖中手勢(shì)都得出了正確的分類.由此可見兩種方法在泛化能力上的差異: 真實(shí)手勢(shì)圖像進(jìn)行采集時(shí),由于手的運(yùn)動(dòng)造成攝像機(jī)相對(duì)位置不固定,真實(shí)手的圖像大小和位置與傳統(tǒng)拼接方法的樣本庫有很大差異,在對(duì)真實(shí)手勢(shì)圖像進(jìn)行識(shí)別時(shí)會(huì)出現(xiàn)很大誤差;而本文拼接方法在建庫時(shí),對(duì)手勢(shì)大小和位置兩個(gè)量進(jìn)行隨機(jī)取值,模擬真實(shí)手勢(shì)圖像,使得本文方法有更好的泛化能力.
圖7 識(shí)別錯(cuò)誤的手勢(shì)圖像示例Fig.7 Examples of images that fail to be recognized
圖8 真實(shí)手的雙視點(diǎn)樣本Fig.8 Real-hand simples
圖9 真實(shí)手的分類結(jié)果Fig.9 Results of real-hand image classification
手勢(shì)識(shí)別技術(shù)是實(shí)現(xiàn)基于手勢(shì)的人機(jī)交互的關(guān)鍵技術(shù)之一.但人手的結(jié)構(gòu)復(fù)雜,會(huì)出現(xiàn)手勢(shì)的自遮擋,引起信息丟失.同時(shí),近年來卷積神經(jīng)網(wǎng)絡(luò)在圖像分類識(shí)別方面有出色的表現(xiàn),本文將該方法引入靜態(tài)手勢(shì)識(shí)別之中.首先利用poser 8建立手勢(shì)庫,并針對(duì)卷積神經(jīng)網(wǎng)絡(luò)的單通道結(jié)構(gòu),對(duì)雙視點(diǎn)下的手勢(shì)圖像提出新的剪切拼接方法,使用 GoogLeNet進(jìn)行訓(xùn)練,并對(duì)訓(xùn)練完成的網(wǎng)絡(luò)進(jìn)行實(shí)驗(yàn),驗(yàn)證了本文方法對(duì)自遮擋手勢(shì)的識(shí)別能力和泛化能力.