楊煜+張煒
摘要:隨著人體運動數(shù)據(jù)采集技術的發(fā)展,基于數(shù)據(jù)的人體運動的研究越來越受到人們的關注。人體運動的研究在醫(yī)療康復、運動訓練、虛擬現(xiàn)實、以及影視和游戲等領域有著很大的應用空間。人體動作分類就是基于大量已標注動作名稱的人體動作,對未標注的人體動作進行分類標注。在本文中,研究提出了一種基于長短時記憶網(wǎng)絡(LSTM)的人體動作分類模型。首先,將人體動作表示為時間序列的形式。然后,將人體動作序列逐幀輸入到去掉輸出層的正向和反向LSTM中,并將隱藏層輸出依次送入Mean pooling層和邏輯回歸層得到最終的分類結果。最后,研究利用目前流行的深度學習平臺TensorFlow實現(xiàn)本次研發(fā)的分類模型并進行訓練?;诖?,又進一步利用人體動捕數(shù)據(jù)庫HDM05的數(shù)據(jù)進行實驗來驗證提出的分類模型,經(jīng)過訓練,該模型在測試集上的分類準確率達到了94.84%。
關鍵詞: 人體動作分類; 長短時記憶網(wǎng)絡; 時間序列; TensorFlow; HDM05
中圖分類號: TP183
文獻標志碼:A
文章編號:2095-2163(2017)05-0041-05
Abstract:With the development of human motion data acquisition technology, the research of human motion based on data has attracted more and more attentions. The research of human motion has great application space in medical rehabilitation, sports training, virtual reality, film and television, games and so on. Human action classification aims to classify unlabeled human actions based on a large number of labeled human actions. This paper proposes a human action classification model based on Long Short-Term Memory network (LSTM). Firstly, represent human actions as a form of time series; then, input one human action by frame order into two LSTMs without output layer, one is forward LSTM and the other is backward LSTM, and pass the hidden layer outputs of LSTMs into the Mean pooling layer and the logical regression layer to get the final classification results; finally, implement the classification model and train it with the popular deep learning platform of TensorFlow. The research uses the data of human motion capture database HDM05 to validate the proposed classification model, and the accuracy rate of the classification model reaches 94.84% on test set.
Keywords: classification of human actions; LSTM; time series; TensorFlow; HDM05
收稿日期: 2017-06-06
1概述
隨著人體運動數(shù)據(jù)采集技術的發(fā)展,基于數(shù)據(jù)的人體運動的研究越來越受到人們的關注。人體運動的研究在醫(yī)療康復、運動訓練、虛擬現(xiàn)實、人機交互、以及影視和游戲等有著很大的應用空間。
人體運動可以表示為人體各部分在3D空間中的運動[1],而人體動作可以看作是人體運動過程中的一個完整獨立的動作片段,例如可以把屈膝、跳起、落地的這一段人體運動看作一個“跳躍”動作。人體動作的表示通常是基于各關節(jié)點的位置的[2]或基于身體各部分的旋轉姿態(tài)的[3-4]。在本文中,研究將利用人體各部分的旋轉姿態(tài)來表示人體動作,人體動作可以看作以一個時間序列[3,5-6],序列中每一幀為身體各部分用四元數(shù)表示的旋轉姿態(tài)。
人體動作分類問題是人體運動研究的重要問題之一。人體動作分類是基于大量已標注動作名稱的人體動作,對未標注的人體動作進行分類標注。人們?yōu)榻鉀Q人體動作分類問題應用了許多分類算法。隨著神經(jīng)網(wǎng)絡的發(fā)展,許多研究者嘗試用已經(jīng)構建的神經(jīng)網(wǎng)絡模型進行人體動作的分類并取得了很好的效果。譬如Du等[2]利用分層級聯(lián)的多個循環(huán)神經(jīng)網(wǎng)絡對人體動作進行分類。Cho和Chen[7]將人體動作序列的每一幀數(shù)據(jù)單獨拿出來訓練神經(jīng)網(wǎng)絡并進行分類,然后用投票法由各幀的分類結果得出序列分類的結果。Huang等[4]在將人體運動數(shù)據(jù)表示為李群的基礎上,應用深度神經(jīng)網(wǎng)絡分類人體運動。
在本文中,研究構建了由雙向LSTM神經(jīng)網(wǎng)絡和邏輯回歸層組成的人體動作分類模型,并用TensorFlow平臺實現(xiàn)模型的搭建和訓練過程。TensorFlow是谷歌開源的數(shù)值計算平臺,其中集成了大量神經(jīng)網(wǎng)絡模型的代碼實現(xiàn),使其成為了一個強大的深度學習平臺。文獻[8]中就是用TensorFlow實現(xiàn)的基于BP神經(jīng)網(wǎng)絡的手寫字符識別方法。endprint
在接下來的部分,先介紹人體動作分類的神經(jīng)網(wǎng)絡模型,再探討論述了其在TensorFlow平臺下的實現(xiàn)和訓練,最后研究利用人體動作捕獲數(shù)據(jù)庫HDM05[9]的數(shù)據(jù)進行實驗以驗證模型的分類效果。
2分類模型
2.1人體動作分類問題概述
本文中討論的人體動作分類問題是基于分割好的人體動作進行的,每個人體動作有唯一準確的動作類別標簽。如前所述,人體動作分類就是基于大量已標注類別的動作,對未標注的動作進行分類標注。人體動作分類模型的訓練和
對于分類問題,一般來說需要關注2個問題,即每條實例的數(shù)據(jù)形式,以及分類所用的算法或模型。在這里,首先介紹人體動作的數(shù)據(jù)表示,在后面的章節(jié)中重點深度剖析本文提出的分類模型及其在TensorFlow平臺下的實現(xiàn)。
人體的結構和形態(tài)十分復雜,不同人的體態(tài)差異也很大,因此則需要用人體骨骼模型來對人體進行抽象。人體骨骼模型由抽象的骨頭和關節(jié)構成,人體動作可以看做是人體骨骼模型中所有骨頭的旋轉姿態(tài)構成的一個時間序列。圖2所示的是一個簡單的包含17塊骨頭的人體骨骼模型,使用人體骨骼模型表示人體動作使得對人體運動的研究可以方便地遷移到不同人或骨骼模型上去。
人體骨骼模型并不是人體分類問題研究的一個限制因素。對于具體的研究問題和人體動作數(shù)據(jù)集,可以使用不同的人體骨骼模型進行表示,比如有的數(shù)據(jù)采集包含了手指上的運動,就要使用細化到手指的人體骨骼模型來替代用一個骨頭表示手部運動的模型。
可以看出這3個門的輸入都是xt和ht-1,同時每個門中有自己的權重和偏斜。這些參數(shù)隨著訓練過程不斷調優(yōu),在狀態(tài)更新和隱藏層輸出值的計算上發(fā)揮作用。
TensorFlow是谷歌推出的第二代人工智能學習系統(tǒng),而且有著很多優(yōu)秀的特點,對其闡釋如下:
1)高度的靈活性。TensorFlow不僅能夠用于搭建并訓練各種神經(jīng)網(wǎng)絡模型,還可以完成很多其他計算任務,用戶只需要將自己的計算模型設計成數(shù)據(jù)流圖的形式就可以應用TensorFlow完成任務。
2)可移植性強。TensorFlow可以在CPU和GPU上運行,這即使其能夠移植到臺式機、服務器和手機等許多設備上。
3)提供了大量機器學習的模型,使得科研和開發(fā)人員可以省去重寫底層實現(xiàn)的繁瑣工作。
4)自動求微分。對于使用梯度下降法進行訓練的機器學習模型,用戶只需要定義損失函數(shù)以及模型中哪些參數(shù)是可訓練的,TensorFlow就能夠自動求微分導數(shù)并用梯度下降法訓練模型參數(shù)。
5)性能優(yōu)化。對于多CPU和GPU的工作平臺,TensorFlow能夠很好地支持多線程、隊列、異步操作等。
在TensorFlow下,可以使用python或C++的代碼來搭建數(shù)據(jù)流圖進行計算。流圖中的節(jié)點表示數(shù)學操作,線表示在節(jié)點間傳遞的數(shù)據(jù)張量即多維數(shù)據(jù)數(shù)組。
用TensorFlow實現(xiàn)模型一般分為構建數(shù)據(jù)流圖、訓練模型、使用模型這3個階段。在TensorFlow中,可以用常量、變量、以及操作來構建數(shù)據(jù)流圖。其中,變量包括輸入變量、可訓練的變量以及其他變量。在流圖中加入輸入變量需要用占位符placeholder占位,之后在訓練和使用模型時用feed操作將數(shù)據(jù)從placeholder輸入到模型中??捎柧毜淖兞坑脕肀硎灸P椭械臋嘀睾推频葏?shù),在構建這些變量時需要設置trainable = True。在訓練階段,可以調用訓練相關的操作使這些模型參數(shù)隨著訓練數(shù)據(jù)得到訓練。
3.2構建TensorFlow流圖實現(xiàn)人體動作分類模型
在TensorFlow中提供了LSTMCell操作來支持LSTM模型的搭建。LSTMCell相當于LSTM模型的隱藏層,在內(nèi)部封裝了LSTM隱藏層包含的遺忘門、輸入門和輸出門等結構,同時還可根據(jù)研究需要設置隱藏層結點個數(shù)。
在用TensorFlow搭建神經(jīng)網(wǎng)絡的過程中,不再以神經(jīng)網(wǎng)絡中的節(jié)點為單位進行布局,而是以層為基礎來考慮。因為像LSTMCell這樣的TensorFlow操作直接代表了網(wǎng)絡中的一個隱藏層。因此包含多個節(jié)點的輸入層和輸出層也都用向量的形式來表示,向量長度即為該層節(jié)點的個數(shù)。
研究構建的TensorFlow流圖如圖6所示。圖中膠囊形單元表示模型的輸入和輸出,矩形單元表示TensorFlow中的操作,圓形單元表示可訓練的模型參數(shù)。在該數(shù)據(jù)流圖中,InputData是一個人體動作實例,即一個多元時間序列。輸入數(shù)據(jù)InputData經(jīng)過dropout操作,dropout操作的目的是防止模型過于擬合。接下來,數(shù)據(jù)被傳入2個MultiRNNCell中,MultiRNNCell是TensorFlow提供的RNN的主要操作,相當于RNN的整個隱藏層。圖中的MultiRNNCell中的內(nèi)容是其按時間展開圖,隱藏層用LSTMCell實現(xiàn),其中可以包含多個隱藏層。在圖中省略了反向MultiRNNCell的詳細內(nèi)容,因為2個MultiRNNCell的結構相同,只是在輸入序列數(shù)據(jù)時一個按照正常順序輸入,另一個按照相反的順序進行輸入。2個MultiRNNCell得到的輸出序列分別經(jīng)過ReduceMean操作得到與時間無關的平均向量h和hb,向量的長度即為隱藏層節(jié)點個數(shù)。最后,h和hb經(jīng)過一個手動構建的邏輯回歸層和softmax激活函數(shù),并用交叉熵損失函數(shù)來計算模型輸出與真實的類別標簽的誤差。
以上就是本次研究利用TensorFlow搭建的基于LSTM的人體動作分類模型。模型中的主要訓練參數(shù)包括輸入層到隱藏層的權重和偏斜、LSTMCell中3個門的權重和偏斜、以及邏輯回歸層的權重和偏斜。給出損失函數(shù)Cost后,使用TensorFlow提供的訓練操作可以自動求Cost關于每個參數(shù)的微分導數(shù)并用梯度下降法對模型進行訓練。endprint
4實驗
4.1實驗數(shù)據(jù)
綜上研究論述后,即將用HDM05動作捕獲數(shù)據(jù)庫[9]中的數(shù)據(jù)進行實驗以檢驗分類模型的效果。HDM05中有2 337條切分好的人體動作數(shù)據(jù),每個人體動作都標注了類別標簽,共有130個類別。HDM05的人體動作數(shù)據(jù)采集了人體31個部分的運動數(shù)據(jù),其網(wǎng)站上提供了將這些數(shù)據(jù)轉換成旋轉姿態(tài)四元數(shù)的代碼。
經(jīng)過觀察,進一步發(fā)現(xiàn)HDM05數(shù)據(jù)庫中有些骨頭上的姿態(tài)四元數(shù)固定不變,比如左右肩的四元數(shù),為此選擇拋棄這些部分的數(shù)據(jù)不用,以免影響模型的效果。另外,由于這130個動作類別都和頭頸的運動無關,因此頭和脖子的數(shù)據(jù)也可以舍棄不用。最終,就實際確定了包括15個骨頭的數(shù)據(jù)進行模型的訓練和動作的分類,具體來說則分別是: 左大腿、左小腿、左腳、右大腿、右小腿、右腳、腰下部、腰上部、胸、左大臂、左小臂、左手、右大臂、右小臂、右手。
對于HDM05中的130個類別標簽有很多類別應屬于相同的動作,比如jogging starting from air和jogging starting from floor,jogging 2 steps和jogging 4 steps[2]。文獻[7]中將這130個類別合并成65個類別,在此基礎上文獻[2]指出有些類別仍難以區(qū)分,比如deposit和grab,這2個類別需要細化到手指的動作才有可能區(qū)分,sitDownChair和sitDownTable在只有人體運動數(shù)據(jù)的情況下也難以識別桌子和椅子的不同。最終,本次研究就將文獻[7]中給出的65個類別合并成了54個類別進行人體動作的分類實驗,例如kickLFront和kickLSide合并,jogOnPlace和run合并,deposit和grab合并等。
由于每個人體動作的時間長度不一,最長的動作長度為901幀,還要將每個人體動作放縮到統(tǒng)一長度為256幀。對于不足256幀的人體動作,就需要在動作的末尾用全零的幀將其補齊到256幀;對于長度超過256幀的人體動作,將會在其中隨機不重復地選取256幀,并使其按照原來的順序構成縮短后的序列。
4.2參數(shù)設置
輸入數(shù)據(jù)的每一幀包含15塊骨頭上的旋轉四元數(shù),因此模型的輸入節(jié)點可設置為60個。輸出層節(jié)點設置為54個,與所有54個動作類別相對應。序列長度設為256,與研究規(guī)定的人體動作統(tǒng)一長度一致。其他參數(shù)的設置將在表1中給出清晰呈現(xiàn)。
模型中的訓練參數(shù)的初始化會對訓練效果產(chǎn)生很大的影響,這里就選用TensorFlow提供的random_uniform_initializer對邏輯回歸層的訓練參數(shù)進行初始化,并用orthogonal_initializer方法對LSTMCell中的遺忘門、輸入門和輸出門的參數(shù)進行初始化。此外,實踐證明在新建LSTMCell時將參數(shù)forget_bias從默認的0調整為1.0會使模型的訓練效果產(chǎn)生有所提升。研究將使用批量隨機梯度下降法進行訓練,也就是每次將4條訓練實例一同輸入給模型對模型進行訓練。
4.3實驗結果
實驗過程中,將HDM05中的2 337個人體動作按類別標簽排序,然后在每相鄰的15個動作中隨機選取1個人體動作放入測試集,并將其他人體動作放入訓練集。這樣做保證了訓練集和測試集的類別分布一致。而后,用訓練集的全部動作迭代訓練模型50次,每次迭代會將訓練集數(shù)據(jù)隨機重排列。為此,則記錄了每次迭代后模型的損失函數(shù)值以及模型在訓練集和測試集上的分類準確率,記錄結果如圖7和圖8所示。從圖中可以看出損失函數(shù)值隨著迭代而下降,而分類的準確率隨著迭代而上升,最終兩者的變化都將趨于平穩(wěn),這也符合神經(jīng)網(wǎng)絡模型的一般訓練過程。在50次迭代的過程中,模型在訓練數(shù)據(jù)上的準確率最高達到98.44%,在測試數(shù)據(jù)上的準確率最高達到94.84%。
5結束語
在本文中,研究提出了一種基于LSTM神經(jīng)網(wǎng)絡的人體動作分類模型。通過將人體動作表示為時間序列的形式,序列上的每一幀由人體各部分的旋轉姿態(tài)四元數(shù)構成。接著將人體動作序列逐幀輸入到去掉輸入層的正向和反向LSTM中,并將隱藏層輸出送入Mean pooling層關于時間求平均,再將Mean pooling層的輸出送入邏輯回歸層得到最終的分類結果。
之后,又使用TensorFlow搭建了設計研發(fā)的分類模型,利用TensorFlow平臺提供的LSTMCell等操作將模型構建成數(shù)據(jù)流圖的形式,并用TensforFlow自動計算微分導數(shù)的功能選取梯度下降法訓練模型。研究最后,則利用HDM05人體動作捕獲數(shù)據(jù)庫的數(shù)據(jù)進行實驗驗證了模型的分類效果,就是將HDM05的數(shù)據(jù)隨機劃分為訓練集和測試集,用訓練集訓練模型后,該模型在測試集上的分類準確率達到了94.84%.
YE M, ZHANG Q, WANG L, et al. A survey on human motion analysis from depth data[M]// GRZEGORZEK M, THEOBALT C, KOCH R, et al. Timeofflight and depth imaging. sensors, algorithms and applications.Lecture Notes in Computer Science. Berlin: Springer ,2013:149-187.
[2] DU Yong, WANG Wei, WANG Liang. Hierarchical recurrent neural network for skeleton based action recognition[C]//2015 IEEE Conference on Computer Vision and Pattern Recognition (CVPR). Boston, MA, USA:IEEE,2015:1110-1118.endprint
[3] SEMPENA S, MAULIDEVI N U, ARYAN P R. Human action recognition using dynamic time warping[C]//International Conference on Electrical Engineering and Informatics, Iceei 2011. Bandung, Indonesia:IEEE, 2011:1-5.
[4] HUANG Zhiwu, WAN Chengde, PROBST T, et al. Deep learning on lie groups for skeleton-based action recognition[J]. arXiv preprint arXiv:1612.05877,2016.
[5] GONG Dian, MEDIONI G, ZHAO Xuemei. Structured time series analysis for human action segmentation and recognition[M]. IEEE Transactions on Pattern Analysis and Machine Intelligence, 2014,36(7):1414-1427.
[6] LI Kang, FU Yun. Prediction of human activity by discovering temporal sequence patterns[J]. IEEE Transactions on Pattern Analysis & Machine Intelligence, 2014, 36(8):1644-1657.
[7] CHO K, CHEN X. Classifying and visualizing motion capture sequences using deep neural networks[C]// International Conference on Computer Vision Theory and Applications. Lisbon, Portugal:IEEE, 2014:122-130.
[8] 張俊, 李鑫. TensorFlow平臺下的手寫字符識別[J]. 電腦知識與技術, 2016, 12(16):199-201.
[9] MLLER M, RDER T, CLAUSEN M, et al. Documentation mocap database HDM05[R]. Bonn:Universitt Bonn, 2007.
[10]GRAVES A. Supervised sequence labelling with recurrent neural networks[M]. Berlin: Springer, 2012.
[11]GRAVES A, MOHAMED A, HINTON G. Speech recognition with deep recurrent neural networks[C]//Acoustics, Speech and Signal Processing (ICASSP), 2013 IEEE International Conference on. Vancouver, BC, Canada:IEEE, 2013, 38(2003):6645-6649.endprint