黃 鐸 應 娜 蔡哲棟
(杭州電子科技大學通信工程學院 浙江 杭州 310018)
人體姿態檢測問題是基本的計算機視覺問題,目前已經有很多算法對這一問題進行了研究,并且取得了不錯的成效。
在單人姿態檢測問題中,由于人體占據了圖片的大部分像素,所以對于檢測器而言不會有許多干擾信息。這在姿態檢測問題中是比較簡單的一個部分。一些傳統的方法采用了圖像結構模型。例如,在人體姿態檢測問題中非常有效的樹模型[8]和隨機森林模型[9]。在文獻[10]中廣泛研究了一些基于圖像的模型,例如隨機場模型[11]和圖像依賴模型[12]。
最近,深度學習成為了一種在模式識別方面非常有效的方法,利用深度學習的人體姿態檢測同樣取得了很好的成績。一些有代表性的方法例如深度姿態[13],基于DNN的模型[14]和基于CNN的模型[1]。
以上所說的這些方法在人體信息足夠完整的情況下可以有很好的表現,但是在多人姿態檢測問題中常常不會有如此精確的人體信息。
而與單人姿態檢測問題相比,多人姿態檢測則更具有挑戰性(意為在單張圖片中有多個人體)。針對多人姿態檢測,目前的算法大致分為兩種。其一是使用兩步檢測框架,其二是采用肢體框架。兩步檢測框架中的第一步,是目標檢測算法通過包圍框的方式定位出人體,第二步是分別將每個包圍框做姿態檢測。肢體框架則是獨立地檢測人體的各個部分,再把各個部分拼接起來,以形成多個人體姿態。兩種方法各有利弊,其中兩步檢測框架的檢測精度高度依賴目標檢測算法的精度,包圍框對人體的契合程度會影響姿態檢測算法的精度;而肢體框架的圖片中若多個人體的距離相近,甚至互相遮擋,肢體框架的拼接工作就會變得困難。
(1) 肢體檢測框架 肢體檢測框架有許多代表性的方法。Chen等[4]提出了一種通過圖像模型來解析被遮擋的人體的方法,該方法可以將人體的各個部分靈活組合。Gkioxari等[3]使用k-poselets來全局檢測人和預測人體姿勢,通過加權平均來預測最終的姿態。Pishchulin等[5]提出了DeepCut模型,該模型先檢測身體的每個部分,然后通過整體線性程序來標記并且組裝這些部分,最后達到預測人體姿態的目的。Insafutdinov等[15]提出了一個更強的基于ResNet的肢體檢測器和一個更好的增量優化策略[6]。
雖然基于肢體檢測方法有良好的表現,但是由于該方法只專注于小區域的檢測,缺少全局信息,所以該方法依舊存在精度上的缺陷。
(2) 兩步框架 在兩步框架的研究中,幾乎都由人體檢測器和姿態檢測器兩部分組成。Pishculin等[2]采用了傳統圖像結構模型進行姿態預測。Insafutdinov等[6]則采用了相似的兩步框架,由人體檢測器Faster R-CNN[16]和姿態預測器DeeperCut構成。他們的方法在MPII數據集上最高只能達到51.0 mAP的精度。由于計算機技術不斷發展,硬件水平快速上升的情況下,物體檢測器和單人姿態檢測器都達到了一個相當好的水平,而兩步框架得益于兩者的先進性,在多人體檢測問題中也取得了非常優異的表現。
但如上文所說,兩步框架中依舊存在著人體監測框架不精確的問題,本文致力于解決這個問題,在兩步框架中加入了強化學習的順序決策過程,用于調整包圍框以提升算法精度。
強化學習的概念從博弈論衍生而來,通過不斷的試錯學習,從而找到一種最佳的解決問題的方法。強化學習在諸多領域都是非常強有力的工具,如在雅達利2600游戲機和AlphaGo等項目都有出色應用。
在目標檢測領域,強化學習也發揮出很強大的作用。Juan等[17]設計了一些包圍框的動作,通過對包圍框的調整不斷接近目標,最終定位目標。Míriam等[18]將圖片分為五個區域,挑選出目標存在的區域后重復這一步驟,不斷聚焦目標,實現定位功能。
本文采用的算法基于兩步檢測框架。如同上文所述,包圍框對人體的貼合程度會影響人體姿態檢測的精度,圖1通過SSD300[7]和hourglass算法[1]的結合說明了這個問題。其中,圖1(a)表示在目標檢測步驟中被判定為正確的情況(比如交并比大于0.6),在人體姿態檢測時依然會出現很嚴重的錯誤。這是因為通過目標檢測算法得到的包圍框雖然檢測到了人體,但是這些信息卻不夠精確,導致人體姿態檢測算法的精度受到了負面影響。

