0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Move Mirror使用摄像头捕捉你的动作,实时匹配和你动作相近的图像

zhKF_jqr_AI 来源:未知 作者:李倩 2018-07-22 10:21 次阅读

Google刚刚发布了一个有趣的AI应用,Move Mirror。Move Mirror使用摄像头捕捉你的动作,并实时地在8万张图像中匹配和你的动作相近的图像。

在发布Move Mirror的同时,Google Creative Lab的Jane Friedhoff和Irene Alvarado发表长文,分享了打造Move Mirror的经验。

PoseNet

几个月前,Google Creative Lab有了制作Move Mirror的想法。显然,这个应用的核心是位姿估计(pose estimation)模型。

Google自家就在CVPR 2017上提交了PoseNet的论文。PoseNet可以检测多人的2D位姿,并在COCO数据集的关键任务上达到了当前最优表现。

表现出色,又是自家出品,所以Move Mirror团队顺理成章地选择了PoseNet作为应用背后的模型。在原型开发阶段,团队通过简单的web API访问PoseNet模型,这极大地简化了原型开发流程。只需向内部的PoseNet API接口发送一个HTTP POST请求,提交base64编码的图像,API就会传回位姿数据(基本无延迟)。若干行JavaScript代码,一份API密钥,搞定!

不过,考虑到不是所有人乐意把自己的图像发送到一个中央服务器,顺便也为了减少对后端服务器的依赖,团队决定把PoseNet移植到TensorFlow.js上。TensorFlow.js让用户可以在他们自己的浏览器中运行机器学习模型——无需服务器。

在Google Brain的TensorFlow.js团队成员Nikhil Thorat、Daniel Smilkov,以及Google研究员George Papandreou、Tyler Zhu、Dan Oved(Papandreou和Zhu是PoseNet的作者)的帮助下,移植工作顺利完成了。

PoseNet单人位姿检测过程

我们将根据上面的示意图简单介绍PoseNet的位姿检测算法。我们看到,图中标明了网络架构是MobileNet。实际上,在PoseNet的论文中,研究人员同时训练了ResNet和MobileNet网络。尽管基于ResNet的模型精确度更高,但对实时应用来说,较大的尺寸和较多的网络层会是页面加载时间和推理时间不够理想。因此,TensorFlow.js上的PoseNet使用了MobileNet模型。

网络输出关键点热图和偏移向量。关键点热图用于估计关键点的位置,而偏移向量则用来在热图的基础上进一步预测关键点的精确位置。

限于篇幅,我们这里不介绍多人位姿估计算法的细节。和单人位姿估计算法相比,多人位姿估计算法的主要差别在于使用了贪婪方法分组关键点,具体而言,使用了Google在2018年发表的PersonLab论文中的高速贪婪解码算法。

构建数据集

巧妇难为无米之炊。虽然PoseNet已经解决了位姿估计问题,但为了根据用户的位姿查找匹配的图像,首先要有图像。图像要符合以下两个要求:

多样性为了更好地匹配用户做出的各种各样的动作,图像的位姿需要尽可能多样化。

全身像从用户体验的一致性出发,决定只使用全身像。

最终,团队选择了包含多种动作,不同体型、肤色、文化的一组视频,将其切分为8万张静止图像。使用PoseNet处理这些图像,并储存相应的位姿数据。

你可能注意到,不是所有的图像都能正确解析位姿,所以丢弃了一些图像

位姿匹配

PoseNet的位姿数据包括17个关键点的坐标,以及相应的置信度。

为了匹配关键点的相似度,很自然的一个想法是将17个关键点转换为向量,那么位姿匹配问题就转换为了高维空间中的向量相似性问题。这一问题有现成的余弦距离方案可用。

将JSON格式的关键点数据转换为向量

余弦相似度

如果你不熟悉余弦相似度,这里我们简单温习下这一概念。余弦相似度测量两个向量的相似程度:基本上,它测量两个向量之间的夹角,如果两个向量方向正好相反,则返回-1,如果两个向量方向一致,则返回1。重要的是,它只测量向量的方向,而不考虑长度。

图片来源:Christian Perone

