基于深度學(xué)習(xí)的姿態(tài)估計
譯文譯者 | 李睿
審校 | 重樓
什么是人體姿勢估計?
人體姿態(tài)估計是檢測和估計圖像或視頻中人物姿態(tài)的過程。它包括檢測人物身體的關(guān)鍵點(diǎn)或關(guān)節(jié),例如頭部、肩膀、肘部、手腕、臀部、膝蓋和腳踝,并估計它們在圖像中的位置。這可以使用各種計算機(jī)視覺技術(shù)來完成,例如特征檢測和機(jī)器學(xué)習(xí)算法。
估計人體姿勢的方法
自上而下的方法
在自上而下的人體姿勢估計方法中,人工智能算法首先檢測圖像或視頻幀中的人物,然后通過分析被檢測到的人物的身體部位及其相互之間的關(guān)系來估計人物姿勢。
這種方法通常包括檢測人物的頭部、軀干和四肢,然后使用這些信息來估計人物的姿勢。它還可能涉及使用關(guān)于人物的身體比例和身體上關(guān)鍵點(diǎn)(例如關(guān)節(jié))的位置的信息來改進(jìn)姿勢估計。
自上而下的方法可以有效地估計圖像或視頻幀中人物的姿勢,但在處理遮擋或同一幀中的多個人物時可能不太有效。它們也可能比自下而上的方法計算更密集,自下而上的方法通過分析圖像或視頻幀的局部特征來估計人體姿態(tài)。
自下而上的方法
在一種自下而上的人體姿勢估計方法中,首先分析圖像或視頻幀中的局部特征,例如邊緣和角落,然后使用這些信息來檢測和跟蹤人物身體的各個部位,最后組合檢測到的身體部位以估計幀中單人或多人的姿勢。
自下而上的方法通常比自上而下的方法更快、更有效,因為它們不需要對人物進(jìn)行初步檢測,也不需要使用關(guān)于身體比例和身體關(guān)鍵點(diǎn)的信息。然而,它們可能不如自上而下的方法準(zhǔn)確,特別是在局部特征不明確或人物姿勢變化很大的情況下。
自下而上的方法對同一幀中的遮擋和多人的檢測更加有效,因為它們不依賴于人物的整體檢測。然而,他們可能很難準(zhǔn)確地估計人物的姿勢是部分或完全遮擋。
自下而上方法的工作方式
姿態(tài)估計的組件
上圖顯示了從圖像中估計一個人的姿勢所涉及的不同組件。以下詳細(xì)介紹每個組件。
組件置信度圖
人體姿態(tài)估計的第一步是檢測圖像或視頻中人體關(guān)節(jié)的位置。這通常是通過結(jié)合機(jī)器學(xué)習(xí)算法和計算機(jī)視覺技術(shù)來完成的。一種流行的方法是使用卷積神經(jīng)網(wǎng)絡(luò)(CNN)將圖像中的像素分類為不同的身體部位。卷積神經(jīng)網(wǎng)絡(luò)(CNN)是在一個帶注釋的圖像的大型數(shù)據(jù)集上訓(xùn)練的,其中包括關(guān)于身體關(guān)節(jié)的位置和方向的信息。
部位關(guān)聯(lián)字段
部位關(guān)聯(lián)字段(PAF)是人體不同部位之間關(guān)系的表示。它用于建模人體部位之間的連接,并提供一種估計圖像或視頻幀中的人物姿勢的方法。部位關(guān)聯(lián)字段(PAF)通常表示為一個2D數(shù)組,數(shù)組中的每個元素表示人體部位連接到圖像中特定位置的可能性。部位關(guān)聯(lián)字段(PAF)通常是使用卷積神經(jīng)網(wǎng)絡(luò)(CNN)或其他機(jī)器學(xué)習(xí)模型生成的,這些模型是在各種姿勢的帶注釋的圖像或視頻的大型數(shù)據(jù)集上訓(xùn)練的。
為了生成部位關(guān)聯(lián)字段(PAF),卷積神經(jīng)網(wǎng)絡(luò)(CNN)處理輸入圖像并生成一組特征圖,然后通過一系列卷積層和池化層來提取關(guān)于人體部位之間關(guān)系的相關(guān)信息。例如,為了估計人物手臂的姿勢,算法可能會使用部位關(guān)聯(lián)字段(PAF)根據(jù)肘關(guān)節(jié)的存在來確定肩關(guān)節(jié)的可能位置,然后使用該信息來估計手臂其余部分的姿勢。部位關(guān)聯(lián)字段(PAF)被廣泛應(yīng)用于人體姿態(tài)估計,因為它們能夠捕捉身體部位之間的復(fù)雜關(guān)系,并且可以比其他方法更有效地處理遮擋和可變姿態(tài)。然而,生成它們可能需要大量的計算,并且可能需要大量的帶注釋的圖像或視頻數(shù)據(jù)集進(jìn)行訓(xùn)練。
雙方的匹配
用于確保同一圖像中一個人的關(guān)鍵點(diǎn)與另一個人的關(guān)鍵點(diǎn)不匹配。這是通過計算關(guān)鍵點(diǎn)之間的漢明距離并根據(jù)最小距離進(jìn)行映射來實現(xiàn)的,其中流行的算法是匈牙利算法。
解析結(jié)果
該過程的最后一步是解析結(jié)果,包括顯示圖像中每個人身的圖像關(guān)鍵點(diǎn)。這有助于每個人的人體姿勢的可視化。
在Python中進(jìn)行人體姿勢估計
谷歌發(fā)布了一個易于導(dǎo)入和運(yùn)行的名為Mediapipe的框架,該框架支持多種編程語言。本文將展示如何使用Mediapipe訓(xùn)練過的姿態(tài)估計模型。姿態(tài)估計模型經(jīng)過優(yōu)化,可以在輕量級設(shè)備上運(yùn)行。用戶可以使用該程序輸入包含人類的圖像,并估計圖像中人類的姿勢并解釋結(jié)果。
安裝Mediapipe
pip install mediapipe
讀取圖像并將圖像轉(zhuǎn)換為矩陣
Python
#Read an image
img = cv2.imread("image.jpg")
將圖像從RGB轉(zhuǎn)換為BGR,以一種可以被Mediapipe接受的方式。
Python
# Run MediaPipe Pose and draw pose landmarks.
with mp_pose.Pose(static_image_mode=True, min_detection_cnotallow=0.5, model_complexity=2) as pose:
# Convert the BGR image to RGB and process it with MediaPipe Pose.
results = pose.process(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))
將世界坐標(biāo)轉(zhuǎn)換為圖像坐標(biāo)。
Python
# Print nose landmark.
image_hight, image_width, _ = img.shape
if not results.pose_landmarks:
continue
print(
f'Nose coordinates: ('
f'{results.pose_landmarks.landmark[mp_pose.PoseLandmark.NOSE].x * image_width}, '
f'{results.pose_landmarks.landmark[mp_pose.PoseLandmark.NOSE].y * image_hight})'
)
類中帶有l(wèi)andmark變量的結(jié)果對象的坐標(biāo)存儲在世界坐標(biāo)中,而不是精確的圖像坐標(biāo)中。上面代碼片段中的print語句顯示了轉(zhuǎn)換并打印圖像上的實際坐標(biāo)。
結(jié)果可視化
Python
# Draw pose landmarks.
print(f'Pose landmarks of {name}:')
annotated_image = raw_img.copy()
mp_drawing.draw_landmarks(
annotated_image,
results.pose_landmarks,
mp_pose.POSE_CONNECTIONS,
landmark_drawing_spec=mp_drawing_styles.get_default_pose_landmarks_style())
cv2.imshow(annotated_image)
cv2.waitKey(0)
上面的代碼將有助于可視化的人物的姿態(tài)與骨架關(guān)鍵點(diǎn)。
解讀結(jié)果
上圖顯示了人體每個點(diǎn)的坐標(biāo)存儲位置。在業(yè)務(wù)用例中,如果可以檢索精確的坐標(biāo)來重用以解決業(yè)務(wù)問題,例如使用頭部坐標(biāo)來估計特定健身運(yùn)動的次數(shù)或檢查手部坐標(biāo)以查看游泳時劃水的角度,那么姿勢估計是有用的。
完整的代碼
Python
#Import all dependencies
#Source - https://google.github.io/mediapipe/solutions/pose.html
import cv2 #For all image processing related information
import math
import numpy as np #For matrix operations
import mediapipe as mp #Importing the library to run pose estimation
#Read an image
raw_img = cv2.imread("image.jpg")
img = cv2.cvtColor(raw_img, cv2.COLOR_BGR2RGB)
# Run MediaPipe Pose and draw pose landmarks.
with mp_pose.Pose(static_image_mode=True, min_detection_cnotallow=0.5, model_complexity=2) as pose:
# Convert the BGR image to RGB and process it with MediaPipe Pose.
results = pose.process(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))
# Print nose landmark.
image_hight, image_width, _ = img.shape
if not results.pose_landmarks:
continue
print(
f'Nose coordinates: ('
f'{results.pose_landmarks.landmark[mp_pose.PoseLandmark.NOSE].x * image_width}, '
f'{results.pose_landmarks.landmark[mp_pose.PoseLandmark.NOSE].y * image_hight})'
)
# Draw pose landmarks.
print(f'Pose landmarks of {name}:')
annotated_image = raw_img.copy()
mp_drawing.draw_landmarks(
annotated_image,
results.pose_landmarks,
mp_pose.POSE_CONNECTIONS,
landmark_drawing_spec=mp_drawing_styles.get_default_pose_landmarks_style())
cv2.imshow(annotated_image)
cv2.waitKey(0)
姿態(tài)估計在國際足聯(lián)2022年世界杯中的應(yīng)用
姿態(tài)估計應(yīng)用比較廣泛,它被用于各種業(yè)務(wù)案例中。其中一些是在醫(yī)療保健、零售、健身和體育領(lǐng)域。最近舉辦的國際足聯(lián)2022年世界杯也使用了姿態(tài)估計技術(shù),通過使用視覺傳感器和硬件傳感器來識別球員越位。
判斷越位是足球比賽中的一項規(guī)則,要求進(jìn)攻球員在傳球前必須落后于對手球隊的最后兩名球員,這兩名球員通常是守門員和后衛(wèi)。判罰越位的錯誤可能會發(fā)生,因為比賽進(jìn)行得很快,裁判員必須離得很近才能判斷是否越位。此外,助理裁判可能無法做出準(zhǔn)確的決定,可能導(dǎo)致錯誤的判罰。主裁判和助理裁判的錯誤會給輸球的球隊造成損失,這些錯誤通常涉及越位判罰和判斷進(jìn)球是否準(zhǔn)確。根據(jù)研究,裁判在大約20%~26%的越位判罰中會犯錯誤。以下深入了解國際足聯(lián)如何使用姿勢估計來識別越位。
鷹眼攝像頭
2022年世界杯在每個球場使用12個鷹眼攝像頭,并放置在球場周圍。攝像頭在現(xiàn)場進(jìn)行校準(zhǔn),以識別本地坐標(biāo)和全局坐標(biāo)。來自攝像頭的幀也有手動標(biāo)記的線條,以幫助識別足球場地上的線條。
足球傳感器
除了用于跟蹤球員在場上運(yùn)動的12個攝像頭之外,傳感器通常被放置在足球內(nèi)部,以幫助準(zhǔn)確跟蹤它的位置。在足球里使用傳感器可以讓系統(tǒng)以很高的精度跟蹤它的運(yùn)動,即使它在高速運(yùn)動。
在足球上使用傳感器的一個原因是為了提高人工智能系統(tǒng)在場上檢測球位置的準(zhǔn)確性。僅靠攝像頭可能不足以在任何時候準(zhǔn)確跟蹤球的運(yùn)動,特別是在足球快速移動或被場上球員或其他物體部分遮擋的情況下。通過使用傳感器,該系統(tǒng)可以更準(zhǔn)確地檢測到足球的位置和運(yùn)動,即使是在具有挑戰(zhàn)性的條件下。
傳感器還可以用來測量足球的其他特性,例如速度和旋轉(zhuǎn)速度,這對某些類型的比賽(例如任意球和點(diǎn)球)很重要。通過準(zhǔn)確跟蹤這些特征,人工智能系統(tǒng)可以為視頻助理裁判(VAR)提供額外的信息,這些信息可能對足球比賽中的決策有用。
視頻助理裁判(VAR)
它包括一個被稱為視頻助理裁判(VAR)箱的控制室,可以訪問足球比賽的所有攝像頭視圖,以及一個視頻助理裁判(VAR)團(tuán)隊,他們與場上的主裁判保持不斷的溝通。
人工智能裁判:將一切結(jié)合在一起
鷹眼攝像頭的每一幀都經(jīng)過姿勢估計處理器進(jìn)行處理,它預(yù)測幀中球員的骨架關(guān)鍵點(diǎn)。與此同時,用時間戳連續(xù)記錄足球的坐標(biāo)。關(guān)鍵點(diǎn)檢查器將進(jìn)攻球員(試圖進(jìn)球的球員)和防守球員(試圖阻止進(jìn)球的對方球員)的預(yù)測關(guān)鍵點(diǎn)進(jìn)行比較。如果進(jìn)攻球員的關(guān)鍵點(diǎn)比進(jìn)攻和防守球員的關(guān)鍵點(diǎn)都更靠近球門線,就可能出現(xiàn)越位情況。如果關(guān)鍵點(diǎn)檢查器確定可能存在越位情況,它將從特定的時間戳中檢索進(jìn)攻球員的坐標(biāo),并檢查是否越位。如果所有條件都滿足,并且越位情況得到確認(rèn),則決定將被發(fā)送給視頻助理裁判(VAR)團(tuán)隊。視頻助理裁判(VAR)團(tuán)隊可以查看錄像,并為場內(nèi)裁判提供更多的信息,以幫助他們做出更明智的決定。
結(jié)論
在本文中,你學(xué)習(xí)了使用深度學(xué)習(xí)的姿態(tài)估計的概念,使用谷歌Mediapipe實現(xiàn)姿態(tài)估計,以及已經(jīng)解決了現(xiàn)實問題的姿態(tài)估計的應(yīng)用。
原文標(biāo)題:Deep Learning-Based Pose Estimation,作者:Sumedh Datar