一、CVPR2019,內容上還是比較厲害的,代碼:https://github.com/vita-epfl/openpifpaf
二、主要思想
1、提出了Part Intensity Field (PIF)來提升heatmap在高分辨率下的精度
2、利用Part Association Field (PAF)來連接joints
3、本文方法主要比較放在了低分辨率下、遮擋情況以及擁擠等
4、本文利用更加有效的loss,Laplace loss 以及soomth L1 loss來完成迴歸偏移量的迴歸和置信度的迴歸
三、模型的主要結構
這個部分放一個圖就可以一目瞭然,//2就是步長=2,也就是下采樣了:
四、Part Intensity Field (PIF)
文章之所以採用這個是因爲,我們預測的heatmap都是在比原圖小的低分辨率下預測的,一個像素位置可能會造成8像素以上的偏差。以往很多方案中都是採用的雙線性插值,將heatmap還原到原圖大小再去進行argmax或者nms,但是這樣畢竟與直接預測有着差距。
因此文章中借鑑了“Towards Accurate Multi-person Pose Estimation in the Wild”中Coarse to fine的思想,粗略的heatmap結合offset的思想。當然在本文中採用的方式略有不同。
從網絡結構圖上面的介紹可以發現,PIF這部分預測的通道數=17*5,這個5就是這5個量,第一個是置信度;第二、三個是預測的offset向量;第四個使用在loss上的,其實就是動態的去限定了一個loss計算時候的注意力更加集中在groundtruth附近的區域;第五個用於還原到高分辨率時候的高斯的sigma,這樣的話對於不同大小的joint就能產生不同的尺度。
可以從上圖中發現,原始的預測的“置信度map”比較粗糙了,這種直接nms/argmax必然會引入一些誤差--對應到evaluation時候的不同“閾值”選擇的時候,效果會有所不同。
這個公式的意思就是對於需要還原的圖中的某個位置(x,y),他的置信度是通過融合“預測的所有位置的置信度*對應位置估計的高斯分佈在這個位置的值”
這個方式,從效果圖上來看,還是比較好的,而且對於圖中的不同大小的joint,也有着不同的sigma,也是比較符合人的直觀理解,這樣的效果也會比統一sigma的heatmap的MSELoss看起來更加合理些。
五、Part Association Fields(PAF)
這是另一個核心部分,從網絡結構圖的介紹可以發現,這部分需要預測19*7個通道,也就是定義了19個connection,每個connection中包含了7個量: ,第一個代表了置信度,兩個座標offset vector分別指向兩個joint,以及兩個寬度因子。
如何生成的?
對於每個位置,會先去找到離這個位置最近的joint是哪個,然後確定下來;再去更具定義的joint 之間的connection去找到這個點對應的另一個joint。應用的時候,對於置信度的閾值設定了0.5,這樣就可以產生如下效果:
六、Adaptive Regression Loss
對於大尺度的目標而言,joint的一點點座標偏移,這個error帶來的影響是比較小的,但是同樣的情況對於小目標而言就是另一隻情況了。
七、Greedy Decoding 也就是組裝算法
這裏的話,比如選擇從頭頂開始,那麼會選擇整個圖中置信度最高的那個頭開始,然後利用paf把這個joint 連到下一個joint,直到把這個人組裝好了,這個人就定下來了。然後選擇下一個頭,再來一遍。
那麼對於某個joint ,如何去利用paf?
對於向量X,利用上面這個公式,能給每個paf 的預測向量打分,當然是選擇分最高那個。
八、實驗
後續再看看,實驗中有沒有重要的細節,看看代碼,再來補充~~~