爱奇艺是中国最大的在线视频公司之一,其愿景是“做一家以科技创新为驱动的伟大娱乐公司”。创新是刻印在爱奇艺体内的平台基因,爱奇艺希望通过不断的技术创新,持续改善用户的娱乐体验,其中就包括在AI/AR领域的创新研究。
SmileAR是爱奇艺自研的基于TensorFlow Lite的移动端AR解决方案,该方案包含人脸检测、人脸关键点、人体关键点、人像分割、手势识别、物体识别等基础算法。基于这些基础算法我们进一步封装了美颜、美体、尬舞机、扫一扫等AR应用。目前SmileAR已部署到爱奇艺旗下的多个产品中,包括日活过亿的爱奇艺主APP、奇巴布、姜饼短视频及爱奇艺直播机等。
人脸关键点识别与追踪
对于直播和视频拍摄,人脸关键点定位是其中一项重要的基础能力。人脸关键点是指人脸区域中能够体现表情状态的脸部位置,包括眼睛、嘴巴、鼻子等部位。基于人脸关键点定位得到的准确点位信息,可以实现瘦脸、局部美妆、虚拟穿戴等功能。这些功能已经在爱奇艺主站APP的短视频拍摄中落地,可以自动进行瘦脸、大眼等美颜功能,还能切换各种风格的头饰穿戴,让普通用户也能拥有一张明星脸。
手势跟踪与识别
手势识别是移动端上的一种重要交互方式,根据不同手势触发响应动效,能提高短视频的交互性。手势识别采用了SSD检测模型,使用MobileNet作为主干网络,在部署时使用量化技术提高执行速度,最终在移动端实现了实时手势检测。目前爱奇艺手势识别已经部署在了爱奇艺客户端、爱奇艺直播机、姜饼短视频等APP中。
人体关键点识别
人体关键点识别算法作为爱奇艺的SmileAR中的一部分,已经在"奇巴布"APP中的"萌宝舞室"模块中落地,该模块是爱奇艺专为0-12岁宝宝而设计。其通过让宝宝模仿专业儿童舞蹈教练的跳舞动作,从而达到锻炼宝宝的协调能力的目的。在宝宝模仿学习的过程中,我们的算法会不断对宝宝的模仿动作进行识别,并与舞蹈教练的动作进行相似度计算,从而对宝宝动作的精准度进行判断,当动作较为精准时会触发相应的动效(如各种水果等),不断激励宝宝学习和改进。该功能上线以来受到了宝妈宝爸的一致好评,表示:这个功能简直是"哄娃利器"。
移动端算法优化
众所周知,深度学习的推理需要消耗大量的算力,这正是手机、平板这样的移动终端所欠缺的能力,并且SmileAR多数算法需要实时进行处理,这就对我们的移动端加速及算法优化带来了巨大挑战。同时不同业务对算法的需求也是多种多样的,我们针对不同的业务需求也做了相应的算法优化。
常规加速优化
为了提升算法的推理速度,我们采用了常规的模型加速方法,将复杂的主干网络替换为适合移动端的MobileNet V2网络;对精度要求不是那么高的业务场景,我们进一步减小网络的输入尺寸、减少MobileNet V2网络的通道数。这一系列操作对算法的执行速度有显著的提升。
量化训练加速
因为浮点型数据在移动端计算很慢,我们使用TensorFlow对算法模型进行了Quantization-aware training的训练,新版的TensorFlow对量化的支持很完善,只要在训练代码中加入两行代码即可完成量化训练,我们先通过正常的训练获得收敛的模型,再对其进行量化训练。在高通骁龙,华为麒麟和联发科Helio等主流芯片上的CPU推理速度改进如下表:
人脸关键点抖动优化
预测单帧图像的关键点容易出现抖动,因此我们对多帧图像进行考虑,利用了视频的时序信息,使用高斯混合模型融合之前帧的关键点信息,获得当前帧稳定的人脸关键点。
多任务训练优化
为了得到更好的效果,人脸检测和人体关键点识别均采用了多任务学习。由于人脸姿态、表情变化大,因此人脸模型加入对姿态、表情等的预测。模型结构如下图:
在测试数据上,人脸关键点定位加入姿态估计任务,误差降低了8%;加入表情识别,误差降低了2%;人体关键点如果只是预测热度图会导致点位偏差较大,因此该模型也引入了多任务模型。
跳出局部最优解
人体关键点算法是多任务学习,关键点热度图仅是其中的一个任务,由于网络的裁剪,部分点会输出一张全零的热度图(陷入局部最优,全零输出代价很小),针对这个问题,我们设计一种热度图的辅助损失函数,对全零热度图增加一个惩罚,最终解决了陷入局部最优的问题。
Hard Mining
在人脸关键点定位任务中,各种数据分布不均衡,一些困难的场景,如大角度,闭眼,张大嘴等,样本数量较少。当模型训练到收敛后,通过Hard mining可以进一步减少误检数并提高模型稳定性。
移动端部署
跨平台部署
为了实现Android、iOS和Windows多端部署,我们采用了TensorFlow Lite的C++接口。将TensorFlow Lite编译成不同平台的静态库引入项目,然后在iOS和Android平台分别使用Objective C和Java进行上层的封装,这样就可以实现移动端native部分的代码复用,提高跨平台开发效率。而在Windows端,我们用C++做了同样的封装,并将Tflite成功应用在人脸检测等功能中。在输入为1080P的情况下,速度达到了实时。在SDK交付时,只需要针对业务方需求进行打包,业务方只需要调用相应的Java/Objective C层API,不需要关心底层实现,方便移动端产品线集成。同时因为TensorFlow Lite可以直接在Windows上直接运行,我们将它也应用到了爱奇艺的Windows客户端上。
SDK鉴权和模型保护
在模型交付部分,模型文件使用爱奇艺自研加密算法进行加密,提高移动端模型的安全性。同时为了保护爱奇艺的知识产权,我们也增加了License授权验证
包大小管理
移动端网络环境复杂,包大小会严重影响下载成功率和用户体验,我们利用了链接时优化的方法进一步缩小TensorFlow Lite库的大小。由于TensorFlow Lite默认注册了所有的算子,我们实际中只需要用到算子的一部分,因此我们可以将不需要的算子剔除。在将静态库链接入动态库或者可执行程序时,没有使用的代码不会被链接器纳入链接产物,利用这一点,我们继承了MutableOpResolver,注册模型中需要的算子。这种方案既不会影响TensorFlow Lite静态库代码,又可以动态增删算子。
总结与展望
本文以SmileAR为例,介绍了 TensorFlow Lite 在爱奇艺中的应用。TFLite作为一个为移动端定制的引擎,其跨平台的支持(Android、IOS、Windows 64位),使得我们一套模型可以多端部署,大大节约了研发成本;其卓越的执行效率,使得很多算法能在移动端实时运行,为产品落地提供了有力保障;其丰富的工具,如benchmark tool,可以快速的分析模型耗时并为模型裁剪提供有力的帮助。借助TFLite的力量,SmileAR已经顺利在多端、多APP中落地。
SmileAR作为爱奇艺AI技术落地的重要应用场景,未来将在视频时域信息增稳、模型移动端加速、模型精度优化、不同平台GPU加速等研究方向持续探索,并将在Google TensorFlow生态支持下,持续为爱奇艺各个业务线提供高效稳定的AR解决方案,助力爱奇艺的用户增长与留存,使用户可以便捷平等地享受由科技创新带来的沉浸式的极致AR体验,为用户提供快乐的娱乐体验。