竹取千树 2018-02-28
时至今日,计算机视觉和深度学习的迅速发展,给很多技术领域带来了颠覆性的变化。
人脸图像处理(Face Image Processing)就是其中的典型例子:在互联网时代,该技术通过各种各样的应用方式,为人们的生活带来了便利和安全,并增添了乐趣。
另一方面,电子商务领域历经PC互联网和移动互联网时代,进入到了智能化时代;它所拥有的海量图像视频数据、丰富的应用场景,以及高难度的性能挑战,为计算机视觉技术,尤其是人脸技术,提供了大放异彩的舞台。
图1.电商业务中人脸技术的应用架构
如图1所示,电商工作中需要综合利用人脸技术。从业务看,涉及到4种类型的场景:
从算法技术看,人脸技术包括了3个主要模块,即:
图像算法在实际中落地,可以采用不同的运行模型,包括: 云端部署、移动端部署。
云端模式中,算法和数据都在服务器上运行,图片需要集中存储,适合后台的批量图像处理。
移动端部署是为了达到实时响应,将算法部署在移动端(通常是手机)上,适合单个业务请求的实时响应。
电商业务会根据实际需要,采用相应的方案;在有些情况下也可以将云端和移动端结合起来,形成一种混合部署方式:云+端。
更进一步,现在有的公司在探索将人脸算法运行在芯片上的技术方案,可以形成边缘计算的模式。
本文结合电子商务业务场景,介绍人脸图像技术的原理,以及如何在业务中使用这些技术构建业务应用。
经过多年的不懈努力,研究者们在人脸图像技术方面取得了日新月异的成就。这些技术一般涉及到两种类型,即:传统方法和深度学习为主的方法。
2.1基于深度学习的人脸检测(MTCNN)
人脸检测技术的里程碑是Paul Viola和Michael J. Jones在2000年左右提出的级联人脸检测器,该方法采用了快速计算的Harr特征,通过Adaboost算法选择出有效特征和一系列的弱分类器(weak learner),最后以线性组合方式得到强分类器,提高了检测的速度和精确率,可以实时运行。
近几年,深度学习发挥出越来越大的威力,将人脸检测技术推向了新的高度,因此涌现了很多基于Deep Learning的人脸检测算法。其中比较有代表性的是MTCNN方法(Joint Face Detection and Alignment using Multi-task Cascaded Convolutional Neural Networks),它是由中国学者Kaipeng Zhang、Yu Qiao等提出来的。
该方法被称为MTCNN(Multi-task Cascaded Convolutional Neural Networks),借鉴了级联检测器的思想,通过不同的CNN分类器联合训练,将人脸检测和特征点定位的任务结合在一起。
图2.MTCNN方法的系统架构
它的框架如图2所示,包括3个CNN的网络结构(P-Net,R-Net,O-Net)。
(1)Proposal Network (P-Net):这是一个全联接的CNN网络,用于获取人脸区域的候选窗口,以及人脸边界框(bounding box)的回归向量。基于边界回归信息对候选框进行校准,那些高度重叠的候选框通过非极大值抑制(NMS)操作进行合并。
(2)Refine Network (R-Net):从P-Net阶段通过的所有候选窗口,输入R-Net网络,该网络将大部分的False Positive区域作进一步的排除,然后进行边界框回归和NMS操作。
(3)Output Network (O-Net):该结构和R-Net层类似,但是该层对人脸区域进行了更多的监督,同时还会输出5个特征点的位置。这一步输出最终的人脸框和特征点位置(左眼、右眼、鼻子、左嘴角、右嘴角)。
具体的网络结构如图3所示:
图3.网络结构(P-Net、R-Net、O-Net)
在训练过程中,MTCNN方法从三个任务对CNN检测器进行联合训练:人脸分类、边界框回归、人脸特征点定位。它综合考虑每个任务对应的损失函数,构成了多任务的总的损失函数。
训练过程中,采用随机梯度下降方法(SGD)对这三个CNN进行优化求解。此外,该方法采用了Hard Sample Mining的策略,每次只后向传播前70%样本的梯度,这样能够自动化训练,且取得更好的训练效果。
图4是检测和特征点定位的示例图:
图4.MTCNN方法结果的实例图
从实际运用看,MTCNN方法在FDDB和WIDER FACE集合上取得了很不错的检测效果,同时还能够实时运行(在GPU环境下)。
该方法在GitHub上开源代码了(开源地址是:https://github.com/kpzhang93/MTCNN_face_detection_alignment),以Caffe为基础框架。很多研究者以它为基础,提出很多改进版本,包括Mxnet、Windows等平台上的人脸检测运行包,获得了广泛的应用。
MTCNN方法可以输出人脸上5个特征点的位置,即:左眼、右眼、鼻子、左嘴角、右嘴角。
实际上根据不同应用,特征点的数量定义各不相同,少则几个,多则上百个,通常分布的区域包括眼睛、眉毛、鼻子、嘴巴、脸部外轮廓等,如图5所示。
图5. 人脸特征点的定义示意图
这个技术的核心是如何精确计算出人脸中特征点的位置,一般涉及到的算法分成3种,分别是:
前两种方法都属于传统方法,定位效果不错且检测速度快,实际中都有开源包,例如Stam开源包是ASM的一种实现方式;另外,Ensemble of Regression Tress(ERT)是级联方法,开源的dlib 库中(http://dlib.net/),有该方法的实现代码。
基于深度学习的特征点定位算法,在2013年开始取得突破,香港中文大学的Tang Xiaoou教授研究组提出了DCNN的级联结构(Deep Convolutional Network Cascade for Facial Point Detection),在特征点定位上取得了不错的效果。
在此基础上,Zhou Erjin等提出了一个从粗到精的人脸特征点定位方法(Extensive Facial Landmark Localization
with Coarse-to-fine Convolutional Network Cascade),首次利用卷积神经网络,实现了68个人脸特征点的高精度定位。
该算法将人脸特征点分为内部特征点和轮廓特征点,内部特征点包含眉毛、眼睛、鼻子、嘴巴共计51个位置,轮廓特征点包含17个特征点。具体采用的系统架构和CNN网络结构,如图6所示。
图6.人脸特征点定位(a)系统架构
图6.人脸特征点定位(b)CNN网络结构
2.3人脸识别
人脸识别的过程是:在预先存储的人脸图像数据库中进行查询,获取身份识别的结果。其中最关键的步骤是提取人脸表示特征,最近几年的突破,都是采用深度学习的方法。
在经过人脸检测和特征点定位等模块之后,输入人脸区域图像样本。人脸识别的大致流程如下:
从具体方法上看,2013年提出的DeepFace方法是CNN在人脸识别的开山之作,人们后续又提出了DeepID和FaceNet等方法,而且都能体现DeepFace的身影。
对人脸识别技术发展起到重要促进作用的另一因素是人脸图像数据库的建设,它为技术的评测提供了舞台和标准。如今几个著名的人脸识别的评测数据库包括:FERET人脸数据库、LFW数据库、Mega Face数据库。
从之前所列的4项业务应用看,美妆导购和人脸支付是日常比较常见的了,本文主要介绍图像管理和电商直播中如何使用人脸技术。
3.1后台图像管理
在电商基础业务中,需要对肖像权使用情况进行监测,这个需求通常与两个场景有关:
第一个是广告侵权检测,有的商家邀请了明星代言店铺的商品,而有些侵权商家会盗用明星代言商品图;因此需要进行明星脸识别。
第二个是商家实拍认证,判断拍摄图片是否为商家合作模特拍的图像;有人脸的模特照片可通过人脸识别方式解决。
归纳起来就是使用人脸识别技术来判明图片中的人物身份。本文以广告侵权处理场景为例,介绍2种不同的解决方案。
被动的广告侵权检测
给定商品图像,如何判定它是否侵犯明星肖像权?首先构建一个明星库,包含需要保护人物的肖像图像。明星数量通常与实际业务相关,一般有数百人,图像数量有限。特征比对步骤,可以采用快速排序的方法。具体的流程如图7所示。
图7.广告侵权检测的流程图(被动)
主动的广告侵权稽查
该任务是:给定明星图像,对全平台上的商品进行稽查,将侵权商品查找出来并进行处理。
首先要按照人脸检测、特征点定位、特征向量提取的步骤,将商品图中的人脸对象进行处理,构建商品图中的人脸库。
如图8所示,查询对象是海量的商品图中的人脸库,通常规模很大,数以百万计,有的平台的规模是数十亿。
图8.广告侵权检测的流程图(主动)
因此特征搜索的步骤,不能采用简单的排序方式了,而是要构建一个搜索引擎,通过近似最近邻查找的方法完成搜索任务。
鉴于搜索数据库的量级很大,因此对每个查询都要计算所有的距离是非常困难的,同时存储海量图片的特征向量需要耗费巨大的存储空间。
为了解决这些问题,采用了近似最近邻算法中的局部优化的乘积量化算法(Product Quantization, PQ),训练得到粗量化质心和细量化质心,粗量化的结果用来建立倒排索引,细量化的结果用来计算近似距离。
通过这种方法,既能保证商品图的人脸图像索引结果的存储需求合理,也能使检索质量和速度达到更好的水平。
这两种方案的对比,可以总结如下:
3.2直播应用
后台图像管理部署在云端执行,而电商直播中的人脸技术应用,需要在手机上运行。直播中的人脸技术总体架构如图9所示:
图9.直播中的人脸技术总体架构
直播中所涉及的底层技术(人脸检测、特征点定位和跟踪)大部分都需要在手机上实时运行,由此需要遵循新要求:速度要足够快,模型要足够小,同时保证有足够高的准确度,这是需要折中的过程。
目前所采用的解决方案大部分是通过算法优化和模型优化的工程手段,将算法移植到手机端。
在实际业务中实现了人脸特征点跟踪的SDK,并部署在移动端,应用在电商直播场景中。
基于深度学习的人脸技术虽然取得了显著的成果,但是深度学习对大量计算资源的需求,以及复杂的模型(几十MB到几百MB),难以应用在移动端。
传统算法虽然效果没有超过深度学习,但是资源消耗很小,模型也简单,在应用过程中更加适合于用到目前的移动设备上来。
随着处理器技术发展和深度学习优化技术的逐渐成熟,基于深度学习的人脸技术会更加普及。
在调研了众多的人脸检测算法后,最终选用了基于Pixel Difference(PD)特征的PICO算法(Object detection with pixel intensity comparisons organized in decision trees)。该方法采用像素间的灰度差值作为特征,可以提高检测速度;更进一步,将PD特征进行归一化,提出了Normalize Pixel Difference(NPD)特征,提高了对光照的鲁棒性。这些方法计算资源消耗少、模型简单,适合应用于移动设备。
得到了分类器之后,还需要做代码优化的工作。针对移动端CPU的特点,进行了定点化。采用了查表(Look Up Tabel)的方法,将NPD特征预先计算的结果存储在一个二维表中;在实时计算特征的时候,直接从内存中读取,从而提高检测速度。最终得到的人脸检测SDK具备以下特性:
采用基于Ensemble of Regression Tress(ERT)算法的人脸特征点检测方法,利用PD特征,学习每个特征点的局部特征,然后将特征组合起来,使用线性回归检测关键点;检测速度快,定位效果也不错。
同时需要做一系列优化,包括如下几个方面:
最终得到人脸特征点定位SDK,具备以下特性:
图10(a)是人脸检测和特征点定位的示例图。从中看到算法具有较好的鲁棒性,对于不同的姿态、不同的光照下的人脸图像,能够准确的定位出来,为后续的直播打下基础。
直播中可以利用这些算法来做互动效果,包括人脸的美肤/美白,以及特效,如图10(b)所示。
图10. (a)人脸检测和特征点定位的示例图
图10.(b)美颜图像实例
综合本文中的应用实例可以看出,人脸技术和电商业务场景的结合,为保障平台运营和用户体验,带来了新的价值。一方面,通过人脸识别方法自动识别商品图像中的人物,提升了后台图像管理的效率;另一方面,电商直播中应用人脸技术,实现了美肤和特效等功能,改善了用户体验。
深度学习方法为人脸识别技术领域带来了巨大的飞跃,而传统方法能够保证足够的性能和足够的准确度,达到实时运行的目标。因此,在开发过程中,需要根据具体需求来进行方案的权衡和选择。
图像算法技术的开发,需要在日常工作过程中积累基础模块,逐步拓展其运用场景,并且根据业务场景变化,进行不断的迭代,为业务需求提供保障。
【张洪明·蘑菇街高级技术专家】
张洪明(蘑菇街花名:民达)2015 年加入蘑菇街,负责美丽联合集团图像技术的研发工作,创建和带领一个算法团队,与工程和业务团队合作,为集团提供图像技术支持。主要工作包括:图像搜索、图像识别、商品图像内容分析等;业务涉及电商导购、直播等场景。在加入蘑菇街之前,分别在 NEC 中国研究院、阿里巴巴集团,从事图像技术和机器学习的研究和应用。