一. 视频时代需要新的计算摄影算法
我曾经写了好几篇文章,来介绍手机上一些计算摄影技术的应用,这里面包括了人像模式、光学变焦、多摄融合、超广角畸变校正。如果你感兴趣的话,可以点下面的链接来回顾:
- 手机中的计算摄影1——人像模式(双摄虚化)
- 手机中的计算摄影2-光学变焦
- 手机中的计算摄影3-多摄融合
- 手机中的计算摄影4-超广角畸变校正
- 手机中的计算摄影5-基于深度学习的畸变校正
然而,上面这些技术大多是用在拍照过程中的。从手机上出现摄像头开始,很长一段时间业界最大的目标就是用手机来取代单反。于是咱们看到手机的摄像头分辨率越来越高,手机上拍照功能越来越丰富,到后面甚至出现了像双摄虚化这类更高级的玩法,手机拍照确实越来越强大了。取没取代单反我不知道,但卡片相机是彻底凉凉了。很多普通人出门拍照一个手机就够了,即便是摄影爱好者,扛久了单反后,再试试手机拍照的轻便感也会感觉真香。
然而现在已经是21实际20年代了,人们不再满足于拍摄、欣赏静态的照片,而是越来越多的看视频、甚至拍视频。君不见,各大社交媒体软件上,大家看的最多的就是视频内容吗。而到了视频时代,我们对视频信息看重的点显然和拍照时代时不一样了。也因此,手机厂商也不得不回应一个问题:人们是否可以用手机创作出高质量的视频?甚至是接近电影质感的视频?
要回答这些问题,我们首先得看看,高质量的视频作品有哪些特点?我对此并不专业,但我喜欢看电影,那就讲讲看了这么多电影,其中让我印象非常深的一个片段吧,这就是电影《辛德勒的名单》中红衣小女孩出场的短短3分钟不到的画面。
在这部电影中,红衣的犹太小女孩是让我非常有感慨的人物,她也是整部电影中唤醒辛德勒善良人性的重要转折点。导演斯皮尔伯格对她用了大量的复杂的镜头塑造,堪称整部电影的神来之笔。
在她出现的绝大多数画面中,都和周遭的一切非常不同——整个电影是黑白的,没有颜色,但小女孩却身着红色的大衣。红色的衣服让小女孩与电影的主色调发生了强烈的冲突,让红衣女孩在镜头中格外的显眼。
http://mpvideo.qpic.cn/0bc3r4aayaaabyaldvwyhrrfbd6dbshqadaa.f10002.mp4?dis_k=472e97fa16aad14bf836c0e7b5273847&dis_t=1669795828&vid=wxv_2496100547846979586&format_id=10002&support_redirect=0&mmversion=false
在下一个场景中,红衣小女孩继续移动,这时画面切换成红衣小女孩全景镜头,镜头中央依旧跟随红衣女孩的步伐而移动。红衣女孩的在犹太人的队伍中穿梭,她的幼小甚至引起了旁边德国军官的怜悯,前去扶持她,可最后德国军官还是松开了手。在这个镜头中,小女孩是被犹太人队伍和德国军官两股势力入侵,此时的她已经开始无法掌控自己的命运了。
http://mpvideo.qpic.cn/0b2emiaawaaag4alkngyevrfaywdbnraacya.f10002.mp4?dis_k=75f79566e42fd0c555a2d6eaeff61e83&dis_t=1669795828&vid=wxv_2496104103308148740&format_id=10002&support_redirect=0&mmversion=false
在这几分钟中,导演始终让镜头跟随着小女孩,让我的目光跟随着小女孩移动。周围是慌乱不堪的犹太人,尸体,各种物件,而小女孩却缓慢而异常镇静的走着,对周遭发生的一切似乎异常的冷静,让我对这个场景感到非常的心疼和震撼。
小女孩路过一幢建筑物时,画面突然变成了定格镜头。导演将镜头的焦点放在了德国士兵和被杀害的犹太人,小女孩从画面远处跟随人群走过。这个场景突出了战争的可怕和红衣女孩对自己即将面临的结局的那种无力感。
http://mpvideo.qpic.cn/0bc3wqaauaaa4mallhoy2vrfbngdbk2aacqa.f10002.mp4?dis_k=7d2859c2f7959a8b7079cd63ebd8ed8d&dis_t=1669795828&vid=wxv_2496108428055003136&format_id=10002&support_redirect=0&mmversion=false
过一会,许多犹太人正在被赶上车,小女孩位于画面的远处,还被虚化处理了,但焦点依旧锁定在她身上。我们看到,整个画面中,只有红衣的小女孩是有颜色的,而周围的一切都是灰色的。
http://mpvideo.qpic.cn/0bc3sqaayaaak4alhtoyhrrfbfgdbskaadaa.f10002.mp4?dis_k=db60bb52448644a8b9afbb55d2dc4e42&dis_t=1669795828&vid=wxv_2496110248064172034&format_id=10002&support_redirect=0&mmversion=false
讲了这么许多关于这个片段的事,我想表达的意思就是:在视频时代,高质量的视频需要用到更多的技术去创作。虽然我们依然关注清晰度、白平衡、饱和度、色彩还原等等与图像画质相关的指标,但视频中的各种特效也很重要——而且这种特效的重要程度比起在静态图像中做的各种特效更胜一筹。
这就引出了我今天想给大家介绍的主题——手机上的视频特效。2022年7月15日,旷视科技举办了精彩的技术开放日活动,展示了大量旷视的技术成果(旷视技术开放日:20个Demo闪亮登场),我也有幸参观了其中部分活动,并拿到了很多内部信息 我特别关注的是其中视频特效类的技术成果,下面这个视频就是由旷视的算法制作的手机电影:
二. 旷视技术开放日上的视频特效算法
《辛德勒的名单》中,导演让红衣小女孩在周遭的黑白画面的包围下显得异常突出,让人印象深刻。
现在,你用手机也可以轻松做到这一点了。请看下面的片段:
http://mpvideo.qpic.cn/0bc3riabcaaaxyancaoyhfrfbcwdcgfaaeia.f10002.mp4?dis_k=c01cb7939c202b4d9207ad1f2158a4ec&dis_t=1669795828&vid=wxv_2496112135467417601&format_id=10002&support_redirect=0&mmversion=false
这个技术被旷视称做人像留色,我们在观看这个视频时不由自主就会将注意力集中到主角身上。
就像拍照虚化一样,在拍摄视频的过程中旷视的视频人像虚化技术还允许你对画面的不同部分的主体进行对焦,而虚化其他部分。这一样会使得观看者将注意力集中到主体身上。
http://mpvideo.qpic.cn/0b2ehqaawaaaxiamxtwyezrfapgdbm6aacya.f10002.mp4?dis_k=3b5d17645187854a5c8195e9c715ceb4&dis_t=1669795828&vid=wxv_2496113509605294081&format_id=10002&support_redirect=0&mmversion=false
当背景出现各种灯光或亮斑时,人像虚化技术还能模拟出电影级的光斑特效:
http://mpvideo.qpic.cn/0bc3piaa6aaasiam6uoy6frfa6wdb55aadya.f10002.mp4?dis_k=2a08b7c6d1889841bd20ef3c857fe950&dis_t=1669795828&vid=wxv_2496115168469303297&format_id=10002&support_redirect=0&mmversion=false
在展示视频的末尾,还出现了一个功能叫做双重曝光,它将两段视频叠到一起,颇有一种蒙太奇的感觉。
http://mpvideo.qpic.cn/0bc3faaa6aaaaqam56gybfrfakgdb4uaadya.f10002.mp4?dis_k=921b033f3155d1ee82585086f80b5d63&dis_t=1669795828&vid=wxv_2496116305008246786&format_id=10002&support_redirect=0&mmversion=false
在苹果的iPhone 13推出时,一个重点宣传的功能就是“电影模式”。相比上面说的普通的视频虚化,我觉得电影模式最大的特点就是可以几乎全自动的帮助拍摄者控制焦点,帮助拍摄者将焦点设置到画面中最重要的主体上——正如在《辛德勒的名单》中导演始终将焦点集中在红衣小女孩身上一样。
这次我也在旷视的技术开放日上看到了旷视推出的电影模式算法。据介绍,苹果是通过双摄像头来实现的电影模式,而旷视则仅仅采用了单摄像头就实现了电影模式。我们来看看旷视的单摄电影模式产品的效果。
http://mpvideo.qpic.cn/0bc3vaaaaaaayaamdzgypfrfbkgdacuaaaaa.f10002.mp4?dis_k=b0975db488f53fceb5752f97dea7dff8&dis_t=1669795828&vid=wxv_2496117311523766273&format_id=10002&support_redirect=0&mmversion=false
可以看到当女生在画面中时,算法会自动对焦到主角女生的身上。当画面中没有人物时,或者人物不显著时,则会自动对焦到显著的物体身上(比如视频中前景的茶壶)。而整个画面的虚化,还有在不同焦点间的切换,都是比较自然的。如果用户有接受过影视拍摄的训练,那么之后只用手机就可以拍摄出很棒的(甚至是具有电影感的)视频了,我想高端安卓手机上很快会普及这样的功能:
三. 视频特效算法相关的核心技术点
我相信很多读者看了上面的介绍,都对这些功能背后的核心技术点很感兴趣。旷视的展示中只是蜻蜓点水般提了一下所用的技术,所以这里我就结合自己的理解来分析一下吧。我们看到上面几个视频特效算法,基本上都有共同的特点:保留主体,渲染背景。为了做到这一点,势必要有软件模块负责将主体人像识别出来,然后要给足够的信息能够将主体人像上的每一个像素和背景的像素区分开来。然后,根据不同的需求,对背景像素做相应的处理和渲染。
那么在我看来,一个完整的视频特效产品,会由以下几个大块的软件模块构成,其中我标红色的的两个可选模块,主要负责为视频渲染提供对焦目标的信息,比如说给出对焦点在屏幕上的位置。而标绿色的语义分割,则在一定程度上对提升渲染画面中目标边缘质感以及目标主体渲染的一致性有帮助。
关键技术组件
下面分别再细讲一些我认为重要的信息。
3.1 深度重建
我先从必选项深度重建说起。在我的文章手机中的计算摄影1-人像模式(双摄虚化)中,我提到对于模仿真实光学系统的摄影来说,获取场景中每个像素点的物距是非常关键的。但在传统多视角几何的思想看来,通过单个相机是无法知道某个像素对应的物点的物距的:
单目可以获取深度吗?
于是,通常手机厂商会使用双摄像头组合来获取场景的视差图,进而转换为深度图,从而获取场景中每个点的物距。我之前讲到,通过合理的设计立体匹配算法,现在已经可以得到非常高质量的视差图了。
然而,对于视频特效算法来说,我们不仅仅考察的是静态场景的视差图的质量,更重要的是当画面动起来后,是否可以高效、低功耗、稳定、高质量的获取场景的视差图。其中,高效、低功耗、稳定,这三个因素现在显得无比的重要,相反我们在拍人像虚化的照片时非常看重的主体边缘锐利等因素,到了视频中却显得不是那么重要了——因为场景中的目标移动起来后,观察者其实不太能觉察到偶尔出现的边缘模糊了,注意力会集中到别的地方。
在上面几个因素中,高效就是快,最好在15ms内完成,这样才有可能渲染60FPS的视频,至少也要在30ms内完成,这样能渲染30FPS的视频,这个我想你很容易理解。低功耗也很重要,你肯定不想买个手机像个烫手的山芋,而且录几段视频就没电了吧。
在这两个约束条件下,特别是功耗要求的约束下,一般的双目立体匹配算法就不太适用了。毕竟,即使什么都不做,光是打开两个摄像头吐出视频流,功耗就已经很高了。
所以根据旷视的宣讲视频和素材,我们了解到旷视采用的方式是单目深度重建。这是和上面讲的传统立体视觉完全不同的一种获取场景深度图的方法,因为只打开一个摄像头即可,所以它能够满足高效、低功耗这两个点。而如何做到稳定和高质量,则要看旷视自己的能耐了,我先来解读下高质量单目深度重建的相关技术。
单目深度重建至少有两大类门派。
一类是强监督型的算法,这类算法一般是构建深度神经网络,然后学习将输入的图像转换为对应的Ground Truth深度图。比如DavidEigen等在2014年的一篇论文Depth Map Prediction from a Single Image using a Multi-Scale Deep Network就描述了如何利用多尺度神经网络,强行回归学习深度图:
经典强监督单目深度重建算法
这类方法往往适用于用于训练它们的特定类型的场景,但由于训练数据的规模和多样性有限,因此不能很好地推广到无约束场景。反过来说,只要数据足够的丰富,学习目标足够的合理,配合较好的网络结构,就能得到不错的结果。
然而,这里问题就在于需要足够丰富的数据上——试问,我们如何才能获得足够丰富的,带有理想深度图的数据呢?这里的两个关键词分别是:足够丰富,以及 理想深度,它们恰好是不容易办到的,甚至还是相互矛盾的。我在好几篇文章中介绍了立体匹配算法所用的数据集,我们当然可以用这些数据集来训练单目深度算法。然而,它们要么数量特别少,但是包含真实的深度(比如MiddleBurry),或是数量略多但视差不稠密(比如KITTI),还有一些数据集数量很丰富,不过是通过渲染引擎渲染出来的合成场景,和真实的场景不完全一致。
混用这些数据当然可以,比如2019年一篇有名的文章Towards Robust Monocular Depth Estimation: Mixing Datasets for Zero-shot Cross-dataset Transfer就谈到了如何混合使用多种不同的数据集。然而当所有这些数据混合使用时,就需要把它们的值域归一化到特定的范围,这会使得数据中Ground Truth Depth丢失尺度信息——这很显然会影响最终的结果,使得其不再具有真实的物距。于是,就会导致我们训练的单目深度算法丢失掉分辨物体绝对距离的能力。比如,下面两张图,单目深度算法很难说出这到底是因为相机焦距的不同导致的物体尺度不一致,还是因为拍摄的距离不同导致的尺度不一致。
单目深度重建缺少尺度信息
不管如何,这类方法可以得到肉眼看起来很不错的视差图,只是缺失准确的物距信息。他们用来渲染一般的静态场景,达到我在手机中的计算摄影1-人像模式(双摄虚化)中描述的对拍照虚化的要求是可以的。由于缺少真实的物距信息,在动态变化的场景中,比如主角从远处到近处走近的过程中,要想让背景的虚化程度越变越浓,可能会失败。一般来说此时需要别的信息补足,才能实现这一点。
单目深度重建的结果肉眼看起来不错
另外一类单目深度获取的方法采用了自监督学习方法。这类方法比较早的代表是2016年Ravi Garg等的Unsupervised CNN for Single View Depth Estimation: Geometry to the Rescue,作者们提出了一种自监督学习场景深度的方法,不过需要标定过的双目相机提供两张输入图像用于学习。其基本思想如下图所示。后面很多方法都是基于双目相机来做自监督学习的(仅在训练时采用双目相机的数据)
利用双摄的自监督单目深度重建算法
自监督学习方法的另外一个流派是用连续视频帧来进行学习,其中代表性的文章是2017年Tinghui Zhou等人的文章Unsupervised learning of depth and ego-motion from video,他们提出的方案如图所示,是利用到了帧间相机的位姿变换作为约束来进行单目深度重建。后来也有很多方法走这条路子。
利用视频进行自监督单目深度重建的方法
自监督的单目深度重建算法能够减少对数据集的要求,但很多算法假设场景是静态的,很难应用于有很多动态物体的场景。而且,依然会遇到无法确定准确的尺度的问题。
从第二节旷视的视频虚化和电影模式的效果上来观察,其背景虚化的表现很不错,能看出虚化浓度与主体物距的较为自然的关系。因此我认为旷视已经通过别的手段解决了高质量单目深度重建的问题,当然这当中应该就有其研发团队自己的密招了。
3.2 语义分割
在旷视的宣传片中,我们看到其中有这样的介绍"结合实时人像分割 实时深度信息",我的理解是单目深度计算不可避免会有一些瑕疵,如果能够结合语义分割技术,对包括人像在内的一些关键物体进行分割,利用分割的Mask去优化场景的深度图,能够得到更准确的深度图,尤其是对深度图在同一平面物体的一致性,以及深度图的边缘准确性有好处。
具体将这两种算法结合在一起的方法有很多,比如我曾经在73. 三维重建8-立体匹配4,利用视差后处理完善结果中就展示了很多经典的方案。
从分割算法本身来讲,这是一个把图像中每一个像素进行分类的操作,每一个像素要么属于背景,要么属于特定的物体,比如人、茶壶等等。所以总体来说这个算法遵循下面的模式:
语义分割算法的经典范式
这里面对我来说最经典的是2015年等提出的算法:U-Net: Convolutional Networks for Biomedical Image Segmentation. 它构造的神经网络结构如下,U型结构的左半部分是编码器,右半部分是解码器。左右两部分之间在不同层次还有连接,使得解码器可以拥有更丰富、更全局的信息。后来的很多算法,其实都是在它基础上进行的衍生。而真正实用化的算法,需要解决的包括更丰富、更准确的Ground Truth数据,更加低的算力要求、更少的内存要求、更块的速度。当然,还有稳定性的问题,待会我会单独讲。总之,学术上优秀的分割算法,到了实际落地时肯定是无法直接使用的——这里面会需要大量的工程实践提炼出最佳的方法。
U-net是经典的语义分割算法
3.3 目标检测和目标跟踪
正如我开始提到,电影模式中算法会判断画面中最重要的目标是什么,然后努力对焦在这个目标上。在示例视频中,我们看到算法会努力对焦到女孩的脸上。
电影模式会自动对焦到重要的目标上
而下一段中,一开始女孩在画面中并不明显,反而是茶壶很显著。所以算法对焦在前景的茶壶上。
茶壶更显著,所以对焦到茶壶上
当检测到后面的女孩比较显著时,画面平滑的切换对焦到她的脸上,并一直保持她的脸为焦点,即便画面在移动。
人脸更显著,所以对焦到人脸上
这个过程中,就需要目标检测和跟踪算法,来提供稳定的对焦目标了。
目标检测很多读者并不陌生,这似乎是一个已经被解决得很好的问题了,特别是最近由原YoloV4团队开源的YoloV7算法发布,更是大大的吸足了眼球。它在5FPS到160FPS的范围内,无论是速度或是精度,都超过了目前已知的检测器,下面这张YOLOv7的宣传图就拽到了天上 不过我很怀疑它在视频特效类应用中是否能够直接用得上,因为实际应用真的有很严苛的功耗要求。
YOLOv7的逆天指标
目标跟踪算法分为单目标跟踪和多目标跟踪两大类,其中的门门道道很深,限于篇幅原因我就不在这里展开了。基本上当软件通过前面的检测算法 设定的规则,确定了对焦点后,就需要持续的跟住对焦点。比如展示视频中算法一直保持美女的脸清晰。
从深度重建,到语义分割,以及目标检测及跟踪,这几个模块共同提供许多信息给视频渲染模块。渲染模块需要处理很多细节的技术问题,比如如何高质量、高效、稳定、低功耗的渲染出我展示的这几个功能。这里面的一些技术的介绍,可以参看我之前的文章:手机中的计算摄影1-人像模式(双摄虚化)。但实际上视频特效中的渲染比拍照时的渲染有很大的不同。比如前面提到的光斑特效,除了考虑某一帧渲染得漂亮,还需要处理好帧间的平稳,否则渲染出来的光斑可能会剧烈的闪个不停,这显然是我们不想看到的。
渲染的细节我就略过了,反而是有一个问题我特别想提出来,供你参考。
3.4 时域稳定性
前面提到的所有算法,深度重建,到语义分割,以及目标检测及跟踪,还有渲染,都会面临一个重要的问题,那就是如何保证帧间的变化是平滑的。
我们今天看到这几类算法都有一些号称SOTA的成果,包括目标检测中最近的王者YOLOv7。然而我不得不指出,这些算法大多数是在离散、静态的数据集上训练而成的,在训练和评价这些算法时根本就没有考虑到帧间的稳定性。当它们应用在视频中时,就会出现因为各种各样原因导致其结果在帧间的变化过于突兀的现象。
举个例子,下面是YOLOv5检测一个视频片段中目标的结果,你可以很明显看到在闪动:
http://mpvideo.qpic.cn/0bc3uuaasaaasuamxdoy2vrfbjodbgsqacia.f10002.mp4?dis_k=f34e23fa7c6b8eab923ad31aba65aa13&dis_t=1669795828&vid=wxv_2496120659853426692&format_id=10002&support_redirect=0&mmversion=false
而在旷视展示的各类视频特效算法中,算法在时域上的平滑和稳定,显然是非常重要的。这就意味着旷视要么采用了新的算法来解决这个问题,要么是对上述各算法模块进行了时域平滑的后处理来解决问题。而且,还需要在解决这些问题的过程中不引起性能和功耗的降低,想想都觉得很不容易!
四. 总结
在这篇文章中,我为你解读了旷视的一系列视频特效算法成果。我很高兴在旷视技术开放日上看到了这么惊艳的演示,看来现在用手机也能拍出电影般的画面了。我相信,越来越多的算法会应用到手机的视频领域,毕竟我们现在已经进入到了视频时代。
我还为你展示了这样的视频特效系统的核心技术点,你可以看到其中很多都是目前计算机视觉界非常热门,甚至非常卷的研究领域。我认为,这样的系统满足如下的范式:
视频特效系统的总体架构
相信,遵循这样的范式,越来越多的视频产品可以被创造出来,我非常期待它们的到来!
本文同步发表在我的微信公众号和知乎专栏“计算摄影学”,欢迎扫码关注,转载请注明作者和来源。
五. 参考资料
- 旷视技术开放日介绍:旷视技术开放日:20个Demo闪亮登场
- 旷视手机电影——在一起的第1024天
- 《辛德勒的名单》,截取自https://v.qq.com/x/cover/dr37tbvercpqsko/d00213z79p3.html
- 关于红衣女孩场景的解读,取材自: https://baijiahao.baidu.com/s?id=1653817734872816120, 感谢原作者
- 手机中的计算摄影1-人像模式(双摄虚化)
- Eigen, David and Puhrsch, Christian and Fergus, Rob, Depth Map Prediction from a Single Image using a Multi-Scale Deep Network, https://arxiv.org/abs/1406.2283
- René Ranftl, Katrin Lasinger, David Hafner, Konrad Schindler, Vladlen Koltun, Towards Robust Monocular Depth Estimation: Mixing Datasets for Zero-shot Cross-dataset Transfer, https://arxiv.org/abs/1907.01341v3
- Ravi Garg, Vijay Kumar BG, Ian Reid, Unsupervised CNN for Single View Depth Estimation: Geometry to the Rescue, https://arxiv.org/abs/1603.04992v1
- Tinghui Zhou, Matthew Brown, Noah Snavely, David G. Lowe, Unsupervised Learning of Depth and Ego-Motion from Video, https://arxiv.org/abs/1704.07813v2
- Olaf Ronneberger, Philipp Fischer, Thomas Brox,U-Net: Convolutional Networks for Biomedical Image Segmentation,https://arxiv.org/abs/1505.04597
- Chien-Yao Wang, Alexey Bochkovskiy, Hong-Yuan Mark Liao, YOLOv7: Trainable bag-of-freebies sets new state-of-the-art for real-time object detectors, https://arxiv.org/abs/2207.02696v1
- 其他手机计算摄影产品介绍:
- 手机中的计算摄影1——人像模式(双摄虚化)
- 手机中的计算摄影2-光学变焦
- 手机中的计算摄影3-多摄融合
- 手机中的计算摄影4-超广角畸变校正
- 手机中的计算摄影5-基于深度学习的畸变校正