尽管我们谈论的是向量和角度,余弦相似度并不限于直线和图。例如,余弦相似度可以得到两个字符串的相似度数值。(如果你曾经使用过Word2Vec,你可能已经间接地使用过余弦相似度。)事实上,余弦相似度是一个极其有效的将高维向量的关系约减至单个数字的方法。

温习了余弦相似度的概念之后,让我们回到之前的话题。理论上,直接将关键点数据转为向量后,就可以比较其余弦相似度了。实际上,还需要处理一些细节,这是因为数据集中的图像尺寸大小不同,不同的人也可能出现在图像的不同局部。

具体而言,进行了如下两项额外处理,以便保持比较的一致性:

缩放根据每个人的包围盒裁剪图片,然后缩放至固定大小。

标准化L2正则化向量(使分量的平方和等于1)。

L2正则化向量

可视化以上两个处理步骤:

最终,根据下式计算向量间的距离:

加权匹配

上面的匹配算法好像缺了点什么?还记得我们之前提到的吗?

PoseNet的位姿数据包括17个关键点的坐标,以及相应的置信度。

左肘在画面中清晰可见,置信度较高;右肩在画面中不可见,置信度较低

上面的匹配算法根本没有考虑置信度呀。显然,置信度是很重要的信息。为了得到更准确的结果,我们应该给置信度高的关键点较高的权重,给置信度低的关键点较低的权重。换句话说,增强置信度高的关键点对相似度的影响,削弱置信度低的关键点对相似度的影响。

Google研究员George Papandreou和Tyler Zhu给出了将置信度纳入考量后的距离公式:

上式中,Ck为第k个关键点的置信度,xyk为第k个关键点的x、y坐标(经过缩放、标准化等处理)。

加权匹配提供更精确的结果。即使身体的部分被遮挡或位于画面之外,仍然能够匹配。

优化匹配速度

还记得吗?总共有8万张图像!如果采用暴力搜索法,每次匹配需要计算8万次距离。这对于实时应用来说不可接受。

为了优化匹配速度,需要将8万个位姿数据以某种有序的数据结构存储,这样,匹配的时候就可以跳过那些明显距离很远的位姿数据,从而大大加速匹配进程。

Move Mirror选用的数据结构是制高点树(vantage-point tree,简称VP树)。

制高点树

简单温习下制高点树这一数据结构。

图片来源:Data Structures for Spatial Data Mining

我们在数据点中选取一点(可以随机选取)作为根节点(上图中为5)。我们绕着5画一个圈,将空间分割成圈内和圈外两部分。接着我们在圈内、圈外各选一点作为制高点(上图中为7和1)。接着,绕着每个制高点各画一个圈,同样在圈内、圈外各选一点……以此类推。这里的关键在于,如果我们从点5开始,然后发现7比1更接近目标,那么我们就可以跳过1的所有子节点。

关于制高点树的更多细节,可以参阅fribbels.github.io/vptree/writeup 使用了制高点树(javascript库vptree.js)之后,匹配得以在大约15ms内完成,对实时应用而言,这一数字很理想。

Move Mirror仅仅返回最匹配用户位姿的图像。不过,通过遍历制高点树,不难返回更多结果,比如最接近的10张或20张图像。这可以用来制作调试工具,发现数据集的问题。

Move Mirror调试工具

结语

Move Mirror团队期待能看到更多类似的有趣应用,比如匹配舞蹈动作,匹配经典电影片段。或者反向操作,基于位姿估计帮助人们在家中练习瑜伽或者进行理疗。

如果你想亲自尝试Move Mirror效果:g.co/movemirror

如果你也想基于TensorFlow.js上的PoseNet制作应用:tensorflow/tfjs-models/posenet

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Google
    +关注

    关注

    5

    文章

    1710

    浏览量

    56782
  • 机器学习
    +关注

    关注

    66

    文章

    8095

    浏览量

    130516
  • 数据集
    +关注

    关注

    4

    文章

    1176

    浏览量

    24340

原文标题:魔镜炼成记:Google位姿估计应用Move Mirror架构与实现