(b) 精確的包圍框在姿態檢測上可以有很好的效果圖1 不同包圍框精度情況下的檢測效果
為了解決人體檢測的包圍框信息不精確問題,本文算法在兩步檢測框架之間引入了強化學習,形成基于強化學習的兩步檢測框架,調整包圍框使其更貼近人體,以提升精度。算法定義包圍框為智能體,建立了一個順序決策過程。智能體通過卷積網絡獲取圖片信息進行包圍框的調整,下一次迭代中智能體會根據調整后的包圍框信息決定該次迭代中的動作。算法不斷重復這一過程,最終得到一個最適合人體姿態檢測的包圍框,以此來提升精度。其中,算法采用了馬爾科夫決策過程,設計了8種變形動作以及一種終止動作,如圖2所示,8種動作分別為左上角點和右下角點的上下左右平移。這8種變形動作涵蓋了包圍框所有的動作,以滿足貼近人體的需求。算法在MPII數據集上做了訓練和驗證,結果達到了74 mAP。

圖2 通過調整包圍框實現精度的提升
本文的算法如圖3所示,首先通過改進的目標檢測器SSD回歸出初步的人體包圍框,再通過深度強化學習網絡判斷包圍框是否準確,并對定位的包圍框設計了8種變形操作以及一種終止動作,即采用馬爾可夫策略對其左上角與右下角坐標進行迭代調整,調整動作集合為兩個點的上下左右平移,從而提升精度。最后,由人體姿態檢測器對調整后的包圍框進行姿態檢測。

