涂图李杨:在一切看脸的时代,如何高效的打造人脸识别服务

2024-04-27 15:08

本文主要是介绍涂图李杨:在一切看脸的时代,如何高效的打造人脸识别服务,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

由涂图和个推主办,桔子空间、创业五角场联合主办的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之后可以直接生成文档,用户使用起来就非常方便了。

我今天大概的演讲内容就这些,谢谢。

这篇关于涂图李杨:在一切看脸的时代,如何高效的打造人脸识别服务的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/940826

相关文章

Python办公自动化实战之打造智能邮件发送工具

《Python办公自动化实战之打造智能邮件发送工具》在数字化办公场景中,邮件自动化是提升工作效率的关键技能,本文将演示如何使用Python的smtplib和email库构建一个支持图文混排,多附件,多... 目录前言一、基础配置:搭建邮件发送框架1.1 邮箱服务准备1.2 核心库导入1.3 基础发送函数二、

关于DNS域名解析服务

《关于DNS域名解析服务》:本文主要介绍关于DNS域名解析服务,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录DNS系统的作用及类型DNS使用的协议及端口号DNS系统的分布式数据结构DNS的分布式互联网解析库域名体系结构两种查询方式DNS服务器类型统计构建DNS域

Linux中SSH服务配置的全面指南

《Linux中SSH服务配置的全面指南》作为网络安全工程师,SSH(SecureShell)服务的安全配置是我们日常工作中不可忽视的重要环节,本文将从基础配置到高级安全加固,全面解析SSH服务的各项参... 目录概述基础配置详解端口与监听设置主机密钥配置认证机制强化禁用密码认证禁止root直接登录实现双因素

java向微信服务号发送消息的完整步骤实例

《java向微信服务号发送消息的完整步骤实例》:本文主要介绍java向微信服务号发送消息的相关资料,包括申请测试号获取appID/appsecret、关注公众号获取openID、配置消息模板及代码... 目录步骤1. 申请测试系统2. 公众号账号信息3. 关注测试号二维码4. 消息模板接口5. Java测试

在Golang中实现定时任务的几种高效方法

《在Golang中实现定时任务的几种高效方法》本文将详细介绍在Golang中实现定时任务的几种高效方法,包括time包中的Ticker和Timer、第三方库cron的使用,以及基于channel和go... 目录背景介绍目的和范围预期读者文档结构概述术语表核心概念与联系故事引入核心概念解释核心概念之间的关系

CSS3打造的现代交互式登录界面详细实现过程

《CSS3打造的现代交互式登录界面详细实现过程》本文介绍CSS3和jQuery在登录界面设计中的应用,涵盖动画、选择器、自定义字体及盒模型技术,提升界面美观与交互性,同时优化性能和可访问性,感兴趣的朋... 目录1. css3用户登录界面设计概述1.1 用户界面设计的重要性1.2 CSS3的新特性与优势1.

SpringMVC高效获取JavaBean对象指南

《SpringMVC高效获取JavaBean对象指南》SpringMVC通过数据绑定自动将请求参数映射到JavaBean,支持表单、URL及JSON数据,需用@ModelAttribute、@Requ... 目录Spring MVC 获取 JavaBean 对象指南核心机制:数据绑定实现步骤1. 定义 Ja

CSS Anchor Positioning重新定义锚点定位的时代来临(最新推荐)

《CSSAnchorPositioning重新定义锚点定位的时代来临(最新推荐)》CSSAnchorPositioning是一项仍在草案中的新特性,由Chrome125开始提供原生支持需... 目录 css Anchor Positioning:重新定义「锚定定位」的时代来了! 什么是 Anchor Pos

C++高效内存池实现减少动态分配开销的解决方案

《C++高效内存池实现减少动态分配开销的解决方案》C++动态内存分配存在系统调用开销、碎片化和锁竞争等性能问题,内存池通过预分配、分块管理和缓存复用解决这些问题,下面就来了解一下... 目录一、C++内存分配的性能挑战二、内存池技术的核心原理三、主流内存池实现:TCMalloc与Jemalloc1. TCM

SpringBoot服务获取Pod当前IP的两种方案

《SpringBoot服务获取Pod当前IP的两种方案》在Kubernetes集群中,SpringBoot服务获取Pod当前IP的方案主要有两种,通过环境变量注入或通过Java代码动态获取网络接口IP... 目录方案一:通过 Kubernetes Downward API 注入环境变量原理步骤方案二:通过