相比而言,全景图片所包含的信息更为丰富,可为用户带来沉浸式的体验,但相比普通的图片也会面临更多的挑战。Facebook自去年推出360度照片功能,已有超过7000万张照片被上传。本文则介绍了Facebook在创建高分辨率的360度照片中遇到的挑战,以及利用深度神经网络修复照片旋转问题的原理解析。感谢微博算法工程师刘文帮助完成文章的技术校对,原文链接请点击【阅读原文】。
作者:马特Uyttendaele
翻译:鸿蒙
校对:刘文,王宇豪
自去年推出该功能以来,人们已经向Facebook上传了超过7000万张360度照片。Facebook使用多种方法来捕获360度照片和视频,这使人们可以与他们的朋友分享身临其境的体验。如果您拥有专用的360度相机,如理光Theta S或Giroptic iO,则可以从相机直接发布到Facebook。而现在大部分高端Android和iOS智能手机也都拥有全景模式的相机,可用于拍摄360度照片。
Facebook在过去一年中开发并部署了多种技术,以优化人们创建和共享360度内容的方式,包括360度采集、360度视频稳定性以及重新设计存储高分辨率媒体的方式。最近,我们一直在探索使用深度神经网络自动重新调整360度照片的方向,为人们带来更逼真的身临其境的体验。
创建高分辨率的360照片
我们最近在Facebook应用程序中发布了一项新功能,允许用户使用全新的、不受约束的全景UI来捕捉完整的360度场景。(原文视频中展示了Facebook 360的实际拍摄)相比于传统照片,360度照片往往要大得多,因此我们也面临着挑战——让人们能够像以前一样快速浏览包含360度照片的Feed流,同时我们也提供了照片的全分辨率版本,以便用户可以停下来通过倾斜、平移或缩放来查看照片。当然,立即发送全分辨率照片会妨碍人们滚动查看新内容,同时会占用大量内存来处理照片。
面对这些挑战,我们重新设计了Facebook的照片基础设施,以便“分块”存储和提供照片内容。
我们会将360度照片转换为立方体贴图,这类似于我们用于360度视频的早期方法。这些立方体贴图依次存储在多个分辨率下,并且这些不同分辨率都会被分割成小的、单独的512x512图像。当拍摄好一张360度照片时,我们会计算出哪个分辨率和哪些图块是渲染当前窗口所必需的。如果当前的分辨率不可用,我们会暂时呈现较低分辨率的表示,同时等待网络传送高分辨率内容的请求。人们在查看360度照片中会平移和放大,因此我们不断地重复这个计算。而这个改变让我们能够显示数百万像素的照片的同时,不会在性能上发生任何变化。
深度神经网络用于360度照片
上传到Facebook的数千万公共360度照片,为我们提供了一个强大的新数据集来帮助改进产品。这些数据本身可以与机器学习方法结合使用,从而为人们创造更好的体验。
360度照片不符合现实情况有一点最基本特征,就是当相机未达到水平时拍摄的图像,即使通过旋转也无法得到有效校正。在下图的例子中可以看到,在拍摄照片时相机没有完全直立,这就导致了倾斜的视野,使得照片和现实世界的感觉完全不同。
使用编辑软件修复传统照片的这种旋转问题很简单,但相同类型的工具并不能广泛应用于360度照片,并且纠正球体上的旋转也更不直观。360度照片中的旋转由两个参数捕获 - 倾斜和滚动,如下图所示。第三个轴(偏离)通过更改初始观察方向来影响照片,但它本身不会引起旋转的场景。而我们希望开发一种能够自动修复由这些运动引起的旋转的技术。
我们通过使用深度神经网络(DNN)架构AlexNet解决了这个问题,并对其进行了一些修改。如上图所示,我们的训练数据包含完整的球形环境(360x180度)并使用等距离长方圆柱投影。我们假设问题的几何性质不需要颜色信息,由此我们设置训练数据是由分辨率为256x128的单色图像组成。AlexNet架构旨在解决超过1000个类别的分类问题,因此最终的全连接层有4096个输入和1000个输出。现在我们将它(alexnet)运用到解决一个回归问题的场景上来,因此我们的最后一层有4096个输入和2个连续值作为输出——倾斜和滚动值。
我们使用标有倾斜和滚动值的旋转图像来训练DNN。训练数据集包含了500000个Equirectangular(等距长方)图像,我们假设它们一般不旋转,也就是它们的倾斜角度和滚动角度是0。在训练期间,我们通过随机生成的倾斜和滚动值人为地旋转每个训练样本。下面公式使用损失函数,来测量这些随机生成的标签值与DNN估计的结果值之间的距离。
为了测试训练结果,我们通过已知的一组倾斜和滚动值,人为地旋转数据集中的每张照片,然后我们将每个旋转样本输入至训练好的DNN模型中并记录结果值。已知应用值和计算结果之间的任何差异都可以归因于两个因素:(1)DNN并不能准确解决旋转问题;(2)数据集照片并不完全正确。其中第二个因素是因为我们假定数据集一般直立,但任何特定样本都可能有一些固有的旋转。
对于每张照片,我们扫描集合[-4deg,-2deg,0deg,2deg,4deg]中倾斜和滚动值的所有组合,每张照片有25个不同的生成照片用于DNN模型。根据每次运行的倾斜和滚动值,我们计算出应用的旋转,表示这种旋转的最有效方式是使用经常用于3D图形的工具 - 四元数(quaternion)。我们通过计算四元数来表示由网络计算的旋转,如果网络和数据没有前面列出的两个问题,那么这些四元数应该是相同的,但在实践中却并非如此,因此在每次运行时我们通过相除来计算它们之间的差异。最后,使用Quaternion Averaging 技术计算这些差异的平均值。
四元数在计算三维旋转的差异和平均值时很有用,但我们需要为每张照片添加新的倾斜和滚动值,这是因为数据集照片并不是竖直拍摄的,而这种平均差异是每个训练图像真实取向的良好估计。因此,我们在四元数和偏离、倾斜和滚动之间使用简单的转换技术,通过平均值进行到更新的标签。
一旦数据集被重新标记,我们就会进行新一轮的训练,如此进行四轮重复迭代的训练和优化。经过以上优化,最终训练好的DNN模型平均可以计算出误差在0.1度以内的360度旋转。如下图所示,每个训练阶段都会从一个未初始化的模型开始,我们可以看到每个阶段最终会收敛到一个更小的损失。而保持测试集也显示非常相似的收敛和误差值,这种收敛行为让我们得出结论:训练优化的循环过程正在学习我们所期望的旋转函数。
以下是旋转360度照片的一些结果(这些不是训练集的一部分)。每一对图像中的第一张是原始图像,第二张是由DNN纠正的结果。请注意,DNN在不同的内容类别(包括建筑物等人造结构以及自然场景)中表现都很好。
第一组
第二组
第三组
结论
我们现在已经在Facebook的照片、视频和直播产品中部署了360媒体。当做这些事情时,会出现沉浸式内容变革所带来的独特挑战。本文涉及了我们在过去一年中解决的一些挑战。正如我们所看到的,将沉浸式媒体上传到Facebook的速度正在加快,我们对所研究的这些技术如何帮助人们以新方式体验地点和事件而感到非常兴奋。
WebRTCon 2018 8折报名
WebRTCon希望与行业专家一同分享、探讨当下技术热点、行业最佳应用实践。如果你拥有音视频领域独当一面的能力,欢迎申请成为讲师,分享你的实践和洞察,请联系 speaker@livevideostack.com。更多详情扫描下图二维码。