当前位置:   article > 正文

这些有趣的AI人脸特效背后,腾讯云都做了什么?

腾讯ai 动态人物照片

导语 | 深受泛娱乐场景喜爱的人脸特效产品,在不断的尝试和拓展中已挖掘出很多火爆的玩法及积累了不少优秀落地案例。本文是对腾讯云高级工程师 李凯斌老师在「云加社区沙龙online」的分享整理,以人脸特效产品(人脸融合、人脸试妆包括试唇色和美颜、人像变换包括变年龄和变性别、人像分割)为例,分享在实际场景中遇到的问题和解决方案,并与大家交流和讨论。

点击视频查看完整直播回放

一、腾讯云人脸特效产品及案例

我们知道在人脸特效里面用到了很多的 AI 技术,其实 AI 早已经走入我们的生活,给我们生活带来很多的变化,大家可以想一下在生活中遇到的使用AI的场景。

这里我举几个我自己使用AI的例子,首先一个是手机面部解锁功能,就是现在我们都不需要再手工输密码,就可以通过面部解锁。第二个例子是扫码支付,我们去到便利店里面如果没有带手机也没关系,通过刷脸支付就可以完成购买。第三个就是我们今天讲的人脸特效,相信大家应该在很多手机APP里面使用到了,接下来介绍下我们腾讯云人脸特效相关的产品和背后的技术实现。

1. 人脸特效的功能

(1)人脸融合

首先我们来介绍特效的人脸融合功能,如下图所示,大家可以看到左边是用户图,中间是模板图,右边是融合的效果图。

最终融合结果图同时表现出了用户图和模版图的特征,所以叫融合。在人脸融合中主要用到了人脸识别和深度融合这两种技术。

(2)人脸美颜

第二个功能是人脸美颜功能,我相信大部分的女生都应该用过,比方说美白、瘦脸、磨皮等功能。这里面除了用到人脸识别之外,还用到了图像处理的技术。

(3)人脸试妆

人脸试妆其实和美颜很像,只不过人脸试妆主要是集中在五官的一个具体的部位,比如说唇色、眼妆、腮红和底妆等。

(4)人像分割

通过下方人像分割的效果演示图大家可以看到,人像分割把我们五官的每个部位都准确的分割出来,这样可以后续做一些特效或者是做一些抠图的技术基础。

(5)人脸变化

然后是我们新上线的人像变化功能,包括了人脸年龄变化和性别变化。我们看下图左边展示的是年龄变化,呈现了变年轻的效果;右边是一个性别变化,是男变女的一个效果图。为了让大家有一个直观的感受,我们给出整个的人脸年龄变化跨度效果图。

大家可以看到从 10 岁到 80 岁跨度的整体效果是非常不错的。需要说明的是我们的人脸变换中的支持指定年龄这种细粒度的变换,也是国内首家发布的,欢迎大家试用。

2. 案例介绍

下面介绍几个具体案例,方便大家更直观的来了解。

如上图所示,其中左边是一个变化年龄的活动,大家可以看到这个过程,首先上传用户图,然后可以选择变换年龄,整体效果非常不错。

右边这个活动用到了人脸融合,它是一个吃鸡游戏的活动,喜欢这款游戏的同学可以变身成为游戏的一个角色然后和我们的火箭101少女进行“合照“”。用户非常愿意尝试,参与度很高,也欢迎大家来借鉴这些形式进行使用。

除了这两个案例,我再介绍两个比较经典的场景,其中下图左边这个是腾讯 20 周年的一个活动,我们每一个腾讯人都可以把自己的头像传上去,然后生成这样一个封面照,里面会显示每个人职业生涯,不仅有趣还非常有纪念价值。

右边这个是我刚才提到的,腾讯今年六一儿童节的一个活动,里面用到了我们年龄变年轻能力,整体效果也是非常的不错,感觉一下子看到了自己小时候的样子,让人怀念。

除了这些案例之外,在我们的官网上也有很多应用场景和最佳实践给大家去进行参考,欢迎大家结合自己的业务需求来选择这些功能来进行使用。

好的,以上就介绍了我们整体的功能,相信大家应该有了一定的了解,接着我们来介绍下人脸特效背后的技术原理。 


二、人脸特效背后的 AI 技术和原理

  

1. 深度学习

