社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  机器学习算法

通过机器学习实现实时 AR 自我表达

谷歌开发者 • 6 年前 • 578 次点击  

文 /  Artsiom Ablavatski、Ivan Grishchenko,Google AI 研究工程师


增强现实 (AR) 通过将数字内容和信息叠加到物质世界,帮助您利用所见完成更多事情。例如,Google 地图即将推出的 AR 功能 会在您所处的现实世界中叠加方向指示,为您指路。您可以借助 Pixel 相机中的 Playground 创意模式,并使用 AR 从不同的角度看世界。使用最近发布的 YouTube Stories 和 ARCore 全新的 Augmented Faces API,您可以为自己的自拍照添加动画面具、眼镜、3D 帽子等物件(https://developers.google.com/ar/develop/java/augmented-faces/)

实现这些 AR 功能的一个关键挑战是将虚拟内容恰当地锚定到现实世界;而要完成该过程就需要使用一系列独特的感知技术,以便能够在每一次微笑、皱眉或傻笑中追踪高动态表面几何结构。


我们的 3D 网格及其实现的一些特效


为此,我们采用机器学习 (ML) 技术来推断大致的 3D 表面几何结构,从而获得视觉效果。整个过程只需要使用单摄像头输入,而无需专用的深度传感器。该方法使用用于移动 CPU 推理的 TensorFlow Lite或其可用的全新移动 GPU 功能,实现实时 AR 特效。此技术与支持 YouTube Stories 全新创作者特效的技术相同,并且已通过最新版的 ARCore SDK 和 ML Kit Face Contour Detection API,向更广泛的开发者社区提供。



自拍 AR 的 ML 流水线

我们的 ML 流水线由两个协同工作的实时深度神经网络模型组成:一个是在完整图像上运行并计算面部位置的检测器,另一个是通用的 3D 网格模型,该模型在检测器计算出的位置上运行,并通过回归预测出大致的表面几何结构。精确的面部裁剪可以大幅减少常见数据增强需求(例如由旋转、平移和比例变换组成的仿射变换),而且可以让网络将大部分性能投入到提升坐标预测的准确性中,这对恰当锚定虚拟内容而言至关重要。 

裁剪完感兴趣的位置后,一次只能将网格网络应用于一个单帧,并且使用加窗平滑来减少面部静止时的噪声,同时避免在大幅移动期间出现滞后。


活动中的 3D 网格


我们针对 3D 网格采用迁移学习技术,并训练了一个具有多个目标的网络:该网络能够同时根据经合成和渲染的数据预测 3D 网格坐标,并根据与 MLKit 提供的数据类似且带有注释的现实数据预测 2D 语义轮廓。训练好的网络能够同时根据合成和现实数据,为我们提供合理的 3D 网格预测结果。我们使用包含不同地区信息的数据集中的数据训练所有模型,随后又使用平衡且多样化的测试集对模型的定性和定量性能进行测试。

注:MLKit 链接

https://firebase.google.com/docs/ml-kit/face-detection-concepts#contours


3D 网格网络接收裁剪后的视频帧,并将其用作输入值。由于 3D 网格网络不依赖额外的深度输入,所以也可以应用于预先录制的视频。模型输出 3D 点的位置,以及在输入中存在并合理对齐的面部概率。一种常见的替代方法是为每个标记预测 2D 热图,但该方法并不适用于深度预测,并且由于点的数量过多,其计算成本也很高。

我们通过迭代自展和优化预测,进一步提高模型的准确性和鲁棒性。通过这种方法,我们可以改进数据集,解决愈发具有挑战性的案例,例如鬼脸、斜角和遮挡。此外,数据集增强技术还扩展了可用的地面实况数据,并开发出能够应对相机缺陷或极端照明条件等人工产品问题的模型。


数据集扩展和改进流水线



专为硬件定制的推理

我们使用 TensorFlow Lite 构建设备的神经网络推理。新推出的 GPU 后端 加速能够在适用的情况下提升性能,并显著降低功耗。此外,我们还设计出各种具有不同性能和效率特征的模型架构,为各种消费级硬件带来福音。轻量级网络最重要的差别在于残差块布局和可接受的输入分辨率(最轻量的模型为 128x128 像素,而最复杂的模型为 256x256 像素)。我们还改变了层数和二次采样率(输入分辨率随网络深度减少而降低的速度)。 


每帧的推断时间:CPU 与 GPU 的对比


这一系列优化的结果就是:使用轻量级模型带来实质性的加速,同时也充分降低了 AR 特效质量的下降幅度。



这些成果最终能够通过以下方式,让用户在 YouTube、ARCore,以及其他客户端上体验到逼真的自拍 AR 特效:

  • 通过环境映射模拟光反射,以实现逼真的眼镜渲染

  • 将虚拟物件阴影投射到面部网格,打造自然光效果

  • 对面部遮挡进行建模,以隐藏面部后面的虚物部分,例如下图所示的虚拟眼镜


YouTube Stories 提供创作者特效,例如基于 3D 网格的逼真虚拟眼镜


此外,我们还可通过以下方式实现非常逼真的妆容效果: 

  • 对应用到唇部的镜面反射进行建模

  • 使用光度感知材料进行面部彩绘 


比较 5 个目标在不同光照环境下的真实妆容和 AR 妆容的案例研究


我们很高兴向创作者、用户和开发者分享这项新技术,请通过下载 最新的 ARCore SDK,直接使用这项技术。未来,我们计划将这项技术应用到更多的 Google 产品中(https://developers.googleblog.com/2019/02/new-ui-tools-and-richer-creative-canvas.html)



致谢

我们要感谢 Yury Kartynnik、Valentin Bazarevsky、Andrey Vakunov、Siargey Pisarchyk、Andrei Tkachenka 和 Matthias Grundmann 与我们合作开发当前的网格技术;Nick Dufour、Avneesh Sud 和 Chris Bregler 提供基于参数化模型的早期版技术;Kanstantsin Sokal、Matsvei Zhdanovich、Gregory Karpiak、Alexander Kanaukou、Suril Shah、Buck Bourdon、Camillo Lugaresi、Siarhei Kazakou 和 Igor Kibalchich 构建 ML 流水线,帮助打造绚丽特效;Aleksandra Volf 和注释团队为追求完美所做出的不懈努力和奉献;Andrei Kulik、Juhyun Lee、Raman Sarokin、Ekaterina Ignasheva、Nikolay Chirkov 和 Yury Pisarchyk 对以 GPU 为中心的移动网络架构优化开展审慎的基准测试,并提供数据分析。



更多 AI 相关阅读:



Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/31762
 
578 次点击