https://blog.tensorflowcn.cn/2019/07/smilear-iqiyis-mobile-ar-solution-tensorflow-lite.html
https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjhus_nT8gkEcQWXWFzC_K8EAxjIdcoQQyBvdBGheMmnZ6A1CggzfebtiwJdlp3-1q18zspBP163YXYsdIzPXGLyybIG2qB3V2RldI5RNnLCXEL4kCopFREhaEQp3MDLszFN8dJxRn2QBw/s1600/smilearlogo.png
爱奇艺 SmileAR 工程团队客座文章
简介:SmileAR 是爱奇艺开发的基于 TensorFlow Lite 的移动 AR 解决方案。它已广泛部署在爱奇艺的众多应用中,包括爱奇艺旗舰视频应用(1 亿+ 日活)、奇巴布(儿童热门应用)、姜饼(短视频应用)等等。
在这篇文章中,我们想简单介绍一下 SmileAR 以及我们使用 TensorFlow Lite 的经验。如果您不了解我们,
爱奇艺 是中国领先的在线娱乐公司,我们的愿景是成为一家由科技创新驱动的伟大娱乐公司。创新是爱奇艺 DNA 的重要组成部分,我们努力通过科技进步不断提升用户娱乐体验,包括采用 AI(人工智能)和 AR(增强现实)领域的尖端研发。
|
图 1 SmileAR 标识 |
SmileAR 是爱奇艺使用 TensorFlow Lite 开发的内部移动 AR 解决方案。SmileAR 实现了许多关键的机器学习算法,如人体姿态估计、人像分割、手势识别和目标检测。在此基础之上,我们开发了更高层次的 AR 功能,如舞蹈评分、AR 扫描、美颜滤镜等等。目前,SmileAR 已部署在爱奇艺旗下的许多产品中,包括爱奇艺旗舰视频应用(1 亿+ 日活)、奇巴布(儿童娱乐热门应用)、姜饼(又名煎饼,短视频应用)和爱奇艺直播(直播应用)。
|
图 2 SmileAR 架构 |
SmileAR 中的示例用例
手势识别和跟踪
手势识别是移动设备上重要的用户交互方式。它为我们的短视频应用带来了有趣的体验,现在我们的用户可以使用手势来触发引人入胜的 AR 效果。在我们的 SmileAR 解决方案中,Single Shot Multibox Detection (SSD) 模型用于手势识别,MobileNet 用作主干网络。我们还使用了
TensorFlow Lite 量化感知训练 来提高执行速度。我们的手势识别模块可以在移动设备上实现实时性能。目前,爱奇艺手势识别已部署在爱奇艺旗舰视频应用、爱奇艺直播机应用、姜饼短视频应用等等中。
|
图 3 SmileAR 手势贴纸演示 |
AR 扫描
AR 扫描是爱奇艺主应用中经常使用的一项功能:用户可以扫描特定徽标或对象来触发事件,例如打开网页或执行动画。我们的 AR 扫描功能基本上是通过分类模型构建的(我们使用 MobileNet),为了缩短推理时间,我们将 MobileNet 的深度降低到 0.75。通过使用 TensorFlow Lite,我们能够在设备上实现纯实时扫描(Kirin 970 SoC 上的推理时间约为 30 毫秒)。而且我们通过量化进一步将我们的模型缩小到 1.77M,同时保持较高的精度。目前,AR 扫描已部署在电视连续剧互动和活动营销等多种场景中,取得了良好的效果。
|
图 4 SmileAR AR 扫描演示 |
人体姿态估计
作为我们爱奇艺 SmileAR 解决方案的一部分,人体姿态估计已应用于奇巴布应用的“萌宝舞蹈室”功能中。在舞蹈室,我们的用户(通常是儿童)尝试模仿专业教练的舞蹈动作。当应用开启时,我们的算法会密切监控用户的身体动作,并计算用户动作与演示动作的相似度,以确定用户的完成度。当用户紧密地跟随演示时,我们的应用会自动在屏幕上触发某些特殊效果(如掉落的水果),鼓励用户学习更多并不断提高。自推出以来,此功能一直受到父母的高度赞扬。
|
图 5 SmileAR 舞蹈评分演示 |
我们的姿态估计也已被用于人体手势识别,例如“比心”手势(将手臂举过头顶,使其形成心形)、“世界和平”手势(中国艺术家提出的一种帅气的手势,象征着对世界和平的希望)、和“超人”手势(许多人模仿的超人经典手势)。我们使用机器学习算法来分析用户身体动作,规范化其姿势,并将其与参考手势进行比较,以确定是否应该为用户触发特殊动画效果。
|
图 6 SmileAR 手势识别演示
|
移动手机的算法优化
深度学习推理需要大量的计算量。尽管如今现代移动 CPU 和 GPU 变得越来越强大,但要在设备上实时进行机器学习仍然是一项挑战。我们的 SmileAR 平台需要以最小的延迟来解决各种问题,以服务于我们的用户,因此我们突破了极限,优化了我们的算法和实现,以满足我们的业务需求。
推理加速
为了提高推理速度,我们采用了一种常见的模型加速技术:用高度针对移动设备优化的 MobileNet V2 网络替换复杂的主干网络。对于精度要求不高的用例,我们进一步减小网络的输入大小和 MobileNet V2 网络中的通道数。这些优化技术显着加速了我们算法的执行。
量化感知训练以加速模型
由于移动设备上的浮点运算比定点运算慢,因此
量化感知训练方案 用于进一步提速。TensorFlow Lite 完美支持量化。量化感知训练只需两行额外代码即可轻松实现。我们首先通过正常训练获得收敛的浮点模型,然后进行量化感知训练以获得定点模型。在 Qualcomm Snapdragon、华为麒麟和联发科 Helio 等流行的 SoC 上,CPU 推理速度提升如下所示。我们计划在未来与 TensorFlow 团队紧密合作,进一步提高这些数字。
|
图 7 带有和不带有 8 位量化的样本模型推理时间 |
摆脱局部最优
我们的姿态估计实现还使用多任务学习算法。热图估计是其中一项任务。在训练我们的模型时,有时一些热图会变成全零(基本上算法陷入了局部最优,因为全零热图的损失是最小的)。为了解决这个问题,我们设计了一个辅助损失函数来惩罚全零热图,最终我们的算法能够摆脱局部最优。
|
图 8 添加了惩罚全零热图的辅助损失函数后的损失曲线 |
在移动设备上部署
跨平台部署
为了实现跨平台部署(Android、iOS 和 Windows),我们使用 TensorFlow Lite 的 C++ 接口。我们将 TensorFlow Lite 编译成适用于不同平台的静态库,然后分别使用 Objective-C 和 Java 对 iOS 和 Android 的平台相关模块进行封装。通过这种方式,我们最大限度地提高了移动原生代码的可重用性,并将跨平台开发工作量降至最低。在 Windows 方面,我们使用 C++ 进行相同的封装,并成功地将 TensorFlow Lite 用于各种功能。即使输入是具有挑战性的 1080P 高分辨率视频,我们仍然可以实时运行 TensorFlow Lite 模型。
当我们的 SmileAR SDK 在内部交付时,它可以以干净灵活的方式进行打包,以满足我们各种业务部门的需求。这些业务部门只需要调用相应的 Java 或 Objective-C API,而无需担心我们的底层实现,这极大地方便了集成到我们的移动产品中。同时,由于 TensorFlow Lite 可以直接在 Windows 上运行,因此我们还在我们的 Windows 客户端中直接使用 SmileAR 来实现直播功能。
SDK 授权和模型保护
在最终交付之前,我们的模型文件会使用爱奇艺的内部加密方案进行加密,以保证移动模型的安全。同时,为了保护爱奇艺的知识产权,我们还添加了许可授权验证。
包管理
移动网络环境多样化且复杂,应用包大小是成功下载和最终用户体验的关键因素。我们使用链接时优化进一步减小 TensorFlow Lite 库的大小。TensorFlow Lite 默认情况下注册所有运算符,而实际上我们只需要一小部分运算符,因此所有未使用的运算符都可以消除。当静态库链连接到动态库或执行器时,未使用的代码将不会被链接器包含在链接的程序中。为此,我们继承 MutableOpResolver,并有选择地注册模型中需要的运算符。这种灵活的方案不会影响原始 TensorFlow Lite 静态库代码,但允许我们动态添加和删除运算符。
总结
以 SmileAR 为例,我们讨论了爱奇艺内部对 TensorFlow Lite 的采用。TensorFlow Lite 作为移动设备的有效推理引擎,具有出色的跨平台支持(Android、iOS 和 Windows 64 位,对我们而言)。通过使用 TensorFlow Lite,我们节省了大量的工程时间和资源。其卓越的执行效率使许多算法能够在移动设备上实时运行,并推动了我们的 AI/AR 功能的部署。其丰富的工具,例如基准工具,可以帮助我们快速识别模型的瓶颈,并为加速模型推理提供强大的帮助。在 TensorFlow Lite 的帮助下,SmileAR 已成功部署在爱奇艺的许多应用中。
作为爱奇艺 AI 技术的重要用例,SmileAR 计划在未来添加时空 CNN 模型、模型精度优化以及不同平台上的 GPU/DSP 加速。在 Google TensorFlow 生态系统的支持下,SmileAR 将继续为爱奇艺的各种业务场景提供高效、可靠的 AR 解决方案,并提高爱奇艺的用户增长和留存率,使所有用户都能轻松平等地享受身临其境的 AR 体验。