文章出处:【微信号:jqr_AI,微信公众号:论智】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    网络摄像头监控的系统优势

    现有的网络就可以使用,这都是网络摄像头的优势之处。  系统优势  基于网络摄像头的系统具有如下优点:  先进性:利用现有的综合布线网络传输图像,进行实时监控系统所需的前端设备少,连线简
    发表于 03-25 15:26

    STM32和ARM谁用来开发摄像头图像的远程传输的效果好点?

    STM32和ARM谁用来开发摄像头图像的远程传输的效果好点?为什么呢?我想实现摄像头的拍摄图像通过wifi远程传输给电脑的labview的界面上,实现
    发表于 08-04 22:03

    【转载分享】USB摄像头采集图像

    `如果有USB摄像头,就是随便的那种。平时QQ视频的就可以了(笔记本上自带的摄像头,也可以),那你就可以用LabVIEW进行图像采集了。注意:由于LabVIEW8.6是个神奇的版本,
    发表于 03-02 11:36

    【视频教程】LabVIEW图像处理--实时USB摄像头颜色识别

    采集USB的图像数据。d)如何结合VISION助手代码和USB摄像头,修改为USB摄像头实时识别视频观看地址:https://v.qq.com/x/page/f0364acbprs.h
    发表于 01-08 22:26

    求matlab摄像头实时跟踪的源程序

    最近在学习用matlab摄像头进行运动物体的实时跟踪,但是有很多问题,希望得到帮助。今天刚好在优酷里面看见了一个叫matlab摄像头视频实时处理示例的视频,里面直接可以用matlab
    发表于 07-21 09:47

    USB摄像头怎么调图像效果?

    有没有做USB摄像头的,会调图像效果的?
    发表于 11-14 16:38

    如何从摄像头中获取图像并保存和实时显示

    for a pressed keycv2.waitKey(0)同样只比前面获取USB摄像头图像数据多了一点点代码,非常神奇吧,这样如果在开发过程中需要用摄像头来获取相关的
    发表于 09-25 15:15

    labview控制摄像头实时采集图像的程序怎么改成通过单片机控制摄像头在labview上显示?

    这只是一个labview控制摄像头实时采集图像的程序,我想把它改成通过单片机控制摄像头在labview上显示该怎么改?
    发表于 10-18 10:16

    【案例分享】机器视觉应用的摄像头设计

    本文将探讨机器视觉应用的 CMOS 图像感应器技术及架构要求。此外,还将详细分析机器视觉的基本组件,摄像头为满足应用需求需要哪些条件,以及如何设计出可满足各种机器视觉应用需求、同时又能在图像质量
    发表于 07-19 04:30

    回收手机摄像头,收购摄像头芯片

    芯片,国外的有索尼,OV,镁光,联咏,安霸,国内的有比亚迪微,格科微,锐芯微,思比科,中星微等等,这些品牌的图像传感器我们都高价回收。全新的感光芯片,摄像头模组,拆机的CCD板,拆机的摄像头,我们统统
    发表于 07-14 17:53

    【FPGA DEMO】Lab 4:摄像头HDMI显示(高速--HDMI&摄像头)

    `项目名称:摄像头HDMI显示。具体要求:摄像头采集的视频图像数据通过HDMI实时显示。 系统设计:Perf-V开发板可以连接高速口——HDMI&
    发表于 07-30 15:21

    如何读取摄像头图像的数据?

    如何读取摄像头图像的数据?
    发表于 11-08 07:49

    如何用VideoCapture进行USB摄像头的视频捕捉

    为什么用VideoCapture进行USB摄像头的视频捕捉会失败呢?如何用VideoCapture进行USB摄像头的视频捕捉呢?
    发表于 02-14 07:25

    基于惯性传感器系统的动作捕捉技术

    惯性式动作捕捉系统采集到的信号量少,便于实时完成姿态跟踪任务,解算得到的姿态信息范围大、灵敏度高、动态性能好;对捕捉环境适应性高,不受光照、背景等外界环境干扰,并且克服了光学动捕系统
    的头像 发表于 05-25 17:40 1.8w次阅读

    GM系列动作捕捉相机阐述

    的灰度图像数据。通过软件插件输出的三维数据则可以无缝对接Unreal Engine, Unity, Motion Builder、Maya、3Dmax等主流三维制作软件,让里面的三维模型角色随动起来。 动作捕捉相机内置姿态传感器
    发表于 09-05 16:58 773次阅读