人體姿態(tài)估計(jì)--OpenPose算法解析

目錄

1、人體姿態(tài)簡介
2挫酿、OpenPose論文方案解讀
?? 2.1 文章亮點(diǎn)
?? 2.2 網(wǎng)絡(luò)結(jié)構(gòu)
?? 2.3 loss function
?? 2.4 計(jì)算heatmap(S_j^*(p))與vectormap(L_c^*(p))
?? 2.5 關(guān)節(jié)拼接與多人檢測(Multi-Person Parsing using PAFs)
3、細(xì)節(jié)梳理
??3.1 COCO人體姿態(tài)數(shù)據(jù)集的格式
??3.2 為什么heatmap的channels是19汗茄,vectormap的channels是38炊苫?
??3.3 tf-openpose人體姿態(tài)估計(jì)標(biāo)簽生成--heatmap--vectormap
??3.4 改進(jìn)
4谊却、參考資料

1衙猪、人體姿態(tài)簡介

??人體姿態(tài)估計(jì)是計(jì)算機(jī)視覺中一個(gè)很基礎(chǔ)的問題馍乙。從名字的角度來看,可以理解為對(duì)“人體”的姿態(tài)(關(guān)鍵點(diǎn)垫释,比如頭丝格,左手,右腳等)的位置估計(jì)棵譬。
??人體姿態(tài)估計(jì)可以分為兩種思路显蝌,
(1)“top-down”,它指先檢測人體區(qū)域茫船,再檢測區(qū)域內(nèi)的人體關(guān)鍵點(diǎn)琅束。

(2)“bottom-up”扭屁,它指先檢測圖片中所有的人體關(guān)鍵點(diǎn)算谈,然后將這些關(guān)鍵點(diǎn)對(duì)應(yīng)到不同的人物個(gè)體。這里需要提及一下料滥,第一種方案因?yàn)樾枰獙?duì)檢測出的每個(gè)人體區(qū)域然眼,分別做前向關(guān)鍵點(diǎn)檢測,所以速度較慢葵腹,而OpenPose采用的則為第二種方案高每。

2、OpenPose論文方案解讀

2.1 文章亮點(diǎn)

??已有"bottom-up"方法缺點(diǎn):(1)未利用全局上下文先驗(yàn)信息践宴,也即圖片中其他人的身體關(guān)鍵點(diǎn)信息鲸匿;(2)將關(guān)鍵點(diǎn)對(duì)應(yīng)到不同的人物個(gè)體,算法復(fù)雜度太高阻肩。
??文章改進(jìn)點(diǎn):提出“Part Affinity Fields (PAFs)”带欢,每個(gè)像素是2D的向量运授,用于表征位置和方向信息∏巧罚基于檢測出的關(guān)節(jié)點(diǎn)和關(guān)節(jié)聯(lián)通區(qū)域吁朦,使用greedy inference算法,可以將這些關(guān)節(jié)點(diǎn)快速對(duì)應(yīng)到不同人物個(gè)體渡贾。

2.2 網(wǎng)絡(luò)結(jié)構(gòu)


??整個(gè)的技術(shù)方案為“two-branch multi-stage CNN”逗宜,如圖,其中一個(gè)分支用于預(yù)測打分圖confidence maps(S)空骚,另外一個(gè)分支用于預(yù)測Par Affinity Fields(L)纺讲,也對(duì)應(yīng)著heatmap與vectormap。
其中
S=(S_1囤屹,S_2刻诊,...,S_j)牺丙,表示heatmap则涯,j表示要檢測的關(guān)節(jié)數(shù)(可能加上background);
L=(L_1冲簿,L_2粟判,...,L_C)峦剔,表示vectormap档礁,C表示要檢測的關(guān)節(jié)對(duì)數(shù)。
??從圖中還可以看出吝沫,網(wǎng)絡(luò)的stage 1接收的輸入是特征F呻澜,然后經(jīng)過Branch 1Branch 2網(wǎng)絡(luò)的處理后分別得到S_1L_1。從stage 2開始惨险,階段t網(wǎng)絡(luò)的輸入包括三部分: S_{t?1},L_{t?1}, F羹幸。每個(gè)階段網(wǎng)絡(luò)的輸入為:
S^t=\rho^t(F,S^{t-1},L^{t-1}), \forall t\ge2 \\ L^t=\phi^t(F,S^{t-1},L^{t-1}), \forall t\ge2下圖展示了CNN的兩個(gè)分支計(jì)算的結(jié)果:
上圖(b)中表示檢測到的關(guān)節(jié)點(diǎn),一個(gè)部位對(duì)應(yīng)了一張feature map辫愉,請(qǐng)注意圖中高亮像素;
上圖(c)中表示檢測到的一段軀干栅受,同樣的一個(gè)軀干對(duì)應(yīng)一個(gè)feature map。