说到技术原理,就绕不开深度学习这样一个概念,大家通过下图左边的维恩图可以看到深度学习在整个人工智能里面的一个位置以及这些概念的关系。

什么是深度学习或者说为什么叫深度学习?它和我们传统的机器学习有什么区别呢?

其实顾名思义深度学习就是模型变得更深入了,它的网络层次变得更多了,表现出来就是网络更深了;另外一方面,正因为它的网络变深,它的学习能力就更强,它学习的也就更深入了。这是我对深度学习的理解。

那么深度学习和传统的神经网络有什么关系?又有什么区别呢?我们可以看上图右边的流程图,在传统的神经网络里面有一个人工特征的过程,也就是我们通常说的特征工程的步骤,它非常关键,并且非常依赖相关的领域专家来提取特征。

而深度神经学习就不需要这样一个过程,它是通过自己来习得的,也就是通过我们刚才说得多出来的那一部分网络层来自动学习到的,比方图上在前面的网络层先学习到一些简单的特征,然后在后面网络层再逐步学习一些复杂的特征,这样来进行抽象和泛化。

2. 卷积神经网络 CNN

深度学习里面有一个最重要的网络——卷积神经网络 CNN 。为什么我们要说 CNN ?因为CNN 在我们计算机视觉里面非常重要,可以说是最重要的一个网络模型。

大家通过下图可以看到卷积神经网络的组成部分,它包括输入输出以及卷积层、汇合层和全连接层,另外还包括 BN 层和激活函数等。

为了方便大家理解,我们给一个照片来做直观的对比,让大家来感受一下网络的结构。大家可以通过简单的动画看到整个的网络变化或者说推理的过程,方便大家有个直观的认识。

这里需要说明的是整个 CNN 里面,它的卷积层、汇合层包括全连接层,其实是可以叠加在一起来组成更深的网络,就像我们图中所示的这样,叠加在一起来获取到不同的特征,从而能够作为我们分类或回归的模型。

(1)CNN的概念

为什么叫卷积神经网络呢?为什么以卷积命名呢?

这里我们先来介绍一下卷积的核心概念。卷积作为卷积神经里面最基本最核心的概念,它本质上是一个矩阵的运算,也叫做内积。

通过上图我们可以看到它其实是一个乘然后求和的过程,这是一次的卷积,我们把整个的聚矩阵循环一遍,走到一轮的卷积之后,就完成了一次卷积的运算。

那么卷积运算背后运算意义是什么?或者说卷积运算到底有什么作用呢?我们通过右边的图来给解释。 

我们看出这是一个红花的图,通过和不同的卷积运算之后可以得到新的矩阵图;我们的图像大家可以理解为它本身天然就是一个矩阵,或者准确的说是一个三维的 RGB 矩阵,通过和不同的卷积核运算之后,得到不同的矩阵图。

我们可以看出每一个结果矩阵图都可以表现出一个特征,比如上面这个图可以看出来它是一个形状的特征,而下面这个图可以看到它的颜色深浅的特征,所以我们可以理解卷积的过程其实就是发现特征的过程,所以卷积是非常核心的,也因此命名卷积神经网络。 

(2)CNN发展历程

我们接着来说 CNN 发展的历程,下图中是一些非常有代表性的网络名称,我们就不再一一来介绍,我们可以看到从 AlexNet 之后,卷积的发展才真正变得非常的繁荣。

为什么会这样呢?其实我们通过坐标图可以发现,其实深度学习的发展是随着数据量的增大和硬件的发展一起发展的,因为我们都知道数据可以用来训练模型,硬件可以来加速训练模型。

我们给出的几个比较经典的网络,可以看出网络的发展是从一个网络层次变得越来越多,也就是网络越来越深,同时整个网络架构的也越来越复杂。

(3)CNN未来发展前景

那么 CNN 的未来是怎样的?或者说深度学习的未来是怎样的呢?

我们先来回顾一下神经网络发展的过程,其实我们可以看到神经网络发展中间遇到了很多的问题和挑战,甚至一度跌入到了低谷,直到最近的 2000 年后才慢慢发展起来,也就是 AlphaGo 火起来的时候,大家才慢慢熟知它。

那么以后的发展会怎样?我们可以归纳几个影响的因素。

第一,我们知道神经网络是模仿人脑的活动,所以说如果人脑的研究能够有更大一步的发展,神经网络才能有更大发展的基础。

