为了改进单摄 Pixel 3 的人像模式,Google 造了一台「五摄怪物」

由于镜头尺寸的限制,较高质量人像拍摄任务我们往往得交给双摄甚至多摄像头来完成。但就像你看到本文标题的主语后心里所想的那样:「不,对 Google 这样的公司而言,还有另一条路可以走」。

这条路叫做算法。

如果说去年发布的 Pixel 2 是迎难而上,巧妙地通过双像素对焦和基于机器学习的图像分割扛住了「双摄」潮流的冲击,那今年的 Pixel 3 显然就是在逆境求生——一款发布于 2018 年下半年的单摄手机,在看到「双摄人像」千元机遍地走、四摄五摄机型前赴后继的情景时,一般反应应该和 Pixel 3 XL 的刘海神似(o皿o)。但 Google 却 明确表示,Pixel 3 的人像模式效果比 Pixel 2 更好。

这是怎么做到的?

弗兰肯斯「机」

一切谜底都与这台名为「弗兰肯斯『机』(Frankenphone)」的手机有关,如果它还能被叫做「手机」的话——和西方文学史上首部科幻小说《弗兰肯斯坦》中维克多·弗兰肯斯坦用尸块拼凑而成的那只「怪物」一样,这台特别的手机由五台 Pixel 3 组合而成。借助一套特别开发的、基于 Wi-Fi 通信的拍摄方案,这五台 Pixel 3 能够以小于 2ms 的误差同时进行拍摄。

五摄 Pixel 3

因此当我们把五张用这台「弗兰肯斯『机』」拍摄的照片叠在一起观察时,所拍摄场景能够以一种十分立体的效果进行呈现。

这可是用来训练深度估计算法的绝佳素材

因此从某种程度上来说,Google 做了一台搭载五摄方案的 Pixel 3,但 Google 并没有将这台「怪物」应用到最终产品——在算法工程师们看来,用这个方案拍出来的照片中所包含的数据简直就是用来进行算法训练绝佳素材。

为何要改进算法?

Google 软件工程师打算用「五摄」Pixel 3 获取的图像数据来进行算法训练,训练的对象就是此前曾用在 Pixel 2 上进行景深映射的深度估计(depth estimation)算法。

为什么要改进这个算法?

在 Pixel 2 的人像模式下,相机先借助卷积神经网络(CNN)对 HDR+ 生成的图像进行主体与背景分割,然后经由双像素自动对焦技术(dual pixel auto focus)获取到的景深数据进行景深映射,最后根据生成的景深映射图进行不同程度的背景虚化处理。

Pixel 2 人像模式的处理流程

这种基于立体景深(stereo depth)的人像模式处理流程能为采用单摄方案的 Pixel 2 带来不俗的人像拍摄效果,但这个方法并非百试百灵。

在一篇介绍 Pixel 3 人像模式的 官方博文 中 Google 举了这么一个例子:

左侧为原图,右侧为立体景深和学习景深效果对比

上图左侧为使用 HDR+ 拍摄的原始照片,右侧则是基于立体景深(stereo depth)和学习景深(learned depth)两种方式生成的人像对比。仔细观察不难看出,采用立体景深进行人像模式合成的照片对背景中横向条纹的虚化处理效果远不及采用学习景深进行人像模式合成。

事实上,这也是 Pixel 2 基于立体景深进行人像模式合成的天然劣势——借助双像素传感器从两个角度捕捉同一画面的过程一方面获取了景深数据,另一方面也可以被看作是同一个传感器在水平或竖直方向通过位移拍摄了两次。在这个过程中,由于孔径问题(aperture problem)的存在,画面中横向和纵向内容将很难进行判断和计算,最终也就难以将其作为背景进行虚化处理。

这里提到的孔径问题,最佳实例可以参考下图。从图中可以看出,三个圆圈中的斜线在视觉效果上有着相同的运动轨迹(左上方向),但实际却可以由三种运动方式来完成。

这也是发廊门口那个彩带灯的原理

这其实也是「区域(local)」视觉和「全域(global)」视觉处理方式的差别,而一般情况下的手机成像都会受到区域视觉的影响,因此 Google 此前的人像模式算法自然也存在其局限性。

但这正是「弗兰肯斯『机』」训练数据大展身手的地方。

更有根据地「猜」

在了解「弗兰肯斯『机』」如何改进人像照片合成算法之前,我们还必须知道的一点是,基于不管是双像素传感器还是立体景深合成,这些方法的核心理念都在于对深度信息(depth cues)的捕捉和利用。

而除了深度信息,同一幅画面中可以用来判断景深的数据其实还有很多——即便是一张没有经过景深计算和背景虚化处理的普通照片,我们依然能够凭借肉眼观察来区分画面中不同物体的位置关系,甚至能够根据画面中人脸所占的像素面积来对画面中人物与镜头的距离进行估算(即以物体常见尺寸为参考进行肉眼测距)。

即便没有明显的背景虚化,我们也能凭肉眼区分前景与背景/图:广陵止息

这种测距方式用到的不是深度信息,而是场景语义信息(semantic cues),换句话说,靠的是我们对场景基于常识的判断和理解。

但算法是不具备这种常识的,这就是为什么我们要用上面提到的「弗兰肯斯『机』」的训练数据改进算法的根源

具体而言,「弗兰肯斯『机』」获取到的数据有这么几个优势:

  1. 五台 Pixel 3 以不同位置进行拍摄,营造出多角度时差效果的同时,也能消除算法执行过程中孔径效应的限制
  2. 镜头以不同位置进行排列并拍摄,可以保证同一个像素点在至少两张照片中都能找到与之对应的像素点。这可以消除单张照片通过双像素传感器数据进行合成的过程中,部分像素难以对应的情况。
  3. 相机之间的实际位置差距也要比双像素对焦中上下两个像素传感器的位置差距更大,进行深度测算时自然就更加准确(可以理解为变相增加了双像素传感器数量和尺寸)。

当然,Google 软件工程师还表示,「弗兰肯斯『机』」本身就是一个不错的设计,他们很方便地将这五台 Pixel 3 捧在手里或带出门去,模拟用户进行室外拍摄或动态拍摄(多摄方案其实还是「真香」嘛)……

卷积神经网络前后景分割的过程中加入了改进的深度估计算法

最后,当我们再把原始数据送给这个人像模式算法进行处理时,这个算法就能更加准确地判断画面中不同物体之间的相互位置关系了,这也正是学习景深相比立体景深算法的优势所在(这里 还有更多这两种算法的合成结果对比)。

不过代价也有点昂贵——基于深度学习并利用海量数据进行改进后的深度估计算法加上基于神经网络的图像分割算法,需要的运算量似乎已经超过了 Pixel Visual Core 的承载能力。因此 Google 也在 博文 中承认,Pixel 3 人像模式的合成过程其实也调用了骁龙 845 的 GPU 算力。


参考文献:

(题图来自 Macworld UK@广陵止息 对本文也有贡献 )