更加實(shí)用的姿態(tài)估計(jì)
本文?將通過強(qiáng)調(diào)推理過程中的一個(gè)關(guān)鍵問題來討論如何使姿勢(shì)估計(jì)算法更有效,并討論如何緩解這個(gè)問題。?還介紹了一個(gè)示例,使得姿勢(shì)估計(jì)變得更加實(shí)用。
關(guān)鍵詞:human pose-estimation, jitter, low-pass filter, signal.
人體姿勢(shì)估計(jì)是計(jì)算機(jī)視覺中非常具有挑戰(zhàn)性的問題之一,其目標(biāo)是定位人體關(guān)鍵點(diǎn)(如臀部、肩部、手腕等)。
它有無數(shù)的應(yīng)用程序,包括AR、基于VR的游戲(如Microsoft Kinect)、交互式健身、治療、運(yùn)動(dòng)捕捉等。結(jié)果的逐幀平滑對(duì)于這些應(yīng)用程序的任何用途都至關(guān)重要。
抖動(dòng)問題
幾乎每種姿態(tài)估計(jì)算法在推理過程中都存在抖動(dòng)問題。點(diǎn)周圍關(guān)鍵點(diǎn)的高頻振蕩是噪聲信號(hào)的特征,稱為抖動(dòng)。
抖動(dòng)原因可歸因于我們?cè)谡麄(gè)視頻輸入的幀級(jí)別上執(zhí)行這些推斷。這些連續(xù)的幀具有不同的遮擋(以及一系列復(fù)雜的姿勢(shì))。另一個(gè)原因可能是訓(xùn)練數(shù)據(jù)中注釋的不一致性導(dǎo)致姿勢(shì)估計(jì)的不確定性。抖動(dòng)會(huì)帶來以下問題:
1. 故障數(shù)據(jù)和噪聲數(shù)據(jù)會(huì)導(dǎo)致算法性能下降。
2. 關(guān)鍵點(diǎn)太過嘈雜,無法在生產(chǎn)環(huán)境中構(gòu)建任何有用的功能和應(yīng)用程序。
3. 獲得假陽性數(shù)據(jù)點(diǎn)的概率很高。
4. 例如:假設(shè)你想使用姿勢(shì)估計(jì)建立一個(gè)靜止記分器(對(duì)于做冥想的人來說),這些抖動(dòng)會(huì)顯著影響分?jǐn)?shù),導(dǎo)致結(jié)果不準(zhǔn)確。
抖動(dòng)問題的解決方案
信號(hào)處理提供了兩種主要的方法來衰減信號(hào)中的噪聲。低通濾波器:將信號(hào)中的所有頻率衰減到指定閾值頻率以下,并使其余信號(hào)保持不變的濾波器。
高通濾波器:一種濾波器,將信號(hào)中的所有頻率衰減到指定閾值頻率以上,并使其余信號(hào)保持不變。
我們的自然運(yùn)動(dòng)是低頻信號(hào),而抖動(dòng)是高頻信號(hào)。因此,為了解決抖動(dòng)問題,我們可以使用低通濾波器來過濾所有更高頻率的信號(hào)。
解決抖動(dòng)問題的其他方法包括使用神經(jīng)網(wǎng)絡(luò)進(jìn)行姿勢(shì)優(yōu)化。其中一個(gè)例子是SmoothNet。然而,LPF更容易實(shí)現(xiàn)和使用。LPF的另一個(gè)變體是One Euro濾波器,它在實(shí)時(shí)過濾噪聲信號(hào)方面也非常強(qiáng)大。
Movenet姿態(tài)估計(jì)
讓我們從一些代碼開始,讓LPF在python中工作。為了在本博客中進(jìn)行說明,我使用了Tensorflow的Movenet姿勢(shì)估計(jì)模型。這個(gè)模型非?焖俸蜏(zhǔn)確。
現(xiàn)在,讓我們考慮一些將用于推理的簡(jiǎn)單函數(shù)。
tf.lite中提供了用于在tflite上運(yùn)行推理的Python API。(參考:使用tflite在python中加載并運(yùn)行模型)。
# Initialize the TFLite interpreter
input_size = 256
interpreter = tf.lite.Interpreter(model_path="model.tflite")
interpreter.a(chǎn)llocate_tensors()
# Movenet model: Runs detection on an input image
def movenet(input_image):
# TF Lite format expects tensor type of uint8.
input_image = tf.cast(input_image, dtype=tf.uint8)
# Get input and output tensors.
input_details = interpreter.get_input_details()
output_details = interpreter.get_output_details()
interpreter.set_tensor(input_details[0]['index'], input_image.numpy())
interpreter.invoke() # Invoke inference.
# Get the model prediction.
kps = interpreter.get_tensor(output_details[0]['index'])
return kps
# Obtain inference from the Movenet model
def get_inference(image):
image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
# Padding and Resizing the input image.
image = pad(image, input_size, input_size)
image = cv2.resize(image, (input_size, input_size))
input_image = image
# Movenet expects a [1, height, width, 3] tensor input
input_image = np.expand_dims(input_image, axis=0)
# Run model inference.
kps = movenet(input_image)[0]
return kps[0], image
使用以下命令在本地運(yùn)行推理(首先,在克隆后執(zhí)行“cd motion-detection”):
python -m inference.movenet_infer — path file.mp4 — lpf n
讓我們看看使用Movenet模型的示例推斷結(jié)果:
顯然,推斷看起來相當(dāng)準(zhǔn)確,延遲也很小。
現(xiàn)在,讓我們回到一開始看到的抖動(dòng)示例,看看如何解決抖動(dòng)問題。為了便于演示,我們使用了低通濾波器。我們還可以使用Python-Scipy中流行的信號(hào)處理庫,該庫支持不同類型的低通濾波器(例如signal.lfilter模塊)。
1? LPF的使用情況如下所示:
while True:
old_curr_kp, image = get_inference(frame2)
curr_kp = [x[:] for x in old_curr_kp] # deepcopy
if j == 0:
x_track = [OneEuroFilter(j, curr_kp[k][0], 0.6, 0.015) for k in range(num_kps)] # track for all keypoints
y_track = [OneEuroFilter(j, curr_kp[k][1], 0.6, 0.015) for k in range(num_kps)]
if lpf and j > 1:
for i in range(num_kps):
## x coordinate
curr_kp[i][0] = x_track[i](j, curr_kp[i][0])
## y coordinate
curr_kp[i][1] = y_track[i](j, curr_kp[i][1])
output = draw_pose(image, curr_kp)
output = cv2.cvtColor(output, cv2.COLOR_BGR2RGB)
outimage = np.a(chǎn)sarray(output, dtype=np.uint8)
outimage = cv2.resize(outimage, size)
prev_kp = curr_kp
ret, frame2 = cap.read()
cframe = cap.get(cv2.CAP_PROP_POS_FRAMES)
j += 1
if not ret:
break
k = cv2.waitKey(1)
if k == ord('q') or k == 27:
break
cap.release()
cv2.destroyAllWindows()
使用以下命令在本地運(yùn)行推理(使用LPF):(首先,克隆后執(zhí)行“cd motion-detection”)
python -m inference.stillness_scorer — path file.mp4 — lpf y
應(yīng)用程序示例
現(xiàn)在,讓我們看一個(gè)非常簡(jiǎn)單的例子,在這個(gè)例子中,使用上述概念,姿勢(shì)估計(jì)可以變得更加實(shí)用。
考慮下面的問題陳述:“只根據(jù)身體靜止來給一個(gè)人冥想打分!
除了姿勢(shì)估計(jì)之外,你能想出一些其他技術(shù)來解決這個(gè)問題嗎?
圖像處理
也許我們可以使用簡(jiǎn)單的圖像處理方法來解決這個(gè)問題。我們可以從兩個(gè)連續(xù)幀開始,然后我們可以應(yīng)用二進(jìn)制閾值來獲得減去的掩碼;這里,白色像素的數(shù)量將指示靜止。
這種方法很好,但當(dāng)有一個(gè)風(fēng)扇或一只貓?jiān)诤笈_(tái)移動(dòng)時(shí),問題就會(huì)出現(xiàn);在這種可能的情況下,這種方法將不會(huì)有效。因?yàn)橐苿?dòng)的貓會(huì)成為掩碼的一部分。目標(biāo)是想出一種專門針對(duì)人類的方法。
圖像(人體)分割
使用一些分割技術(shù)怎么樣?我們可以使用分割專門分割出一個(gè)人,然后取兩個(gè)連續(xù)分割幀的差值,檢查白色像素的數(shù)量。局限性:當(dāng)分割區(qū)域內(nèi)有運(yùn)動(dòng)時(shí),此方法不起作用。
姿態(tài)估計(jì)
這里,我們計(jì)算連續(xù)幀中特定身體部位關(guān)鍵點(diǎn)的歐氏距離。我們的最終分?jǐn)?shù)是所有這些歐幾里德距離的加權(quán)和。顯然,如果一個(gè)人做了一些運(yùn)動(dòng),關(guān)鍵點(diǎn)的歐幾里德距離會(huì)更高,反之亦然。
得分:如果沒有明顯的移動(dòng),得分應(yīng)該低。分?jǐn)?shù)越低意味著冥想越好(基于身體靜止,實(shí)際上有很多因素有助于良好的冥想,而不僅僅是靜止)。
請(qǐng)注意,如果我們沒有提前平滑姿勢(shì)關(guān)鍵點(diǎn),抖動(dòng)將導(dǎo)致得分變高,從而導(dǎo)致糟糕和不準(zhǔn)確的結(jié)果。下圖顯示了y軸上的運(yùn)動(dòng)分?jǐn)?shù)與x軸上的時(shí)間。
首先,讓我們看看分?jǐn)?shù)在沒有平滑的情況下是如何表現(xiàn)的。
很明顯,由于抖動(dòng),圖形看起來很嘈雜。
讓我們看看使用LPF的情況。
在這里,這次的圖表看起來很平滑和干凈。我們可以推斷,任何運(yùn)動(dòng)都會(huì)影響曲線下的面積。因此,平滑關(guān)鍵點(diǎn)在此類應(yīng)用中變得非常關(guān)鍵。
最終結(jié)果
還在android中集成了一個(gè)低通濾波器,并在自定義姿勢(shì)估計(jì)模型上運(yùn)行它。我們得到以下結(jié)果:
參考引用
希望你喜歡使用低通濾波器使姿勢(shì)估計(jì)更加實(shí)用。希望這個(gè)例子足夠合理,可以暗示在姿態(tài)估計(jì)的基礎(chǔ)上構(gòu)建應(yīng)用程序時(shí),消除抖動(dòng)是最關(guān)鍵的優(yōu)化之一。
原文標(biāo)題 : 更加實(shí)用的姿態(tài)估計(jì)