2.3 Loss function

??損失函數(shù)是保證網(wǎng)絡(luò)能收斂的最重要的關(guān)鍵點(diǎn)恭朗,因此作者對(duì)兩分支的損失函數(shù)均采用L2 loss屏镊。訓(xùn)練時(shí),每個(gè)階段都會(huì)產(chǎn)生loss痰腮,避免梯度消失而芥;預(yù)測時(shí)只使用最后一層的輸出。公式表示如下:
f_S^t=\sum_{j=1}^{J}\sum_{p}W(p)\cdot||S_j^t(p)-S_j^*(p)||_2^2 \\ f_L^t=\sum_{c=1}^{C}\sum_{p}W(p)\cdot||L_c^t(p)-L_c^*(p)||_2^2
其中膀值,S_j^*(p)表示branch1 的label圖棍丐,也稱為heatmap;L_c^*(p)是branch2 的label圖弟翘,也稱為vectormap。另外骄酗,考慮到有些訓(xùn)練數(shù)據(jù)集只標(biāo)注了圖片中部分人物的關(guān)節(jié)點(diǎn)稀余,因此對(duì)損失函數(shù)采用了空域加權(quán)操作,W表示二值化mask矩陣趋翻,當(dāng)位置p的標(biāo)簽缺失時(shí)其值為0睛琳,否則值為1。顯然踏烙,對(duì)于未被標(biāo)記的人物關(guān)節(jié)點(diǎn)W(p)=0 师骗,而被標(biāo)記的人物關(guān)節(jié)點(diǎn)和非關(guān)節(jié)點(diǎn)W(p)=1,所以未被標(biāo)記的人物關(guān)節(jié)點(diǎn)不會(huì)影響模型的學(xué)習(xí)過程,整個(gè)CNN網(wǎng)絡(luò)架構(gòu)的優(yōu)化目標(biāo)函數(shù)如下讨惩,
f=\sum_{t=1}{T}(f_S^t+f_L^t)

2.4 計(jì)算heatmap(S_j^*(p))與vectormap(L_c^*(p))

??S_j^*(p)實(shí)際上就是使用2D高斯分布建模辟癌,求出一張圖像上身體j部位的heatmap,記第k個(gè)人的第j個(gè)關(guān)節(jié)的heatmap為S_{j,k}^*(p)荐捻,p和x_{j,k}表示位置信息黍少,則有:
\begin{align} S_{j,k}^*(p)&=exp(-\frac{||p-x_{j,k}||_2^2}{\sigma^2}) \\ S_j^*(p)&=\mathop{max}\limits_{k} \ S_{j,k}^*(p) \end{align}
??L_c^*(p)表示了使用part affinity fields(PAF)建模骨骼區(qū)域,對(duì)于骨骼區(qū)域內(nèi)的每一個(gè)像素处面,使用2D向量同時(shí)表征位置和方向信息厂置,這里的方向指代當(dāng)前骨骼對(duì)應(yīng)的關(guān)節(jié)點(diǎn)對(duì)的連接方向,對(duì)應(yīng)vectormap魂角。以下圖的骨骼區(qū)域?yàn)槔?/p>

其中昵济,x_{j1,k}x_{j2,k}分別表示關(guān)節(jié)j_1j_2的位置坐標(biāo)。k野揪,c分別表示人物索引與關(guān)節(jié)對(duì)索引访忿,則有:
L_{c,k}^*(p)=\begin{cases} v, \quad if \ p \ on\ limb\ c\ ,k \\\\ 0, \quad otherwise \end{cases}其中,v=\frac{(x_{j2,k}-x_{j1,k})}{||x_{j2,k}-x_{j1,k}||_2}斯稳,表示位置j_1指向位置j_2的單位向量海铆。
圖中綠色虛線框內(nèi)的區(qū)域以點(diǎn)集p表示,數(shù)學(xué)公式如下:
0 \leq v\cdot(p-x_{j1,k}) \leq l_{c,k} \quad and \quad |v\times (p-x_{j1,k})|\ \leq\sigma_l其中平挑,l_{c,k}=||x_{j2,k}-x_{j1,k}||_2表示骨骼長度游添,\sigma_l表示骨骼的粗細(xì)系草,更多詳細(xì)的信息可在后文中3.1中得到通熄。

