openpose的細節處理

2021-08-13 17:15:24 字數 1698 閱讀 9715

最近使用openpose,但是有一些細節**中沒有給出,還有一些不太重要但也挺關鍵的細節需要搞清楚,這篇文章就把用到的這些細節一併及下來。

1 vgg基礎網路的輸入輸出

**中說vgg基礎網路用到了前10層,但是看原始碼的話,他是用了12層的。

相關的輸入輸出維度如下:

vgg_cfg = [64, 64, 『m』, 128, 128, 『m』, 256, 256, 256, 256, 『m』, 512, 512, 256,128]

12層的vgg輸出維度為128

2 後面stage中分支結構的輸入輸出

首先,**中很明確的將地乙個stage和其他的分開來看的。

分支中輸出維度38的是paf,part affinity field

維度19的是身體部位的熱圖part heatmap

branches_cfg = [[[128, 128, 128, 512, 38], [128, 128, 128, 512, 19]],

[[128, 128, 128, 128, 128, 128, 38], [128, 128, 128, 128, 128, 128, 19]]]

3 輸入的尺寸處理

訓練時需要相同大小的才能組成乙個batch,在openpose中有兩種做法:

一是直接resize到指定大小的尺寸;

二是原始碼提供了一種稍微有特色的做法:

先指定長和寬x,y。然後將的長/寬和x/y比較,看是否大於1

然後,選擇長一些的邊(長》x?,寬》y?),固定長寬比縮放到給定尺寸

再然後,為另一條邊加padding,兩邊加相同的padding

最後,resize到制定大小。

4 怎麼處理**圖尺寸和輸入真實值尺寸不匹配的問題

一種方式是de-convolution到原來的大小

二是原始碼中指出的方法,因為是只有base net中有縮放的過程,在vgg結構中,有三次pooling過程,所以縮放比例是8,將resize後的mask淹膜和paf以及身體部位heatmap三者都縮放8倍。

因為本身有乙個核函式處理過程,所以也不用特別要求達到畫素級別的精度,反正縮放過程中最大值丟不了。

另外,因為這兒有8倍關係,所以resize的時候要選擇乙個合適的長與寬,實際上,原始碼中強制轉成16的倍數。

5 為什麼輸出結果維度是38和19

因為coco的身體part有17個,openpose加了乙個頸這個part所以有18個heatmap,再加一幅背景,身體部件的熱點圖應該是19個。

而這些點所連線的邊,組成乙個人體的骨骼圖,一共有19條,但為什麼是38個呢。

openpose中的paf需要表示大小和方向,所以原始碼中給出的是相應邊向量在x和y上的分量,每條邊都有,所以是38維。

評價:

越深入神經網路,越覺得神奇。像openpose就是給了乙個模板,讓神經網路自己去學習去適應,得出乙個相似的模板。

ssd中也是讓網路自己去學習怎麼得到乙個合適的檢測框。

這些網路都是對過程沒什麼嚴格的要求,就是設定想要的模板的時候需要用心,然後在網路中取出構建這種模板的連線線——模板的輸入。剩下的就交給了網路。

不過這種邏輯蠻奇怪的,是連線在先,還是模板在先,哪個對作者的啟發更大呢。

MATLAB FFT的細節處理

對於fft函式,其作用為快速傅利葉變換,可以實現常規傅利葉變換的 而由於其原理,最後生成的影象可能並不是我們常分析的樣子。本文將簡要對fft函式的細節處理進行一定的分析,從而使原來的的影象變為便於我們分析的樣子。f0 1e6 頻率 fs 5e6 取樣率 t 1 fs 1 fs 1 樣點採集 s co...

批處理指令碼的細節

寫jenkins在windows下vs專案的自動化編譯的批處理指令碼的時候,在一些細節處理方法遇到過很多問題,雖然網上關於批處理有很多的教程,但是對於一些指令講解還是不夠詳細,這些小問題往往會困擾你比較長的時間,這裡分享一下我在寫指令碼時遇到的一些小問題,希望能夠幫助到大家。1.錯誤處理乙個好的指令...

基於openpose的動作識別(二)

在windows平台使用pythonapi執行乙個識別手指的demo 一 準備檔案 二 執行除錯 1.參考文件 examples tutorial api python 2.使用配置好環境的pythonide開啟 openpose master examples tutorial api pytho...