章東平束 元周志洪
(1.中國計(jì)量大學(xué)信息工程學(xué)院,浙江省電磁波信息技術(shù)與計(jì)量檢測重點(diǎn)實(shí)驗(yàn)室,浙江 杭州310018;2.上海市信息安全綜合管理技術(shù)研究重點(diǎn)實(shí)驗(yàn)室,上海200240)
近年來,手勢識別受到了很多學(xué)者的廣泛關(guān)注[1-5],但基于機(jī)器視覺的手勢識別,尤其是在無約束環(huán)境下通過手部動作來控制智能機(jī)器[6]方面,仍然是一項(xiàng)具有挑戰(zhàn)性的任務(wù)。 在無約束環(huán)境下進(jìn)行手勢識別時(shí)涉及的挑戰(zhàn)主要包括:手勢的自由度值較大[7]、自我遮擋、手部定位不準(zhǔn)確和背景環(huán)境復(fù)雜等方面。 基于上述眾多因素的影響,無約束環(huán)境下手勢識別算法的綜合性能普遍不高,尤其是識別準(zhǔn)確率方面,具有較大的提升空間。
手勢識別基于運(yùn)動狀態(tài)可分為靜態(tài)手勢識別和動態(tài)手勢識別。 靜態(tài)手勢,是指每一種靜態(tài)形式的手部姿勢都分別表示某種特定的意義,即一張圖片代表一個(gè)手勢。 動態(tài)手勢是在一定的時(shí)間段內(nèi),由一組靜態(tài)手部姿勢形成的一個(gè)更為復(fù)雜的手勢來表示某種特定的意義,即一段視頻代表一個(gè)手勢。
基于傳統(tǒng)方法的手勢識別算法主要有:一種貝葉斯視覺注意模型[8]在檢測和識別靜態(tài)手勢時(shí),將選擇性注意模型引入,且模擬了人體大腦視覺皮層的部分功能,然后使用支持向量機(jī)(SVM)分類器對手勢進(jìn)行分類,該方法在NUSHP-II 手勢數(shù)據(jù)集上的準(zhǔn)確率為94.36%;一種有效結(jié)合機(jī)器學(xué)習(xí)模型與模板匹配的方法[9],在作者的數(shù)據(jù)集上獲得了99.75%的基本手勢識別率以及100%的復(fù)雜手勢識別率;一組深度混合分類器[10],用于以自我為中心的手勢識別,在NUSHP-II 數(shù)據(jù)集的識別精度為97.72%;一種樸素貝葉斯分類器系統(tǒng)[11],在基于靜態(tài)手勢的協(xié)作機(jī)器人方面表現(xiàn)良好,其結(jié)果在不同的工作環(huán)境、距離、角度、不同大小的人等條件下產(chǎn)生了較好的魯棒性;一種融合表面肌電和加速度傳感信息的識別方法[12],對四路表面肌電與三軸加速度信號進(jìn)行數(shù)據(jù)采集,通過支持向量機(jī)完成分類,在作者的數(shù)據(jù)集上達(dá)到了91.2%的識別率。
基于神經(jīng)網(wǎng)絡(luò)的動態(tài)手勢識別算法主要有:文獻(xiàn)[13]提出了一種ResNet-10 輕型CNN 架構(gòu)用于手勢檢測,提出了一種D-CNN ResNeXt-101 模型來對手勢進(jìn)行分類,在EgoGesture 數(shù)據(jù)集和NVIDIA Dynamic Hand Gesture 數(shù)據(jù)集進(jìn)行了手勢分類測試,準(zhǔn)確度分別為94.04%和83.82%;一種融合了Masked Res-C3D 網(wǎng)絡(luò)和骨架LSTM 模型[14],并提出了一種通過權(quán)重融合層融合異常結(jié)果和分類模型缺陷的方案,用于RGB-D 視頻中的異常手勢識別,在IsoGD 數(shù)據(jù)集上識別率為68.42%。
基于神經(jīng)網(wǎng)絡(luò)的靜態(tài)手勢識別算法主要有:一種使用CNN 的手勢識別[15],其背景減少技術(shù)用于去除建議手部區(qū)域的敏感背景,并獲得了95.96%的平均識別率;一種基于R-CNN 的手勢識別[16]產(chǎn)生了識別精度為99.4%,但平均一張圖像的識別計(jì)算時(shí)間為40 s,這在計(jì)算上是較為昂貴的;一種使用Faster R-CNN 對象檢測器為協(xié)作機(jī)器人建立的智能手勢識別[17],在作者自己的數(shù)據(jù)集上測試的平均準(zhǔn)確度為91.94%,且平均一張圖像的識別計(jì)算時(shí)間為230 ms;一種通過遷移學(xué)習(xí)利用兩個(gè)天線的阻抗變化和深度卷積神經(jīng)網(wǎng)絡(luò)對頻譜圖圖像對手勢進(jìn)行分類[18],該方法在作者自己的數(shù)據(jù)集上準(zhǔn)確度達(dá)到94.6%;一種帶有CPF 的Faster R-CNN 對象檢測器來找到RGB 圖像中手的準(zhǔn)確位置[19],在Gloves 數(shù)據(jù)集上進(jìn)行了測試,平均精度為95.51%。
為解決在無約束環(huán)境下靜態(tài)手勢識別準(zhǔn)確率不高的問題,本文提出了一種融合手部骨架灰度圖的深度神經(jīng)網(wǎng)絡(luò)。 首先,構(gòu)建了一種基于手部關(guān)鍵點(diǎn)及其相關(guān)性的手部骨架灰度圖作為網(wǎng)絡(luò)輸入。 當(dāng)訓(xùn)練網(wǎng)絡(luò)時(shí)僅輸入RGB 圖像,因圖像中的手容易受到無約束環(huán)境下燈光、自身手指間的遮擋以及背景顏色,尤其是自身膚色等方面的影響,導(dǎo)致網(wǎng)絡(luò)僅依靠通過RGB 圖像獲得的紋理,顏色和輪廓等特征信息無法實(shí)現(xiàn)更精準(zhǔn)的手部檢測定位,從而進(jìn)一步的導(dǎo)致靜態(tài)手勢識別在無約束環(huán)境下手部定位不準(zhǔn)確且準(zhǔn)確率不高的情況;而在輸入RGB 圖像的基礎(chǔ)上同時(shí)輸入手部骨骼灰度圖,并將兩者以增加通道的形式進(jìn)行特征融合后,通過手部關(guān)鍵點(diǎn)及其相互間的連接信息增強(qiáng)手部圖像特征,增大手勢的類間差異,同時(shí)降低無約束環(huán)境對手勢識別的影響,以提高手部識別的準(zhǔn)確率。 其次,在網(wǎng)絡(luò)結(jié)構(gòu)方面,以yolov3[20]神經(jīng)網(wǎng)絡(luò)作為主干網(wǎng)絡(luò),將殘差模塊中的卷積替換為擴(kuò)展卷積,通過增大卷積視野的方式來提高對手勢占畫面比較大情況下的準(zhǔn)確率。 然后,在手部骨架灰度圖和RGB 圖像特征融合后,通過SE 模塊學(xué)習(xí)通道之間的相關(guān)性,自動學(xué)習(xí)每個(gè)特征通道的重要程度,對每個(gè)通道上的特征進(jìn)行縮放,以增強(qiáng)兩張圖像之間的特征融合。 最后,采用RReLU激活函數(shù)來代替Leaky ReLU 激活函數(shù),以提升網(wǎng)絡(luò)的魯棒性,從而降低無約束環(huán)境對靜態(tài)手勢識別的影響。
一種融合手部骨架灰度圖的深度神經(jīng)網(wǎng)絡(luò)如圖1 所示:以yolov3 神經(jīng)網(wǎng)絡(luò)為主干網(wǎng)絡(luò),首先通過RGB 圖像經(jīng)openpose 提取的手部數(shù)據(jù)來構(gòu)建手部骨架灰度圖,并連同RGB 圖像一起輸入到網(wǎng)絡(luò)中;其次在多尺度模塊前以增加通道的形式將RGB 圖像的特征與手部骨架灰度圖進(jìn)行特征融合,并一個(gè)通過SE 模塊學(xué)習(xí)通道之間的相關(guān)性,對每個(gè)通道上的特征進(jìn)行縮放;然后將殘差模塊中的1?1 的卷積改成膨脹系數(shù)為2 的擴(kuò)展卷積,3?3 的卷積改成膨脹系數(shù)為3 的擴(kuò)展卷積;最后將激活函數(shù)由Leaky ReLU 函數(shù)改為RReLU 函數(shù)。
圖1 融合手部骨架灰度圖的深度神經(jīng)網(wǎng)絡(luò)
卡內(nèi)基梅隆大學(xué)在2017 年CVPR 會議上提出一種提取手部關(guān)鍵點(diǎn)的開源代碼[21], 簡稱openpose。 手部關(guān)鍵點(diǎn)名稱如表1 所示,手部骨架示意圖如圖2 所示,表1 中的序號分別對應(yīng)圖2 中的關(guān)鍵點(diǎn)序號。 該算法的原理主要是利用立體幾何,以多視圖作為監(jiān)督信號源,生成一致的手部關(guān)鍵點(diǎn)標(biāo)簽,引導(dǎo)訓(xùn)練手部關(guān)鍵點(diǎn)檢測器,輸出手部21個(gè)關(guān)鍵點(diǎn)歸一化后的二維坐標(biāo)值及其對應(yīng)的得分。
圖2 手部骨架圖
表1 openpose 手部關(guān)鍵點(diǎn)名稱
提出的一種基于手部關(guān)鍵點(diǎn)信息和關(guān)鍵點(diǎn)之間相關(guān)性的手部骨架灰度圖,如圖3 所示,是在openpose 輸出的基礎(chǔ)上,將歸一化后21 個(gè)手部關(guān)鍵點(diǎn)位置坐標(biāo)值(x,y)及其對應(yīng)關(guān)鍵點(diǎn)得分的輸出文件進(jìn)行如下計(jì)算和處理所得。
圖3 部分手勢的GHS 圖像
首先,按照原圖的像素級寬高進(jìn)行還原,以便在原圖像上定位。 然后以關(guān)鍵點(diǎn)為圓心,r個(gè)像素點(diǎn)為半徑畫圓,所得的圓內(nèi)所有像素點(diǎn)的灰度值,均為關(guān)鍵點(diǎn)得分乘以255。 最后,關(guān)鍵點(diǎn)之間的關(guān)聯(lián)性表現(xiàn)在以上述圓的直徑為寬,關(guān)鍵點(diǎn)之間歐式距離為長,構(gòu)成的長方形內(nèi)所有像素點(diǎn)的灰度值為兩個(gè)關(guān)鍵點(diǎn)的平均得分乘以255。 手部骨架灰度圖的其他像素點(diǎn)的灰度值均置為0。 上述計(jì)算如式(1)~式(3)所示:
式中:gv 表示灰度值,k表示第k個(gè)像素點(diǎn),score 表示關(guān)鍵點(diǎn)得分,i和j分別表示第i和j個(gè)關(guān)鍵點(diǎn),I、J和K分別表示對應(yīng)關(guān)鍵點(diǎn)在原圖像上的坐標(biāo)值(x,y),I-K2表示求兩個(gè)坐標(biāo)點(diǎn)之間的歐式距離;d(K,li)表示求點(diǎn)K到直線li之間的距離,lij表示過點(diǎn)I和J的直線,li表示過點(diǎn)I且與直線lij垂直的直線,lj表示過點(diǎn)J且與直線lij垂直的直線。
SE 模塊[22]是2018 年由來自Momenta 的高級研發(fā)工程師胡杰及其所在WMW 團(tuán)隊(duì)在CVPR 會議上提出的,模塊的網(wǎng)絡(luò)結(jié)構(gòu)如圖4 所示,其中e 是一個(gè)縮放參數(shù),目的是為了減少通道數(shù)從而降低計(jì)算量。 該模塊的組成有3 個(gè)部分,分別是Squeeze 操作、Excitation 操作和Scale 操作。
圖4 SE 模塊網(wǎng)絡(luò)結(jié)構(gòu)
Squeeze 操作如式(4)所示,利用全局的池化,將大小為C×H×W的輸入特征綜合為C×1×1 的特征描述,其中C為通道數(shù),H和W分別為圖像的高寬。
Excitation 操作如式(5)所示,先利用一個(gè)全連接層操作將W1和zc相乘,其中W1的維度是(C/r)×C,再經(jīng)過一個(gè)ReLU 層,輸出的維度不變;然后再將結(jié)果和W2相乘,且和W2相乘也是一個(gè)全連接層的過程,W2的維度是C×(C/r),因此輸出的維度就是1×1×C;最后再經(jīng)過sigmoid 函數(shù),得到s。
式中:δ和σ分別表示第一次全連接操作和第二次全連接操作。
Scale 操作如式(6)所示,即把uc矩陣中的每個(gè)值都乘以sc,其中uc是一個(gè)二維矩陣特征圖,sc是權(quán)重系數(shù),YC表示結(jié)合了權(quán)重之后SE 模塊的最終輸出。
Yolov3 中使用的激活函數(shù)是Leaky ReLU 激活函數(shù),作用在于對網(wǎng)絡(luò)的上一層節(jié)點(diǎn)輸出做非線性轉(zhuǎn)換,同時(shí)解決神經(jīng)網(wǎng)絡(luò)的梯度消失問題。 相較于ReLU 激活函數(shù),Leaky ReLU 是給所有負(fù)值賦予一個(gè)非零斜率,其計(jì)算如式(7)所示:
式中:xi表示函數(shù)輸入,yi表示函數(shù)輸出,ai表示一個(gè)在(0,1)區(qū)間內(nèi)的一個(gè)固定參數(shù)。 由于在訓(xùn)練過程中ai是固定不變的,從而限制了網(wǎng)絡(luò)在無約束環(huán)境下的魯棒性。
RReLU 激活函數(shù),是在Leaky ReLU 激活函數(shù)的基礎(chǔ)上,將負(fù)值的斜率在訓(xùn)練中變?yōu)殡S機(jī)的值,即ai是從一個(gè)均勻的分布中隨機(jī)抽取的數(shù)值,但在測試環(huán)節(jié)就會固定下來。 RReLU 激活函數(shù)如式(8)所示:
式中:ai∈U(l,u),l3.3 Yolov3 為主干網(wǎng)絡(luò)
Yolov3 網(wǎng)絡(luò)引入了FPN 結(jié)構(gòu),同時(shí)它的檢測層由三級特征層的融合,直接將淺層網(wǎng)絡(luò)所得的特征與深度卷積后的特征進(jìn)行融合,這樣的結(jié)構(gòu)解決了其他部分網(wǎng)絡(luò)(例如SSD 模型)最后一層自動篩掉小物體的問題,提高了小物體的識別能力,從而提高了在手部占畫面比較小情況下的手勢識別精度。
且Yolov3 網(wǎng)絡(luò)模型的識別速度達(dá)到了較高的實(shí)時(shí)水平,而本文因手部骨架灰度圖的提取需要一定時(shí)間,所以以Yolov3 為主干網(wǎng)絡(luò)后可一定程度上保證了本文提出的手勢識別網(wǎng)絡(luò)模型的識別速度。
4.1.1 Microsoft Kinect & Leap Motion 數(shù)據(jù)集
Microsoft Kinect & Leap Motion 數(shù)據(jù)集[23]包含RGB 數(shù)據(jù)、深度數(shù)據(jù)和Leap Motion 數(shù)據(jù)。 該數(shù)據(jù)集包含由14 個(gè)不同的人分別做10 種不同的手勢,并且每個(gè)人對每個(gè)手勢重復(fù)做10 次,總共有1 400個(gè)不同的數(shù)據(jù)樣本。 對應(yīng)10 個(gè)手勢的RGB 圖像圖5所示,例如拳頭,“Yes”、數(shù)字以及小拇指等。
圖5 Microsoft Kinect & Leap Motion 數(shù)據(jù)集RGB 手勢圖像示意圖
4.1.2 Creative Senz3D 數(shù)據(jù)集
Creative Senz3D 數(shù) 據(jù) 集[24]是 通 過 Creative Senz3D 相機(jī)獲取的。 該數(shù)據(jù)集包含4 個(gè)不同的人執(zhí)行的11 個(gè)不同的手勢,同時(shí)每個(gè)人將每個(gè)手勢分別重復(fù)30 次,總共進(jìn)行了1 320 次采集。 對應(yīng)11個(gè)手勢的RGB 圖像圖6 所示,例如拳頭,數(shù)字1 至5 等。
圖6 Creative Senz3D 數(shù)據(jù)集RGB 手勢圖像示意圖
所有的訓(xùn)練和測試均在臺式電腦上進(jìn)行,電腦的主要配置為Intel(R)Core(TM)i5-8400 CPU @2.80 GHz、6GB 的GPU NVIDIA GeForce GTX 1060顯卡和8GB 的運(yùn)行內(nèi)存。 程序在Windows10 系統(tǒng)下運(yùn)行,同時(shí)調(diào)用并行計(jì)算架構(gòu)(CUDA)、英偉達(dá)神經(jīng)網(wǎng)絡(luò)庫(Cudnn)、開源計(jì)算機(jī)視覺庫(OPENCV)。模型訓(xùn)練時(shí)使用官網(wǎng)提供預(yù)訓(xùn)練權(quán)重文件來初始化本文的網(wǎng)絡(luò)權(quán)重參數(shù),以便訓(xùn)練時(shí)加快模型的收斂速度。 在yolov3 中,由于適合的先驗(yàn)尺寸將會直接影響到靜態(tài)手勢識別時(shí)的速度以及目標(biāo)框在定位時(shí)的精度,因此對所有訓(xùn)練樣本數(shù)據(jù)集上標(biāo)注出的邊界框數(shù)據(jù)采用K-means 聚類來獲得最優(yōu)的9 組先驗(yàn)框尺寸。 具體訓(xùn)練參數(shù)值如表2 和表3 所示。 其中,參數(shù)半徑r用于構(gòu)建手部骨架灰度圖,縮放參數(shù)e用于SE 模塊的通道數(shù)縮放。
表2 Microsoft Kinect & Leap Motion 數(shù)據(jù)集的訓(xùn)練參數(shù)設(shè)置
表3 Creative Senz3D 數(shù)據(jù)集的訓(xùn)練參數(shù)設(shè)置
圖7 Microsoft Kinect & Leap Motion數(shù)據(jù)集訓(xùn)練時(shí)損失曲線圖
在Microsoft Kinect & Leap Motion 數(shù)據(jù)集上,最終模型共訓(xùn)練20 000 次,耗時(shí)29 h。 訓(xùn)練模型時(shí),從14 個(gè)人中隨機(jī)抽取10 個(gè)人作為訓(xùn)練數(shù)據(jù),即訓(xùn)練數(shù)據(jù)集共1 000 張RGB 圖片和1 000 張對應(yīng)的手部骨架灰度圖,剩余的4 個(gè)人的400 張RGB 圖像和400 張對應(yīng)的手部骨架灰度圖作為測試數(shù)據(jù)集。 在訓(xùn)練過程中,通過繪制模型損失曲線觀察訓(xùn)練動態(tài)過程,其對應(yīng)的損失值變化曲線如圖7 所示。 可看出:模型在前期迭代中損失值縮減迅速,模型快速擬合;當(dāng)?shù)?xùn)練4 000 次后,損失值下降放緩;當(dāng)?shù)?0 000次時(shí),損失值收斂至0.010 3,結(jié)束訓(xùn)練在Creative Senz3D 數(shù)據(jù)集上,最終模型共訓(xùn)練22 000 次,耗時(shí)25 h,訓(xùn)練模型時(shí),按照不同的手勢執(zhí)行人采用留一法將數(shù)據(jù)分為訓(xùn)練數(shù)據(jù)集和測試數(shù)據(jù)集。 訓(xùn)練數(shù)據(jù)集由3 個(gè)人共990 張RGB 圖片和990 張對應(yīng)的手部骨架灰度圖,剩余的1 個(gè)人的330 張RGB 圖像和330 張對應(yīng)的手部骨架灰度圖作為測試數(shù)據(jù)集。 在訓(xùn)練過程中,通過繪制模型損失曲線觀察訓(xùn)練動態(tài)過程,其對應(yīng)的損失值變化曲線如圖8 所示。 可看出:模型在前期迭代中損失值快速縮減,模型快速擬合;當(dāng)?shù)?xùn)練4 400 次后,損失值下降放緩;當(dāng)?shù)?2 000 次時(shí),損失值收斂至0.021 5,結(jié)束訓(xùn)練。
圖8 Creative Senz3D 數(shù)據(jù)集訓(xùn)練時(shí)損失曲線圖
本文提出的一種融合手部骨架灰度圖的深度神經(jīng)網(wǎng)絡(luò),每一步改進(jìn)分別在Microsoft Kinect & Leap Motion 數(shù)據(jù)集上測試結(jié)果如表4 所示,在Creative Senz3D 數(shù)據(jù)集上測試結(jié)果如表5 所示。
該網(wǎng)絡(luò)算法在Microsoft Kinect & Leap Motion數(shù)據(jù)集上每一類的準(zhǔn)確率情況,具體如表6 所示,其中除G7 和G8 的準(zhǔn)確率分別為98.1%和98.7%,其他類別準(zhǔn)確率均達(dá)到了100%。 在Creative Senz3D數(shù)據(jù)集上每一類的準(zhǔn)確率情況,具體如表7 所示,其中除G1、G3 和G4 的準(zhǔn)確率分別為99.31%、99.17%和99.32%,其他類別準(zhǔn)確率均達(dá)到了100%。
表4 每一步改進(jìn)在Microsoft Kinect & Leap Motion數(shù)據(jù)集上的測試結(jié)果
表5 每一步改進(jìn)在Creative Senz3D 數(shù)據(jù)集上測試結(jié)果
表6 Microsoft Kinect & Leap Motion 數(shù)據(jù)集上10 類的測試結(jié)果
表7 Creative Senz3D 數(shù)據(jù)集上11 類的測試結(jié)果
不同的手勢識別方法以及yolov3 在Microsoft Kinect & Leap Motion 數(shù)據(jù)集上測試結(jié)果如表8 所示。 通過對比可以清晰的看出,本文提出的方法比其他方法在平均準(zhǔn)確率上至少提高了2.88%,且基于GHS 圖像和RGB 圖像的手勢識別速度為26 fps。
表8 不同算法在Microsoft Kinect & Leap Motion數(shù)據(jù)集上的測試結(jié)果
不同的手勢識別方法以及yolov3 在Creative Senz3D 數(shù)據(jù)集上測試結(jié)果如表9 所示。 通過對比可以清晰的看出,本文提出的方法比其他方法在平均準(zhǔn)確率上至少提高了0.2%,且基于GHS 圖像和RGB 圖像的手勢識別速度為31 fps。
表9 不同算法在Creative Senz3D 數(shù)據(jù)集上的測試結(jié)果
通過上述實(shí)驗(yàn)結(jié)果表格的對比,說明無約束環(huán)境下靜態(tài)手勢在識別過程中,使用手部關(guān)鍵點(diǎn)及其相互關(guān)聯(lián)性構(gòu)建手部骨架灰度圖,以yolov3 為主干網(wǎng)絡(luò),添加擴(kuò)展卷積殘差模塊和SE 模塊,并用RReLU 函數(shù)作為激活函數(shù)的方法在識別準(zhǔn)確率上有著較大的提升。 該方法在Microsoft Kinect & Leap Motion 數(shù)據(jù)集和Creative Senz3D 數(shù)據(jù)集上均進(jìn)行了測試對比實(shí)驗(yàn),相比其他靜態(tài)手勢識別方法,本文提出的識別方法在這兩個(gè)無約束環(huán)境下的靜態(tài)手勢數(shù)據(jù)集有著優(yōu)秀的表現(xiàn)。 在Microsoft Kinect & Leap Motion 數(shù)據(jù)集和Creative Senz3D 數(shù)據(jù)集上準(zhǔn)確率均達(dá)到了最高,分別為99.68%和99.8%,且基于GHS 圖像和RGB 圖像的手勢識別速度分別為26 fps 和31 fps。
手勢識別在空間定位方面依舊有著不小問題。如今的手勢識別算法距離理想的空間定位能力,即得到手部的精準(zhǔn)位置還有著不小的差距,而其也正是未來人機(jī)交互的重要基礎(chǔ)。 同時(shí),本文提出的解決方法仍未能完全解決對應(yīng)的挑戰(zhàn)和難點(diǎn),尤其在網(wǎng)絡(luò)延遲和實(shí)時(shí)性方面依舊有著較大的提升空間。