發(fā)表評(píng)論
請(qǐng)輸入評(píng)論內(nèi)容...
請(qǐng)輸入評(píng)論/評(píng)論長度6~500個(gè)字
最新活動(dòng)更多
-
3月27日立即報(bào)名>> 【工程師系列】汽車電子技術(shù)在線大會(huì)
-
4月30日立即下載>> 【村田汽車】汽車E/E架構(gòu)革新中,新智能座艙挑戰(zhàn)的解決方案
-
5月15-17日立即預(yù)約>> 【線下巡回】2025年STM32峰會(huì)
-
即日-5.15立即報(bào)名>>> 【在線會(huì)議】安森美Hyperlux™ ID系列引領(lǐng)iToF技術(shù)革新
-
5月15日立即下載>> 【白皮書】精確和高效地表征3000V/20A功率器件應(yīng)用指南
-
5月16日立即參評(píng) >> 【評(píng)選啟動(dòng)】維科杯·OFweek 2025(第十屆)人工智能行業(yè)年度評(píng)選
推薦專題
- 1 UALink規(guī)范發(fā)布:挑戰(zhàn)英偉達(dá)AI統(tǒng)治的開始
- 2 北電數(shù)智主辦酒仙橋論壇,探索AI產(chǎn)業(yè)發(fā)展新路徑
- 3 降薪、加班、裁員三重暴擊,“AI四小龍”已折戟兩家
- 4 “AI寒武紀(jì)”爆發(fā)至今,五類新物種登上歷史舞臺(tái)
- 5 國產(chǎn)智駕迎戰(zhàn)特斯拉FSD,AI含量差幾何?
- 6 光計(jì)算迎來商業(yè)化突破,但落地仍需時(shí)間
- 7 東陽光:2024年扭虧、一季度凈利大增,液冷疊加具身智能打開成長空間
- 8 地平線自動(dòng)駕駛方案解讀
- 9 封殺AI“照騙”,“淘寶們”終于不忍了?
- 10 優(yōu)必選:營收大增主靠小件,虧損繼續(xù)又逢關(guān)稅,能否乘機(jī)器人東風(fēng)翻身?