您正在使用IE低版浏览器,为了您的雷峰网账号安全和更好的产品体验,强烈建议使用更快更安全的浏览器
此为临时链接,仅用于文章预览,将在时失效
人工智能 正文
发私信给AI研习社-译站
发送

0

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

本文作者: AI研习社-译站 2018-07-10 21:18
导语: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 模型

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);

输入

  • multiplier - 可选的值是: 1.01, 1.0, 0.75, 或者 0.50。默认选择 1.01。乘数是所有卷积操作的深度(通道数)。这个值对应于MobileNet 架构和检查点。值越大,每层的规模越大。牺牲速度的情况下模型精度越高。将这个值设置小,可以提高模型运行速度而牺牲准确性。

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

单人姿势检测

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

const pose = await poseNet.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索引的关键点数组,每一个关键点都有一个分值和一个位置信息。  

应用范例 

通过脚本标记

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

通过 NPM

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

产生输出:

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

多重姿势检测

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

const poses = await net.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 索引的关键点,每一个关键点都有一个分值和位置信息。

通过脚本标记

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

通过 NPM

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

输出:

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

开发 Demo

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

关于作者

这段代码归 Google 所有。

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

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

雷锋网雷锋网

雷峰网原创文章,未经授权禁止转载。详情见转载须知

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

分享:
相关文章

知情人士

AI研习社(yanxishe.com)译站频道,传播前沿人工智能知识,让语言不再成为学习知识的门槛。(原雷锋字幕组)
当月热门文章
最新文章
请填写申请人资料
姓名
电话
邮箱
微信号
作品链接
个人简介
为了您的账户安全,请验证邮箱
您的邮箱还未验证,完成可获20积分哟!
请验证您的邮箱
立即验证
完善账号信息
您的账号已经绑定,现在您可以设置密码以方便用邮箱登录
立即设置 以后再说