由涂图和个推主办,桔子空间、创业五角场联合主办的TTGO行业论坛第三场在上海举行,与包括涂图、亚马逊、个推和又拍云在内的行业专家探讨和分享了云服务时代,企业进行高效开发的经验,同时此次活动由IT大咖说提供全程直播支持。本文来自TTGO上海场嘉宾演讲分享,文字内容有删节。
演讲|李杨
整理|涂图君
大家好,感谢在这么炎热的天气来参加我们的一个分享活动。我来自于今天主办方之一的涂图,目前在负责涂图服务端架构。今天给大家分享一下我们在人脸识别领域的开发经验,以及如何把它提供为一个线上的API服务,来供开发者和企业调用的。
我们说正题之前,我先大致介绍一下涂图。
涂图的CEO本身是从PPTV的创始团队出来,也是一直深耕图像领域的一个技术牛人。最早涉足的是移动端的图像SDK,提供包括滤镜、贴纸以及常规的图片处理在内的功能。这个过程主要是利用手机GPU芯片上的OpenGL(手机上的名字是OpenGLES)接口,来实现一些图像算法。
我们把移动端图像相关的功能封装出来,提供给一些做其他业务的开发者和企业,他们就可以直接用我们比较成熟的技术,更加专注于他们的核心业务。比如我做一个社交应用,或者是说做一个电商应用,我可能没有那么多时间去做一些图像方面的事情,其实都可以调用涂图的服务来做。
在移动端SDK成型之后,我们也继续的沿着图片往下走,目前涂图已经发展成为面向开发者以及企业、提供图片、视频、直播以及图像识别在内的图像技术服务商。在移动端,涂图的产品是TuSDK,而我们服务端云端的产品叫TUTUCLOUD。
再说回正题。
今天,大家之所以对人工智能、机器学习熟知,可能缘于Google的AlphaGo带来的引爆。其实人工智能早在美国几十年前已经诞生了这个技术,机器学习是其中实现人工智能的一个方法。
机器学习里面其实还分了有表示学习和深度学习。深度学习跟表示学习的关系,就
好比我们以前最早的时候,做一个规则系统或者类似专家系统,它的输入输出都是算法工程师或者科学家们预先制定好的规则。输入什么样的内容,可能会得到相关的结果。中间的一些输入的内容所经过的程序,是算法或者手工设计者这么一个路径。
机器学习这门技术出来之后,它是通过一个提取特征——也就是说,可能某一类的输入内容都可以得到相同或者相似的结果,那么就不再需要去制定一个庞大的规则体系。到往后发展,一直到深度学习,其实中间所涵盖的需要手工去调的一些东西越来越少,到深度学习基本上已经是端到端的过程。
比如说就拿人脸识别来举例。人脸识别里面最基础的一块是人脸检测,那么我的训练集可能就是一堆人脸的照片加上这些照片里面人脸的位置,直接把人脸位置交给神经网络,它可以自动得到一个训练好的模型。然后我们再利用这个模型,给它一张照片,它没有见过的照片,其实是可以得到一个同样的检测框。
说到人脸识别,有一些概念我想先给大家介绍一下。就是人脸识别其实是一个涵盖了很多内容的概念,刚才讲到的人脸检测是其中一环。人脸检测,输入是一张照片,输出是这个照片中人脸的一个矩形框或者多个矩形框的坐标位置。这是一个最基本的,我能够识别出一张照片中人脸的位置在哪。
接下来的人脸配准,是一张人脸里面五官以及脸的轮廓的位置、点位。输入同样还是一个人脸矩形框,输出的话就是五官的点位描绘。把这些点如果连成线的话,那么就是一张人脸的轮廓。
人脸属性,包括人的性别、年龄、表情或者说情绪,更多的这些属性。
特征提取,是用来标识一张人脸的唯一的识别码。大家可以理解,其实可以理解为一个唯一识别号,类似一个二维码对应到一个网页或者一个URL那样的。利用每个人脸的特征,其实可以做出后面的人脸比对、人脸验证,包括人脸识别。这里的识别特指的是,我们把一个人脸的照片放到一个系统里面去逐个的比对,那么得出到底他的身份是哪个。以及后面的人脸检索和聚类,都是基于一个特征去比较。
最后一个是活体检测,用于对安全性要求比较高、要求做一些身份验证的东西。我要保证正在使用这个界面的是一个真人,而不是拿来了其他人的照片来冒充。这里可能还涉及到一些生物体征的东西,这里就不多介绍了。
今天,我们人脸识别已经比较成型了。大家打开tutucloud.com,可以在我们网站上查看到demo以及调用演示,以及刚才提到的文档。这是我们提取特征,人脸对齐点位的示意。像这种点位,主要会用在哪里?比如我想做一个直播系统里面的人脸贴纸,我的脸在动的时候,这个贴纸是要跟着我的表情一直动的。
我们刚才讲到特征提取或者是检测,其实是一个计算量比较大的算法,这里需要的硬件就是GPU。我想大家都或多或少接触过,比如说我们用来观看视频或者电影都需要GPU解码。
在图像领域,GPU是其中应用比较广泛的。虽然每个GPU核心的计算能力比不上CPU,但是它是利用核心的倍数来超越CPU的计算能力。比如一个CPU,现在大家听得比较多的,8核、16核,GPU其实有几千个核。
这么多核我们是怎么来用的?比如我们在用CPU的时候,程序的执行过程是线性的。而GPU则不同,是几千个核用来同时计算。也就是说一张图片上有好多个像素点,比如现在几千乘几千的像素的照片,计算的时候是同时去计算这些像素点的,因此性能优势明显。
当然,我们实际手机客户端上在用人脸识别这个技术,其实是跟服务端有比较大的差别。差别主要在于,手机客户端限于设备体积,它的GPU计算能力其实是比不上服务器端能够用上那么高的计算速度的设备的。
这一块算法的选择上,其实就要有所取舍。比如我们在手机客户端上一般会采用一些非深度学习的算法,也就是说深度学习虽然准确率很高,但是它的性能在比较差的设备上比不上传统算法,所以机器学习这一块还是涉及到性能以及识别精度之间的权衡。
在我们涂图服务端所用到的一些技术中,我们重点接下来就讲一下Docker这一块。涂图最早做服务端的时候,我们都是直接用Git提交代码,在服务器上也是用Git分析代码。而Docker的出现,大大的提高了开发人员的效率。
比如其中我们用到GPU程序,英伟达就联合Docker推出了Docker插件,它是工作在物理机和Docker虚拟环境之间的一层。我们的API文档使用的是SWAGGER来描述,这个使用的语言是对程序员非常友好的。使用它描述完API之后可以直接生成文档,用户使用起来就非常方便了。
我今天大概的演讲内容就这些,谢谢。