周昆陽 趙夢婷 張海潮 蔣 雯
(1.南通大學張謇學院,江蘇 南通 226019;2.南通大學交通與土木工程學院,江蘇 南通 226019)
人體姿態估計在人體運動學分析、醫療康復、3D游戲等有著十分廣泛的應用,人體姿態估計主要任務是通過攝像頭等設備能夠在任意場景中對人體的關節點進行準確的定位。
人體姿態估計最初的方法基于手工特征,但是這種方法過多依賴相關設備[1-2],并且方法的魯棒性較低。隨著深度學習和神經網絡的快速發展,人體姿態估計取得很大的進展。Yaser Sheikh等[3]提出的Convolutional Pose Machine(CPM),首次使用人體姿態熱圖對人體關節點進行建模,通過尋找熱圖的最大響應點實現人體姿態估計。隨著人體檢測器(YOLO,SSD等)的發展,人體姿態估計逐漸由單人人體姿態估計轉向多人人體姿態估計。現有的人體姿態估計方法主要分為兩類:Top-Down和Bottom-Up。
Bottom-Up是先檢測出所有關節點,然后按不同的人將關節點進行組裝的。Bottom-Up經典算法是Openpose[4]。Openpose通過CPM定位圖片中所有人的關節點,然后提出部件親和場(Part Affinity Fields,PAF)對關節點按不同的人進行組裝。
Top-Down是先檢測出圖片中所有人的區域,然后在該區域上對人體的關節點進行檢測。Top-Down的代表算法是CPN[5],CPN是一種由粗到細的網絡,通過對人體的上下文信息進行分析最終實現人體關節點檢測。FastHand[6]是一種基于Top-Down的手勢姿態估計算法,通過一種由低、中、高層組成Backbone有效提取手上的各個關節點,實現姿態估計。
本文以Simple Baselines[7]為基礎,通過把Simple Baselines的特征提取網絡替換為FastHand的特征提取網絡以提高模型檢測性能;同時引入姿態修正機,提高關節點的定位效果。實驗結果表明,本文的改進方法能夠有效提升模型對人體關節點定位的準確性。
Simple Baselines是由微軟亞洲研究院提出的一種基于Top-Down的二維人體姿態估計算法,Simple Baselines并未采用Hourglass跨層連接機制,而是提出一種簡單的Baselines用于人體姿態估計。具體來說,Simple Baselines采用ResNet152作為特征提取網絡,ResNet152輸出的特征再經過3組反卷積+Batchnorm(BN)+ReLU將特征圖尺寸擴大8倍,最后通過人體姿態熱圖得到人體姿態的每個關節點。Simple Baselines相較于其他人體姿態估計算法,其算法流程十分簡潔且對于硬件設備要求不高。
本文算法流程如圖1所示,用于姿態估計的網絡整體與Simple Baselines相同。本文首先使用YOLOv4算法檢測每個圖像中的人體,接著在每個人體的子圖像上進行對應行人的姿態估計。為了提高人體姿態估計的準確性,本文將Simple Baselines的Backbone從ResNet152替換為FastHand中的Backbone,并且引入一種高效的注意力機制姿態修正機(Pose Refine Machine,PRM)[8],最后輸出人體17個關節點的二維坐標,實現人體姿態的準確估計。Backbone和PRM分別在3.1和3.2節中介紹。

圖1 算法流程圖

圖2 姿態修正機結構圖
為了提高人體姿態估計準確率,本文選擇FastHand中的Backbone作為本文的特征提取網絡。具體來說,Backbone包含4個下采樣的組成塊(如圖1所示),每個塊由3個部分組成:一個重復n次的卷積塊,一個下采樣塊和一個3*3的標準卷積,如公式(1)-(3)。


其中,C3*3和C1*1分別表示3*3和1*1的卷積,P3*3表示3*3的最大池化操作。4個組成塊的重復次數分別為4、4、4和6次。特征圖每經過一個組成塊,其長寬的尺寸就變為原來的一半。Backbone輸入特征大小為256×192×3,輸出大小為8×6×1024。相較于ResNet152中采用單個3×3卷積進行下采樣,本文神經網絡的Backbone結合了3×3卷積和最大池化輸出的特征,有利于更加有效地提取特征。
為了進一步提高人體關節點的定位效果,本文使用姿態修正機(Pose Refine Machine,PRM)來修正各個關節點的位置。姿態修正機是在Residual Steps Network(RSN)中提出的一種高效的注意力機制,其結構如圖2所示。輸入特征大小為64×48×17,輸入特征首先經過一個卷積核大小為3×3,步長為1的標準卷積,輸出特征A。接著特征分別經過三條路徑:第一條是通道注意力attc,第三條是空間注意力attp,第二條是融合第一條和第三條路徑的結果fuse。姿態修正機的處理過程如公式(4)所示。