第二部分是硬件,我们的网络规模越来越大,训练的难度越大、时间越来越难定,如何有效地训练网络,就需要依赖于硬件的发展。现在由于物理的限制,摩尔定律其实在慢慢失效,所以硬件这里也是一个挑战。

第三点是数据,我们知道好的数据,大量的优秀的数据对模型来说是特别重要的,而数据往往是匮乏的,所以这也是一个重要影响因素。

另外我们知道一些安全问题,比如说我们去刷脸支付的时候,如何来正确地辨别某一个人的身份,我举一个场景:双胞胎如何区分,这其实是很难来完全保证正确认识身份的。

所有要让用户信任其实也非常难。所以我们可以预见,未来深度学习的发展其实还是挺难的,但是我认为它的发展即便慢下来,但是还是很有前景,这是我的一个理解。

(4)CNN训练过程

接着我们来说一下 CNN 训练的过程,这里我们分两部分,第一部分是一个框架层面,第二部分是训练的步骤。

我们知道现在主流的框架都是外国的,并且主要是美国的,可以看到比如是亚马逊支持的 MX net,以及 Google 提供的 TenserFlow 和 Facebook提供的 torch,这些主流的框架都是国外的,现在目前为止还没有比较成熟的国产框架,面对这个空白我希望大家也能够加入进来,来为我们国产框架贡献自己的力量。

接下来介绍一下训练的步骤,这样其实大体上可以和我们网络的 CNN模型的结构对照起来。

首先是数据,我们知道数据通常来说是比较匮乏,但可以通过数据扩展或叫数据增强的方式来拓展我们的数据,

比如说 resize 就是调整图的大小尺寸,或者把图给抠出来一些,比如随机截取部分的图或者对这个图的旋转产生镜像,也包括一些对这个图的颜色进行修改,比方说亮度和对比度进行修改,这样来扩充我们的数据。 

第二部分就是数据的预处理,我们知道在卷积神经网络里面,比较主流的预处理就是中心化归一处理;也包括一些对数据进行统计,发现数据是不平衡的话就要做一些处理,另外在训练之前要随机数据打乱。另外的话如果我们用到了一个框架,比如说我们刚才提到的 MXnet 框架,它提供了一个专有格式 record IO ,通过预处理成专有格式之后能够加速训练。

第三部分是网络参数的初始化,我们知道有一些学习率,批大小,如果是分类的话就会有类别数的参数。

这里特别想说的就是我们对卷积核的参数如何来进行初始化的,我特别推荐使用现有的已经训练好的一些结果来直接初始化,这也就是我们平常所说的迁移学习。

从一个没有的模型来迁移到我们新的模型上来训练,通过微调的方式来学到新的参数。当万不得已没有预训练数据的时候,我们才会自己进行训练和收敛。

然后是激活函数目标函数,激活函数我们知道通常就是使用 ReLu 类,也就是线性单元这一类的激活函数。对于目标函数,我们根据不同的目标来选择不同的目标函数,比如分类的话,我们就选择交叉熵函数,如softmax交叉熵函数,而回归的话我们就选择回归类的损失函数。

最后来说明一下模型集成,比方说我们在做一个训练时,把不同的模型的结果进行加权作为最后的结果表示,来保证一个结果整体结构的最优,但是这样消耗是非常大的,所以这个模型的集成,其实主要是在比赛中遇到,在真正的生产环境是比较少用到的,需要考虑到成本耗时的问题。

上面的截图,是我们MXnet一个文档,可以看到它其实已经给我们提供了很多的现有比较流行的网络,另外的话它还把数据集也提前帮我们存好了,可以直接引用非常方便。

另外一点,它还把每个网络对应的论文给我们引用起来,这样如果我们需要学习的话,就可以非常方便的进行对照学习。所以我们可以看出一个好的框架是多么的重要,对我们的深度学习的效益有多么的好啊。 

所以我这里再呼吁一下,兴趣的同学可以加入这块,一起来助力我们的国产框架的发展!

(5)CNN应用示例

接下来举一个实际我们在人脸特效里面用到的例子,就是人脸年龄的评测,也就是我们给一个图片,然后得出图片中人脸的年龄。

这里有很多的难点,比如说每个人在实际年龄和他的外貌年龄是不一样的,比方说有的人可能就显老或者有人显得年轻,所以外貌和年龄其实也不是一一对应的。

