呂松杰,祁宇明,鄧三鵬,夏育泓,劉 浩
(1.天津職業(yè)技術(shù)師范大學機器人及智能裝備研究院,天津 300222;2.天津市智能機器人技術(shù)及應(yīng)用企業(yè)重點實驗室,天津 300350)
隨著工業(yè)智能化的迅速發(fā)展,近年來,人機協(xié)作技術(shù)逐漸被應(yīng)用于非結(jié)構(gòu)化工業(yè)領(lǐng)域中,人機協(xié)作的提出打破了傳統(tǒng)的人控制機器的工作模式和單一結(jié)構(gòu)化的工作環(huán)境,在同一作業(yè)環(huán)境下實現(xiàn)了人與機器人協(xié)作完成任務(wù)[1]。感知技術(shù)是實現(xiàn)人機協(xié)作的前提[2]。為了更加安全高效完成人機協(xié)作任務(wù),在復雜的工業(yè)場景下機器人需要對工人的行為意圖準確識別和快速理解,因此基于視覺的人體動作識別在人機協(xié)作的場景中有著重要的應(yīng)用價值。
人體動作識別作為人機協(xié)作過程中的重要一步,近年來得到了快速發(fā)展,人體動作識別的方法根據(jù)輸入形式的不同主要分為2 種,分別是基于RGB數(shù)據(jù)[3,4]和基于人體骨架數(shù)據(jù)[5]。第1 種最常見的是用3D 卷積神經(jīng)網(wǎng)絡(luò)[6]和雙流卷積神經(jīng)網(wǎng)絡(luò)的方法來完成動作識別。第2 種骨架數(shù)據(jù)相較于RGB 數(shù)據(jù)而言,排除了圖片中復雜背景和冗余信息的干擾,單純保留了人體動作本身的關(guān)鍵信息[7],在工業(yè)場景下更適合作為人體動作識別的輸入數(shù)據(jù)。
隨著深度學習的發(fā)展,基于人體姿態(tài)估計的算法僅通過處理圖片就可以得到人體骨骼點的位置信息,但是目前大多數(shù)的人體姿態(tài)估計算法模型的參數(shù)量較大,應(yīng)用在工業(yè)場景中實時性較差。BlazePose 是谷歌2020年提出的一種用于人體姿態(tài)估計的輕量級卷積神經(jīng)網(wǎng)絡(luò)模型[8],可以完成實時的檢測。
使用BlazePose 處理自制的數(shù)據(jù)集得到人體三維的骨骼點位置信息,對骨骼點數(shù)據(jù)進行數(shù)據(jù)預(yù)處理后,利用主成分分析(PCA)對數(shù)據(jù)進行降維處理。采用BP 神經(jīng)網(wǎng)絡(luò)分類算法對工業(yè)場景下工人可能出現(xiàn)的3 種動作:正常狀態(tài)下的站立或行走、搬運、操作示教器,進行動作的識別。
設(shè)計的人體動作識別模型主要包括兩部分:人體3D 骨骼點特征工程的構(gòu)建和分類算法的設(shè)計,整體設(shè)計流程如圖1 所示。用BlazePose 算法處理得到的33個骨骼點,經(jīng)過數(shù)據(jù)預(yù)處理和PCA 降維處理,將未降維和降維的數(shù)據(jù)分別輸入到分類算法中完成動作分類,最后經(jīng)過實驗對比,選擇出一種最優(yōu)的動作識別算法。
圖1 動作識別算法的流程
自制的數(shù)據(jù)集包括3 種工業(yè)場景下工人可能會出現(xiàn)的動作:搬運、操作示教器和正常狀態(tài)下站立或行走。如表1 所示,篩選整理過后的3 種動作數(shù)據(jù)集一共包括2802 張圖片。
表1 工業(yè)場景下動作數(shù)據(jù)集
BlazePose 是一種用于人體姿態(tài)估計的輕量級卷積神經(jīng)網(wǎng)絡(luò)模型,在預(yù)測的過程中,BlazePose 將輸出33個3D 骨骼點位置信息(x,y,z),其中x、y、z三個坐標是在以米為單位的真實世界3D 坐標系中,原點位于臀部之間的中心。每張圖片輸出的骨骼點坐標不僅都以臀部中心為坐標原點,而且每次輸出的數(shù)據(jù)尺度也相同,這樣在比較不同樣本之間的骨骼點數(shù)據(jù)時,就不需要對骨骼點數(shù)據(jù)進行歸一化等處理。如圖2 所示為BlazePose 處理搬運這個動作后得到的結(jié)果以及此動作33個關(guān)鍵點在三維空間坐標系中的可視化。
圖2 BlazePose 處理后的可視化效果
經(jīng)過實驗分析,僅僅使用BlazePose 輸出得到的33個人體骨骼點位置信息就可以表達人體動作的語義特征。單張圖像經(jīng)過BlazePose 處理可以得到33個關(guān)鍵點的3D 坐標信息,是一個大小為(33,3)的二維數(shù)組數(shù)據(jù),將這個二維數(shù)組數(shù)據(jù)經(jīng)過維度變換之后得到一個特征維度為99 的一維數(shù)組數(shù)據(jù),加入動作的標簽后,這樣就完成了一個樣本數(shù)據(jù)的構(gòu)建。用BlazePose 循環(huán)處理數(shù)據(jù)集中的所有圖像,對數(shù)據(jù)預(yù)處理后得大小為(2802,100)的二維數(shù)組數(shù)據(jù),將數(shù)據(jù)寫入到CSV 文件中,用于后面的動作分類任務(wù)。
PCA 是最常用的降維算法,其目的在于將高維的數(shù)據(jù)映射到低維的空間中,并期望在所投影的維度上數(shù)據(jù)的信息量最大。一般用主成分所占的百分比來衡量PCA 降維后數(shù)據(jù)的好壞,也就是前k個主成分總的方差貢獻率。用PCA 對預(yù)處理后的數(shù)據(jù)進行降維處理,為了找到一個較好的下降維度,輸出前n個主成分占比總和,如圖3 所示,當數(shù)據(jù)下降到20 維的時候,前20個主成分占比可以達到99.5%,因此可以將數(shù)據(jù)從99 維降到20 維,將降維后大小為(2802,20)的二維數(shù)組數(shù)據(jù)加入標簽后寫入到另外一個CSV 文件中。
圖3 下降到不同維度時PCA 總的主成分占比
完成人體3D 骨骼點特征工程的構(gòu)建后,得到了2 組數(shù)據(jù),都是2802個樣本數(shù)據(jù),包括3 種動作類別。第1 組是沒有進行PCA 降維的數(shù)據(jù),特征維度為99 維,數(shù)據(jù)保留了動作姿態(tài)原始的特征;第2 組是降維后的數(shù)據(jù),特征維度為20 維,數(shù)據(jù)量相對較小。將這2 組數(shù)據(jù)分別作為分類算法的輸入,使用BP 神經(jīng)網(wǎng)絡(luò)算法進行分類,最后將動作識別算法應(yīng)用在視頻數(shù)據(jù)上,來驗證動作識別算法的實時性。
BP 神經(jīng)網(wǎng)絡(luò)是一種按誤差反向傳播算法訓練的多層前饋網(wǎng)絡(luò),訓練的過程包括前向傳播和反向傳播,在反向傳播的過程中,根據(jù)誤差更新各種參數(shù)的值,使得總誤差減小。對數(shù)據(jù)進行反復訓練,直到誤差減少到可以接受的程度。本實驗中,輸入層節(jié)點數(shù)將設(shè)置為99個或20個,輸出層節(jié)點數(shù)為3個,設(shè)置兩個隱藏層,在分類之前需要進行大量的實驗來確定隱藏層節(jié)點的個數(shù),以保證可以得到一個較好的分類結(jié)果。同時在BP 神經(jīng)網(wǎng)絡(luò)中還將加入BN(Batch Nor原malization)層,它可以很好地約束特征數(shù)據(jù)的尺度范圍,讓數(shù)據(jù)保持在一個良好的分布范圍之內(nèi)。加入BN 層不僅可以加速模型的訓練,還可以提高分類的準確率。
實驗均在Intel i5-8250U CPU 處理器、4G 內(nèi)存的PC 上進行,系統(tǒng)環(huán)境為64 位Windows 10 操作系統(tǒng),采用Python3.8 進行編程,采用Pytorch 1.10 深度學習框架完成網(wǎng)絡(luò)模型的搭建、訓練和測試。
數(shù)據(jù)集中的圖片經(jīng)過BlazePose 處理會輸出33個3D 骨骼點位置坐標信息,經(jīng)過數(shù)據(jù)處理后得到的特征維度為99 維,再經(jīng)過PCA 降維得到20 維,將降維前的數(shù)據(jù)和降維后的數(shù)據(jù)分別寫入到不同的CSV文件中,這兩組非結(jié)構(gòu)化數(shù)據(jù)將輸入到分類算法中完成動作分類。
將數(shù)據(jù)按照0.75頤0.25 的比例劃分成訓練集和測試集,經(jīng)過大量的實驗測試,最終將BP 神經(jīng)網(wǎng)絡(luò)設(shè)置為4 層,其中輸入層有99個節(jié)點,第1 層有120個節(jié)點,在第2 層后面加入BN 層和激活函數(shù)RELU,第3 層有84個節(jié)點,第3 層后面也加入BN 層和激活函數(shù)RELU,輸出層有3個節(jié)點。網(wǎng)絡(luò)模型的批大小設(shè)置為112,初始學習率設(shè)置為0.01,選擇交叉熵損失函數(shù),采用隨機梯度下降作為優(yōu)化策略,訓練周期為30 epoch,采用學習率下降策略,在15 ~ 30 epoch 學習率下降10 倍。網(wǎng)絡(luò)模型訓練時的loss 曲線和準確率曲線,訓練30 epoch 之后,測試集的準確率可以達到98.37%,如圖4 所示。從圖4 可以看出,降維的數(shù)據(jù)用BP 神經(jīng)網(wǎng)絡(luò)模型訓練后,測試集的準確率為98.86%,準確率比未降維的數(shù)據(jù)高,同時模型參數(shù)量更小,識別速度相對快點。
圖4 BP 神經(jīng)網(wǎng)絡(luò)訓練時的loss 曲線和準確率曲線
將訓練好的動作分類模型應(yīng)用在一段480 幀的視頻數(shù)據(jù)上,計算模型識別的FPS,來驗證動作識別算法的實時性,該視頻數(shù)據(jù)中的動作為操作示教器。當采用不同模型時它的動作識別準確率與動作識別速度,可以看到2 種算法基本都能達到實時識別(表2)。
表2 動作識別準確率與動作識別速度
在非結(jié)構(gòu)工業(yè)場景下對人體動作識別的算法,該算法使用自制的3 種動作數(shù)據(jù)集,通過BlazePose 提取人體3D 骨骼點位置信息,經(jīng)過數(shù)據(jù)預(yù)處理和PCA降維后,將未降維的數(shù)據(jù)和降維的數(shù)據(jù)分別送入到BP 神經(jīng)網(wǎng)絡(luò)中進行分類,從而完成人體動作的識別。經(jīng)過實驗對比,使用PCA 降維后的數(shù)據(jù)作為分類算法的輸入,模型的準確率相對高一點,準確率可達到98.86%,識別速度更快,平均每秒可以運行30 幀,可完成實時的動作識別。在真實的工業(yè)場景下,分析和識別工人的動作不僅可以對工人的行為規(guī)范進行監(jiān)督,還可以讓機器人更加安全高效的與工人共同完成工作任務(wù),具有良好的實際應(yīng)用價值。
本研究收集到的數(shù)據(jù)集存在數(shù)量少、不夠全面等缺點,對于比較相近的動作可能會出現(xiàn)識別錯誤,接下來的研究應(yīng)擴大和優(yōu)化數(shù)據(jù)集,尋找更好的特征提取方法,來提高人體動作識別的準確度和魯棒性。