相比而言,全景图片所包含的信息更为丰富,可为用户带来沉浸式的体验,但相比普通的图片也会面临更多的挑战。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。更多详情扫描下图二维码

Facebook批量优化360照片相关推荐

  1. aspx网页背景图片设置代码_python requests,BeautifulSoup批量下载360图片

    本代码演示通过python的requests,BeautifulSoup库批量下载360图片,并保存在本机的路径 代码如下: #BeautifulSoup库是网页爬虫解析库,主要用来对HTML源代码进 ...

  2. vue 带全选和多选的表格怎么写_EXCEL五分钟,批量制作带照片的工地出入证

    作者:祝洪忠 转自:Excel之家ExcelHome 小伙伴们好啊,今天和大家分享一个邮件合并的技巧--批量制作带照片的工地出入证. 先看效果图: 要准备的材料包括: 一.Excel资料表 资料表中包 ...

  3. Android+如何导出微信照片,【每天3分钟】微信占了好多G,教你一步批量提取微信照片并清理空间...

    原标题:[每天3分钟]微信占了好多G,教你一步批量提取微信照片并清理空间 如何清理微信并整理照片和视频? 图文说明 1iPhone手机清理 微信,这个平时用的最多的应用,占用的空间也是最大的,可以看到 ...

  4. Facebook批量养号分享

    很多进行Facebook养号的用户大部分都是进行引流使用的,那Facebook批量养号需要注意哪些因素才不会影响到养号的效果呢? Facebook批量养号需要注意哪些内容? 好友数量:好友数量是一个账 ...

  5. 批量重命名照片为序号递增的形式

    现在手机拍照的像素已经很高了,在非专业的情况下,我们拍摄一些新媒体的文章照片都是采用手机.手机拍照又方便又轻便,还可以一键修图.但是有个问题手机拍的照片导出到电脑,名称都是系统自带的英文,而且序号有时 ...

  6. ms office word2013教程 - 利用邮件合并批量制作带照片的准考证

    利用邮件合并批量制作带照片的准考证 准备材料: 准考证原文档.数据源.照片 制作步骤: 下面演示如何插入图片: 此时还没完,注意在照片的路径后插入照片的合并域 此时按 Alt + F9 点击照片区域, ...

  7. 推荐批量优化pdf文件的软件

    http://www.pc6.com/softview/SoftView_14796.html NXPowerLite 是一个优秀的PowerPoint 文档专用压缩工具.它可以将你制作出来的Powe ...

  8. python批量改名微信视频软件,python利用文件时间批量重命名照片和视频

    本文实例为大家分享了python利用文件时间批量重命名照片和视频的具体代码,供大家参考,具体内容如下 问题描述 承接上节的问题,在安卓和苹果间互导照片和视频还容易出现文件名混乱的问题,如下图所示. 代 ...

  9. python360指数_Python批量采集360关键词指数

    Python批量查360好搜关键词指数,requests模块让爬虫更简单!脚本基础的功能都有,轮换UA,IP,verfied_ip.txt里的IP先提前用脚本验证过能正常使用!接下来爆爆爆!自己调整代 ...

最新文章

  1. python使用matplotlib可视化、自定义设置Y轴刻度标签字体的大小( setting axis ticks size in matplotlib y axis)
  2. 一个失败的操作系统MULTICS
  3. timer定时器_拾遗Timer定时器
  4. SQL ALTER TABLE 语句
  5. 4怎么放大字体_Word字体怎么放大?简单教你几招轻松搞定
  6. 线上安全大会还能这么玩 ISC 2020首创“3D立体云展馆”
  7. Nokia n900使用
  8. 从“判断力”到“创造力”:GAN 在图像生成上的应用
  9. EasyUI Tree添加节点
  10. CPP-week fourteen
  11. 《Ray Tracing in One Weekend》——Chapter 2: The vec3 class
  12. Vue学习笔记之11-slot插槽
  13. cmake的一些小经验
  14. 01.Dem数据提取高程
  15. Linux键盘驱动详解 转
  16. python爬取网易云音乐问题陈述_Python爬取网易云音乐热门评论
  17. Riverbed发布SteelFusion 5.0,对NAS存储提供支持
  18. 00【mmtracking】mmtracking 目标跟踪 介绍
  19. 精读FREE: Feature Refinement for Generalized Zero-Shot Learning
  20. 编译好的GDAL库,支持ECW格式,支持proj,支持geos

热门文章

  1. MySQL 多实例详解
  2. 【208天】黑马程序员27天视频学习笔记【Day21-中】
  3. Oracle12cR2的CDB与PDB简单管理操作
  4. SQL Server 2012笔记分享-6:理解内存管理
  5. objective c的注释规范
  6. php数组中删除元素
  7. 微软发布架构师期刊阅读器
  8. CodeForces - 1494D Dogeforces(贪心+构造)
  9. HDU - 3341 Lost's revenge(AC自动机+状压dp)
  10. 牛客 - 导航系统(最小生成树+Floyd)