另外图片里面的年龄其实也会有差别,比如说分辨率不一样,或者亮度不一样,这样子整个判断出来的年龄其实也是不一样的。

在年龄这里还有一个特殊的场景,就是年龄被认为是从 0 岁到 100 岁这样的一个分类来进行训练,当然也可以把它当成一个回归模型,就是说我们把他当成一个连续的数字, 比半岁、1岁、1岁半这样连续的结果来进行训练。

我这里举的这个例子,就把它当成一个连续分类,就是0~100岁这样的一个分类来进行训练的。

和刚才我们提到的训练步骤一致,首先我们要有数据集,这里我给了几个比较新的数据集。

首先是 MegaAge, 它的特点是主要是以亚洲人的人脸为主。第二个是 AFAD, 它是以中国人的脸为主,这里数据据说是来自于人人网,所以这里面的女生图片特别多。第三个数据集是 IMDB-WIKI, 它是外国比较通用的人脸数据集。

第二步,我们进行数据处理,我们可以看上面的这三个图片的整理,我们通常的人脸其实是不规则的,这时候我们需要进行一些旋转,得到一张正面全脸照,同时我们进行一些 resize 取出来,把这个人脸的部分给放大或者统一成一个,比方说就是 224 px这样一个分辨率的大小,同时的话我们也不要把人脸占满,整个图要留一定的空白,然后对数据进行统一的归一化处理。

第三步,我们选择一个网络模型,这里我们选择比较经典的 VGG 16 的 16 层模型,这里的参数初始化就属于我们刚才说到 MXnet 里的已经训练好的数据来进行初始化,我们这里再进行一些微调。

然后是函数选择,我们刚才说到了激活函数,就选择了 ReLu,因为我们现在是按照分类来进行训练的所以选择Softmax 交叉熵目标函数。

最后是一个模型的集成,就是我们考虑到模型准确率,所以我们用了模型的集成,最后把各个模型的结果进行加权平均之后得出最后的结果。

