8

Google 是如何把 Pixel 5 上的人像光效做出来的?

 3 years ago
source link: https://zhuanlan.zhihu.com/p/338693279
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

Google 是如何把 Pixel 5 上的人像光效做出来的?

苹果产品话题下的优秀回答者

这一两年来,计算摄影这个词我们听到太多次了。

提到计算摄影,自然而然的就会让人想到 Google 的 Pixel 系列手机,这个系列可以说是开创了计算摄影的先河,它为我们揭示了计算摄影的威力和魅力所在。

也正是因为计算摄影带来的威力如此惊人,这两年逐渐回过味的手机厂商们才终于一股脑扎了进去。而 Google 这时候已经在玩更多的花活了。

「人像光效」的最初是随着今年十月份 Google 发布 Pixel 4a&Pixel 5 上,这一代 Pixel 独占的功能。但是在前几天,Google 对相机和相册应用进行了一次更新,将这个功能下放给了 Pixel 2 之后的用户。

v2-dad0a224fdaea565f057bf9db790f408_b.jpg

受到肖像摄影师使用的摄影灯启发,「人像光效」能够对光源进行重新定位和建模,然后将新的光源添加到照片的场景中去。并且还能够识别初始照明的方向和强度,然后对照明情况自动进行补充。

这样强悍的计算摄影功能自然离不开神经网络的机器学习能力,通过手机人像光效模式所拍摄的照片作为数据库进行训练之后,「人像光效」的后期能力启用了两种新的算法:

  • 自动添加合成光源:对于给定的人像照片,算法进行合成添加往外光源,并且将于现实中摄影师的打光照明相一致。
  • 合成后重新照明:对于给定的照明方向和人像照片,以最自然方式添加合成光。

首先说第一个问题,就是确定光源位置和添加。在现实中,摄影师通常采用经验和感性的方式,通过观察光线落在被拍摄者脸上的强度和位置,然后去确定如何去打光。但是对于 AI 来说,如何确定已有光源的方向位置是并不容易。

为此,Google 采用了一种全新的机器训练模型 —— 全方向照明轮廓。这种全新的照明计算模型可以将人脸当做光线探测器,从而推断出来自所有照射的光源方向、相对强度和颜色,而且还能通过另一种面部算法来估计照片中头部的姿势。

虽然听起来很高大上,但是实际训练模型的呈现效果还是挺可爱的,它会把人的脑袋看做三个圆圆的银色球形物体,顶部的球「质地」是最粗糙的,用来模拟光线的漫反射。中间的球也是磨砂的,它用来模拟较为聚集的光源。而最底下的球则是镜面「材质」,用来模拟较为光滑的镜面反光。

另外每个球体都能根据自身发的特点反映环境照明的颜色,强度和方向性。

这样,Google 就能得到后期合成光源的方向应该在哪里,比如经典的人像光源是位于视线上方 30°,与摄像机轴成 30° 至 60° 之间,Google 也遵循了这一经典规则。

在学会了给人像添加光源的方向之后,那接下来要做的就是如何让添加的光源变得更加自然。

前一个问题有点像「独孤九剑」的剑谱,学会了之后就会做固定的一些题目了。而解决后一个问题则需要让「独孤九剑」尽可能多的实战,将不同的实际情况融会贯通,再学会破解世间万般武学。

v2-2332f2d2367ee586c8956142ec4620fd_b.jpg

为了解决这个问题,Google 又研发了另一个新的训练模型,用来确定自定向光源添加到原始的照片中。正常情况下是无法用已有的数据训练这个模型的,因为无法面对近乎无穷的光线照射情况,并且还要与人脸完美的匹配起来。

为此 Google 打造了一个很特殊的用于训练机器学习的装置 —— 一个球形的「笼子」。在这个装置里面具有 64 个具有不同视角的摄像机和 331 个可单独编程的 LED 光源。

如果你去过杜比影院,在杜比影院的映前秀中有一个环节是声音在一个半球型的穹顶中移动来模拟真实中近乎无限的方向。Google 这个装置其实也是类似的原理。

通过不停地改变照射的方向和强度并模拟复杂的光源,然后可以得到人的头发、皮肤、衣服反射光的数据,从而获得在复杂光源下的照明应该是怎样的。

Google 一共请了 70 位不同的人,用不同的脸型、发型、肤色、衣服、配件等特质训练这个模型。这样确保能够最大限度让合成的光源与现实相匹配。

此外,Google 并非直接通过神经网络模输出最后的图像,而是让神经网络模型输出一个较低分辨率的商图像。

这里解释一下什么是商图像,一张图片我们可以分解为两层:底层和细节层。底层包含图像的低频信息,反映了图像在大尺度上的强度变化;细节层包含图像的高频信息,反映了图像在小尺度上的细节。底层乘以细节层即为源图像,而细节层则又可以称为商图像。

然后通过原始图像的底层,采样时输入商图像的数据添加额外的光源,就能得到一个最终输出的图像。

最后的流程就是这样,先给定一张图片,然后计算图片中人物的表面法线,紧接着计算图片中的可见光源,通过神经网络模型模拟额外光源输出较低分辨率的商图像,然后作为细节层与原始照片底层相乘计算,最终得到一张添加了额外光源的人像照片。

Google 还对管线进行了大量的优化,让模拟的光效能够在手机上实时交互,而整个模型的大小却仅有 10MB 左右。

v2-11cadd63cd2e0ab157a5d598b6c5627e_b.jpg

Pixel 5 的人像光效可以说是 Google 计算摄影中的一个典型案例,通过不断训练神经网络模型让手机得以模拟现实中的人像打光。完成了计算摄影一次新应用场景。

有些人说摄影本是门艺术,计算摄影在根本上是对摄影的侮辱,但自从 1839 年法国人达盖尔做出了第一台具备实用性的相机以来,一百多年来相机一直在由小众走向大众,直到手机摄像头的诞生,让每个人都有了近乎平等的拍照机会。而人们的内心的表达也让摄影这门艺术得以逐渐丰富起来。

没错,计算摄影在「摄影」的同时也在「算影」,但算法早已是手机摄影中不可分割的一部分,所追求的仍然是模拟现实中所能实现的效果,毕竟没人会把「魔法换天」叫做计算摄影吧。

而当苹果和 Google 在计算摄影上走的越来越远时,我们才发现,算法其实是比硬件更强的壁垒。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK