當前位置:
首頁 > 知識 > 瀏覽器中的姿態檢測:PoseNet 模型

瀏覽器中的姿態檢測:PoseNet 模型

本文為雷鋒字幕組編譯的技術博客,原標題 Pose Detection in the Browser: PoseNet Model,作者為 Siraj Raval 。

翻譯 | 趙朋飛 程煒 整理 | 凡江


概述

這裡附上 Youtube 上這段視頻的源代碼,作者是 Siraj Raval:https://youtu.be/9KqNk5keyCc

這個資源包括一個稱作 PoseNet 的獨立模型,一些 Demo,可在瀏覽器上使用 TensorFlow.js 實時運行人體姿態檢測。

點擊這裡運行 Demo!

https://storage.googleapis.com/tfjs-models/demos/posenet/camera.html

PoseNet 可以用於檢測單個或多個姿勢,意味著有一個版本的演算法可以檢測一幅圖像或視頻中的單個人,而另一個版本的演算法可以檢測視頻或圖像中的多個人。

參考這篇博客(https://medium.com/tensorflow/real-time-human-pose-estimation-in-the-browser-with-tensorflow-js-7dd0bc881cd5),可以了解 PoseNet 在 Tensorflow.js 運行的更高層級的描述。

為追蹤問題,我們使用 tensorflow/tfjs Github repo。


安裝

你可以將其作為獨立的 ES5 使用,如下:

或者,在 TypeScript/ES6 項目中使用時,可以通過 npm 安裝。

npminstall@tensorflow-models/posenet


使用

我們的多姿勢檢測可以從一副圖像中檢測出每個姿勢。每種方法都有自己的演算法和參數集。

關鍵點

所有的關鍵點都用部位 ID 標記,每個部位和對應的 ID 如下:

載入預先訓練的 PoseNet 模型

在姿勢檢測的第一步,將一幅圖像輸入預先訓練過的模型。PoseNet 有一些不同版本的模型,每一個版本都對應一個擁有特定乘數的 MobileNet v1 架構。 在通過模型提供圖像時,輸出的期望步幅。必須是32、16、8。默認為16。數字越高,速度越快,準確度越低,反之亦然。

constnet =awaitposenet.load(multiplier);

輸入

multiplier - 可選的值是: 1.01, 1.0, 0.75, 或者 0.50。默認選擇 1.01。乘數是所有卷積操作的深度(通道數)。這個值對應於MobileNet 架構和檢查點。值越大,每層的規模越大。犧牲速度的情況下模型精度越高。將這個值設置小,可以提高模型運行速度而犧牲準確性。

默認情況下,PoseNet 載入模型時使用乘數 1.01 。擁有超強 GPU 的計算機建議採用該值。如果計算機擁有中等或低端 GPU,建議乘數採用0.75。移動設備建議使用0.5。


單人姿勢檢測

單人姿勢檢測是兩種演算法中最簡單也是運行最快的。理想的使用場景是圖像中只有一個人的情況。缺點是,如果圖片中有多個人時,來自不同的人的關鍵點有可能會被檢測為一個人的。例如,1# 人的左胳膊和 #2 人的右膝蓋有可能被演算法認為屬於同一個人。

constpose =awaitposeNet.estimateSinglePose(image, imageScaleFactor, flipHorizontal, outputStride);

輸入

image -ImageData|HTMLImageElement|HTMLCanvasElement|HTMLVideoElement 輸入網路中的圖像

imageScaleFactor- 數值範圍 0.2 到 1.0,默認 0.50。用於在圖像輸入網路前調整圖像比例。這個值設置得越小將會縮小圖像,增加速度,但是會犧牲準確性。

flipHorizontal -默認為 False。 如果姿勢應該進行水平的翻轉/鏡像 。對於視頻默認水平翻轉的視頻(比如網路攝像頭),如果你希望姿勢回到原來正確的方向,改參數設置為 True。

outputStride -在通過模型提供圖像時,輸出的期望步幅。必須是32、16、8。默認為16。數字越高,速度越快,準確度越低,反之亦然。

返回值

它返回一個帶有置信值的姿勢和一個由部位id索引的關鍵點數組,每一個關鍵點都有一個分值和一個位置信息。

應用範例

通過腳本標記

通過 NPM

產生輸出:


多重姿勢檢測

多重姿態檢測可以解碼圖像中的多個姿勢。比單個姿勢檢測演算法複雜得多,並且運行速度稍慢,但卻在圖像中有多人的情況下很有優勢,檢測到的關鍵點不太可能與錯誤的姿勢相關聯。即使用於檢測單個人的姿勢, 這種演算法也可能更可取。因為當多個人出現在圖像中時,兩個姿勢被連接在一起的意外就不會發生。 它使用快速貪婪解碼演算法,這個演算法來自於 PersonLab 的研究論文:使用 Bottom-Up、Part-Based 和 Geometric Embedding 模型的人體姿勢檢測和實例分割。

constposes =awaitnet.estimateMultiplePoses(image, imageScaleFactor, flipHorizontal, outputStride, maxPoseDetections, scoreThreshold, nmsRadius);

輸入

image -ImageData|HTMLImageElement|HTMLCanvasElement|HTMLVideoElement 輸入網路中的圖像

imageScaleFactor -數值範圍 0.2 到 1.0,默認 0.50。用於在圖像輸入網路前調整圖像比例。這個值設置的越小將會縮小圖像比例,增加速度,但是會犧牲準確性。

flipHorizontal -默認為 False。 如果姿勢應該進行水平的翻轉/鏡像 。對於視頻默認水平翻轉的視頻(比如網路攝像頭),如果你希望姿勢回到原來正確的方向,改參數設置為 True。

outputStride -在通過模型提供圖像時,輸出的期望步幅。必須是 32、16、8。默認為 16。數字越高,性能越快,準確度越低,反之亦然。

maxPoseDetections(可選項) - 最大可檢測姿勢數量,默認 5。

scoreThreshold(可選項) - 只返回根部位得分大於或等於這個值的檢測實例。默認為 0.5。

nmsRadius(可選項) - Non-maximum 抑制部位距離。它必須為正。如果兩個部位距離小於 nmsRadius 像素,就會相互抑制。默認為 20。

返回值

它的返回值由姿勢數組構成,每個姿勢包括一個置信值和一組由部位 ID 索引的關鍵點,每一個關鍵點都有一個分值和位置信息。

通過腳本標記

通過 NPM

輸出:


開發 Demo

Demo 的運行細節包含在 demos/文件夾。


關於作者

這段代碼歸 Google 所有。

博客原址:

https://github.com/llSourcell/pose_estimation

新人福利

關注 AI 研習社(okweiwu),回復1領取

【超過 1000G 神經網路 / AI / 大數據資料】

CVPR 2018論文:「隨心所欲」換裝換姿態

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 AI研習社 的精彩文章:

計算機視覺領域的王者與榮耀
深度學習訓練數據不平衡問題,怎麼解決?

TAG:AI研習社 |