我们可以看到案例里面的人的整理图片,发现他大概是33岁左右的年龄,以上就是人脸特效里面一个实际应用 CNN 的具体例子。(小伙伴们有没有觉得案例上的人像有点熟悉呢

(6)CNN加速处理

接着我们来说一下我们怎么来对我们的网络进行加速,我们了解到深度学习或者说新的网络,它的规模越来越大,训练难度也越来越大,现在计算量也越来越大,怎么来优化、来加速我的训练?

这里的话除了一些常规的优化之外,我们把两个比较有效果的措施列出来,第一个就是软件层面的一个剪枝,我们知道通常的剪枝就是逐层剪枝,这样甚至会破坏原来的网络。

这里我们提出了一个全局+动态剪枝的想法,大家可以从图中看出来,通过全局剪枝之后,我们可以选择全局领域里面影响比较小的进行剪枝,影响更小。

在训练过程中可以动态地调整,甚至于恢复原来的结构,从而保护了模型。这里我们简单介绍一下这个原理,具体的细节大家如果有兴趣可以参照图中所示论文,这个论文已经公开了,大家可以去搜索。

加速的第二个方法就是硬件加速,我们知道 GPU 对我们这些图像处理来说是非常友好的,在我们实际的场景下,我们测算出来的效率提升要比 CPU 提升明显,大家可以看到基本上是成倍的增长。

但是在某一些特定领域里,GPU 还是没有 CPU 好,但是总体上还是比较推荐使用 GPU,当然具体的数据大家可以在自己的业务场景下进行训练,进行性能评测来选择合适的硬件。

(7)算法反馈评测

我们知道一个算法上线之后,其实还是会遇到很多 BadCase,因为我们的训练数据集它肯定不是覆盖到所有的,还是会遇到一些 BadCase 的情况。

这时候的话我们就把 BadCase 做一个自动的收集平台,把它收集起来,然后统一的交给我们算法同学,再进行模型的训练和升级,从而再逐步地发布到我们的线上形成一个闭环,来持续的优化我们线上的模型。

当然算法同学出来新模型之后也不是马上就会上线,还是需要进行一些评测,这里我们也开发了一个自动评测平台,大家可以看下图右边的流程图,通过比较我们新旧版本之间的性能,甚至是和不同算法进行比对,如果性能的效果达标之后,我们再进行上线。

当然这里评测的数据集中非常重要一部分来源,就是我刚才说的 BadCase。


三、腾讯云人脸特效服务架构和保障

然后接着我们来介绍一下人脸特效整体的服务架构,以及我们的服务保障工作,也就是如何来保证我们服务的稳定性,这个也是非常重要的。

1. 整体架构

下图是我们整体的一个架构图,大家可以看到它是一个典型的分层架构,从用户接入层到这个产品逻辑层,大家可以看到我们的人脸融合、特效的功能都在这个产品逻辑里。

下面是中台层,刚才的算法平台就在中台层,它是一个通用的能力,最下面是资源层,也就是我们常用的一些组件和资源,这里就不再对每一个模块进行详细的说明,我们来说两个比较重要的概念。

第一个就是分层的概念。我们知道在计算机里面有一句名言,就是说计算机里面的任何一个难题都可以用一个新的中间层来进行解决掉,所以可见分层是非常重要。可以看到通过分层后,结构变得非常清晰,而且能够把难点分解掉,降低难度。

第二点的话就是我们的中台,真正的中台不是提前设计好的,而是在我们实际开发中不断抽象出来的公共能力,是长期不断完善成长起来的一个中台,好的中台为我们后续的业务的发展的话助力非常的大。

比如前段时间我们急需口罩识别能力,这时我们的中台只需要在我们的逻辑层和算法层补充上去,就可以直接打通上线,大大提高我们的开发效率。

2. 服务保障

介绍完整体的架构,我们再来说一下我们的服务保障工作,可以毫不客气的说:一个服务的稳定性,尤其是对于我们云服务提供商来说,是一个生命线级别的关键指标。

我说一下我的个人体会,因为我中间有几年时间参与了一个创业项目,在一个创业团队里面我们大家都会使用云服务,当时使用的就是我们腾讯云的服务。

我们知道一个创业团队里面限于人力和精力,其实大部分功能完善和稳定性都非常依赖于云服务提供商,如果云服务不稳定的话,势必会影响这些公司,影响很多用户。所以如果出现一次重大的事故,那么对口碑的破坏是极大的,甚至让你几年的口碑积累一朝散尽,所以服务的质量是非常关键的。 

我们知道腾讯有 20 多年的历史,其中有很多海量级别产品,比如微信和 QQ,当然也总结了很多海量服务的经验。这里列了些经验,限于时间不再一一赘述,大家可以网上找我们其他腾讯同学分享来学习。

在人脸特效里面,我们也遇到了一些问题,接下来我们就具体介绍我们人脸特效里面遇到的问题以及是如何来解决、保证我们的服务质量的。

(1)突发流量

第一个问题就是突发流量,我们知道人脸特效的用户都是做活动或者推广的用户比较多,那就会突然出现很大的流量,所以每天我们都会遇到这样一个突增量,对我们来说都是一个常态。

毫无疑问出现突发量还是必须要服务的,而且要服务的非常稳定才行,我们怎么做的呢?我们总结了一些经验给到大家:首先的话我们要全链路接入弹性伸缩这样的一个框架。

我们刚才介绍了我们的算法是用 GPU 的,我们知道现在在业界里面 GPU 的弹性收缩还不是非常完善,当然我们现在正在做这块,希望把我们的工作能够通过文章或者开源反馈给大家。

第二点就是我们还是要做一些容量来保证冗余,有了弹性收缩为什么还要容量冗余?其实我们知道一个弹性扩容,不管多快它都终归是需要时间的,比如需要几秒钟时间来进行扩容,那么这几秒钟内的用户也必须要能处理,而且要稳定的处理。

所以这里经过我们的长期的观察,根据我们的用户的请求量以及扩容速度,我们总结了目前的一个经验值。在平常日的时候,大概三倍的容量,在节假日的时候我们通过一个框架的自动周期任务来完成扩容4倍容量。

另外一点我们还是要能够加速扩容,就是说我们要把他的扩容速度能够跟上用户请求量的速度。

首先我们要能够快速地检测到用户的请求量,或者说用户起量之后,我们的负载变的很高,我们要马上进行扩容;同时扩容的时候我们也要进行快速扩容,如果用户起量很快,我们就并发大量进行扩容,甚至采用一些预扩容的方式,从而达到一个快速的效果。

除了上面这些的步骤之外的话,我们还有要想办法优化成本,在我们的成本和稳定性之前做一个平衡。

比如我们现在能够自建混部集群来把我们的服务混部起来,因为这个活动是错峰的,所以能够降低我们的成本,同时的话我们通过一些灵活的调动,来达到我们成本和性能的平衡。以上的话就是我们在突发流量的时候做的一些措施,供大家来参考。

(2)柔性策略

接下来我想说一下柔性,就是说我们的服务要更加的健壮,就是我们对服务的依赖不要太重,才能够去保证我们自己的服务。

这里的话我们举上面右边图的例子,我们看出来,这是一个简化版本的架构,我们可以看到通常一个服务会有很多的服务调用,而且还有存储的调用。

在这些调用里面,可以看到查询缓存或者是上报统计,这些显而易见可以作为一个非关键路径,但这时候我们就可以作非关系路径来提高稳定性。

还有一些调用,其实是非常微妙的,比如说计费这样的一个步骤,在之前的时候,我们如果查询计费失败,肯定就是返回错误了,但是我们经过排查和仔细的权衡之后,还是把计费的调用作为一个非关键路径。

也就是说如果计费失败了,我们还是要正常地提供服务,正常得把服务提供给用户,保证服务的质量。我们认为服务的可用性是高于计费的,虽然说我们计费可能会有一些损失。

另外我们做了这样一个权衡的决策,然后做了这些非关键逻辑减轻依赖之后,还要设置一些非常合理的超时时间。我们知道如果超时间的话,无论长或者短它其实都不会达到真正的效果,所以一定要设置合理的超时时间,我建议我们可以通过一些定期演练的方式来发现问题并及时地纠正。 

最后说一下报警的问题,比如说计费、缓存和统计做为非关键路径,但是我们还是要把这些非关键东西的错误监控和报警建立起来,然后我们及时修复,保证我们服务的完整性。 

(3)备份策略

接着我们来说一下我们的备份的一些策略,通过备份来提高整体的容灾能力。备份这里有两层意思,第一层是数据备份,大家都知道,尤其是核心的数据,我们现在肯定要求起码两地三中心这样备份的机制。

如何来保证数据的一致性?现在的比方说paxos、raft这样的一些分布式一致性的协议,已经非常成熟了,大家可以使用这些协议来保证服务的数字一致。 

另外一方面就是人员的备份,尤其对线上的功能,我们一定要起码有两个人对代码非常熟悉,一旦出现一些紧急需求的话,我们可以来互相支援。尤其是节假日,我们遇到线上问题的时候,如果某一个人正好不在另外一个人就可以及时的处理,来保证服务。 

(4)重试策略

我们知道重试可以提高可用性,这里我们目前使用的主要是两个重试策略,第一个策略就是在接入层我们统一地进行重试,这样的好处是比较简单,同时也比较方便的来控制,比如说我们可以来调整一些重试的次数,来提高我们的服务可能性。

另外一点是在算法层进行并发组织,这是在我们比较“”重型“的请求场景下的应用。我们知道通常在算法请求下 比如200 分辨率图和 2k 分辨率的图,它的处理耗时是完全不一样的,很可能是几倍的差距。

所以逻辑层在请求算法的时候,它的超时时间通常会设置的比较大,但如果一旦出现超时,其实就来不及再进行超时重试,因为它已经超过了用户的超时时间,再重试其实就没有意义了,这时候怎么办?就放过这步的可能性吗?

我们就想到了一个通过并发重试的策略,具体可以看一下上图这段代码,这是我们用 js 写的一段代码,最开始的时候是一个调用,如果失败了就直接返回失败,那么我们可以改成一个并发重试的机制。

并发重试之后如果有一个先回来,那就先用那一个的结果。但是这个并发的请求,并不是每次都要去执行的,我们可以统计出来,比方说整体的超时间是 3 秒到 5 秒,我们发现在 3 秒内其实 99% 的这个情况都已经返回了,我们就可以设置在 3 秒之内还没有返回到这个请求的话,我们再进行重试这样的话可以增加少量消耗,从而提高我们的可用性。 

四、腾讯云人脸特效的规划

1. 后期规划

接下来我向大家汇报一下我们后续的一些规划。毫无疑问我们的目标是向用户提供更多、更好用、更高效的能力。

所以首先我们要提供更丰富的的能力,满足更多的应用场景。 

其次我们要能够服务更多的地区,比方说我们现在也在做国际化,我们希望能够对海外用户进行服务,比如我们大概会在七八月份的时候上线新加坡的服务。

然后我们要降低我们的进入门槛,能够让用户接受更高效方便的使用。

最后的话我们要保证我们的服务质量,服务质量是我们的生命线。

2. 后续产品方向

这里我可以简单透露一下,我们后续可能会推出一些产品。

第一个是视频人脸特效场景,而且有很多不同的模板可以选择。第二个是图片风格化应用场景,可以把图片变成不同的风格,非常有意思。第三个是手势识别,可以自动识别出来手势。

3. 接入使用

介绍完了我们整体的规划,最后还是想来给大家介绍一下我们的接入,如何来快速接入我们的服务,方便大家来使用。

我们知道在腾讯官网人工智能的产品目录下面可以找到我们的服务并进行选择使用。除此之外的话,我们最近已经上线了微信小程序的服务市场,可以看到大部分功能都已经上线了,微信小程序的用户可以直接来使用,非常方便调用。

除此之外我们还上线了整体的 H5 活动,我们的目标就是降低用户接入的门槛,即便是对那些没有开发人员的用户,也可以接入进来,从整个产品的方案、设计到开发运维以及后续的推广,我们都能够提供帮助,希望可以降低用户的接入门槛,最后欢迎大家来试用。  

Q&A 

Q:我部门(工业界)Tensorflow战略迁移到PyTorch?老师怎么看?

A:这里就说到框架问题,我个人理解其实每个框架都有每个框架的特点,大家可以根据自己的需要来进行学习和使用。比如 Tensorflow 它的好处就是生态非常完整,遇到学习问题都可以找到解答,但是它的问题是训练速度有点慢,而 PyTorch 它的优点是入手比较容易,它整体的算法效率或者说算法速度是比较快的,所以说每个框架都有它自己的特点,大家要根据自己的需求来进行选择。

另外我还是想说一点,就是我希望我们能开发一个国产框架。尤其是在中美贸易战的立场上,比方说比方说现在华在手机上,他可能就已经没有 TenserFlow 这个库了,就没法用TenserFlow的这样一个框架。所以说一个国产框架在现在的场景下非常重要,这里我也说明一下,其实在我们腾讯内部也在开发自己的框架,目前为止已经有一个框架开源了,它的名字叫 tnn大家可以搜一下。它的特点是专注在移动端的推理,欢迎大家来使用。

Q:怎么能快速地学习深度学习,怎么才能够进入腾讯工作?

A:这里我就自己的体会来说一下,刚才我说到其实我进入到 AI 领域大概也就是两三年的时间,当时有这样一个契机,我记得有一天晚上的我去跑步但没有拿手机,回来的路上很口渴,当时就想这可怎么办,后来经过一个便利店的时候,看到一个自动贩卖机竟然可以刷脸支付,就通过刷脸支付就完成了这次的购买,那时感觉这水特别的好喝!

通过这个契机让我觉得 AI 真的是非常有用,当然在学习的过程也非常的艰苦,我比较建议理论结合实践,有句话说的好“你懂得这么多道理,为什么过的还是不好?”,其实原因是缺乏实践,所以我们要理论结合实践,然后在实践中来实现我们的理论,这样不断的循环来学习。

另外我建议可以去学校 斯坦福的 CS231 课程,以及有一个中文版网站叫「快动手学习深入学习」,这些都是非常好的教材,希望大家可以去学习。

至于说想进到我们公司,大家可以通过自己的学习并到我们的官方的招聘网站上投递简历,可以告诉大家,我们非常需要新的同学加入,大家只要有兴趣投入一些时间并具备一定能力,我相信大家如果愿意来,其实基本上都可以进到腾讯。

Q:怎么能由浅入深的学习这些知识? 

A:其实刚才我已经基本上说到了,就是建议一边通过理论一边结合实践来学习,不要光看书或者是直接上手,我的建议是能够理论结合实践的学习,这样能够快速地进行学习,

学习有一个理论,你学习的时候,如果你的这个学习的内容里面有 80% 左右知识是你会的,有20% 的知识是你不会的,这时候你的学习坡度是最容易的。所以的话我还是建议,就是说一边理论一边实践,这样逐步的提高学习的进度。

Q:深度学习里面势必会用到数学概念,数学我们大家通常会认为比较难学,在深度学习里面的话用到数学的程度到底深不深,用到的场景多不多?

A:这个问题可以从两个场景来解答一下,我们通过算法和工程两个维度来讲解,实际的岗位其实也是分算法和工程,作算法的同学肯定需要对算法模型非常熟悉,优化算法模型,在算法这里面对数据的要求就会高一些。

比方说你要对整个模型的原理了解,比方说在训练的时候,它的梯度下降或者随机梯度下降过程,他需要一些算法数学功底,而这个在工程领域就相对来说会稍微低一些,因为我们工程可能更多地和算法同学进行对接,来保证服务的质量。

当然总体来说一个数学底子好的同学,在学 AI 这方面还是会比较轻松。这里就切出了一个题外话,比方说我们现在报考高考的时候,是选择数学还是选择计算机,其实从一个宽维度来说的话,学数学系的话后面发展路径会宽一些,比方学数学转行到计算机其实是比较容易的,但是反之你从一个计算机的领域想转到数学基本是不可能的。

Q:对深度学习的未来的是不是应该有担忧? 

A:其实我们刚才也大概讲了CNN的发展和未来,其实我个人是持一个谨慎的乐观态度,因为现在深入学习已经在我们的生活中有很多的应用,所以我们已经认识到了深度学习的重要性,还是会有研究人员进一步来研究和发展它。

但是我们刚才也讲到很多,比如我们需要对人脑进一步研究,需要提高应急的速度,需要大的数据量,这个挑战还是非常大的,所以我还是比较持一个谨慎乐观的态度。

另外一点现在业界也有一种趋势,就是说深度学习比传统的机器学习优势大,就是它能够自动的来学习特征,现在从一个更高的维度来说,我们可不可以做到一个成果就是说可以自动的学习,自动的生成网络,都不需要我们来调参,自己来训练,从更高的角度来说自己可以通过算法自动的生成更好的模型。这里我可以告诉大家目前来说这是一个非常火的研究方向,相当于是一个深度学习的 2.0 版本。

Q:算法上线之后遇到 BadCase 怎么处理?

A:那么BadCase 的话,其实这里面的我们遇到很多的问题,我举一个比较典型的BadCase,就是说我们上了一个算法实现之后,突然反馈一个BadCase ,看这个数据是外国人白种人或黑人的照片,他们的效果就比较差。 

我们回过头看就发现我们当时算法的确认数据,主要是以中国人为主,就并没有覆盖到外国人的数据,所以数据必然就比较差,但通过这个数据集补上,修正模型之后,就可以来处理这一部分BadCase。

Q:现在腾讯云AI后台的IDC是什么数量级了?是不是都用一些专门的GPU服务器?

A:具体的数据可能不太方便完全透露,但是我们的整个云上的机器的话是大众的,就像我们刚才说道,如果遇到了突发量数据的时候,我们可以把整个的资源池都利用起来,来做到一个弹性的扩容。

想了解整个核数已经超过了多少?具体数值大家可以看一下我们公司官方回应的新闻。

另外在 GPU 机器方面,我们确实要选择一些在算法训练和学习上效果更好的机器,比如说 v100 或者 t4 这些机器,其实每一个机器都有它自己的特点,比如它的 CPU 核数可能比较多,和它的卡的能力比较强,每个机器的特点都不一样,在不同的场景和算法中的应用也不一样,所以的话我还是强烈建议大家一方面根据 GPU 的特点来选择使用,另外一方面大家可以直接拿不同的机型进行评测,然后找出来合适的机型,这样会非常直观也更有说服力。

另外腾讯刚刚成立一个专门做芯片的这一块的一个子公司,所以的话其实可以在预见在未来,我们也会推出我们自己的一个在芯片领域方面,一些比较有定制化的能力比较强的这样一些服务器出来。

作者简介

李凯斌

腾讯云高级工程师

李凯斌,腾讯云高级工程师,现负责腾讯云人脸特效相关产品的研发工作。2010年研究生毕业,有近十年的服务端研发经验,先后在腾讯即通、增值产品部工作,参与负责手Q的接入调度和会员相关业务,在海量服务方面有比较丰富的经验;并与2015年加入创业负责后端研发,见证了一个项目从0到百万日活的过程。目前在AI、存储、微服务等方面不断进行学习和业务实践。

阅读推荐

区块链不好落地?腾讯云用区块链做了这些事

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/123675
推荐阅读
相关标签
  

闽ICP备14008679号