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