假期不能出门,深度学习和TensorFlow助您去世界各地到此一游

    今年的春节过的实在是太糟心了。元峰活了二十多年,第一次以这种模式过春节。我们在家宅,医护人员却在夜以继日的辛勤工作。首先,我们向医护人员和各行各业奋战在最前线的工作人员致以最崇高的敬意。他们在前线为我们冲锋陷阵,保障了我们的健康和生活。而我们,最好的选择就是安安心心的在家呆着,就也是我们能为社会做的最好的贡献了。

      按说,大门一关,被窝一钻,这是多少年轻人求之不得、梦寐已求的生活了。可是,真在家憋的久了,好多人可真是闷坏了。这不,在网络上,网友纷纷晒出他们在家解闷的搞笑娱乐方式。我们筛选几个给大家看看,看完只能说:高手真的在民间啊。下面是一位网友在家各种花式的”躺尸“动作。

      下面这位网友可能感觉在床上躺着不过瘾,已经开始在地上“学蛆爬”了。

      还有的网友,在家实在无聊,又不能出门,异想天开的他在家开启了钓鱼模式。

      更有好多闷坏的网友则开启了居家旅游模式,在网友眼里,床——床头山,阳台——阳台峰,淋浴喷头——大瀑布,厨房——美食街,不过自己逛景点还是不过瘾,有些网友则更上一层楼,在家做起了导游:

        不得不说,新型冠状病毒的爆发,让本来应该很美好的春节假期,变得异常无趣。往年这个时候,我们应该在走亲访友,或者在美丽的景点打卡放松心情的。

        可以说,这个春节假期,我国数亿人的一大“矛盾”是——人民群众日益增长的需要出门走亲访友、游玩打卡的需求和冠状病毒导致的只能宅在家的矛盾。作为一名深度学习炼丹侠,应该时刻想着解决人民群众的痛点。这不,借助TensorFlow开源的人像分割模型,我们可以很容易的做到,让人民群众足不出户,走遍名山大川。

        在介绍技术原理之前,我们先看一下效果。大家也可以直接进入aizoo.com/bodypix.html直接体验。

        下面是一个页面效果图

        页面操作非常简单方便,您只需要选择一张包含人像的图像,和一张您想要的风景图,深度学习图像分割模型就可以自动的将人像分割出来,贴合到您选择的背景图上。如上图所示,一位在农村院子里坐着的美少女,算法可以自动抠出其人像,进行背景替换,然后摇身一变,这位美少女就坐在一片春意盎然的油菜花田了。

          同样这位美少女,我们给它置换各种不同的背景,真正实现了足不出户,打卡世界各地了。

          这是来到了非洲大草原——两只狮子旁边。

          坐到了美丽的湖泊边

          或者瞬间飞到埃及金字塔旁边来个到此一游

        最后,我们来个梅西“碉堡了”的图镇楼

        大家也可以选择打开摄像头,来个实时的人像分割,下图是作者自己打开了摄像头实时分割的效果图(给自己打个码😄)。你可以任选背景,瞬间各地穿越。也可以选择通过本地图片上传或者输入图片URL来上传图片

            好了,效果图就展示这几张吧。具体的大家可以自己来aizoo.com体验。页面操作非常简单,一目了然。

