周文軍,張 勇,王昱潔
(合肥工業(yè)大學(xué) 計(jì)算機(jī)與信息學(xué)院,合肥 230601)
人機(jī)交互[1]是實(shí)現(xiàn)用戶與計(jì)算機(jī)之間信息交換的通路,而基于計(jì)算機(jī)視覺的手勢識別則提供了一種更加自然和諧的人機(jī)交互方式,成為人機(jī)交互領(lǐng)域的研究熱點(diǎn)。手勢識別的研究促進(jìn)了遠(yuǎn)程操控、VR[2]等相關(guān)技術(shù)的發(fā)展,同時(shí)也對手語識別發(fā)揮著重要作用。
一般的靜態(tài)手勢識別方法通常分為檢測分割、特征分析、分類器識別3個(gè)階段[3]。此類方法易受背景干擾,且由于需先分割再識別,因此實(shí)時(shí)性不高。針對上述問題,研究者采用基于卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Networks,CNN)[4]的方法進(jìn)行手勢識別。這類方法無需將手勢從圖片中分割出來,圖像可以直接輸入神經(jīng)網(wǎng)絡(luò),省去了傳統(tǒng)識別算法中手動(dòng)提取特征的復(fù)雜操作[5]。文獻(xiàn)[6]提出一種基于CNN的手勢識別方法來識別圖片中人類日常生活的手勢動(dòng)作。文獻(xiàn)[7]將CNN應(yīng)用于手勢識別,并通過大量仿真實(shí)驗(yàn)證明了該方法的有效性及魯棒性。文獻(xiàn)[8]提出一種基于Faster R-CNN的手勢識別算法,并在多個(gè)手勢數(shù)據(jù)集上取得了較好的檢測結(jié)果。
上述基于CNN的手勢識別方法提高了實(shí)時(shí)性,但由于未融合各個(gè)特征提取層的語義信息,因此檢測精度未能得到進(jìn)一步提高。DSSD[9]算法是一種基于深度CNN的算法,其通過反卷積模塊融合了各個(gè)特征提取層的語義信息,檢測精度較高并對小目標(biāo)較為魯棒。本文提出一種靜態(tài)手勢實(shí)時(shí)識別方法,在DSSD網(wǎng)絡(luò)模型的基礎(chǔ)上,針對自制的數(shù)據(jù)集,利用K-means算法[10-11]及手肘法選取先驗(yàn)框的寬高比以提高檢測精度,采用遷移學(xué)習(xí)[12]的方法,對比不同基礎(chǔ)網(wǎng)絡(luò)(AlexNet[13]、VGG16[14]、ResNet101[15])對DSSD網(wǎng)絡(luò)模型的影響,同時(shí)解決數(shù)據(jù)量小所導(dǎo)致的檢測精度低下的問題。
DSSD的結(jié)構(gòu)如圖1所示,其基礎(chǔ)網(wǎng)絡(luò)為ResNet101,其中conv3_x層為ResNet101中的卷積層,之后5層是一系列逐漸變小的卷積層,上述卷積層作為DSSD網(wǎng)絡(luò)的特征層(共6層)。在這之后DSSD添加了一系列反卷積層并設(shè)計(jì)了反卷積模塊來融合先前的特征層(conv3_x、卷積層)和反卷積層。此外,DSSD還設(shè)計(jì)了新的預(yù)測模塊并將預(yù)測移到了反卷積層上進(jìn)行。
圖1 DSSD網(wǎng)絡(luò)結(jié)構(gòu)
反卷積模塊的功能是將高層特征映射信息與低層特征映射信息進(jìn)行融合,其結(jié)構(gòu)如圖2所示??梢?DSSD使用已學(xué)習(xí)好的反卷積層代替雙線性上采樣,并在每個(gè)卷積層之后添加歸一化層。另外,DSSD在結(jié)合高層特征映射和低層特征映射時(shí),采用基于元素點(diǎn)積的方式以獲得更好的精度。
圖2 反卷積模塊
SSD預(yù)測模塊如圖3(a)所示,圖3(b)是在SSD預(yù)測模塊的基礎(chǔ)上添加了一個(gè)殘差單元,并在殘差旁路將原先的特征圖做卷積處理后與網(wǎng)絡(luò)主干道的特征圖做通道間加法,從而形成一個(gè)新的預(yù)測模塊。
圖3 預(yù)測模塊
DSSD識別手勢是一個(gè)回歸與分類的過程,其中,生成識別邊框是一個(gè)回歸的過程,判斷識別框內(nèi)手勢所屬類別是一個(gè)分類過程[16]。因此,總體目標(biāo)損失函數(shù)可表示為定位損失和置信損失的加權(quán)和:
(1)
(2)
置信損失Lconf(x,c)是多類置信度的Softmax損失,表示為:
(3)
DSSD識別手勢具體步驟如下:
步驟16個(gè)特征層可得到6個(gè)大小不同的特征圖,每個(gè)n×n大小的特征圖有n×n個(gè)特征圖小格,每個(gè)特征圖小格產(chǎn)生K個(gè)先驗(yàn)框。其中K=2+2m(m為寬高比的個(gè)數(shù)),代表著2個(gè)大小不同的正方形先驗(yàn)框與2m個(gè)長方形先驗(yàn)框。
步驟2對于每個(gè)真實(shí)手勢目標(biāo)g,找到與其交并比最大的先驗(yàn)框以及任何與其交并比大于閾值(例如0.5)的先驗(yàn)框,這些先驗(yàn)框與其進(jìn)行匹配,稱為正樣本,反之則為負(fù)樣本。將真實(shí)目標(biāo)的位置信息和類別信息映射到先驗(yàn)框上。
步驟3對于各個(gè)特征圖中的正負(fù)樣本,分別對其進(jìn)行預(yù)測(通過2個(gè)3×3卷積核對特征圖進(jìn)行卷積操作)從而獲得預(yù)測框l的置信度和位置信息。將其與經(jīng)步驟1、步驟2后得到的先驗(yàn)框進(jìn)行損失計(jì)算,損失函數(shù)為定位損失和置信損失的加權(quán)和,如式(1)所示。
步驟4對于每個(gè)預(yù)測框,按照類別置信度確定其手勢類別并過濾屬于背景的預(yù)測框,根據(jù)置信度閾值(如0.5)過濾閾值較低的預(yù)測框,執(zhí)行NMS算法[17]過濾重疊度較大的預(yù)測框,剩余的預(yù)測框就是檢測結(jié)果。
本文利用普通網(wǎng)絡(luò)攝像頭mosengsm rqeso008在不同背景、光照強(qiáng)度下采集了4 800張手勢圖片,部分圖片如圖4所示。每張圖片中有1個(gè)~3個(gè)不等的手勢,手勢總個(gè)數(shù)為10 000個(gè),分為10類手勢,它們在中國手語中分別代表著10種不同的意思,如圖5所示。
圖4 訓(xùn)練圖片樣例
圖5 應(yīng)用于中國手語的10種手勢
圖片采集完畢后,利用標(biāo)簽標(biāo)注工具LabelImage對感興趣的手勢部位進(jìn)行人工標(biāo)注,得到真實(shí)目標(biāo)的標(biāo)簽文件并將數(shù)據(jù)集轉(zhuǎn)換為ldbm格式。針對自制的數(shù)據(jù)集數(shù)據(jù)量不足的問題,本文采用數(shù)據(jù)增強(qiáng)[18]方法,對每個(gè)訓(xùn)練圖像,從下列3種采樣策略中隨機(jī)選取一種進(jìn)行采樣。
1)使用完整的原始圖片。
2)截取圖片中的一塊使其與真實(shí)目標(biāo)的交并比為0.1、0.3、0.5、0.7 或 0.9。
3)在原始圖片上隨機(jī)截取一塊,截取比例為原圖片的[0.1,1]。
采樣后,每個(gè)采樣塊被調(diào)整至固定大小,并進(jìn)行隨機(jī)的光學(xué)畸變及0.5倍概率的水平翻轉(zhuǎn)。
由DSSD識別過程可知,寬高比的個(gè)數(shù)越多,先驗(yàn)框的數(shù)量也就越多,越能找到與真實(shí)目標(biāo)更匹配的先驗(yàn)框從而提高檢測精度,但同時(shí)也會在預(yù)測及進(jìn)行NMS時(shí)花費(fèi)更多的時(shí)間。因此,選取一個(gè)合適的寬高比十分重要,針對自制的數(shù)據(jù)集,本文重新選取了先驗(yàn)框的寬高比。
本文使用K-means聚類算法來獲得手勢寬高比的k個(gè)聚類中心,并且使用手肘法來確定最優(yōu)k值。手肘法的核心指標(biāo)是誤差平方和(Sum of Squared Errors,SSE),計(jì)算公式如下:
(4)
其中,ci是第i個(gè)簇,p是ci中的樣本點(diǎn),mi是ci的質(zhì)心(ci中所有樣本的均值)。SSE是所有樣本的聚類誤差,代表了聚類效果的好壞。當(dāng)k小于真實(shí)聚類數(shù)時(shí),SSE的下降幅度會較大,而當(dāng)k到達(dá)真實(shí)聚類數(shù)時(shí),SSE的下降幅度會驟減。
本文首先從標(biāo)簽文件中獲取手勢的寬和高從而得到寬高比,然后以寬高比為特征運(yùn)行K-means算法,從k=3開始,不斷增大k值,實(shí)驗(yàn)結(jié)果如圖6所示??梢钥闯?當(dāng)k=5時(shí)SSE的下降幅度開始減緩。因此,k=5為本文最優(yōu)k值,此時(shí)的寬高比聚類結(jié)果如表1所示。
圖6 k值與SSE的關(guān)系
表1 不同寬高比對應(yīng)的聚類結(jié)果
可見,先驗(yàn)框的寬高比在1~3之間,本文選取1、1.5、2、3作為先驗(yàn)框的寬高比。
遷移學(xué)習(xí)一般是將從源域?qū)W習(xí)到的關(guān)系應(yīng)用到目標(biāo)域。遷移學(xué)習(xí)能夠很好地解決數(shù)據(jù)量不足的問題,而且有利于縮短訓(xùn)練時(shí)間,提高模型的識別率。
由于本文數(shù)據(jù)集較小,直接訓(xùn)練的效果較差且訓(xùn)練時(shí)間較長,因此使用在 PASCAL VOC 數(shù)據(jù)集下訓(xùn)練得到的殘差網(wǎng)絡(luò)參數(shù)來對DSSD 模型的基礎(chǔ)網(wǎng)絡(luò)進(jìn)行初始化,再對網(wǎng)絡(luò)進(jìn)行訓(xùn)練(訓(xùn)練時(shí)先驗(yàn)框?qū)捀弑葹?、1.5、2、3),訓(xùn)練結(jié)果為遷移 Resnet101 模型。同樣,將DSSD的基礎(chǔ)網(wǎng)絡(luò)分別換為去掉全連接層的VGG16和AlexNet,選取VGG16中的卷積層conv4_3、AlexNet中的卷積層conv5,分別與額外的5層卷積層一起作為特征層進(jìn)行特征提取與融合,并使用在PASCAL VOC數(shù)據(jù)集下訓(xùn)練得到的參數(shù)來初始化DSSD 模型的基礎(chǔ)網(wǎng)絡(luò),之后對網(wǎng)絡(luò)進(jìn)行訓(xùn)練,訓(xùn)練結(jié)果分別為遷移VGG16 模型以及遷移AlexNet模型。作為對照,不引入遷移學(xué)習(xí)即不使用已訓(xùn)練好的參數(shù),直接對本文數(shù)據(jù)集進(jìn)行訓(xùn)練得到無遷移Resnet101模型、無遷移VGG16模型以及無遷移AlexNet模型。
本文實(shí)驗(yàn)計(jì)算機(jī)的操作系統(tǒng)為Ubuntu16.04,CPU為英特爾i7,GPU為INVDIA GTX Titan X,內(nèi)存為32 GB,CUDA為cuda8.0。實(shí)驗(yàn)使用深度學(xué)習(xí)計(jì)算框架Caffe。
從收集的4 800張圖片中,隨機(jī)選擇3 600張圖片作為訓(xùn)練集,其余1 200張圖片作為測試集。
第1階段:以去掉全連接層的AlexNet、VGG16及ResNet101分別作為SSD的基礎(chǔ)網(wǎng)絡(luò),訓(xùn)練得到3個(gè)不同的SSD模型,輸入圖片的大小為321像素×321像素。在訓(xùn)練時(shí),前5 000次迭代使用學(xué)習(xí)率10-3,5 000次~7 000 次迭代使用學(xué)習(xí)率10-4,7 000次~8 000次迭代使用學(xué)習(xí)率10-5,經(jīng)過80 000次迭代模型收斂。
第2階段:加載上一階段訓(xùn)練好得到的3個(gè)SSD模型來分別初始化DSSD網(wǎng)絡(luò),凍結(jié)SSD網(wǎng)絡(luò)的參數(shù),訓(xùn)練反卷積模型。前20 000迭代使用學(xué)習(xí)率10-3,后20 000次使用學(xué)習(xí)率10-4,40 000次迭代后得到收斂的3個(gè)最優(yōu)DSSD模型。
為了驗(yàn)證遷移學(xué)習(xí)是否產(chǎn)生作用,對2.3節(jié)中訓(xùn)練得到無遷移Resnet101模型、無遷移VGG16模型、無遷移AlexNet模型、遷移 Resnet101模型、遷移VGG16模型以及遷移AlexNet模型分別進(jìn)行測試,結(jié)果如表2所示。由表2可以看出,在數(shù)據(jù)量較少的情況下,遷移學(xué)習(xí)確實(shí)可以提高模型的識別精度,本文以平均精度均值(Mean Average Precision,mAP)作為評價(jià)指標(biāo)。以基礎(chǔ)網(wǎng)絡(luò)Resnet101為例,遷移學(xué)習(xí)將mAP從0.748提高至0.945。此外,作為DSSD的基礎(chǔ)網(wǎng)絡(luò),相比于AlexNet和VGG16,ResNet101有著更高的識別率。因此,本文選用ResNet101作為DSSD的基礎(chǔ)網(wǎng)絡(luò)進(jìn)行后續(xù)實(shí)驗(yàn)。
表2 遷移學(xué)習(xí)結(jié)果
本文選定了基礎(chǔ)網(wǎng)絡(luò)ResNet101后,驗(yàn)證2.2節(jié)中重新選取的寬高比是否使識別精度得到了提高。在其他條件不變的情況下,使用原始寬高比{1,2,3}重新訓(xùn)練一個(gè)遷移Resnet101模型進(jìn)行對比實(shí)驗(yàn),識別結(jié)果如表3所示。由表3可以看出,本文重新選取的寬高比{1,1.5,2,3}相對于原寬高比{1,2,3}可使識別精度提高了1.9%。
表3 不同寬高比的DSSD算法識別結(jié)果
Table 3 Recognition results of DSSD algorithm with different aspect ratios
寬高比mAP原始:{1,2,3}0.926新選取:{1,1.5,2,3}0.945
為了進(jìn)一步提高識別精度,針對Resnet101網(wǎng)絡(luò),本文通過增大輸入尺寸的辦法來使深層的feature map仍然保持空間信息。因此,本文將輸入圖片的尺寸增大至513像素×513像素進(jìn)行對比實(shí)驗(yàn),測試結(jié)果如表4所示。
表4 不同輸入圖片尺寸的DSSD算法識別結(jié)果
Table 4 Recognition results of DSSD algorithm with different input image sizes
圖片尺寸/像素mAP識別速度/(frame·s-1)321×3210.94515513×5130.9568
從表4可以看出,當(dāng)輸入圖片的尺寸較小時(shí),DSSD算法的mAP為0.945;當(dāng)輸入圖片的尺寸增大時(shí),DSSD的mAP提高了0.011,達(dá)到了0.956。但是,隨著圖片尺寸的增大,識別速度也隨之降低。因此,在實(shí)時(shí)性要求不高的場合,可以通過增大輸入圖片尺寸來提高檢測精度。
為了說明本文方法的性能優(yōu)劣,基于相同的數(shù)據(jù)集,分別采用Faster R-CNN[19]、YOLO[20]和SSD[21]神經(jīng)網(wǎng)絡(luò)來訓(xùn)練手勢識別模型以作為對比。為確保實(shí)驗(yàn)的公平性,通過調(diào)參將各方法的手勢識別模型均訓(xùn)練至最佳。參照各方法在PASCAL VOC數(shù)據(jù)集下訓(xùn)練得到的訓(xùn)練參數(shù)值,針對本文數(shù)據(jù)集,采用以下策略選取了各方法幾個(gè)主要訓(xùn)練參數(shù)的最優(yōu)值:
1)通過觀測模型收斂速度(即損失函數(shù)值的變化率)來選擇基礎(chǔ)學(xué)習(xí)率,以收斂速度最快的學(xué)習(xí)率作為基礎(chǔ)學(xué)習(xí)率。
2)采用變化的學(xué)習(xí)率來訓(xùn)練模型,每當(dāng)損失函數(shù)值的變化率小于一定閾值時(shí)(據(jù)觀測及經(jīng)驗(yàn)值,此處閾值選擇為0.005),便將學(xué)習(xí)率調(diào)整至原來的0.1倍,從而使模型更有效地學(xué)習(xí)以降低訓(xùn)練損失。
3)權(quán)重衰減沿用經(jīng)驗(yàn)值0.000 5。
4)當(dāng)損失函數(shù)值趨于0、訓(xùn)練精度不再提高時(shí),認(rèn)為模型訓(xùn)練完畢,此時(shí)的迭代次數(shù)作為總迭代次數(shù)。
本文采用上述策略選取得到的最優(yōu)訓(xùn)練參數(shù)參與訓(xùn)練得到了各方法的最佳手勢識別模型,各方法的最優(yōu)訓(xùn)練參數(shù)值如表5所示。訓(xùn)練結(jié)束后,分別測試各方法的最佳手勢識別模型,其識別結(jié)果如表6所示。其中,SSD(300×300)代表該方法輸入SSD模型的圖像尺寸為300像素×300像素,其他方法類推??梢钥闯?2種DSSD方法的識別精度分別高達(dá)0.945和0.956,均優(yōu)于其他方法。但由于DSSD采用了更深的網(wǎng)絡(luò)結(jié)構(gòu),并增加了額外的預(yù)測模塊和反卷積模塊,因此其檢測速度較其他方法稍慢,但仍保持了15 frame/s和8 frame/s的合理檢測速度。因此,相較于其他方法,本文方法在保持合理速度的同時(shí)獲得了較好的精度。
表5 各方法的最優(yōu)訓(xùn)練參數(shù)值
表6 各方法最優(yōu)模型的識別結(jié)果
上述實(shí)驗(yàn)對比了本文方法與其他方法的識別精度,本節(jié)進(jìn)一步實(shí)驗(yàn)統(tǒng)計(jì)其在4種不同環(huán)境下的識別精度,結(jié)果如表7所示。由表7可以看出,該方法在明亮、簡單背景環(huán)境下的識別效果最好,mAP達(dá)到了0.956和0.965,而在較暗、復(fù)雜背景的環(huán)境下識別精度最差,但其mAP仍達(dá)到了0.935和0.949,可見本文方法受環(huán)境的干擾不明顯,可完成多種環(huán)境下的檢測任務(wù)。
表7 不同環(huán)境下的mAP值
由于DSSD設(shè)計(jì)一個(gè)反卷積模塊來融合各個(gè)特征提取層的語義信息,因此本文方法在檢測小手勢目標(biāo)方面也具有較好的能力。為了證明這一點(diǎn),本文拍攝了300張測試照片(距離攝像頭約8 m),其中手勢相對于圖片非常小。與表6中識別精度表現(xiàn)較好的SSD(512×512)方法進(jìn)行比較,結(jié)果如表8所示。其中2個(gè)檢測示例如圖7和圖8所示??梢钥闯?本文方法在小手勢目標(biāo)的檢測能力上優(yōu)于SSD(512×512)方法,可實(shí)現(xiàn)較遠(yuǎn)距離的手勢識別。
表8 SSD與DSSD對于小手勢目標(biāo)的檢測結(jié)果
Table 8 Detection results of SSD and DSSD for small gesture targets
方法mAPSSD(512×512)0.757DSSD(513×513)0.817
圖7 SSD(512×512)方法對小手勢目標(biāo)的檢測結(jié)果
圖8 DSSD(513×513)方法對小手勢目標(biāo)的檢測結(jié)果
本文提出一種基于DSSD的識別方法用于實(shí)時(shí)識別靜態(tài)手勢。在自制的數(shù)據(jù)集中,采用K-means聚類算法及手肘法選取先驗(yàn)框的寬高比,并以ResNet101作為基礎(chǔ)網(wǎng)絡(luò),利用遷移學(xué)習(xí)解決小數(shù)據(jù)集帶來的檢測精度低的問題。實(shí)驗(yàn)結(jié)果表明,經(jīng)過訓(xùn)練,得到2個(gè)手勢識別模型DSSD(321×321)和DSSD(513×513)的mAP分別為0.945和0.956,優(yōu)于基于Faster R-CNN、YOLO及SSD等網(wǎng)絡(luò)的手勢識別方法,并且其檢測速度可達(dá)15 frame/s和8 frame/s,可滿足實(shí)時(shí)識別的需求。此外,本文方法對小手勢目標(biāo)也有較好的檢測性能,能夠?qū)崿F(xiàn)相對遠(yuǎn)距離的手勢識別。后續(xù)將嘗試用簡單的雙線性上采樣來代替反卷積層,進(jìn)一步提高檢測速度。