圖3 本文算法的流程圖
本文采用了兼顧精度與速度的目標檢測算法SSD[7](Single Shot MultiBox Detector)。該算法采用VGG-16[21]作為前置網絡,刪除了末尾的全連接層,并在卷積層后添加置信層和回歸層。SSD在網絡中選擇6種不同尺度的特征圖,每張特征圖的每個像素點都預設了一定數量的預設框。特征圖經過回歸層后會得到與預設框相同數量的包圍框,并且與預設框一一對應。預設框與真實包圍框(label)進行匹配,IOU大于0.5的定義為正樣本,其余的為負樣本。最后將與正樣本對應的包圍框與真實值進行loss計算。常用的SSD算法輸入尺度為300,但是小目標檢測的精度不高。在本文中SSD算法的輸入尺度為512,置信層與回歸層都為7層,相比于300尺度的SSD算法,更大的輸入尺度在小目標檢測的精度上有很大的改善。
本文通過SSD對圖像進行特征提取,并回歸得到目標的包圍框坐標。
bbox=ConvSSD(img)
(1)
式中:img是輸入圖片,ConvSSD(·)是SSD算法,bbox是回歸得到的包圍框坐標。
針對目標檢測器信息不夠精確的問題,算法定義目標檢測器所回歸出來的包圍框為智能體,該智能體會與環境交互獲取信息,建立馬爾科夫決策過程。在每一次迭代中,智能體需要獲取信息來決定一次變形動作,在下一次的迭代中,智能體會根據上一次變性之后的信息來決定再下一次迭代的變形動作,直到確定目標最優或者達到限制的迭代次數為止。
2.2.1 馬爾科夫決策過程參數
狀態智能體迭代至當前情況下的信息,狀態是智能體決定動作的依據。
動作動作來自于動作空間,智能體根據當前的狀態和之前迭代的歷史獎勵信息,選擇能達到最大化期望獎勵的動作。
獎勵每次動作執行后,算法計算出該狀態下執行該動作的獎勵。獎勵代表著智能體是否正朝著最終目標進行動作。
2.2.2 Q學習
智能體獎勵的來源,動作A和狀態st,受到函數Q(st,A)控制,該函數可以通過Q學習函數進行估計。智能體會通過函數Q(st,A)選擇可以獲得獎勵的動作。Q學習函數使用Bellman方程(式(2))不斷迭代更新動作選擇策略,其中st和A是當前的相對應的動作和狀態,R是當前的獎勵,maxa′Q(st′,A′)表示未來的獎勵,γ表示折扣因子。本文采用強化學習對Q網絡進行訓練,以使其能近似于Q函數[19]。
Q(st,A)=R+γmaxa′Q(st′,A′)
(2)
2.2.3 算法模型
當前智能體的信息由通過不同尺度的卷積層對bbox抽取的特征所組成,如式(3)所示。算法的狀態st是由當前智能體的信息ft和歷史動作hv所組成,如式(4)所示,其中函數Cat(·)用于將ft和hv進行拼接。歷史動作是一個向量,向量中包含了前4次迭代中智能體發生形變而所選擇的動作,并入當前智能體的信息將有助于在訓練的過程中穩定調整軌跡。算法將前4次迭代中的動作組成一個向量編入狀態中,每次迭代會有9種不同的動作提供選擇,所以一個歷史動作向量是36維的。這種類型的向量也被文獻[17]所采用。
ft=Conv(bbox)
(3)
st=Cat(ft,hv)
(4)
智能體通過由卷積神經網絡提取得到的特征進行決策,選擇當前狀態下所應該選擇的動作,如式(5)所示,式中QNet表示深度Q網絡。算法設計了兩種類型的動作:一是調整動作a(·),該類型的動作會調整包圍框的形狀(式(6));二是終止動作t,該類型的動作一旦被選擇,調整過程即終止。其中的調整動作數量有8種,分別是包圍框左上角坐標的四個方向平移,和包圍框右下角坐標的四個方向平移。這樣設計的理由是這8種動作涵蓋包圍框的所有動作可能,相比于一般的包圍框縮放和平移的規則動作,這樣設計可以使得包圍框做出不規則的動作,更有利于使包圍框貼近人體。在迭代過程中智能體會不斷根據當前的狀態選擇動作,每次調整包圍框后會獲得新的狀態,再選擇新的動作,直到選擇為終止動作為止。
a=QNet(st)
(5)
bbox′=a(bbox)
(6)
算法選擇由文獻[17]中所提出的獎勵公式作為該模型的獎勵公式。調整動作的和終止動作獎勵公式分別由式(9)和式(10)給出。因為智能體所選擇的動作會產生新的包圍框,人體姿態檢測器ConvHAD(·)會根據新的包圍框產生新的精度acc1(式(7));算法定義不加入強化學習的兩步框架的精度acc0作為真實值(式(8))。對于當前的狀態st,智能體選擇的調整動作得到新狀態st′,產生的新精度acc1,如果大于真實值acc0,則會獲得一個獎勵(1),反之則會獲得一個懲罰(-1)。對于終止動作而言,終止時最終的新精度acc1若大于acc0,會獲得一個比較大的獎勵,反之會獲得一個大懲罰。而對于真實值大于τ的目標,算法選擇直接讓智能體選擇終止動作,獲得獎勵,這樣做可以將訓練時間縮短,只調整精度較差的目標。考慮原始精度,選擇τ=0.5。經過調參,在式(10)中η=3。
acc1=ConvHAD(bbox′)
(7)
acc0=ConvHAD(bbox)
(8)
Ra(st,st′)=sign(acc1-acc0)
(9)
(10)
在本文中,采用了比較先進的網絡densenet[20]作為特征提取的方法。圖4所示是深度強化學習網絡的結構。

(a) 模型的前置網絡

