专栏首页磐创AI技术团队的专栏谷歌发布人体图像分割工具BodyPix 2.0,支持多人识别,可在iPhone上流畅运行

谷歌发布人体图像分割工具BodyPix 2.0,支持多人识别,可在iPhone上流畅运行

作者:晓查、发自、凹非寺

转自:量子位(QbitAI),未经允许不得二次转载

今天,Google官方推出了使用TensorFlow.js的人体图像分割工具BodyPix 2.0,对该工具进行了一次重大升级,加入多人支持,并提高了准确率。

BodyPix能将图像分割为属于人的和不属于人的像素,属于人的部分可以进一步分类为二十四个身体部位之一。

BodyPix可以直接在浏览器中运行,开发者只需加入几行代码,即可与电脑或手机的摄像头配合使用。

在使用默认设置的情况下,BodyPix可以在15寸MacBook Pro上以25 fps的速度估计,并渲染人和身体部位的分割。而在iPhone X上,BodyPix能以21 fps的速度进行估计。

BodyPix于今年2月推出,本次2.0版的主要更新有:对多人图像的支持、增加基于ResNet-50的模型、新的API、权重量化以及对不同尺寸图像的支持。

功能演示

在项目的GitHub主页上,TensorFlow给出了BodyPix 2.0软件的一些基本用法演示,还有网页版Demo供用户体验。

人像分割

对于给定具有一个或多个人的图像,人像分割可预测所有人的分割。segmentPerson返回PersonSegmentation,对应于图像中人物分割的对象。

segmentPerson默认不会在不同的个人之间消歧义。因此如果您需要对不同的人进行区分,请使用segmentMultiPerson,不过引入此方法会导致运行速度变慢。

以上结果返回的是一组0和1的数组,用于表示该像素点是否属于人。

身体部位细分

BodyPix的segmentPersonParts方法可以预测所有人的24个身体部位分割。

PartSegmentation会所有合并的人,返回值是每个像素与身体部位相对应的编码。同样的,如果需要区分多人,请使用segmentMultiPersonParts。

身体不同部位对应的编码如下表所示:

把结果输出到图像上

BodyPix还包含其他实用程序功能,可以将输出结果与原始图像合成,得到你所需的渲染图像。

bodyPix.toMask可以给人和背景加上一层蒙版,指定渲染像素的颜色和不透明度。

bodyPix.toColoredPartMask可以给人体部位分割加上一个24色的颜色数组,每个身体部位都对应着数组中的一个颜色。

以上是BodyPix的基础功能的用法。

既然BodyPix可以区分出人体和背景 ,我们就可以用它实现实时的背景虚化,调用的API方法是bodyPix.drawBokehEffect

利用BodyPix识别出身体不同部位的功能,可以调用bodyPix.blurBodyPart给人脸打上马赛克。

此外还有更多的图像绘制API,在此就不一一列举了。

安装方法

BodyPix使用非常简便,用户可以将其与脚本标签一起嵌入HTML使用:

<html>   
   <body> 
        <!-- Load TensorFlow.js --> 
        <script src="https://cdn.jsdelivr.net/npm/@tensorflow/tfjs@0.13.3"></script> 
        <!-- Load BodyPix -->
        <script src="https://cdn.jsdelivr.net/npm/@tensorflow-models/body-pix"></script> 
            bodypix.load().then(function(net) {
                // BodyPix model loaded
            });
        </script>
    </body>
</html>

或者通过npm方式安装:

npm install @tensorflow-models/body-pix

然后使用es6模块导入:

import * as bodyPix from '@tensorflow-models/body-pix'; 

async function loadAndUseBodyPix() {
   const net = await bodyPix.load();
   // BodyPix model loaded
}

如何让BodyPix运行更快

BodyPix带有不同尺寸的模型,具有不同的性能。通过设定模型的大小和输出步长,可以在运行速度和准确性之间进行权衡。

默认情况下,BodyPix加载的是0.75倍的MobileNetV1架构,适合中低端GPU的计算机使用,而导入0.50倍的模型可以用于移动设备。

const net = await bodyPix.load({
  architecture: 'MobileNetV1',
  outputStride: 16,
  multiplier: 0.75,
  quantBytes: 2
});

