欢迎光临KOTOO财情




全景照片不怕歪,Facebook 用神经网络矫正扭曲的地平线

2024-11-26 233

社群上的全景照片一向很红,相信大家都欣赏了多家 IT 公司的办公室、去了数个旅游胜地、享受被小猫小狗自动换行的感觉了。太平洋那头的 Facebook 也没闲着,从去年上线类似功能以后,全世界 Facebook 用户已上传 7 千万张全景照片了。

Facebook 支援多种全景照片和全景影片的拍摄方式,可让人们把自己的全方位感受分享给好朋友。如果用户有一台全景摄影机,比如理光 Theta S 或 Giroptic iO,还可以直接把相机照片发到 Facebook。如今,多数高阶 Android 和 iOS 智能手机内建相机也有了全景模式,可用来拍全景照片。

Facebook 过去一年开发并上线多种技术,提供更好的全景照片建立和分享体验,包括全景拍照、全景影片防抖,以及重新设计如何储存高分辨率媒体。最近,Facebook 还用了深度神经网络来自动矫正全景照片的方向,让手机拍摄的照片有更真实的包围感。以下文章为读者编译 Facebook 如何做到的说明。

建立高分辨率全景照片

最近 Facebook 刚刚在 Facebook App 上线一个新功能,用户可在一个新的、能无限滑动的界面拍摄完整的 360 度全景照片。

由于全景照片会比一般照片大很多,Facebook 首先要解决的难题就是保证资讯流里出现一张全景照片时,让用户流畅地在界面中拖拉滑动;当用户停止滑动,移动或转动手机看这张全景照时,也能立即把全分辨率照片跑出来。在屏幕立即呈现全分辨率的照片会使用很多内存,当用户继续滑动页面往下看时,又会加载新内容造成延迟。

面对这些挑战,Facebook 的工程师重新设计了 Facebook 的底层照片处理机制,便于储存资讯流中“拼贴”照片及呈现照片内容。

每张全景照片都会转为一张立方对映图,Facebook 之前也有类似的方法用在全景影片。然后这些立方对映图会以多种不同的分辨率储存,每个分辨率版本都会分割为许多张小的 512×512 分辨率影像。

当用户在资讯流里刷到一张全景照片时,程式就会计算目前视窗渲染时需要哪种分辨率、用哪些小影像拼贴成大图。如果目前需要的分辨率不可用,程式就会暂时渲染一个低分辨率的样子,同时等待网络把高分辨率的内容传过来。当用户进入全景照片行动手机和在屏幕上缩放观看时,程式会不停做这样的全套计算。这样原来的用户体验不会有什么可感知的变化,却实现了千万甚至上亿画素的高分辨率全景影像显示。

用于全景照片的深度神经网络

用户公开上传到 Facebook 的上千万张全景照片形成一个强有力的新资料集,Facebook 研发人员就可以利用这个资料集改善产品。这些资料可和机器学习联合,带来更好的使用体验。

让人觉得全景照片不够真实的最常见原因之一就是拍照时相机没有持平,最终照片也没有修复倾斜。比如下面就是照片倾斜的例子,拍照的时候相机拿歪了。照片里的地平线是斜的,完全破坏了真实感。

对传统照片,用编辑软件修正这种倾斜是一件简单直接的事,但是能用于全景照片的这类工具并不多,且修正球面上的倾斜旋转相当不直觉。在拍摄全景照片的过程中,相机的旋转可用 x 轴旋转(tilt)和 z 轴旋转(roll)两个参数来说明,如下方示意图所示。第三个方向的旋转,y 轴旋转(yaw),影响的是全景照片的起始点,但是这个方向的旋转不会造成照片内容倾斜。Facebook 研发人员想开发出一种能自动修正相机旋转所带来照片倾斜旋转问题的方法。

Facebook 研究人员使用了著名的深度神经网络架构 AlexNet,并对它做了一些修改。用于网络训练的资料就是前文那样的照片,包含了360×180度的完整球面环境,然后用等距离长方圆柱(equirectangular)投影转换为一张矩形照片。Facebook 研究人员首先假设这个问题的几何本质不需要色彩资讯参与,这样训练资料就可以简化为 256×128 分辨率的黑白照片。AlexNet 本来的设计是为了解决超过 1 千个类别的影像分类问题,所以最终的全连线层就有 4,096 个汇入和 1,000 个汇出。在 Facebook 这个问题,他们要解决的是回归,所以他们修改后的网络,全连线层变成 4,096 个汇入和 x 轴旋转、z 轴旋转两个值的连续值汇出。