(b) 深度Q網絡圖4 深度強化學習網絡的結構
在深度強化學習網絡運行前,算法先把每個包圍框裁剪好,將尺度調整為256×256,圖像不發生形變,多余的部分用0填充。算法將densenet的特征提取部分取出作為前置網絡,將該網絡的輸出重置成一個1 920維的向量,與歷史動作的36維向量組成了一個新的1 956維的向量。深度Q網絡是由兩個全連接層組成,每層后都跟有一個ReLU激活函數和一個dropout層。最后,輸出層對應于智能體可能選擇的動作,在本文中數量為9個。
2.2.4 訓 練
?探索-利用算法采用ε-greedy策略來訓練深度Q網絡。訓練的時候會有ε的概率隨機選擇動作,即探索過程;有1-ε的概率會通過深度Q網絡選擇一個動作,即利用過程。初始化ε=1,之后隨著訓練次數增加ε會逐漸減小,直到ε=0.1為止。事實上,隨機選擇動作會導致智能體學習終止動作更加困難,為了使得智能體更好地學習終止動作,當原始精度大于0.8時,算法強制智能體選擇終止動作。這樣可以使得訓練的速度更快一些。由于算法一直都在做探索的過程,所以該方法不會被卡在局部最小值。
?訓練參數深度Q網絡的初始化權重采用的是正態分布初始化,densenet則采用預訓練權重。為了訓練,本文采用了Adam優化器,學習率設置為1e-6以避免梯度爆炸。本文在每個模型上訓練50個epoch。
?經驗回放上文提到,bellman方程(式(2))從(st,a,r,st′)的遷移中進行學習,這也被稱為經驗。深度Q網絡中的連續經驗是非常相關且重要的,處理不當可能導致學習速率低下和學習的不穩定,這是Q學習中的一個傳統性問題。算法采用了一個回放存儲器使網絡收斂,以解決這個問題。回放存儲器在每次迭代后會收集經驗保存下來,每次訓練時會從保存在回放存儲器中的經驗中隨機挑選一些進行訓練。在本文中,最大可保存的經驗數為1 000,每次訓練挑選的數量為100。
?折扣因子想要在長期的訓練中表現出良好的效果,只考慮當前的獎勵是不夠的,所以算法將未來的獎勵也加入訓練。本文在式(3)中設置了折扣因子γ=0.90,該數值可以很好地平衡當前的獎勵和未來的獎勵。
算法采用了stacked hourglass[1]模型作為人體姿態檢測器。該模型以Residual[15]模塊為基礎,通過級聯多個Residual模塊和降采樣層來獲取不同尺度的信息,隨著階數的增加,級聯的Residual模塊的數量和特征圖尺度的跨度也會增加,最后將不同尺度的信息進行特征融合以預測人體姿態。
本文以256×256的圖片作為姿態檢測器的輸入,模型的階數為四,在五個不同的尺度上采集圖像特征,并且最后跳級融合。
實驗采用的數據集有兩部分:人體檢測器所使用的數據集為VOC0712;單人姿態檢測器所采用的數據集來自MPII。目標精細模型所采用的數據集為原始的兩步框架的結果。
MPII數據集包含了3 844張訓練圖片和1 758張驗證圖片,其中1 758張驗證圖片官網不提供標簽數據。在訓練圖片中包含了28 000個左右的訓練樣本可供單人姿態檢測器所訓練。本次實驗采用了25 000個目標作為訓練樣本,3 000個目標作為驗證樣本。
目標精細模型所采用的數據集測試由兩步框架的精度結果構成的。預先將人體檢測器所檢測到的目標一一做精度計算,保存其結果,做成一個由圖片名、包圍框、原始精度所構成的數據集。訓練時讀取包圍框以供調整,讀取原始精度作為真實值。
在MPII數據集上驗證了本文算法。完整的精度結果參見表1。結果的演示圖如圖5所示。結果顯示,本文算法可以以很高的精度完成多人姿態檢測任務。

表1 在MPII數據集上的驗證結果 mAP

圖5 效果演示圖一
本文算法雖然在精度上有改進,但是卻存在計算量巨大的缺點。一張圖片的預測需要經過目標檢測器、目標精細模型和姿態檢測器三個模型。其中,在目標精細模型中,每迭代調整一次包圍框都需要經歷一次網絡前傳,這導致了計算量的陡增。同時,由于一張圖片可能存在多個目標,每個目標需要多次迭代,所以時間開銷也更大。在GTX1080TI顯卡上進行預測,目標檢測器與姿態檢測器構成的兩步檢測算法單個目標耗時120 ms;加入目標精細模型后的基于強化學習的兩步檢測算法單個目標耗時220 ms。
同時,對于人體信息丟失嚴重的情況,檢測效果不夠理想,如圖6所示。

圖6 效果演示圖二
本文提出了一種新的多人姿態檢測算法,在其準確率方面優于以往的兩步框架算法。算法加入了目標精細模型,該模型可通過對包圍框的調整使得信息更加精確,使得兩步框架的精度有了一定的提升,證明該方法是可靠的。但由于它需要不斷對包圍框進行迭代調整,對單個目標的處理速度偏高,在GTX1080TI顯卡上達到了約160 ms。在未來的工作中,可以期待強化學習在更多的領域參與到其中去。