其中,變換函數attc包含了全局平均池化(Global Pooling,GP)、兩個1×1卷積以及Sigmoid激活函數,輸出特征圖的大小為1×1×17;變換函數attp包含1×1卷積、9×9的深度可分離卷積以及Sigmoid激活函數,輸出特征圖大小為64×48×17。fuse是逐元素相乘操作。通過姿態修正機,算法輸出17個關節點更加準確的位置信息。
4.1.1 實驗數據
本文使用COCO數據集[9]。COCO數據集包括200K圖片以250K個標有17個人體關節點的標注實例。17個關節點分別為:鼻子、左眼、右眼、左耳、右耳、左肩、右肩、左手肘、右手肘、左手腕、右手腕、左臀部、右臀部、左膝蓋、右膝蓋、左腳踝、右腳踝。本文使用COCO train2017數據集作為訓練集,其中包含50K張行人圖片以及150K個人體關節點標注實例。驗證集使用COCOminival dataset(包括5000張圖片),測試集使用COCO test-dev(其中包括20000張圖片)。
為了增強數據集,本文采用隨機旋轉、隨機縮放、隨機亮度調整、隨機對比度調整、隨機飽和度調整等圖像增強方式。隨機縮放的比例因子為0.8~1.45,隨機旋轉角度為-45o~+45o,隨機亮度調整首先設定閾值為0.5,然后隨機在區間(0,1)內抽取一個數c,如果c≥0.5,則亮度調整比例為c,如果c<0.5,則在區間(-c,c)內隨機抽一個數a,調整比例即為a+1。隨機對比度調整、隨機飽和度調整和隨機亮度調整方法相同,閾值均為0.5。增強前后圖片對比如圖3所示。
4.1.2 實驗平臺
模型訓練與測試在百度AIStudio平臺進行,CPU是Intel(R)Xeon(R)Gold 6271C@2.60GHz,GPU為Tesla V100顯存16GB,內存32GB。編程環境為Python3.7,深度學習框架為PaddlePaddle 2.0。

圖3 增強前后圖片
本文的單批次訓練樣本數量(batch_size)為50,共訓練100個epoch,每個epoch包含7200次迭代,優化方法選擇Adam。為了加快模型的收斂,本文選擇余弦學習率和指數移動平均的訓練策略(Exponential Moving Average,EMA)。學習率和訓練輪數(epochs)關系如公式(5)所示。

其中,begin_rate=0.0001為初始學習率,epoch為當前訓練輪數,epochs為總的訓練輪數,本文的epochs為100。
為了使得模型在訓練時參數更新能夠更加平緩,本文在模型訓練時采用指數移動平均(Exponential Moving Average,EMA)。指數移動平均通過指數衰減方式計算參數更新過程中的移動平均值。對于每一個參數W,都有一個指數移動平均值Wt,W和Wt關系見公式(6)。

其中,α=0.993為衰減系數,本文使用Wt用于更新參數,Wt初始值為0。

表1 數據集介紹
本文使用基于Object Keypoint Similarity(Oks)[10]的Average Precision(AP[10])作為模型準確度的評價標準,Frames Per Second(FPS)作為模型預測速度的評價標準,模型輸入大小為256×192。Oks定義如公式(7)所示。

其中,p表示在ground truth中某個人的id,pi表示某個人的關鍵點id,vpi=1表示這個關鍵點的可見性為1(即在圖片上可見),SP表示這個人所占的面積大小平方根,根據ground truth里人的box計算得到,σi表示第i個關節點的歸一化因子,這個因子是通過對已有的數據集中所有ground truth計算的標準差而得到的,反映出當前骨骼點對與整體的影響程度,σi值越大,說明在整個數據集中對這個點的標注效果越差;值越小,說明整個數據集中對這個點的標注效果越好。基于Oks的AP含義為:先設定一個閾值t,每幅圖片計算的Oks值大于t,表明該圖片關節點檢測有效,小于則無效。所有圖片檢測結束后計算AP,AP計算如公式(8)所示。本文的t=0.95。

FPS表示每秒模型檢測圖片的數量。
4.3.1 特征提取網絡的作用
為了驗證本文特征提取改進的有效性,本文對比了ResNet152和改進的特征提取網絡,實驗結果如表2所示。

表2 特征提取網絡改進實驗結果
從表2實驗結果可以看出,雖然本文的特征提取網絡相較于ReaNet152,FPS降低0.96,但AP相較于ResNet152提高1.43%,綜合考慮FPS和AP,本文特征提取網絡的改進是有效的。
4.3.2 姿態修正機的作用
為了驗證本文引進姿態修正機(PRM)的有效性,本文對比有/無姿態修正機的Simple Baselines,實驗結果如表3所示。

表3 姿態修正機作用
從表3的實驗結果得出,通過引進姿態修正機,Simple Baselines的AP提升1.41%,FPS僅下降0.47。本文引進姿態修正機對模型性能的提升是有效的。
4.3.3 與主流模型比較
為了驗證本文對Simple Baselines模型改進方法的有效性,本文在COCO test-dev上將本文方法和主流姿態估計進行比較。這里為了對比的公平性,本文模型輸入圖片大小與其他方法保持一致,調整為384×288。實驗結果如表4所示。
從表4可以看出,本文改進的Simple Baselines方法的AP在COCO test-dev上相較于HRNet-W48提高0.3%,相較于Simple Baselines提高2.1%。實驗結果表明本文方法是有效的。

表4 本文方法與主流姿態估計算法的對比
4.3.4 檢測結果展示
圖4展示模型在COCO test-dev上檢測的效果。結果表明,本文方法是有效的。


圖4 檢測結果展示
本文以Simple Baselines模型為基礎,通過FastHand改進其特征提取網絡的主干,并引入姿態修正機,提高了人體關節點定位的準確性。本文方法相較于主流姿態估計算法在COCO test-dev上取得較好的效果,未來可以針對姿態修正機以及特征提取網絡對本文方法做更進一步的改進,使其應用到更多場景中。