CVPR2019 | CrowdPose:擁擠人體關鍵點benchmark

https://github.com/MVIG-SJTU/AlphaPose/tree/pytorch
https://arxiv.org/pdf/1812.00324.pdf

1.傳統單人姿態估計loss

傳統的單人姿態估計模型的loss(以MSE均方誤差爲例),對於每個關鍵點而言,傳統的計算loss方式如下:


上圖中,一個目標框中只對有效人體的關鍵點進行迴歸。不考慮背景中出現的其他人體關鍵點。正因爲這種迴歸方式,在人體擁擠場景下,一個目標框中往往除了有效的人體前景外,背景部分也會有其他人體的關鍵點,而這些關鍵點的存在會導致擁擠場景下關鍵點回歸出現混亂。

2.擁擠人體姿態估計loss

本文提出的CrowdPose算法中使用如下所示的loss(以MSE均方誤差爲例),整體計算示意圖如下:

如上圖所示,一個目標框中除了對前景人體關鍵點進行迴歸外,還對背景中的人體關鍵的進行迴歸。直觀來說就是每張GT圖中會有多個點,最終迴歸出來的關鍵點特徵圖也會存在多個峯值。使用該種迴歸方式可以有效抑制背景人體關鍵點對前景人體關鍵點的影響。在迴歸過程中如上圖中的loss函數所示,會給背景中的人體關鍵點分配一個小於1的權重。很顯然當權重爲零時,該方法就和傳統的迴歸方式一致了。

3.傳統單人姿態估計後處理
# -------------------------
preds_hm, preds_img, preds_scores = getPrediction()
result = pose_nms(boxes, scores, preds_img, preds_scores)

如上述代碼所示,傳統的單人姿態估計的後處理主要包括:

  • 從網絡輸出的特徵圖中提取到峯值位置,即爲關鍵點位置
  • 並以人體爲單位對人體關鍵點進行非極大值抑制。
4.擁擠人體姿態估計後處理
# ----------------------
preds = getMultiPeakPrediction()
result = matching(boxes, scores.numpy(), preds)

如上述代碼和上述對擁擠人體姿態訓練過程的分析可知,與單人姿態估計不同,由於擁擠人體姿態網絡輸出的特徵圖中存在多個峯值,因此從特徵圖解析關鍵點時需要用到多峯預測的方法。得到多峯預測的結果後,通過構建Person-Joint圖,圖以human instance和joint node爲節點,每個關鍵點與人體實例之間的連接爲邊,關鍵點的置信度值爲邊上的權重。如下圖所示,最終求得的最大權重子圖就是當前得到的人體關鍵點連接。因爲在上述loss計算的時候,我們會抑制背景人體關鍵點,即最終我們得到的結果,背景人體關鍵點的響應值應該比前景人體關鍵點的響應值更低,即對應的邊的權重更低。

Note:在match過程中,在構圖之前,先把冗餘的關鍵點剔除,具體方法就是判斷兩個點的歐氏距離,如果小於設定的閾值,就認爲是同一個人的同一個點。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章