自去年推出该功能以来, 人们已经向 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 的速度正在加快, 我们对所研究的这些技术如何帮助人们以新方式体验地点和事件而感到非常兴奋
来源: https://mp.weixin.qq.com/s?__biz=MzU1NTEzOTM5Mw==&mid=2247485277&idx=1&sn=dcbf1c4af0a2921d03880ee91f5f6bcd&chksm=fbd9af73ccae26656404a05eb497da940c45eb4dd550399b608b326d36aac59e4846edd2fc09#rd