资源技术动态Facebook用神经网络矫正扭曲的地平线

Facebook用神经网络矫正扭曲的地平线

2019-09-23 | |  108 |   0

原标题:Facebook用神经网络矫正扭曲的地平线      来源:雷锋网  [ 本文作者:杨晓凡 ]      

原文链接:https://www.leiphone.com/news/201709/Pt00owAVEe9F7E90.html


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

 

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

 

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

 

建立高解析度全景照片

 

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


4cf202a45b3b5d9d37d01ffece403211.jpg


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

 

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


d5b61f76c98dc96eae16bc0e60cdd32c.jpg


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

 

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

 

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

 

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

 

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


20734e198d826c88d8d11c552a2de715.jpg


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


微信截图_20190923112824.png


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


微信截图_20190923112840.png


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


微信截图_20190923112855.png


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

 

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


微信截图_20190923112906.png


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


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


a9827e1e4184b50f4238007732ccc7cf.jpg


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


e35e29ac5333d4ad4960bf5dab38137a (1).jpg

86dcb138ba1d527b57558a90cb057b53.jpg

504d7ca70c3bc2ba05d2d475da853ed6 (1).jpg


结论

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

THE END

免责声明:本文来自互联网新闻客户端自媒体,不代表本网的观点和立场。

合作及投稿邮箱:E-mail:editor@tusaishared.com

上一篇:AI,人脸识别背后的推进者?

下一篇:自动驾驶中的传感器融合算法:第一部分-卡尔曼滤波器和扩展卡尔曼滤波器

用户评价
全部评价

热门资源

  • 应用笔画宽度变换...

    应用背景:是盲人辅助系统,城市环境中的机器导航...

  • GAN之根据文本描述...

    一些比较好玩的任务也就应运而生,比如图像修复、...

  • 端到端语音识别时...

    从上世纪 50 年代诞生到 2012 年引入 DNN 后识别效...

  • 人体姿态估计的过...

    人体姿态估计是计算机视觉中一个很基础的问题。从...

  • 谷歌发布TyDi QA语...

    为了鼓励对多语言问答技术的研究,谷歌发布了 TyDi...