2.5 關(guān)節(jié)拼接與多人檢測(Multi-Person Parsing using PAFs)

??經(jīng)過上述過程,我們已經(jīng)得到各個(gè)關(guān)節(jié)點(diǎn)的坐標(biāo)圖--heatmap找都,與關(guān)節(jié)對(duì)連接的vectormap唇辨,現(xiàn)在的問題就是如何合理地在推理階段將各個(gè)關(guān)節(jié)連接成一段骨骼,并將它們組裝成一個(gè)人能耻?
??關(guān)節(jié)拼接:對(duì)于任意兩個(gè)關(guān)節(jié)點(diǎn)位置d_{j1}d_{j2}赏枚,通過計(jì)算PAFs的線性積分來表征骨骼點(diǎn)對(duì)的相關(guān)性亡驰,也即表征了骨骼點(diǎn)對(duì)的置信度,公式表示如下饿幅,E=\int_{u=0}^{u=1} L_c(p(u)) \cdot \frac{d_{j2}-d_{j1}}{||d_{j2}-d_{j1}||_2}\mathrmwwpepr7u為了快速計(jì)算積分凡辱,一般采用均勻采樣的方式近似這兩個(gè)關(guān)節(jié)點(diǎn)間的相似度,p(u)=(1-u)d_{j1}+ud_{j2} ??多人檢測:由于圖片中人數(shù)不確定栗恩,同時(shí)伴隨遮擋透乾、變形等問題,因此只使用上述計(jì)算關(guān)節(jié)對(duì)相似度磕秤,只能保證局部最優(yōu)乳乌,因此作者利用greedy relaxation的思想生成全局較優(yōu)的搭配。具體操作如下:
(1)已知不同關(guān)節(jié)點(diǎn)的heatmap市咆,也就是不同人的某個(gè)關(guān)節(jié)點(diǎn)的點(diǎn)集汉操;
(2)現(xiàn)在要將不同的點(diǎn)集進(jìn)行唯一匹配,如:一群表示手肘的點(diǎn)集和手腕的點(diǎn)集蒙兰,兩點(diǎn)集中的點(diǎn)必須存在唯一匹配磷瘤;
(3)關(guān)節(jié)點(diǎn)之間的相關(guān)性PAF已知,將關(guān)鍵點(diǎn)作為圖的頂點(diǎn)搜变,將關(guān)鍵點(diǎn)之間的相關(guān)性PAF看為圖的邊權(quán)膀斋,則將多人檢測問題轉(zhuǎn)化為二分圖匹配問題,并用匈牙利算法求得相連關(guān)鍵點(diǎn)最優(yōu)匹配痹雅。

二分匹配:二分圖上進(jìn)行匹配仰担,一個(gè)點(diǎn)群中的點(diǎn)只與另一個(gè)點(diǎn)群中的點(diǎn)進(jìn)行唯一匹配,即任意兩條邊沒有公共頂點(diǎn)

3绩社、細(xì)節(jié)梳理

3.1 COCO人體姿態(tài)數(shù)據(jù)集的格式

3.2 為什么heatmap的channels是19摔蓝,vectormap的channels是38?

??由上圖可知愉耙,COCO數(shù)據(jù)集總共有18個(gè)關(guān)鍵點(diǎn)贮尉,17個(gè)肢體骨架,但heatmap多了一個(gè)背景圖朴沿,vectormap多了耳朵和肩膀的肢體猜谚,為什末要虛構(gòu)這麼一個(gè)肢體呢,因?yàn)橛袝r(shí)候人體是背對(duì)相機(jī)的赌渣,眼睛這個(gè)關(guān)鍵點(diǎn)是不可見的魏铅,為了更好的預(yù)測耳朵,引入這兩個(gè)個(gè)肢體(也就是關(guān)節(jié)對(duì):2-16和5-17)坚芜。所以總共有19個(gè)肢體览芳,應(yīng)為vectormap為矢量,預(yù)測時(shí)分為x,y兩個(gè)分量鸿竖,所以有19*2=38

3.3 tf-openpose人體姿態(tài)估計(jì)標(biāo)簽生成--heatmap--vectormap

