博客專欄

EEPW首頁 > 博客 > 實時檢測17個人體關(guān)鍵點,谷歌SOTA姿態(tài)檢測模型,手機端也能運行

實時檢測17個人體關(guān)鍵點,谷歌SOTA姿態(tài)檢測模型,手機端也能運行

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

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

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

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

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

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

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

1.png

項目地址:https://github.com/tensorflow/tfjs-models/tree/master/pose-detection

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

2.gif

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

3.gif

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

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

人體關(guān)鍵點

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

4.png

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

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

5.png

MoveNet 介紹

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

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

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

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

6.gif

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

如何使用?

總體來說,使用該項目分為兩步:

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

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

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

const poses = await detector.estimatePoses(image);

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

每個姿態(tài)包含一個置信度得分和一組關(guān)鍵點。PoseNet 和 MoveNet 都返回 17 個關(guān)鍵點,Mediapipe BlazePose 返回 33 個關(guān)鍵點。每個關(guā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 代表圖像中實際關(guān)鍵點位置,如果你想標(biāo)準(zhǔn)化關(guān)鍵點位置,你可以使用

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

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

參考鏈接:

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

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



關(guān)鍵詞: AI

相關(guān)推薦

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

關(guān)閉