Google解释电影照片的AI生成技术细节

Google在去年12月的时候,在Google相册中加入电影照片(Cinematic Photo)功能,而Google现在对外披露该功能背后的原理。电影照片是一种为了要重现照片拍摄当下的沉浸感,通过模拟相机的运动,还有图像中视差,所产生的动态照片。

由于电影照片需要深度图,许多较新的手机摄影功能,都能够通过同时捕捉不同视点的多张照片,来解决深度问题,但为了让现存的照片,也能呈现电影照片的效果,因此不能够从多视角立体方法取得深度信息,因此Google训练了具有编码器和解码器的卷积神经网络,只从单一张RGB图像,就能预测深度图,该神经网络会通过物体的相对大小、线性透视或是错焦模糊,使用单反线索(Monocular Cues)来估测深度。

不过Google却无法使用现成的资料集来训练这个神经网络,Google解释,单反深度估计资料集通常用于AR、机器人和自动驾驶等领域,因此这些资料集大多为街道和室内场景,缺少休闲摄影常出现的人、宠物和物体等物体,于是Google自己创建了两个人信息料集,一个是由5台相机所拍摄的照片资料集,以及手机Pixel 4所拍摄的肖像照资料集。借由混合资料集,使得模型更适应各种场景和相机硬件,提高对野外照片的预测能力。

但因为这样,也带来了另外一个挑战,不同资料集的深度信息,可能经过缩放和位移,无法放在一起比较,而Google使用相对深度来解决这个问题,使得产生电影照片的计算,不需要使用绝对深度。

Google提到,电影照片效果在人物的边界处特别难处理,因为深度图错误会使得最终渲染产生伪影,为了减少这样的问题,Google使用边缘侦测常用的降噪技术中值滤波器进行处理,并使用DeepLab分隔模型计算照片中人物的遮罩,找出被错误预测为背景的像素。

要创建电影照片,另一个要解决的大问题便是摄影机的运镜路径,Google需要找出虚拟摄影机的最佳定轴点,才能产生最好的效果。重建图像的3D场景第一步,就是要将RGB图像拉伸到深度图上创建网格,但是网格中的相邻点,可能存在较大的深度差,虽然在正面视图不太看得出来,但是当虚拟摄影机移动幅度较大时,就可以看到跨越较大深度变化的多边形,像是贴图被拉扯一样。

而且用户的照片千百种,不可能在所有电影照片都使用同样的摄影机轨迹,因此Google定义了一个损失函数,捕捉在最终动画里可被看到的延展程度,对每张照片优化相机参数,也就是说,相机路径优化的目标,就是要替摄影机选择一条会产生最少伪影的路径。

Google使用人体姿势网络产生分割遮罩,将每张人像照分为3个不同的区域,头、身体和背景,每个区域有不同的权重,用来调整各区块伪影可忍受的程度,像是伪影出现在背景区域,就比出现在人物旁还要好,借此找出每张照片最佳的摄影机路径,产生效果良好的电影照片。