卓伟:腾讯云人脸融合技术构建

2019-04-23 10:28:40 浏览数 (2)

4月13日结束的计算机视觉沙龙圆满落幕。本期沙龙从构建图像识别系统的方法切入,讲述腾讯云人脸识别、文字识别、人脸核身等技术能力原理与行业应用,为各位开发者带来了一场人工智能领域的技术开拓实践之旅。下面是卓伟老师关于腾讯云人脸融合技术构建的总结。

讲师介绍:卓伟,毕业于华中师大计算机系,现在腾讯云大数据与人工智能产品中心AI应用研发组担任高级工程师,负责智能图像相关AI产品,多年互联网和电信领域开发经验,致力于智慧零售、智慧园区、安防等行业和轻娱乐场景的人工智能落地。

其实人脸融合整体来说是一种偏娱乐化的产品,这个图大家看了之后应该非常有印象,这是2017年国庆节,人民日报和腾讯联合推出了一个军装照的小应用,当时上线了三天累计访问量已经超过8亿,独立访客也有1点多亿。这个活动的背后,实际上就是一个人脸融合的常见应用,把自己的照片与模板进行融合。

这里面当然不仅仅是人脸融合,它的调用量这么大,还有高并发的上传、下载、智能分析等等这些技术在里面。什么是人脸融合?说简单点就是换脸,自己的照片与底图的照片进行换脸,稍微专业一点说,这里面涉及到一些人脸的算法,比如这里面通过人脸识别的算法和深度学习的引擎,和这个照片进行一个人脸的检测和特征的提取,之后根据这个特征进行一个融合,最终生成的照片,既像模特又像自己。

人脸融合主要用在什么场景?刚才说的主要是偏娱乐化的,比如一些活动营销,还有游戏、影视的角色扮演这些的形象打造,还有我们经常遇到的,我们在朋友圈里大家都玩的个性化的形象的扮演,后面我会分四个case简单给大家介绍一下常用的应用场景。

比如第一个场景,主要是推广自己的一些品牌,江小白这个品牌大家应该都非常熟悉,它是主打年轻人市场,它当时的活动是寻找世界上另外一个我,它通过这个活动与十年前的自己面对面约酒,或者你有酒我有故事”,活动本身非常契合江小白的品牌形象,年轻人也乐于去传播这样的应用。

后面是2019年新年的时候吴晓波“预见2019·国运70”的活动,主办方采用一组由工人、农民、军人、科学家、学生等角色组成的历史人物素材底图,朋友圈的传播本身就对活动起到很好的引流作用。

还有一个活动,四六级考试的时候,上传自己的照片,每个人都变成一个开运法师,等于借助一些热点的事件,或者一定范围的人群造成爆点、传播。当然这个应用场景还会很多,比如下面第一个图是去年腾讯20周年的活动,这样一个活动在我们公司内部是传播非常广的,因为生成的海报上不仅仅有自己的形象照片,还有自己的一些属性信息,比如我入职了多少天,还有公司的一些企业文化上的宣传口号等,通过这样一个活动每个人都乐意传播它,有一种企业的自豪感在里面。

后面两张图是与人民日报和央视合作的活动,一个是五四青年节,还有最近的两会,都做了这方面的形象来传播。通过官方媒体去宣传这样一系列的活动,所有用户能乐于参与,参与之后传播正能量。既然这么多应用场景,我们在整体的这个技术和后端架构上怎么实现的呢?

这里面跟大家分享一些这方面的技术,首先这是整个人脸融合的全流程,从这个图上可以看到,上面是一个个人的照片,下面是模特图,要生成军装照,首先是根据人脸识别去做人脸检测和关键点的定位,因为用户输入的照片,角度和模板图会有一些差异的,部分的差异也会影响最终匹配的效果,所以我们这里会对用户输入的照片做一定程度的旋转,使它匹配这个模板。接着,我们会根据人脸关键点信息把特征信息提取出来,与底图照片进行融合,融合之后就完成了换脸。后面还有很重要的一步是图像校正,因为用户输入的照片,光线角度等信息也会影响最终的效果,所以这里面图片处理的算法,对它进行一些校正,使它能在曲线、光线或者边角进行一些柔化。

这里面比较关键的是人脸检测和关键点定位的算法,前面第一场的人脸识别给大家介绍了,这里后端算法是用的优图实验室的人脸算法。优图实验室前面大家也有所了解,它在国内外人脸评比中都是名列前茅的,我们在人脸融合里用了优图的人脸检测、关键点定位,它能定位人脸上90个关键点,包括眉毛、眼睛、嘴巴甚至瞳孔、轮廓90个点,之后提取特征,做后续的融合。

大家有可能会问我们开发一个好玩的应用之后,那我们怎么给大家去玩呢?比如军装照这个应用,怎么能支撑高并发呢?这里给大家一个建议的架构,比如这里采用静态文件加速和负载均衡,还有云上CVM和对象存储,为什么这里推荐大家采用云上架构呢?首先我们接入的用户有可能来自全球各地,为了能保证用户能快速接入最近的节点,所以我们采用云组件就可以借助云厂家的全球能力,数据中心的能力,能让用户快速接入;另外像军装照这种应用它的流量非常大,但流量也很快就下来的,所以借助云弹性伸缩的能力能实现降成本,快速的对它进行扩容和缩容。

用户H5后台和控制台等用户层的请求会接入到API层,这是腾讯云统一的接入,这一层会完成一个鉴权、限频、负载均衡等操作,处理完毕,会把所有的请求转发到业务逻辑层,在业务逻辑层会做数据的预处理,然后去调用底层的算法进行人脸融合; 接下来就是算法群。在算法层面,这里有一个腾讯机器学习平台,我们只需要不断提供训练数据比如图片,它能自动训练,能提升算法的能力,最底层也就是我们说的基础设施层。

如果我们要这样架构上实现高可用,应该怎么去做呢?这里简单给大家介绍一下刚才我们提到的那个分层,最上面用户层,下面蓝色的是云API的接入层,最下面是业务层。用户层,因为用户来自全球各地,怎么保证用户快速的接入API,所以这里引入了一个ZK,就是把API的原数据在不通的节点实现数据同步和存储,有了这个同步之后,我们只需要部署一个主节点比如广州部署,其他的在上海、美国等其它的地域,部署一个observer的节点即可,万一ZK挂了,API层会直接从缓存取到这样一个配置,保证服务可用。如果我API重启了,ZK可用,我直接从ZK里拿缓存数据就可以实现API服务的不降级或者不损失。

用户层完成API层统一接入之后相当于已经进入到腾讯的内网了,API层也会把请求通过内网负载均衡转发到就近的业务节点。在业务逻辑层,都是基于微服务的开发,比如说这里面有日志服务,审核服务、人脸融合服务等。在这里所有的服务都是单独部署互不影响的,都可以独立扩缩容,另外在架构底层,采用缓存中间件,比如Redis、MQ,我们会把所有的热点数据放到Redis上,这样可以提升用户请求响应的速度,然后还有COS层,COS就是对象存储,因为用户的照片上传、存储都是依赖COS,这里引入MQ做消息缓存,实现异步化操作。这里每一个节点都是无状态的,而且每一个服务都是一个集群,内部每一个异常,我们都可以剔除掉。

前面讲到高可用的设计,实际上我们做工程或者应用方面,不仅仅是关注这样一个架构,可维护性等方面相信大家也有不少的经验。这里面我们做了一个分层监控,最底层我们有一个基础设施层的监控,比如从这个图里大家可以看到有CPU使用率、内存、网卡各方面的监控,如果判断CPU过高会缩容、过低会扩容,还有比如机器故障了,心跳没有了,会自动的从LB里给降权重或者直接下掉,这样一个自动化或者半自动化的能力在里面,如果自动运维系统处理不了故障,会发告警信息给运维的人,让负责人处理。这里面底层的监控非常丰富,当然这是依赖于整个腾讯云的基础设施的监控,并不是我们单个产品去做的。

还有对中间件的监控,相信下面我罗列的监控大家都非常熟悉,这里面我们实际上就做了一个把监控数据可视化,并且能及时的把这些信息能传递到运维人员的手里。比如MySQL的慢查询比较多,我们就会收到邮件或者电话,能快速的去处理它。接着是整个API层监控,API层就是与用户请求强相关的一层,在这一层能监控到具体某一个用户API调用的成功率和失败次数、延时等等的信息,所以说对于接入API的用户,如果业务出现异常,极有可能这里的监控系统先帮你发现问题由我们通知你来处理而不是等待用户的投诉工单。因为这里的监控是非常丰富的,而且针对某个用户会监控到用户失败的分布,可以通过监控来告知用户可能要调整输入数据或者模型等。另外是整个流程里,我们会生成请求ID,通过这个ID,用户请求的时候出现超时或者失败,通过这个全局的ES信息可以得到整个调用链上所有的日志信息,所以我们的定位是非常快的。

有了上层的技术架构,还有可维护的监控是不是就够了?是不是我的应用就能上网传播了?当然我想大家心理也有数,这类应用可能传播会很广的,朋友圈分享的速度也是非常快的,那么对于内容的合规性,我们需要则么做?这有几个图片,比如这里三张图,一个小黄图,一个暴力图、一个政治敏感任务,用户接入后其实不需要关心怎么审核自己的图片,人脸融合的API自动集成了内容审核的鉴黄、鉴暴、鉴政的能力,只要不合规的图片,都会拦截掉,不能出现、不能传播。

简单介绍一下人脸融合怎么去接入。我想给大家普及一下几个概念。在类似军装照的应用中,它是由一系列的军装照底图的,系统控制台上的概念称之为素材,大家可以上传一系列的素材图片用来做融合底图。接着是版权,所有的图片信息都必须拿到版权,也就是所有的图片必须是合规的。接下来还一个活动的概念,在这里面素材的集合就是一个活动,每个活动是允许大家上传30张素材;最终内部测试完毕会发布,大家也可以不发布,不发布的话就可以直接享有500次的免费调用,发布之后可能就有30万。另外从这张图里可以看到,针对每一个底图在控制台上都可以调整它的融合参数,通过观察测试效果,达成一个最好的融合效果。

这里提供各种语言的SDK,通过SDK基本上可以写很少的代码就可以接入人脸融合API。开发者只需要把业务参数信息传递进来,就可以通过SDK实现一个接入。当然如果大家还是不想写代码的话,我们还可以自动生成一个接入的代码,你只需要在左边可视化的窗口里,填入参数,右边就可以开发者希望得到语言版本的示例代码了,你后面只需要在自己代码中封装一下就可以实现接入了。所以在小程序里,或者手机端的H5,或者app应用,都会很快的通过现有的工具实现接入,还可以通过在线调测的工具,能帮助大家调测信息。

接入FAQ就不再重点讲了,因为我们这边有一个专栏,里面有很多接入的介绍,有很多是开发者自己写的。

这里跟大家再一起分享一下现在人脸融合有一些新的玩法,有一些还在开发还没上线,有一些我们已经上线了,大家可以在控制台来体验一下,都可以免费体验。目前我们正在开发的一些新的玩法,比如合照场景,因为前面都是单张照片的融合,以后可以实现一个选脸的融合,我可以把我的照片融合到素材上任何一个人的照片上。还有是小视频的融合,这个视频大家看看,这是用户自己唱歌的视频,通过人脸追踪、视频分析等算法实现视频的人脸融合,这里面对内容审核的要求就更高了。当然未来可能还有更多其它的应用场景。

Q:视频在人脸融合的时候,多目标怎么追踪呢?如果人跟人是有移动的时候,有交叉。

A:这里面有一个人脸追踪的算法在里面,我可以追踪到你的移动轨迹。

Q:我记得之前在硕士的时候做过这个课题,好像准确度不高。

A:这个算法已经有了,可以在官网上查到一些相关的体验场景。

Q:我想问你们用什么样的负载均衡?

A:是我们自己的,在腾讯云上也有,CLB,当然这个是内网的,腾讯云是外网的,但是原理是一样的。

Q:负载均衡你们用过LVS吗?

A:以前用过,也是开源了一个东西,自己要改嘛,现在相当于腾讯云帮大家做好了,大家只需要用就行了。

Q:COS这一步的设计、架构以及云服务如果宕机之后怎么快速恢复?

A:COS是腾讯云的对象存储,云服务宕机涉及到可用性设计的一个问题,可以通过多地域集群部署做容灾。

Q:比如大流量的情况下还能保证像那个照片那个,保证用户使用的流畅性。

A:首先通过异地容灾的集群部署保证高可用,接着我怎么能保证快速的读写这样的数据,我就要分析业务场景到底读多还是写多,针对不同场景做不同优化,这里提到COS上,比如军装照这个应用,可能读也多、写也多,那么针对读的场景,可以设计一些CDN加速、redis缓存等。

Q:视频的人脸融合,速度是怎么样的?用户的人脸需要多少张?需要不同角度吗?你们这个DeepFake是算法识别吗?

A:这个算法跟DeepFake,底层有可能是一样的,具体还不太方便透露,目前也正在研发中。可以了解一下我们优图实验室的人脸追踪算法。

Q:速度怎么样?

A:视频的操作肯定是异步化的操作,耗时较久做成同步是不合适的,因为这涉及到视频的编解码、截帧、逐帧的人脸检测和特征提取以及替换的过程,我们之前测过900多兆的视频,视频编解码和截帧可能在3到4分钟,这么大的耗时,可能就没有传播的欲望了。所以视频融合这种小应用的话,目前看可能只有十几、二十兆的程度,整个融合过程保证秒级才能有效果,但具体的数据我们还要实测。

腾讯云人脸融合应用场景和关键技术-卓伟.pdf

0 人点赞