陳壯煉,林曉樂,王家偉,李超
(廣東輕工職業(yè)技術(shù)學(xué)院信息技術(shù)學(xué)院,廣州510300)
隨著科技的發(fā)展,現(xiàn)代技術(shù)不斷的智能化,識(shí)別技術(shù)的應(yīng)用愈加廣泛,如人臉識(shí)別、指紋識(shí)別、車輛識(shí)別、手勢(shì)識(shí)別等。手勢(shì)是人與計(jì)算機(jī)更加自然的表達(dá)方式,即計(jì)算機(jī)通過識(shí)別手勢(shì)來了解人體語(yǔ)言,人無(wú)需接觸鍵盤、鼠標(biāo)等外設(shè)即可與計(jì)算機(jī)進(jìn)行自然交互[1]。手勢(shì)識(shí)別在人工智能領(lǐng)域起到非常重要的作用,但手勢(shì)識(shí)別在復(fù)雜背景下的識(shí)別準(zhǔn)確率不高,本文利用卷積神經(jīng)網(wǎng)絡(luò)識(shí)別算法來提高識(shí)別準(zhǔn)確率。
早期的手勢(shì)識(shí)別是利用有線技術(shù)連接計(jì)算機(jī)系統(tǒng),將數(shù)據(jù)傳輸?shù)接?jì)算機(jī),實(shí)現(xiàn)手勢(shì)識(shí)別。如數(shù)據(jù)手套內(nèi)設(shè)有傳感器,傳感器通過導(dǎo)線與外電路連接將采集的信號(hào)傳遞給虛擬環(huán)境,然后通過機(jī)器識(shí)別算法實(shí)現(xiàn)手勢(shì)識(shí)別。該方法雖然識(shí)別準(zhǔn)確率高,但在穿戴過程給用戶帶來極大的不便,而且價(jià)格昂貴。此后,數(shù)據(jù)手套被光學(xué)標(biāo)記所取代,利用光學(xué)標(biāo)記將手的位置和動(dòng)作通過紅外線傳遞給計(jì)算機(jī),計(jì)算機(jī)根據(jù)手勢(shì)做出相應(yīng)的回應(yīng)。光學(xué)標(biāo)記準(zhǔn)確率雖高,但仍需要復(fù)雜的設(shè)備,而且無(wú)法更自然的表達(dá)。
近年來手勢(shì)識(shí)別發(fā)展較快,但大多識(shí)別算法僅在簡(jiǎn)單背景下識(shí)別,在復(fù)雜背景下識(shí)別準(zhǔn)確率有所下降,許多專家針對(duì)此種情況更傾向于使用卷積神經(jīng)網(wǎng)絡(luò)算法,卷積神經(jīng)網(wǎng)絡(luò)對(duì)攝像頭采集到的手勢(shì)進(jìn)行預(yù)處理,通過卷積層和池化層提取特征,使用激活函數(shù)對(duì)卷積的結(jié)果進(jìn)行非線性映射,全連接層對(duì)結(jié)果進(jìn)行識(shí)別分類。卷積神經(jīng)網(wǎng)絡(luò)識(shí)別準(zhǔn)確度相對(duì)較高,因此,基于卷積神經(jīng)網(wǎng)絡(luò)的手勢(shì)識(shí)別成為熱門領(lǐng)域。
卷積神經(jīng)網(wǎng)絡(luò)是基于動(dòng)物視覺感受野設(shè)計(jì)而成,由卷積層、池化層和全連接層構(gòu)成。它是人工神經(jīng)網(wǎng)絡(luò)的一種。傳統(tǒng)的人工神經(jīng)網(wǎng)絡(luò)中,每一層都是全連接的,如輸入是一副100000000 像素的圖像,則輸入層與隱藏層的某一個(gè)節(jié)點(diǎn)將有100000000 個(gè)權(quán)重需要訓(xùn)練,這將會(huì)導(dǎo)致訓(xùn)練困難。而卷積神經(jīng)網(wǎng)絡(luò)提出了權(quán)值共享的概念,即用同一個(gè)卷積核生出卷積層上的所有節(jié)點(diǎn)。每個(gè)節(jié)點(diǎn)是與上一層的某個(gè)區(qū)域通過卷積核連接,不與除卷積核以外的區(qū)域連接,這大大減少了訓(xùn)練的參數(shù)量,如對(duì)100000000 的圖像,若采用1000 的卷積核,則每個(gè)節(jié)點(diǎn)只需要訓(xùn)練100 個(gè)節(jié)點(diǎn)。
卷積神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)如圖1 所示[2],卷積層主要是提取圖像特征,池化層是對(duì)提取的特征進(jìn)行降維、防止過擬合,全連接層主要是輸出結(jié)果。
圖1 卷積神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)圖
卷積層主要是實(shí)現(xiàn)特征的提取,我們輸入一張圖片,計(jì)算機(jī)讀取的是通過像素矩陣標(biāo)識(shí)的圖像,卷積層將像素矩陣與若干過濾器(卷積核)進(jìn)行線性乘積(即卷積運(yùn)算),每一個(gè)局部信息通過卷積核提取的特征信息通過權(quán)值共享的方法整合到特征圖中,如圖2 是卷積運(yùn)算的過程。
圖2 卷積運(yùn)算過程
每個(gè)卷積運(yùn)算得到的特征圖可以組合卷積多個(gè)特征圖的值,通過卷積操作,可以增強(qiáng)圖片的特征信息,并降低噪音的影響[3],從而提高手勢(shì)的識(shí)別率。卷積層的計(jì)算公式如下所示:在卷積計(jì)算公式中,xl
j表示第l 層的第j 個(gè)特征圖,xli-1表示第i 個(gè)特征映射,Mj表示數(shù)據(jù)的集合,表示權(quán)重,表示偏置。例如現(xiàn)有5×5 的圖像和2×2的卷積核,通過步長(zhǎng)為1 的卷積運(yùn)算,得到4×4 的特征圖,如圖3、圖4 所示。
圖3 圖像矩陣(左)、卷積核(右)
圖4 運(yùn)算過程
如圖4,當(dāng)把卷積核置于圖像矩陣的右下角執(zhí)行的運(yùn)算為:
2*0+1*1+1*1+0*2=2,則輸出的特征圖中的特征參數(shù)為2。通過不斷地平移卷積核,與輸入矩陣進(jìn)行卷積操作,就形成了新的特征矩陣。但對(duì)于一些比較大的圖片,在進(jìn)行卷積操作時(shí)若每次只移一個(gè)步長(zhǎng)則效率會(huì)比較低,卷積后的特征也較冗余,所以可以引入一個(gè)超參數(shù)對(duì)每次移動(dòng)的步長(zhǎng)進(jìn)行調(diào)節(jié),即卷積步長(zhǎng)(Stride)。
下面介紹不同步長(zhǎng)得到不同特征圖的效果:
當(dāng)步長(zhǎng)stride 為1 時(shí),卷積的移動(dòng)過程如圖5所示。
圖5 步長(zhǎng)為1的卷積移動(dòng)過程
輸出矩陣大小為:
當(dāng)步長(zhǎng)stride 為2 時(shí),卷積移動(dòng)過程如圖6 所示。
圖6 步長(zhǎng)為2的卷積移動(dòng)過程
可以看出,卷積核在移動(dòng)過程中跳過一個(gè)單元格,即步長(zhǎng)從1 變?yōu)?,則輸出矩陣大小為(向下取整):
池化層在卷積神經(jīng)網(wǎng)絡(luò)中對(duì)輸入的特征圖進(jìn)行降維,一方面是特征圖變小,降低網(wǎng)絡(luò)計(jì)算的復(fù)雜度,另一方面是提取主要特征。池化層可以忽略目標(biāo)的相對(duì)位置的變化,來提高識(shí)別的精度,在一定程度上可以防止過擬合。常用的池化層有最大池化和平均池化。
對(duì)于池化操作,需要界定一個(gè)過濾器和步長(zhǎng)。最大池化是取輸入矩陣在過濾器矩陣塊的最大值作為輸出矩陣相應(yīng)位置的輸出。平均池化是取輸入矩陣在過濾器矩陣塊的平均值作為輸出矩陣相應(yīng)位置的輸出。池化示意圖如圖7 所示[4]。
圖7 池化示意圖
圖7是一個(gè)4×4 的特征圖,現(xiàn)有2×2 的過濾器,步長(zhǎng)為2,當(dāng)過濾器在左上角時(shí),若為最大池化,取過濾器所在大小的最大值,即取6,若為平均池化,則取過濾器所在大小的平均值,即。上節(jié)提到卷積層卷積后的矩陣大小的公式同樣適用于池化后的矩陣大小。
全連接層在卷積神經(jīng)網(wǎng)絡(luò)中起到“分類器”的作用[5],將學(xué)到的“分布式特征表示”映射到樣本標(biāo)記空間。如果說卷積層是局部特征的提取,那么全連接層就是將其提取到的局部特征重新通過權(quán)值矩陣整合成完整的圖片,也就是說全連接層可以整合卷積層中具有類別區(qū)分性的局部信息。
在CNN 中,卷積和池化操作相當(dāng)于做特征工程,全連接層相當(dāng)于做特征加權(quán)。在經(jīng)過多個(gè)卷積層和池化層后,連接著一個(gè)或多個(gè)全連接層,全連接層的每個(gè)神經(jīng)元都與上一層的所有神經(jīng)元相連。全連接層可以整合卷積層或池化層具有區(qū)分類別的信息,即把卷積或池化輸出的二維特征圖轉(zhuǎn)化成一個(gè)一維的向量。過程的實(shí)現(xiàn)如圖8 所述。
圖8 卷積神經(jīng)網(wǎng)絡(luò)過程
如圖8 為例,當(dāng)進(jìn)行卷積層提取特征后,通過池化層得到30 個(gè)12×12 的特征圖,在進(jìn)行全連接,由于全連接層的每個(gè)結(jié)點(diǎn)與其下一層結(jié)點(diǎn)都有連接,即需卷積操作30×100 個(gè)12×12 的卷積核,卷積操作之后整個(gè)輸入圖像就會(huì)變成一個(gè)數(shù)值。總共有30 個(gè)特征圖,那么會(huì)產(chǎn)生30 個(gè)值,在將這30 個(gè)值進(jìn)行累加求和,濃縮成一個(gè)數(shù)值。重復(fù)進(jìn)行100 次之后會(huì)得到100 個(gè)值,即1×100 的向量。
手勢(shì)識(shí)別是人機(jī)交互中比較高效率、直接和便捷的一種。該手勢(shì)識(shí)別系統(tǒng)通過采集剪刀、石頭和布三種手勢(shì)進(jìn)行訓(xùn)練和識(shí)別。如圖9 所示,用戶將手部移入正方形的綠色識(shí)別框內(nèi),系統(tǒng)會(huì)捕捉到手勢(shì)進(jìn)行識(shí)別判斷,將識(shí)別結(jié)果顯示在屏幕的左上角。
圖9 手勢(shì)識(shí)別
(1)手勢(shì)識(shí)別過程
手勢(shì)識(shí)別分為幾個(gè)步驟:通過采集手勢(shì)數(shù)據(jù)、利用OpenCV 對(duì)手勢(shì)數(shù)據(jù)進(jìn)行二值化處理、將處理后的數(shù)據(jù)輸入到卷積神經(jīng)網(wǎng)絡(luò)進(jìn)行訓(xùn)練、用訓(xùn)練后的模型進(jìn)行手勢(shì)識(shí)別。識(shí)別流程圖如圖10 所示。
圖10 手勢(shì)識(shí)別過程
(2)采集圖像數(shù)據(jù)集
系統(tǒng)要進(jìn)行識(shí)別首先需要采集數(shù)據(jù),系統(tǒng)通過調(diào)用PC 端攝像頭對(duì)剪刀、石頭、布三種手勢(shì)進(jìn)行圖像采集。如圖11 所示,按鍵盤上的c 字母創(chuàng)建需要存放手勢(shì)的文件夾,文件夾名作為訓(xùn)練數(shù)據(jù)的標(biāo)簽,再輸入需要采集圖片的數(shù)目,將手移入綠色的小方框,按s 鍵開始采集手勢(shì)。
圖11 手勢(shì)采集
(3)圖像預(yù)處理
在手勢(shì)識(shí)別過程中,將采集到的手勢(shì)圖像轉(zhuǎn)換為數(shù)字圖像時(shí),在傳輸過程中可能會(huì)受到外界因素的干擾和影響,如噪聲、光照等。手勢(shì)圖像會(huì)因這些干擾而產(chǎn)生畸變,導(dǎo)致訓(xùn)練出來的模型識(shí)別準(zhǔn)確率不高,因此需要進(jìn)行圖像預(yù)處理。
在采集過程中攝像頭采集到的圖像都是沒經(jīng)過處理的彩色圖像,彩色背景會(huì)對(duì)手勢(shì)訓(xùn)練產(chǎn)生影響,因此要進(jìn)行圖像分割,將手勢(shì)與背景分離開來[6]。若將彩色圖像作為輸入數(shù)據(jù)進(jìn)行手勢(shì)模型的構(gòu)建和訓(xùn)練會(huì)讓計(jì)算機(jī)計(jì)算量過大,導(dǎo)致過擬合,從而影響程序的運(yùn)行效率和手勢(shì)識(shí)別的精確度。為了更好地分割圖像,設(shè)置了手勢(shì)的識(shí)別區(qū)域,如圖12 所示的綠色小方框,識(shí)別區(qū)域縮小可以降低大背景下噪聲對(duì)圖像的影響,手勢(shì)采集過程中只需將手移入小方框即可。識(shí)別區(qū)域采集到的原始圖利用自適應(yīng)閾值二值化算法進(jìn)行預(yù)處理[7]。處理后得到的二值化圖像如圖12 所示,二值化后的圖像是黑白圖像,圖像中將手勢(shì)的輪廓描繪出來,這樣的圖像在進(jìn)行提取特征和模型的訓(xùn)練中將會(huì)提高準(zhǔn)確率。
圖12 二值化圖像
(3)構(gòu)建訓(xùn)練模型
將處理后的圖像作為輸入數(shù)據(jù)輸入構(gòu)建好的卷積神經(jīng)網(wǎng)絡(luò)中,卷積神經(jīng)網(wǎng)絡(luò)通過卷積和池化操作提取手勢(shì)特征,全連接層進(jìn)行分類輸出,利用soft_max 損失函數(shù)來衡量模型預(yù)測(cè)的好壞。模型訓(xùn)練結(jié)果如圖13、圖14 所示,訓(xùn)練次數(shù)為10 次訓(xùn)練后模型的準(zhǔn)確率達(dá)到97.54% ,訓(xùn)練次數(shù)為20 次的模型準(zhǔn)確率達(dá)到
98.36 %。
圖13 訓(xùn)練10次的模型訓(xùn)練結(jié)果
圖14 訓(xùn)練20次的模型訓(xùn)練結(jié)果
(4)手勢(shì)識(shí)別
模型訓(xùn)練完成后,按q 鍵打開識(shí)別窗口進(jìn)行手勢(shì)識(shí)別,用戶將手移到識(shí)別區(qū)域,系統(tǒng)會(huì)調(diào)用訓(xùn)練完的模型對(duì)攝像頭捕捉到的手勢(shì)進(jìn)行識(shí)別,若識(shí)別到三種手勢(shì),則將識(shí)別到手勢(shì)的標(biāo)簽作為結(jié)果顯示在窗口的左上角,識(shí)別結(jié)果如圖15 所示。
圖15 三種手勢(shì)識(shí)別結(jié)果
人機(jī)交互最重要的一點(diǎn)就是電腦是否能準(zhǔn)確接收外界的信息并快速做出響應(yīng),所以手勢(shì)識(shí)別的成功率成為了手勢(shì)識(shí)別能否應(yīng)用在人機(jī)交互領(lǐng)域至關(guān)重要的一點(diǎn)。而圖像采集、圖像處理和模型訓(xùn)練這三個(gè)環(huán)節(jié)對(duì)于識(shí)別的成功率有著非常大的影響。圖像采集時(shí)手部占的比例應(yīng)盡量大,過多的背景會(huì)帶來更多的噪點(diǎn)(高頻信息),這些噪點(diǎn)會(huì)帶來過剩的計(jì)算量,多余的計(jì)算量會(huì)大大延長(zhǎng)訓(xùn)練的時(shí)間,對(duì)計(jì)算機(jī)的性能更是一種考驗(yàn)。圖像處理可以壓縮一張圖像的信息量,經(jīng)過處理的圖像雖然失去了色彩和維度,但可以更全面地獲取手勢(shì)的全局和局部特征,這樣有利于提高模型的準(zhǔn)確率。并且針對(duì)該手勢(shì)識(shí)別人機(jī)交互系統(tǒng)的設(shè)計(jì)思路而言,只保留手勢(shì)圖片的基本特征更有利于模型的訓(xùn)練。經(jīng)過裁剪采集圖像的尺寸,剔除過剩圖像信息,最終輸入卷積神經(jīng)網(wǎng)絡(luò)的圖像數(shù)據(jù)相對(duì)小了很多,需要訓(xùn)練的時(shí)間也會(huì)相對(duì)減少很多,這樣同樣的時(shí)間可以進(jìn)行更多次的訓(xùn)練,從而提高了手勢(shì)識(shí)別的效率。
本文針對(duì)傳統(tǒng)的人機(jī)交互無(wú)法讓用戶與計(jì)算機(jī)更直接、自然的交互方式,設(shè)計(jì)了基于卷積神經(jīng)網(wǎng)絡(luò)的手勢(shì)識(shí)別人機(jī)交互,用戶只需將手移到攝像頭前就可與計(jì)算機(jī)進(jìn)行交互?;诰矸e神經(jīng)網(wǎng)絡(luò),手勢(shì)識(shí)別可分為目標(biāo)檢測(cè)、圖像分割、圖像識(shí)別,目標(biāo)檢測(cè)主要是將手勢(shì)標(biāo)注出來,而手勢(shì)在整個(gè)圖像占比不大,在剔除背景有一定助力,圖像分割主要是獲得二值圖像,所以分割的好壞直接影響圖像的識(shí)別精度,基于OpenCV 算法就可以很好地解決分割問題。
手勢(shì)識(shí)別在智能時(shí)代的發(fā)展尤為重要,它是一種非接觸式的人機(jī)交互技術(shù),運(yùn)用卷積神經(jīng)網(wǎng)絡(luò)可以解決人機(jī)交互在特征提取的問題。目前手勢(shì)識(shí)別仍在追求高精度算法來提高識(shí)別的準(zhǔn)確率。