资讯 人工智能
此为临时链接,仅用于文章预览,将在时失效

浏览器中的姿态检测:PoseNet 模型

作者:AI研习社-译站
2018/07/10 21:18

雷锋网按:本文为雷锋字幕组编译的技术博客,原标题 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 模型

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 使用,如下:

 <script src="https://unpkg.com/@tensorflow/tfjs"></script>
 <script src="https://unpkg.com/@tensorflow-models/posenet"></script>

或者,在 TypeScript/ES6 项目中使用时,可以通过 npm 安装。

npm install @tensorflow-models/posenet

使用

我们的多姿势检测可以从一副图像中检测出每个姿势。每种方法都有自己的算法和参数集。

关键点

所有的关键点都用部位 ID 标记,每个部位和对应的 ID 如下:

浏览器中的姿态检测:PoseNet 模型

加载预先训练的 PoseNet 模型 

在姿势检测的第一步,将一幅图像输入预先训练过的模型。PoseNet 有一些不同版本的模型,每一个版本都对应一个拥有特定乘数的 MobileNet v1 架构。 在通过模型提供图像时,输出的期望步幅。必须是32、16、8。默认为16。数字越高,速度越快,准确度越低,反之亦然。  

const net = await posenet.load(multiplier);

输入

默认情况下, PoseNet 加载模型时使用乘数 1.01 。拥有超强 GPU 的计算机建议采用该值。如果计算机拥有中等或低端 GPU,建议乘数采用0.75。移动设备建议使用0.5。

单人姿势检测

单人姿势检测是两种算法中最简单也是运行最快的。理想的使用场景是图像中只有一个人的情况。缺点是,如果图片中有多个人时,来自不同的人的关键点有可能会被检测为一个人的。例如,1# 人的左胳膊和 #2 人的右膝盖有可能被算法认为属于同一个人。

const pose = await poseNet.estimateSinglePose(image, imageScaleFactor, flipHorizontal, outputStride);

输入

返回值 

它返回一个带有信心值的姿势和一个由部位id索引的关键点数组,每一个关键点都有一个分值和一个位置信息。  

应用范例 

通过脚本标记

浏览器中的姿态检测:PoseNet 模型

通过 NPM

浏览器中的姿态检测:PoseNet 模型

产生输出:

浏览器中的姿态检测:PoseNet 模型

多重姿势检测

多重姿态检测可以解码图像中的多个姿势。比单个姿势检测算法复杂得多,并且运行速度稍慢,但却在图像中有多人的情况下很有优势,检测到的关键点不太可能与错误的姿势相关联。即使用于检测单个人的姿势, 这种算法也可能更可取。因为当多个人出现在图像中时,两个姿势被连接在一起的意外就不会发生。 它使用快速贪婪解码算法,这个算法来自于 PersonLab 的研究论文:使用 Bottom-Up、Part-Based 和 Geometric Embedding 模型的人体姿势检测和实例分割。

const poses = await net.estimateMultiplePoses(image, imageScaleFactor, flipHorizontal, outputStride, maxPoseDetections, scoreThreshold, nmsRadius);

输入

返回值

它的返回值由姿势数组构成,每个姿势包括一个信心值和一组由部位 ID 索引的关键点,每一个关键点都有一个分值和位置信息。

通过脚本标记

浏览器中的姿态检测:PoseNet 模型

通过 NPM

浏览器中的姿态检测:PoseNet 模型

输出:

浏览器中的姿态检测:PoseNet 模型

开发 Demo

Demo 的运行细节包含在 demos/文件夹。

关于作者

这段代码归 Google 所有。

博客原址:https://github.com/llSourcell/pose_estimation

浏览器中的姿态检测:PoseNet 模型

雷锋网雷锋网

长按图片保存图片,分享给好友或朋友圈

浏览器中的姿态检测:PoseNet 模型

扫码查看文章

正在生成分享图...

取消
相关文章
Baidu
map