查看原文
其他

在 Pixel 3 手机上学习预测深度

Google 谷歌开发者 2019-02-15

文 / 研究员 Rahul Garg 和软件工程师 Neal Wadhwa

通过对背景进行模糊化处理,Pixel 智能手机的人像模式可聚焦对象,让您拍摄出专业级图像。去年,除公布其他内容外,我们还曾介绍如何通过传统的非学习式立体算法,并利用单摄像头及其相位检测自动对焦 (PDAF) 像素技术(亦称为双像素自动对焦)计算深度。今年,我们利用机器学习来改进 Pixel 3 的深度估算功能,进而提升人像模式的拍摄质量。


左图:HDR+ 原始图像。右图:基于传统立体算法与机器学习所得深度的人像模式拍摄效果对比。使用机器学习得到的图像深度错误更少。值得注意的是,在传统立体算法所得结果中,男士身后的很多水平线被错误地估算为与其处于同一深度,因而保留了锐度 (Mike Milne)



简要回顾

正如去年的博文所述,人像模式利用神经网络确定人与背景的对应像素,并利用 PDAF 像素产生的深度信息来增强此两层人物分割掩码。此操作旨在实现依赖深度的模糊处理,这更接近专业相机的做法。 


PDAF 像素的工作原理是对同一场景捕捉两个略微不同的视野,如下图所示。通过来回切换这两个视野,我们会发现人处于静止状态,而背景则呈现水平移动,这种效果称为视差。由于视差是点和相机的距离与两个视点之间距离的函数,因此我们可将一个视野中的每个点与另一个视野中的对应点进行匹配,以此估算深度。


左侧和中间的这两张 PDAF 图像看起来非常相似,但您可以在右侧的裁剪图中看到两者之间的视差。其中裁剪图中央的圆形区域最为明显


然而,由于两个视野间的场景视点几乎未移动,我们很难在 PDAF 图像中找到这些对应关系(此方法称为 “双目立体视觉”)。此外,所有立体技术均深受孔径问题困恼。孔径问题是指,如果您通过小孔径观察场景,则无法为平行于立体基线(即两个摄像头之间的连线)的线条找到对应关系。换言之,在观察上图中的水平线(或纵向拍摄中的垂直线)时,这些线条在两个视野中的任何可能移动几乎都别无二致。在去年的人像模式中,上述所有因素均会导致深度估算出现误差,并会产生恼人的伪影。



改进深度估算

事实上,立体算法计算深度所使用的视差只是图像中众多深度线索之一,基于此,我们在 Pixel 3 的人像模式中修复了这些错误。例如,远离合焦平面的点看起来不如距离更近的点锐利,进而为我们提供散焦深度线索。此外,即使是在平面屏幕上查看图像,我们也能准确判断出物体的距离,因为我们了解日常物体的大致尺寸(例如,我们可以利用人脸照片中的像素数来估测物体的距离)。我们将此称为语义线索。

人工设计算法以综合利用上述不同线索极具挑战,但借助机器学习,我们可在实现这一目标的同时更好地利用 PDAF 视差线索。具体而言,我们会训练一种在 TensorFlow 中编写的卷积神经网络,使之将 PDAF 像素作为输入并学习预测深度。这种经过改进并以机器学习为基础的新型深度估算方法为 Pixel 3 人像模式提供了支持。


我们的卷积神经网络将 PDAF 图像作为输入,并输出深度图。此网络采用编码器-解码器样式架构,并带有跳跃连接和残差块



训练神经网络

为训练神经网络,我们需要大量 PDAF 图像和对应的高质量深度图。我们希望所预测的深度能够用于人像模式,所以还需要使训练数据与用户通过智能手机拍摄的照片类似。 

为此,我们自制了一款 “Frankenphone” 装置,该装置能够装载五部 Pixel 3 手机,并能与 Wi-Fi 解决方案配合使用,让我们通过所有手机实现同步拍摄(公差范围约为 2 毫秒)。借助此装置,我们已使用运动恢复结构 (structure from motion) 和多视角立体视觉 (multi-view stereo) 技术计算出高质量的照片深度。


左图:用于收集训练数据的自制装置。中间图:在五张图像之间来回切换的拍摄示例。所有相机同步拍摄可确保计算出动态场景的深度,如图所示。右图:真实的深度图。低置信度点(即由于纹理较弱导致立体匹配结果不可靠的点)标记为黑色,不会用于训练(Sam Ansari 和 Mike Milne)


此装置收集的数据非常适合用于训练网络,主要原因如下:

  • 五个视点可确保获得多个方向的视差,进而消除孔径问题。

  • 布置多个摄像头可确保一张图像中的点通常也能在至少其他一张图像中找到对应点,由此减少无对应关系的点。

  • 摄影基线(即摄像头之间的距离)远大于 PDAF 基线,由此可提高深度估算的准确度。

  • 所有相机同步拍摄可确保计算出动态场景的深度,如上图所示。

  • 此装置便于携带,能够确保我们在野外拍摄照片,并模拟用户使用智能手机拍摄的照片。


然而,即使我们可通过此装置采集到理想数据,但预测场景中物体的绝对深度仍极具挑战性,因为给定的一对 PDAF 图像可能对应一系列不同的深度图(具体取决于镜头特点、焦距等因素)。为此,我们改为预测场景中物体的相对深度,这也足以产生令人满意的人像模式图像。



全面整合

这种基于机器学习的深度估算需在 Pixel 3 上快速运行,以便用户无需等待太久即可使用人像模式拍照。不过,为利用微妙的散焦和视差线索获得准确的深度估算,我们需要将全分辨率、数百万像素的 PDAF 图像输入此网络。为确保快速得到结果,我们使用跨平台解决方案 TensorFlow Lite 在移动和嵌入式设备上运行机器学习模型,同时采用 Pixel 3 的强大 GPU,以便在输入数据异常庞大的情况下也能快速计算出深度。随后,我们将所得出的深度估算结果与人物分割神经网络中的掩码相结合,进而生成精美的人像模式图像。



亲自试用

在 Google Camera 应用 6.1 及更高版本中,我们已在人像模式图像中嵌入深度图。这意味着,您可以在拍摄后使用 “Google 照片” 深度编辑器调整模糊度和焦点。您还可通过第三方深度提取器从 jpeg 图像中提取深度图并自行查看。另外,我们提供了一个 相册,其中展示了我们分别基于传统立体算法和机器学习所得到的相对深度图及对应的人像模式图像。

注:相册 链接 

https://photos.google.com/share/AF1QipMzvQX22sGl5ESe-dN-bW7wl783MqawktwouIkw9MXoQJQLqEb5uE_A2tQjSrbzBg?key=emtnUkN1eEJfVzczdkFXOElMMzE2cDlNM3hQN2tR



致谢

本研究成果离不开 Sam Ansari、Yael Pritch Knaan、David Jacobs、Jiawen Chen、Juhyun Lee 和 Andrei Kulik 的帮助。还要特别感谢 Mike Milne 和 Andy Radin 使用搭载五部相机的装置为我们收集研究数据。



更多 AI 相关阅读:




    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存