博客專欄

EEPW首頁(yè) > 博客 > 實(shí)時(shí)檢測(cè)17個(gè)人體關(guān)鍵點(diǎn),谷歌SOTA姿態(tài)檢測(cè)模型,手機(jī)端也能運(yùn)行

實(shí)時(shí)檢測(cè)17個(gè)人體關(guān)鍵點(diǎn),谷歌SOTA姿態(tài)檢測(cè)模型,手機(jī)端也能運(yùn)行

發(fā)布人:機(jī)器之心 時(shí)間:2021-07-25 來源:工程師 發(fā)布文章

近日,來自谷歌的研究者更新了用于實(shí)時(shí)姿態(tài)檢測(cè)的項(xiàng)目,該項(xiàng)目包含 3 種 SOTA 模型,其中 MoveNet 模型可檢測(cè)人體 17 個(gè)關(guān)鍵點(diǎn)、并以 50+ fps 在電腦和手機(jī)端運(yùn)行;BlazePose 可檢測(cè)人體 33 個(gè)關(guān)鍵點(diǎn);PoseNet 可以檢測(cè)人體多個(gè)姿態(tài),每個(gè)姿態(tài)包含 17 個(gè)關(guān)鍵點(diǎn)。

不久之前谷歌研究院推出了最新的姿態(tài)檢測(cè)模型 MoveNet,并在 TensorFlow.js 中推出了新的姿態(tài)檢測(cè) API,該模型可以非??焖?、準(zhǔn)確地檢測(cè)人體的 17 個(gè)關(guān)鍵節(jié)點(diǎn)。這一開源項(xiàng)目對(duì)于姿態(tài)檢測(cè)以及機(jī)器學(xué)習(xí)領(lǐng)域來說,是一件非常有意義的事。

最近,來自谷歌的研究者又更新了一個(gè)新的項(xiàng)目,該項(xiàng)目提供了包括 MoveNet 在內(nèi)的多個(gè)可用于實(shí)時(shí)姿態(tài)檢測(cè)的 SOTA 模型,目前該項(xiàng)目已有 3 種可選模型:

MoveNet:是一種速度快、準(zhǔn)確率高的姿態(tài)檢測(cè)模型,可檢測(cè)人體的 17 個(gè)關(guān)鍵點(diǎn),能夠以 50+ fps 的速度在筆記本電腦和手機(jī)上運(yùn)行。

BlazePose:MediaPipe BlazePose 可以檢測(cè)人體 33 個(gè)關(guān)鍵點(diǎn),除了 17 個(gè) COCO 關(guān)鍵點(diǎn)之外,它還為臉部、手和腳提供了額外的關(guān)鍵點(diǎn)檢測(cè)。

PoseNet:可以檢測(cè)多個(gè)姿態(tài),每個(gè)姿態(tài)包含 17 個(gè)關(guān)鍵點(diǎn)。

1.png

項(xiàng)目地址:https://github.com/tensorflow/tfjs-models/tree/master/pose-detection

其中 MoveNet 模型效果是這樣的:下圖中MoveNet 在跟蹤人鍛煉過程中的運(yùn)動(dòng),可以實(shí)時(shí)、準(zhǔn)確的檢測(cè)人體關(guān)鍵點(diǎn)。值得注意的是,此時(shí) MoveNet 一次只針對(duì)一個(gè)人進(jìn)行了優(yōu)化。

2.gif

MoveNet 在移動(dòng)應(yīng)用程序中示例:

3.gif

在上述示例中,MoveNet 用到了 FormFit,F(xiàn)ormFit 是一款數(shù)字健身教練項(xiàng)目,基于 MoveNet,可以實(shí)時(shí)分析人體姿態(tài),評(píng)估運(yùn)動(dòng)時(shí)的姿勢(shì)和范圍。此外,MoveNet 的研究結(jié)果還可用于健康應(yīng)用程序,甚至運(yùn)動(dòng)訓(xùn)練應(yīng)用程序。

關(guān)于 MoveNet、BlazePose、PoseNet 更多的演示,請(qǐng)參考項(xiàng)目,都有對(duì)應(yīng)的 Demo 示例。

人體關(guān)鍵點(diǎn)

COCO 17 個(gè)關(guān)鍵點(diǎn)所對(duì)應(yīng)的人體部位包括:0: 鼻子、1: 左眼、2: 右眼、3: 左耳、4: 右耳、5: 左肩、6: 右肩、7: 左肘、8: 右肘、9: 左腕、10: 右腕、11: 左胯、12: 右胯、13: 左膝、14: 右膝、15: 左踝、16: 右踝。

4.png

COCO 關(guān)鍵點(diǎn):用于 MoveNet 和 PoseNet。

BlazePose 關(guān)鍵點(diǎn):用于 MediaPipe BlazePose檢測(cè)器,示例如下:

5.png

MoveNet 介紹