倍率的数值越大,神经网络中层的尺寸也越大,准确率更高、推理速度更慢。不同倍率模型的性能对比如下:

对于具有更强大GPU的计算机,官方建议使用ResNet架构,这一部分也是2.0版加入的新功能

const net = await bodyPix.load({
  architecture: 'ResNet50',
  outputStride: 32,
  quantBytes: 2
});

原理简介

BodyPix的核心是执行人体分割的算法,对输入图像的每个像素执行二进制决策,以估计该像素是否属于某个人。

图像通过MobileNet网络馈送,并且使用S型激活函数将输出转换为0到1之间的值。

为了估计身体部位的分割,BodyPix使用相同的MobileNet表示,但是这次通过预测额外的24个通道输出张量P来重复上述过程,其中二十四是身体部位的数量。每个通道编码身体某部位是否存在的概率。

输出张量P中有24个通道,因此需要在24个通道中找到最佳部分。在推断期间,对于输出身体部位张量P的每个像素位置(u,v),body_part_id使用以下公式选择属于第i个部位概率最高的像素:

这将产生一个二维图像,每个像素都包含一个整数,该整数表示该像素属于哪个身体部位。通过将值设置为-1,可以把不属于人体的部分剔除掉。

本文分享自微信公众号 - 磐创AI(xunixs),作者:关注前沿科技

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-11-21

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 磐创AI-聊天机器人 | BotMind 亿级聊天数据,千万级知识库,自研深度学习 NLP 工具集

    磐创AI-聊天机器人 BotMind 亿级聊天数据,千万级知识库,自研深度学习 NLP 工具集。

    磐创AI
  • 计算机视觉模型效果不佳,你可能是被相机的Exif信息坑了

    为何别人用得好好的人脸识别、目标检测开源模型,到了初学者手中,效果却惨不忍睹?其中原因可能很多,有时候这个原因很“愚蠢”。

    磐创AI
  • 变分自编码器如何淘汰经典的推荐系统

    随着信息过载的增加,我们不可能通过观看海量的内容来获取我们想要的项目。推荐系统可以来拯救我们。推荐系统是一种模型,通过向用户展示他们可能感兴趣的内容,帮助他们探...

    磐创AI
  • 谷歌发布人体图像分割工具BodyPix 2.0,支持多人识别,可在iPhone上流畅运行

    今天,Google官方推出了使用TensorFlow.js的人体图像分割工具BodyPix 2.0,对该工具进行了一次重大升级,加入多人支持,并提高了准确率。

    代码医生工作室
  • 谷歌发布人体图像分割工具BodyPix 2.0,支持多人识别,可在iPhone上流畅运行

    今天,Google官方推出了使用TensorFlow.js的人体图像分割工具BodyPix 2.0,对该工具进行了一次重大升级,加入多人支持,并提高了准确率。

    OpenCV学堂
  • MAVEN简介之——settings.xml

    Maven的settings.xml配置了Maven执行的方式,像pom.xml一样,但是它是一个通用的配置,

    小忽悠
  • MAVEN简介之——settings.xml

    Maven的settings.xml配置了Maven执行的方式,像pom.xml一样,但是它是一个通用的配置, 不能绑定到任何特殊的项目。它通常包括本地仓库地址...

    小忽悠
  • 谷歌翻译区分性别,进一步减少AI偏见

    谷歌正在努力减少翻译中的性别偏见,从本周开始,用户获得的翻译将女性和男性区分开来,例如,土耳其语中的“o bir doktor”翻译成英语,会分为“她是医生”和...

    AiTechYun
  • C++版 - 剑指offer 面试题8:旋转数组的最小数字 题解

    题目:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个已从小到大排好序的数组的一个旋转,输出旋转数组的最小元素。例如数组{3, 4, ...

    Enjoy233
  • Spark的三种集群deploy模式对比

    Spark有三种集群部署模式,或者叫做集群管理模式。分别是standalone,YARN和Mesos。这三种模式其实都是master/slave模式。 那么在...

    小莹莹

扫码关注云+社区

领取腾讯云代金券