??完全參考https://blog.csdn.net/m0_37477175/article/details/81236115沧竟,結(jié)合2.4節(jié)中vectormap(L_c^*(p))的計(jì)算公式與綠色虛線框內(nèi)的區(qū)域以點(diǎn)集數(shù)學(xué)公式理解铸敏。
??關(guān)鍵是叉乘的幾何意義是兩個(gè)向量所組成的平行四邊形的面積,所以|v\times (p-x_{j1,k})|\leq \sigma_l就表示與向量v平行距離為\sigma_l的區(qū)域悟泵,也就是骨骼寬度杈笔。

3.4 改進(jìn)

后來論文作者對(duì)網(wǎng)絡(luò)結(jié)構(gòu)進(jìn)行了改進(jìn),使得效果更好糕非,速度更快桩撮,參考文獻(xiàn)【11】。


4峰弹、參考資料

【1】Realtime Multi-Person 2D Pose Estimation using Part Affinity Fields
【2】人體姿態(tài)估計(jì)的過去店量、現(xiàn)在和未來
【3】論文解讀-Realtime Multi-Person 2D Pose Estimation using Part Affinity Fields
【4】Realtime Multi-Person 2D Pose Estimation Using Part Affinity Fields【菜鳥讀者】
【5】知乎:openpose筆記
【6】openpose論文總結(jié):Realtime Multi-Person 2D Pose Estimation using Part Affinity Fields
【7】詳細(xì)介紹匈牙利算法步驟
【8】Github 項(xiàng)目 - OpenPose 關(guān)鍵點(diǎn)輸出格式
【9】openpose的細(xì)節(jié)處理
【10】tf-openpose人體姿態(tài)估計(jì)標(biāo)簽生成--heatmap--vectormap
【11】OpenPose: Realtime Multi-Person 2D Pose Estimation using Part Affinity Fields

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市鞠呈,隨后出現(xiàn)的幾起案子融师,更是在濱河造成了極大的恐慌,老刑警劉巖蚁吝,帶你破解...
    沈念sama閱讀 211,194評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件旱爆,死亡現(xiàn)場離奇詭異,居然都是意外死亡窘茁,警方通過查閱死者的電腦和手機(jī)怀伦,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來山林,“玉大人房待,你說我怎么就攤上這事⊥漳ǎ” “怎么了桑孩?”我有些...
    開封第一講書人閱讀 156,780評(píng)論 0 346
  • 文/不壞的土叔 我叫張陵,是天一觀的道長框冀。 經(jīng)常有香客問我流椒,道長,這世上最難降的妖魔是什么明也? 我笑而不...
    開封第一講書人閱讀 56,388評(píng)論 1 283
  • 正文 為了忘掉前任宣虾,我火速辦了婚禮,結(jié)果婚禮上温数,老公的妹妹穿的比我還像新娘绣硝。我一直安慰自己,他們只是感情好帆吻,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,430評(píng)論 5 384
  • 文/花漫 我一把揭開白布域那。 她就那樣靜靜地躺著,像睡著了一般猜煮。 火紅的嫁衣襯著肌膚如雪次员。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,764評(píng)論 1 290
  • 那天王带,我揣著相機(jī)與錄音淑蔚,去河邊找鬼。 笑死愕撰,一個(gè)胖子當(dāng)著我的面吹牛刹衫,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播搞挣,決...
    沈念sama閱讀 38,907評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼带迟,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了囱桨?” 一聲冷哼從身側(cè)響起仓犬,我...
    開封第一講書人閱讀 37,679評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎舍肠,沒想到半個(gè)月后搀继,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,122評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡翠语,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,459評(píng)論 2 325
  • 正文 我和宋清朗相戀三年叽躯,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片肌括。...
    茶點(diǎn)故事閱讀 38,605評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡点骑,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出谍夭,到底是詐尸還是另有隱情畔况,我是刑警寧澤,帶...
    沈念sama閱讀 34,270評(píng)論 4 329
  • 正文 年R本政府宣布慧库,位于F島的核電站跷跪,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏齐板。R本人自食惡果不足惜吵瞻,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,867評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望甘磨。 院中可真熱鬧橡羞,春花似錦、人聲如沸济舆。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,734評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至签夭,卻和暖如春齐邦,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背第租。 一陣腳步聲響...
    開封第一講書人閱讀 31,961評(píng)論 1 265
  • 我被黑心中介騙來泰國打工措拇, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人慎宾。 一個(gè)月前我還...
    沈念sama閱讀 46,297評(píng)論 2 360
  • 正文 我出身青樓丐吓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親趟据。 傳聞我的和親對(duì)象是個(gè)殘疾皇子券犁,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,472評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容