0
本文作者: AI研習(xí)社-譯站 | 2018-07-10 21:18 |
雷鋒網(wǎng)按:本文為雷鋒字幕組編譯的技術(shù)博客,原標(biāo)題 Pose Detection in the Browser: PoseNet Model,作者為 Siraj Raval 。
翻譯 | 趙朋飛 程煒 整理 | 凡江
概述
這里附上 Youtube 上這段視頻的源代碼,作者是 Siraj Raval:https://youtu.be/9KqNk5keyCc
這個(gè)資源包括一個(gè)稱作 PoseNet 的獨(dú)立模型,一些 Demo,可在瀏覽器上使用 TensorFlow.js 實(shí)時(shí)運(yùn)行人體姿態(tài)檢測。
點(diǎn)擊這里運(yùn)行 Demo!https://storage.googleapis.com/tfjs-models/demos/posenet/camera.html
PoseNet 可以用于檢測單個(gè)或多個(gè)姿勢,意味著有一個(gè)版本的算法可以檢測一幅圖像或視頻中的單個(gè)人,而另一個(gè)版本的算法可以檢測視頻或圖像中的多個(gè)人。
參考這篇博客(https://medium.com/tensorflow/real-time-human-pose-estimation-in-the-browser-with-tensorflow-js-7dd0bc881cd5),可以了解 PoseNet 在 Tensorflow.js 運(yùn)行的更高層級的描述。
為追蹤問題,我們使用 tensorflow/tfjs Github repo。
安裝
你可以將其作為獨(dú)立的 ES5 使用,如下:
<script src="https://unpkg.com/@tensorflow/tfjs"></script>
<script src="https://unpkg.com/@tensorflow-models/posenet"></script>
或者,在 TypeScript/ES6 項(xiàng)目中使用時(shí),可以通過 npm 安裝。
npm install @tensorflow-models/posenet
使用
我們的多姿勢檢測可以從一副圖像中檢測出每個(gè)姿勢。每種方法都有自己的算法和參數(shù)集。
關(guān)鍵點(diǎn)
所有的關(guān)鍵點(diǎn)都用部位 ID 標(biāo)記,每個(gè)部位和對應(yīng)的 ID 如下:
加載預(yù)先訓(xùn)練的 PoseNet 模型
在姿勢檢測的第一步,將一幅圖像輸入預(yù)先訓(xùn)練過的模型。PoseNet 有一些不同版本的模型,每一個(gè)版本都對應(yīng)一個(gè)擁有特定乘數(shù)的 MobileNet v1 架構(gòu)。 在通過模型提供圖像時(shí),輸出的期望步幅。必須是32、16、8。默認(rèn)為16。數(shù)字越高,速度越快,準(zhǔn)確度越低,反之亦然。
const net = await posenet.load(multiplier);
輸入
multiplier - 可選的值是: 1.01, 1.0, 0.75, 或者 0.50。默認(rèn)選擇 1.01。乘數(shù)是所有卷積操作的深度(通道數(shù))。這個(gè)值對應(yīng)于MobileNet 架構(gòu)和檢查點(diǎn)。值越大,每層的規(guī)模越大。犧牲速度的情況下模型精度越高。將這個(gè)值設(shè)置小,可以提高模型運(yùn)行速度而犧牲準(zhǔn)確性。
默認(rèn)情況下, PoseNet 加載模型時(shí)使用乘數(shù) 1.01 。擁有超強(qiáng) GPU 的計(jì)算機(jī)建議采用該值。如果計(jì)算機(jī)擁有中等或低端 GPU,建議乘數(shù)采用0.75。移動設(shè)備建議使用0.5。
單人姿勢檢測
單人姿勢檢測是兩種算法中最簡單也是運(yùn)行最快的。理想的使用場景是圖像中只有一個(gè)人的情況。缺點(diǎn)是,如果圖片中有多個(gè)人時(shí),來自不同的人的關(guān)鍵點(diǎn)有可能會被檢測為一個(gè)人的。例如,1# 人的左胳膊和 #2 人的右膝蓋有可能被算法認(rèn)為屬于同一個(gè)人。
const pose = await poseNet.estimateSinglePose(image, imageScaleFactor, flipHorizontal, outputStride);
輸入
image - ImageData|HTMLImageElement|HTMLCanvasElement|HTMLVideoElement 輸入網(wǎng)絡(luò)中的圖像
imageScaleFactor - 數(shù)值范圍 0.2 到 1.0,默認(rèn) 0.50。用于在圖像輸入網(wǎng)絡(luò)前調(diào)整圖像比例。這個(gè)值設(shè)置得越小將會縮小圖像,增加速度,但是會犧牲準(zhǔn)確性。
flipHorizontal - 默認(rèn)為 False。 如果姿勢應(yīng)該進(jìn)行水平的翻轉(zhuǎn)/鏡像 。對于視頻默認(rèn)水平翻轉(zhuǎn)的視頻(比如網(wǎng)絡(luò)攝像頭),如果你希望姿勢回到原來正確的方向,改參數(shù)設(shè)置為 True。
outputStride - 在通過模型提供圖像時(shí),輸出的期望步幅。必須是32、16、8。默認(rèn)為16。數(shù)字越高,速度越快,準(zhǔn)確度越低,反之亦然。
返回值
它返回一個(gè)帶有信心值的姿勢和一個(gè)由部位id索引的關(guān)鍵點(diǎn)數(shù)組,每一個(gè)關(guān)鍵點(diǎn)都有一個(gè)分值和一個(gè)位置信息。
應(yīng)用范例
通過腳本標(biāo)記
通過 NPM
產(chǎn)生輸出:
多重姿勢檢測
多重姿態(tài)檢測可以解碼圖像中的多個(gè)姿勢。比單個(gè)姿勢檢測算法復(fù)雜得多,并且運(yùn)行速度稍慢,但卻在圖像中有多人的情況下很有優(yōu)勢,檢測到的關(guān)鍵點(diǎn)不太可能與錯(cuò)誤的姿勢相關(guān)聯(lián)。即使用于檢測單個(gè)人的姿勢, 這種算法也可能更可取。因?yàn)楫?dāng)多個(gè)人出現(xiàn)在圖像中時(shí),兩個(gè)姿勢被連接在一起的意外就不會發(fā)生。 它使用快速貪婪解碼算法,這個(gè)算法來自于 PersonLab 的研究論文:使用 Bottom-Up、Part-Based 和 Geometric Embedding 模型的人體姿勢檢測和實(shí)例分割。
const poses = await net.estimateMultiplePoses(image, imageScaleFactor, flipHorizontal, outputStride, maxPoseDetections, scoreThreshold, nmsRadius);
輸入
image - ImageData|HTMLImageElement|HTMLCanvasElement|HTMLVideoElement 輸入網(wǎng)絡(luò)中的圖像
imageScaleFactor - 數(shù)值范圍 0.2 到 1.0,默認(rèn) 0.50。用于在圖像輸入網(wǎng)絡(luò)前調(diào)整圖像比例。這個(gè)值設(shè)置的越小將會縮小圖像比例,增加速度,但是會犧牲準(zhǔn)確性。
flipHorizontal - 默認(rèn)為 False。 如果姿勢應(yīng)該進(jìn)行水平的翻轉(zhuǎn)/鏡像 。對于視頻默認(rèn)水平翻轉(zhuǎn)的視頻(比如網(wǎng)絡(luò)攝像頭),如果你希望姿勢回到原來正確的方向,改參數(shù)設(shè)置為 True。
outputStride - 在通過模型提供圖像時(shí),輸出的期望步幅。必須是 32、16、8。默認(rèn)為 16。數(shù)字越高,性能越快,準(zhǔn)確度越低,反之亦然。
maxPoseDetections (可選項(xiàng)) - 最大可檢測姿勢數(shù)量,默認(rèn) 5。
scoreThreshold (可選項(xiàng)) - 只返回根部位得分大于或等于這個(gè)值的檢測實(shí)例。默認(rèn)為 0.5。
nmsRadius (可選項(xiàng)) - Non-maximum 抑制部位距離。它必須為正。如果兩個(gè)部位距離小于 nmsRadius 像素,就會相互抑制。默認(rèn)為 20。
返回值
它的返回值由姿勢數(shù)組構(gòu)成,每個(gè)姿勢包括一個(gè)信心值和一組由部位 ID 索引的關(guān)鍵點(diǎn),每一個(gè)關(guān)鍵點(diǎn)都有一個(gè)分值和位置信息。
通過腳本標(biāo)記
通過 NPM
輸出:
開發(fā) Demo
Demo 的運(yùn)行細(xì)節(jié)包含在 demos/文件夾。
關(guān)于作者
這段代碼歸 Google 所有。
博客原址:https://github.com/llSourcell/pose_estimation
雷鋒網(wǎng)雷鋒網(wǎng)
雷峰網(wǎng)原創(chuàng)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見轉(zhuǎn)載須知。