目前,MoveNet 有兩個(gè)版本以提供性能的權(quán)衡。Lightning 版本時(shí)效性更快,但是產(chǎn)生的結(jié)果可能準(zhǔn)確率不高;Thunder 版本時(shí)效性稍微慢一點(diǎn),但準(zhǔn)確率更高;因此,我們可以看到 Thunder 模型的關(guān)鍵點(diǎn)得分通常會(huì)比 Lightning 略高。

MoveNet 可以做什么?首先,它是一個(gè)高速位置跟蹤器。

由于 MoveNet 是一個(gè)預(yù)訓(xùn)練模型,所以設(shè)置好以后即可使用。MoveNet 能夠跟蹤人體的 17 個(gè)關(guān)節(jié)點(diǎn)(如腳踝、膝蓋、肩膀、手肘、手腕、耳朵、眼睛和鼻子等)。這些關(guān)鍵點(diǎn)與 (x, y)坐標(biāo)系相關(guān)聯(lián),并且在每次調(diào)用「detector.estimatePoses(*some video element*)」時(shí)更新。

當(dāng)在程序循環(huán)中反復(fù)調(diào)用該函數(shù)時(shí),我們可以實(shí)時(shí)獲得所有關(guān)鍵點(diǎn)的 (x, y) 坐標(biāo)。返回的每個(gè) (x, y) 關(guān)鍵點(diǎn)坐標(biāo)都與一個(gè)分?jǐn)?shù)相關(guān)聯(lián),該分?jǐn)?shù)代表 MoveNet 對(duì)讀數(shù)準(zhǔn)確率的置信度。分?jǐn)?shù)介于 0-1 之間,其中 0 和 1 這兩個(gè)極端幾乎是無法實(shí)現(xiàn)的,但這也意味著分?jǐn)?shù)越接近 1,模型的置信度越好,越能說明讀出的關(guān)鍵點(diǎn)位置越接近真實(shí)的人體關(guān)鍵點(diǎn)。

6.gif

傳統(tǒng)方案(上)與 MoveNet(下)在高難度姿態(tài)檢測(cè)上的對(duì)比結(jié)果,傳統(tǒng)方案會(huì)跟丟關(guān)鍵點(diǎn),而 MoveNet 不會(huì)。

如何使用?

總體來說,使用該項(xiàng)目分為兩步:

首先需要從 SupportedModels 中選擇一個(gè)模型來創(chuàng)建檢測(cè)器,模型包括 MoveNet、BlazePose、PoseNet。如下代碼是創(chuàng)建 MoveNet 檢測(cè)器:

const model = poseDetection.SupportedModels.MoveNet;
const detector = await poseDetection.createDetector(model);

然后使用所創(chuàng)建檢測(cè)器來檢測(cè)姿態(tài)。

const poses = await detector.estimatePoses(image);

這樣將會(huì)返回姿態(tài)列表,該列表包含檢測(cè)到的圖像中每個(gè)個(gè)體的姿態(tài)。對(duì)于單人模型,列表中只有一個(gè)元素。目前,只有 PoseNet 支持多姿態(tài)估計(jì)。如果模型不能檢測(cè)到任何姿態(tài),列表將為空。

每個(gè)姿態(tài)包含一個(gè)置信度得分和一組關(guān)鍵點(diǎn)。PoseNet 和 MoveNet 都返回 17 個(gè)關(guān)鍵點(diǎn),Mediapipe BlazePose 返回 33 個(gè)關(guān)鍵點(diǎn)。每個(gè)關(guān)鍵點(diǎn)包含 x, y,得分和名字。

示例輸出如下所示:

[
  {
    score: 0.8,
    keypoints: [
      {x: 230, y: 220, score: 0.9, name: "nose"},
      {x: 212, y: 190, score: 0.8, name: "left_eye"},
      ...
]
  }
]

x,y 代表圖像中實(shí)際關(guān)鍵點(diǎn)位置,如果你想標(biāo)準(zhǔn)化關(guān)鍵點(diǎn)位置,你可以使用

「poseDetection.calculator.keypointsToNormalizedKeypoints(keypoints, imageSize)」方法將 x,y 轉(zhuǎn)換到 [0, 1] 范圍。得分范圍是 0 到 1,它表示模型對(duì)關(guān)鍵點(diǎn)的置信度。通常情況下,不應(yīng)該使用置信度低的關(guān)鍵點(diǎn)。每個(gè)應(yīng)用程序可能需要自定義置信度閾值。

對(duì)于要求高精度的應(yīng)用程序,這里建議使用較大的置信度;相反,需要高召回率的應(yīng)用程序可能會(huì)選擇降低閾值。模型之間的置信度沒有校準(zhǔn),因此設(shè)置一個(gè)合適的置信度閾值可能需要一些實(shí)驗(yàn)。

參考鏈接:

https://medium.com/@samhannan47/tensorflows-new-model-movenet-explained-3bef80a8f073

*博客內(nèi)容為網(wǎng)友個(gè)人發(fā)布,僅代表博主個(gè)人觀點(diǎn),如有侵權(quán)請(qǐng)聯(lián)系工作人員刪除。



關(guān)鍵詞: AI

相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