Facebook 研究人员用带有 x 轴和 z 轴旋转标签的影像训练这个网络模型。训练资料集包含 50 万张投影转换过的矩形照片,这些照片是研究人员挑出来,总体没有旋转、倾斜的;换句话说,这些照片的 x 轴和 z 轴旋转全部都是 0。在训练过程中,研究人员人工随机生成 x 轴和 z 轴旋转值旋转训练样本。如下这个损失函数会测量出这些随机生成的标签和网络模型预测结果间的差值,并把减小这个差值为网络训练目标。

为了测试训练效果,研究人员用一组给定的 x 轴和 z 轴旋转值合成旋转测试集影像。然后他们用训练过的网络模型分析这些旋转过的影像,并记录模型的结果。这些已知的旋转值和模型给出的结果之间的差别可以归结为两个原因。1,模型没能完全解决这个旋转问题;2,所用的资料集还有一些问题,影响了模型的表现。第二个原因也是真实存在的,Facebook 研究人员假定选用的资料集总体是平直的,但是单独看其中某个样本,还是有一些本来就有的旋转。

所以,研究人员用 [-4,-2,0,2,4] 度几种 x 轴和 z 轴旋转值所有组合在每张照片做一遍,就是用模型对每张照片都过 25 遍。对每次所用的 x 轴和 z 轴旋转值,他们都会计算对应的旋转量。表示这种旋转量的最好方法就是用 3D 影像一个常用的工具:四元数(quaternion)。模型会根据影像计算出另一个四元数旋转量。如果模型和资料中都不存在刚才提到的两个问题,那么这两个四元数应当相等。实际中并不相等,所以每次计算中,他们都会把两个四元数相除,计算两者间的差值。最后,用以下公式算出每张影像在所有组合下的差值平均值。

以上公式的计算都使用四元数,因为用于计算差值和 3D 旋转的平均值时非常好用。但这样就需要给每张图片计算新的x 轴和 z 轴旋转值,因为资料集中的影像一开始的时候并不是完全平直。这种平均差值就是对每张训练影像的真实方向的很好的预测。那么,研究人员接下来简单把四元数格式的平均差值转换为 x、y、z 轴旋转,就可以更新影像的标签了。

在影像标签更新后,就可以对模型做新一轮训练。模型一共经历四轮训练和微调。在微调过程最后,模型对全景照片算出的旋转值误差只达 0.1 度。每个阶段的训练都是从一个未经起始化的模型开始,可从下图明显看到每个阶段模型都收敛到更小的训练损失。在另一项对抗测试中,模型也表现出类似的收敛和误差值水准。模型的收敛表现足以让研究人员得出结论:这样的“训练←→微调”循环确实让模型学到理想的旋转方程式。

如下是一些经过旋转的全景照片结果,而且都是训练集以外的照片。从几组图片可看到,模型对不同内容都有出色表现,不论是建筑等人造景观,还是完全自然风光。

结论

Facebook 的照片、影片、直播产品都已可使用全景媒体。在这个过程中,具沉浸感的内容也会带来一些特有的问题。这篇文章仅介绍几个 Facebook 研究人员解决的问题。随着用户往 Facebook 上传具沉浸感的内容,速度越来越快,Facebook 也对研究前景充满期待。他们相信类似这样的技术,可让用户以新方式感受不同的地点和事件。

  • Optimizing 360 photos at scale

(本文由 雷锋网 授权转载;首图来源:pixabay)

延伸阅读:

  • Facebook 将 360 度全景照片平民化,任何手机都可以直接拍照上传
  • Google 研发 EAC 投影法,提升 VR 全景影片画质
2019-03-19 22:31:00

标签:   资讯头条 kotoo科技资讯 kotoo科技 kotoo科技资讯头条 科技资讯头条 KOTOO商业产经 新闻网 科技新闻网 科技新闻 Kotoo科技新闻网 Kotoo 科技新闻 科技新闻网 新闻网 KOTOO商业产经 科技资讯头条 kotoo科技资讯头条 kotoo科技 kotoo科技资讯 资讯头条 Kotoo 科技新闻 科技新闻网 新闻网 KOTOO商业产经 科技资讯头条 kotoo科技资讯头条 kotoo科技 kotoo科技资讯 资讯头条
0