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