下面,我们简单的介绍一下技术原理。

        首先,这个demo是在您本地浏览器跑的,我们使用了TensorFlow JS库(简称tfjs),这是TensorFlow专门为在浏览器里面实现深度学习的训练和推理而设计的库。有了tfjs,我们就可以将模型下载到您本地的浏览器里面,实现数据的本地计算,不再需要将数据传回到后台服务器计算,这样一大好处是基本消灭了数据传输的延迟,以及完全的数据隐私性;缺点是在您的浏览器里计算,计算速度完全取决于用户的电脑或手机配置的高低。如果您使用的电脑安装有Nvidia的中高端显卡,那您的运算速度快到飞起,如果是手机或者老旧的电脑,速度可能就比较慢一些,毕竟有些深度学习模型运算量还是挺大的。大家可以在不同配置的手机上运行aizoo.com不同的demo来比较一下速度。

        本项目使用了TensorFlow官方发布的bodypix2模型,谷歌官方也给出了在线体验的demo,这是一个典型的图像分割模型,bodypix2支持分割人像的前景和背景,也支持识别人体的24个部位,如下图所示。

        区分人体的24个部位模式,包括左脸、右脸、左肩、右肩、左腿、右腿等24个身体部位,如下图所示。

            只区分人像和背景模式,即只识别哪里是背景,哪里人像,如下图所示。

        其实,bodypix2相比v1版bodypix,增加了人体的关键点,所以说bodypix2其实是一个多任务模型(同时完成人像分割和人体关键点检测)。

          Bodypix2的人像分割模型是一个类似FCN模型的架构,不过相比原版的FCN,谷歌团队将backbone模型从VGG换成了MobileNet V1和ResNet50。一个精简版的FCN模型结构示意图如图所示:

          如果是只需要区分人像和背景,那么Classes是1,如果要区分人体的24个部位,那么Classes数目就是24,最后一层使用Sigmoid激活函数,输出值作为身体部位的概率。

        在谷歌提供的BodyPix2模型,分别提供了MobileNet V1和ResNet50两种backbone,而每种backbone又有多个版本,下表是两种backbone网络的配置信息:

          MobileNet 模型的multiplier参数是对于每个卷积层通道数目的一个超参数,对于最常用的MobileNet V1模型,一般multiplier等于1,为了精简模型,对于标准的MobileNet V1模型,每组卷积通道数目乘以0.75或者0.5,可以降低每组卷积的通道数目,从而减小模型体积,提高运算速度,但也会导致精度略微降低。

          output stride参数控制了分割模型最后的上采样倍数,数值越小,模型精度越高,但是速度也会略慢。

          对于quant bytes,则是模型量化的字节数,普通的权重一般是float32存储(4字节),为了降低模型体积,提高运算速度,会对权重进行量化,量化为2字节或者1个字节来表示。

        为了平衡速度和精度,我们使用了MobileNet V1作为backbone,multiplier为0.75,output stride为16,2字节量化。

        另外,我们发现谷歌发布的ResNet50 作为backbone的分割网络,效果竟然比MobileNet V1的还要差一些。这点让人难以理解。按理说,ResNet50(卷积部分参数量23.6M)的特征提取能力要强于MobileNet V1(卷积部分参数量3.2M)。

        使用Bodypix将人像分割出来后,剩下的工作就比较简单了,只需要把人像部分粘贴到背景图,就大功告成了。

        最后,欢迎大家来aizoo.com体验跑在您浏览器的人像分割模型,实现您足不出户走遍世界的梦想。

          不过,搞笑归搞笑,在重大疫情期间,我们居家隔离,是早日控制新型冠状病毒的最好方式。如果您仍然憋不住,想神游世界各地,那么来aizoo.com直接到世界各地打卡吧。

          希望我们早日彻底战胜新型冠状病毒。#中国加油#

人像分割体验Demo链接:https://aizoo.com/bodypix.html

TensorFlow Bodypix2 Demo链接:https://storage.googleapis.com/tfjs-models/demos/body-pix/index.html

Bodypix2介绍文档:https://blog.tensorflow.org/2019/11/updated-bodypix-2.html

        我是元峰,互联网+AI领域的创业者,欢迎扫描下方二维码,或者直接在微信搜索“AIZOO”关注我们的公众号AIZOO。如果您是有算法需求,例如目标检测、人脸识别、缺陷检测、行人检测的算法需求,欢迎添加我们的微信号AIZOOTech与我们交流,我们团队是一群算法工程师的创业团队,会以高效、稳定、高性价比的产品满足您的需求。如果您是算法或者开发工程师,也可以添加我们的微信号AIXZOOTech,请备注学校or公司名称-研究方向-昵称,例如“西电-图像算法-元峰”,小助手会拉您进我们的算法交流群,一起交流算法和开发的知识,以及对接项目。

        欢迎在微信搜索AIZOO关注我们的公众号“AIZOO”

      小助手微信号“AIZOOTech”


https://www.jianshu.com/p/b6478a4aa190

「点点赞赏,手留余香」

    还没有人赞赏,快来当第一个赞赏的人吧!
0 条回复 A 作者 M 管理员
    所有的伟大,都源于一个勇敢的开始!
欢迎您,新朋友,感谢参与互动!欢迎您 {{author}},您在本站有{{commentsCount}}条评论