張繼凱,顧蘭君
(內(nèi)蒙古科技大學 信息工程學院,內(nèi)蒙古 包頭 014010)
動作識別是人機交互的重要方式,隨著科技的發(fā)展,基于視覺的人體動作識別在人工智能領(lǐng)域占有重要地位.人體動作識別在人機交互[1]、異常行為檢測[2]以及服務于機器人[3]等多領(lǐng)域得到廣泛應用.在人機交互中,交互行為具有較強實時性以及高精度要求,是各類應用中難度較大的一類.
傳統(tǒng)的動作識別方法容易受光照、遮擋等外界因素的影響.在動作識別中采取骨架特征的方法,并通過對比實驗,發(fā)現(xiàn)采用的方法能有效提高動作識別準確率.在已有人體關(guān)鍵點檢測方法的基礎(chǔ)上,搭建網(wǎng)絡模型,實現(xiàn)動作的分類與識別,并根據(jù)識別到的手部動作進行軌跡追蹤,形成連續(xù)的動作,從而實現(xiàn)單手與雙手的交互.
人體關(guān)鍵點檢測與動作識別都是實現(xiàn)交互的前提.在自然人機交互中,強調(diào)以人為中心進行交互,如語音交互、體態(tài)語言交互和其他姿態(tài)語言交互.其中體感交互是通過獲取人體的動作信息來進行交互,讓用戶擺脫設(shè)備的限制,可以更加自由地完成各種交互動作.
傳統(tǒng)的動作識別方法具有運算復雜度高、運算時間長等問題,比如從視頻中提取圖像的尺度不變特征(SIFT)[4]、運動物體的邊界直方圖特征(MBH)[5].文獻[6]提出了一種基于局部二進制描述符和HIK核函數(shù)的識別方法,解決了特征點和描述符檢測時間長和計算復雜度高的問題.而文獻提出支持向量機、K均值聚類和隱馬爾可夫模型,被結(jié)合起來進行動作識別與分類,并取得了較好的結(jié)果.文獻[7]提出了圖卷積長短期記憶網(wǎng)絡(Graph Convolution-LSTM)模型,該模型可以自動學習時空特征對動作進行建模.針對人體動作多樣性、場景嘈雜對動作識別的影響,張瑞等[8]采用3D卷積神經(jīng)網(wǎng)絡以連續(xù)的16幀視頻作為輸入,經(jīng)過多通道處理,卷積、池化的特征提取進行動作分類.
在上述的方法中,由于RGB數(shù)據(jù)以及深度圖像信息存在遮擋,并且容易受到環(huán)境的影響.因此,學者們把更多的時間與經(jīng)歷投入到人體的骨架信息研究中來,并以此作為研究對象.針對骨架序列動作識別問題,裴曉敏等[9]提出了1種用于動作識別的時空融合深度學習網(wǎng)絡,來學習骨架節(jié)點之間的關(guān)系.人類動作由關(guān)節(jié)位置序列表示,劉沿等[10]通過采用滑動窗口的方法將人體動作劃分為3D骨架片段序列,并計算該片段所包含點的均值及協(xié)方差矩陣,最后將兩者結(jié)合實現(xiàn)該時間段對人體動作的表示.而文獻[11]提出了1種可訓練特征提取器與基于字符串核相結(jié)合的方法用于動作識別,在3個基準數(shù)據(jù)集上取得了較好的成績.SHI等人將骨骼數(shù)據(jù)表示為1個基于關(guān)節(jié)和骨骼之間運動依賴性的有向無環(huán)圖(Directed Acyclic Graph)[12],設(shè)計了1種新的二重圖神經(jīng)網(wǎng)絡,并且在數(shù)據(jù)集NTU-RGBD和骨架動力學上性能超過目前的先進水平.文獻[13]提出了1種基于骨架的人類行為識別框架,采用VLAD算法和簇池方法進行聚合,并將特征向量結(jié)合提高KNN分類器的分類精度.豐艷等[14]提出的基于時空注意力的深度網(wǎng)絡模型進行角度無關(guān)性骨架行為識別,解決了單視角數(shù)據(jù)包含噪聲的問題,并且在NTU數(shù)據(jù)集上取得了較好的結(jié)果.
整體研究思路由以下3部分組成:人體關(guān)鍵點的檢測、動作識別以及實時交互.
該算法首先進行人體關(guān)鍵點的檢測,采用VGG與兩分支的卷積神經(jīng)網(wǎng)絡檢測人體中18個關(guān)鍵點,并得到關(guān)鍵點的坐標信息.然后進行動作識別,采集不同動作類型的數(shù)據(jù)制作數(shù)據(jù)集,并搭建堆疊模型進行訓練.為了使得數(shù)據(jù)多樣化,在采集數(shù)據(jù)集時,選取不同體型的人作為采集對象,并且大量的二維坐標訓練時比較復雜且耗時,為了訓練時加快網(wǎng)絡的收斂,要對數(shù)據(jù)進行歸一化處理.最后在動作識別過程中也對特定動作,比如手部運動軌跡進行了追蹤.通過對動作運動軌跡估算,擬合出計算機能夠適配的交互指令.達到實時交互的目的.圖1所示的是算法的整個流程圖.
圖1中檢測的18個關(guān)鍵點對應人體的18個部位,分別為Nose, Neck, Rshoulder, Relbow, Rwrist, Lshoulder, Lelbow, Lwrist, Rhip, Rknee, Rankle, Lhip, Lknee, Lankle, Reye, Leye, Rear, Lear,為了方便數(shù)據(jù)集的介紹,18個關(guān)鍵點分別用整數(shù)1~18表示.其中18個關(guān)鍵點的所在部位圖如圖2所示.
在人體姿態(tài)估計中,由于人體之間的相互接觸,以及圖片中人數(shù)、位置的變化會使得計算時間增加.因此,采用自下而上(down-top)的方法,先進行關(guān)鍵點的檢測,然后根據(jù)關(guān)鍵點的分布確定每個人的姿態(tài).人體關(guān)鍵點檢測由VGG19的前10層和兩分支的卷積神經(jīng)網(wǎng)絡構(gòu)成,首先輸入1張圖片到VGG并提取該圖片的特征圖F,然后將F作為Stage1的輸入,經(jīng)過多個階段的回歸,獲得圖片中的所有關(guān)鍵點,最后通過貪心推理將關(guān)鍵點連接起來形成人體的整個骨架.整體網(wǎng)絡結(jié)構(gòu)如圖3所示.
圖3中S1至St表示身體部位的2D置信圖,L1至Lt表示像素點在骨架中的走向.Stage1將F作為輸入,得到S1,L1,Staget將F,St-1,Lt-1作為輸入,最后得到St,Lt.在卷積神經(jīng)網(wǎng)絡的每個階段都要采用L2范式進行l(wèi)oss計算.計算公式如式(1)所示:
(1)
(2)
(3)
式(1)~(3)計算了p點的置信值.在計算第k個人的肢體c上的親和向量場L時,如公式(4)所示:
(4)
(5)
式中:代表肢體方向的單位向量xj,k表示第k個人的第j個關(guān)鍵點的位置.同時設(shè)定p點的范圍來判斷該點是不是在肢體c上,如公式(6)所示:
0≤v·(p-xj1,k)≤lc,kand|v⊥(p-xj1,k)|≤σl.
(6)
式中:σl代表肢體的寬度,lc,k=‖xj2,k-xj1,k‖2表示肢體的長度,點p的部分親和力向量場的真實值為所有人在該點的平均值,計算公式如式(7):
(7)
式中:nc(p)表示非零向量的個數(shù),在得到關(guān)鍵點位置之后,通過計算任意2關(guān)節(jié)連線上權(quán)重值來評估關(guān)鍵點之間的相關(guān)性,如公式(8)所示:
(8)
式中:p(u)=(1-u)dj1+udj2,在得到關(guān)節(jié)點與各點連線的權(quán)重之后,采用匈牙利算法對相鄰節(jié)點進行最優(yōu)匹配,從而得到人體的整個骨架姿態(tài).
動作識別采用搭建網(wǎng)絡層的方法來實現(xiàn)堆疊模型的構(gòu)建,其中動作識別數(shù)據(jù)集是通過人體關(guān)鍵點檢測獲取到的.對不同體型的人進行數(shù)據(jù)集采集,每種動作類別采集20個人的數(shù)據(jù),增加數(shù)據(jù)的多樣性與復雜性,減少因數(shù)據(jù)集過小而產(chǎn)生的過擬合.
首先該模型的第一層作為輸入層要讀取訓練數(shù)據(jù),由于數(shù)據(jù)集中的每一條數(shù)據(jù)都是每個關(guān)鍵點的二維坐標(X,Y),一共18個關(guān)鍵點,所以輸入維度為36.然后向模型中添加中間層和輸出層,中間層是疊加的全連接層,激活函數(shù)是Relu,由于輸出是6種動作類型,所以最后一層用多分類器softmax進行分類,并且輸出維度為6.在隱藏層中加入了人batch normalization,用于減少特殊數(shù)據(jù)對訓練過程的影響,該模型的結(jié)構(gòu)如圖4所示.
該模型選用合適的優(yōu)化器(RMSprop)以及損失函數(shù)(binary_crossentropy),調(diào)用fit函數(shù)指定批次大小(batch_size)、迭代次數(shù)、驗證數(shù)據(jù)集等等.經(jīng)過不斷地實驗進行微調(diào),選擇最優(yōu)的參數(shù)使得訓練效果最佳.最后使用evaluate方法來評估模型,模型的每層的參數(shù)如下表1所示.
表1中,每層神經(jīng)網(wǎng)絡都包含一定數(shù)量的神經(jīng)元,每層參數(shù)的計算公式如式(9)所示.
輸出參數(shù)=(輸入數(shù)據(jù)維度+1)*神經(jīng)元個數(shù).
(9)
如dense_1輸入數(shù)據(jù)維度是36,有128個神經(jīng)元,按照公式(8),輸出參數(shù)為4 736.dense_2,dense_3,dense_4的參數(shù)分別為8 256,1 040,1 02.
表1 模型的各個參數(shù)表
動作識別為實現(xiàn)交互做準備.人體動作識別方法可以準確識別6種普通動作,當識別到了手部運動的2個動作(開始與準備)后,可以根據(jù)手部運動軌跡進行計算從而擬合出多種交互動作.其中實時交互的1個完整過程如下:
Step 1:先進行人體動作識別,如果識別到的是開始(Start),跳轉(zhuǎn)Step 2,如果識別的是準備(Ready),則跳轉(zhuǎn)Step 3.
Step 2:跟蹤手部運動,當手部有藍色圓點時表示追蹤上了單手的運動,保持水平坐標相差不超過閾值(<5 cm)的情況下(其中,閾值是在代碼中添加的并且設(shè)定為5 cm,如果追蹤到單手的下一幀與上一幀坐標的水平距離大于5 cm,則會出現(xiàn)提示Error),當圓點上1秒的Y值大于下1秒的Y值時,交互指令為上滑(用向上的箭頭表示).
Step 3:當雙手之間有軌跡出現(xiàn)時,表示追蹤到了雙手的運動,當雙手豎直距離不超閾值的情況下(如果是動作識別類型為Ready時,設(shè)定同一幀雙手之間的垂直方向坐標的距離大于5 cm時,同樣會出現(xiàn)提示Error),并且雙手之間的水平距離逐漸變大,交互指令為放大,反之為縮小.計算雙手之間的連線與水平線之間的夾角,當角度相對于上一幀有所變大,則認定為正向旋轉(zhuǎn),反之為反向旋轉(zhuǎn),從而擬合出的交互動作類別為旋轉(zhuǎn)(用旋轉(zhuǎn)箭頭表示).
數(shù)據(jù)集是采集不同體型不同動作類型的真實二維坐標信息.包括站立(Stand)、踢腿(Kick)、蹲(Squat)、揮手(Wave)、開始(Start)、準備(Ready)等.為了訓練時加快網(wǎng)絡的收斂,要對數(shù)據(jù)進行歸一化處理.例如鼻子的坐標為(X,Y),經(jīng)過歸一化處理得到的坐標為(X′,Y′),其中計算公式如(10)所示.
X′=X/W
Y′=Y/H.
(10)
式中:W,H分別為顯示窗口的寬度和長度,窗口大小為W與H的乘積.其中每一條數(shù)據(jù)有37列,前36列為18個關(guān)鍵點的x,y坐標,最后一列為動作標簽,按照采集的動作類別順序進行編碼,分別為0,1,2,3,4,5.如表2所示,為站立的部分原始數(shù)據(jù)(只列出了4個關(guān)鍵點的數(shù)據(jù)信息).
把表2中的原始數(shù)據(jù)按照式(10)處理后,得到處理后的數(shù)據(jù)如表3所示.
表2 站立的部分原始數(shù)據(jù)表
表3 站立的處理后的部分數(shù)據(jù)表
表2,3只給出了站立的部分原始數(shù)據(jù)與處理后的數(shù)據(jù).其中,所有的數(shù)據(jù)集為3 393條,站立的數(shù)據(jù)為556條,踢腿為527條,揮手555條,開始565條,準備為600條.其中,將數(shù)據(jù)集劃分為訓練集與驗證集,測試集為總數(shù)據(jù)集的十分之一,共339個,驗證集為3 053個.
經(jīng)過堆疊模型的訓練,得到訓練集與驗證集的精確度與損失,如圖5所示.由圖5可知,隨著Epoch的增大,訓練集與驗證集的Loss逐漸趨近于0,而精確度逐漸接近于1.說明采用的堆疊模型訓練的效果比較好.
得到上述訓練結(jié)果圖的同時,為了清晰地看到每個動作的預測結(jié)果,采用混淆矩陣,該矩陣在分類模型預測時,會顯示對某種動作產(chǎn)生錯誤預測的數(shù)量.從混淆矩陣中可以看到每個動作類別的正確預測數(shù)量和錯誤預測數(shù)量.如圖6所示,是6種動作的混淆矩陣,其中橫向表示預測標簽,縱向表示真實標簽.
在混淆矩陣中,精確度是針對預測結(jié)果而言,它表示的是預測為正的樣本中有多少為真正的正樣本,預測結(jié)果中一種就是把正類預測為正類(TP),另一種就是把負類預測為正類(FP),計算公式如(11)所示:
(11)
召回率是針對原來樣本而言,它表示的是樣本中的正例有多少被預測正確,也有兩種可能,一種就是把原來的真實標簽樣本預測為正類(TP),另一種就是把原來的真實標簽樣本預測為負類(FN),計算公式如(12)所示:
(12)
根據(jù)混淆矩陣中的預測結(jié)果以及精確度、召回率的計算公式,得到每種動作的準確率以及召回率,如表4所示.
表4 人體動作識別準確度表
由表3可知,采用堆疊模型進行動作分類的結(jié)果中,準確率最高的是站立以及準備這2個動作.從整體來看,動作識別的準確率都在98%以上,平均召回率在97%以上,說明該方法可以精確地實現(xiàn)動作識別.為了清晰地看到動作識別的效果圖,如圖7中的(a),(b),(c),(d)所示,分別為站立、踢腿、下蹲以及揮手等4種動作類別.
動作識別采用堆疊模型,并且對每種動作類別進行準確率的計算,發(fā)現(xiàn)動作識別的準確率都在98%以上.為了證明文中方法對于動作識別的可行性以及實用性,在相同的環(huán)境與數(shù)據(jù)集中,與LSTM動作識別方法進行對比,如圖8所示,為對比實驗結(jié)果.
運動追蹤是手勢交互的前提.當識別到手部動作以后,會持續(xù)跟蹤手部的運動軌跡,從而將追蹤到的連續(xù)動作進行交互.文中根據(jù)追蹤到的手部的運動軌跡進行動作估計,當識別到動作的一瞬間,表示交互命令的開始,隨著不斷追蹤連續(xù)動作,實現(xiàn)簡單交互過程.就如鼠標操控計算機一樣,點擊鼠標左鍵,表示交互過程的開始,然后連續(xù)地拖動鼠標,實現(xiàn)頁面下滑.交互過程是針對手部的運動而言,為了體現(xiàn)該動作識別方法具有較高的識別精確度,在變化范圍很小的情況下也能夠以較高的準確率進行動作分類與識別,證明該方法具有很好的魯棒性.
當動作為開始(start)時,右手手腕處有1個藍色的圓圈進行追蹤單手的運動,并且候選框以及動作類別變成綠色,表示交互過程的開始.當識別到的動作為準備(ready)時,2手之間會有1條估計追蹤雙手的運動軌跡的距離(距離為2手之間的歐式距離),效果圖如圖9所示.
根據(jù)單手的坐標變化以及雙手之間的距離變化,擬合了幾種交互動作,分別用帶方向的箭頭表示,并且給出了語義說明,如表5所示.
表5 手勢交互的動作表示及其語義說明表
文中采用兩分支的卷積神經(jīng)網(wǎng)絡實現(xiàn)人體關(guān)鍵點檢測,并以此為基礎(chǔ)利用堆疊模型進行了多種人體靜態(tài)動作識別,且具有較好的識別精度.為實現(xiàn)實時的人機交互,在識別到特定的2個開始動作后,實時監(jiān)測手部關(guān)鍵點在圖像中的位置并形成運動軌跡,通過軌跡計算擬合出多種交互動作.為驗證文中采用的方法具有一定的實用性以及推廣性,與LSTM方法進行對比,發(fā)現(xiàn)在動作識別方面性能優(yōu)于此方法.將文中所述動作均為基于平面的若干交互動作,雖在一定程度上可替代鼠標和觸摸屏等交互設(shè)備,但更復雜的三維空間交互并未實現(xiàn),這將作為接下來的工作繼續(xù)展開研究.