当前位置: 首页 > 科技观察

这项开源视频抠图技术火了!换背景的方法真假难辨

时间:2023-03-18 22:15:42 科技观察

绿幕是影视剧中抠图换背景的利器,但是如果我们不在绿幕前拍摄,我们还能完美地改变背景吗?华盛顿大学的研究人员最近上传了这样一篇论文,无需在绿幕前拍摄,就可以完美变换视频背景,让整个世界成为你的绿幕。从作者给出的demo中我们可以看出他们的方法效果是非常惊人的。即使视频中的人在疯狂甩头发,也不影响合成效果:做各种动作时没有“突破”:即使人物和背景不容易区分,手持抠图相机轻微抖动时效果还不错:目前该论文已被CVPR2020会议录用。论文链接:https://arxiv.org/pdf/2004.00626.pdfGitHub链接:https://github.com/senguptaumd/Background-Matting在论文中,研究人员提出了一种创建抠图的新方法。大多数现有的掩蔽方法都需要一个绿屏作为背景,或者手动创建一个trimap。当然也有一些不需要三元图的自动方法,但是效果会差一些。本文提出的masking方法不需要三元图像,但是抠图和改变背景的效果更好。当然,要达到这么好的效果是有条件的。除了原始图像/视频,研究人员还要求摄影师额外拍摄一张没有人物的背景图像。这个过程比创建三元映射节省了大量时间。研究人员训练了一个具有对抗性损失的深度网络来预测面具。他们首先使用具有基本事实的合成数据训练了一个具有监督损失的蒙面网络。为了在没有标注的情况下缩小合成图像与真实图像之间的差距,他们在第一个网络的指导下训练了另一个掩码网络,并通过一个判别器来判断合成图像的质量。研究人员在许多图像和视频上测试了他们的新方法,发现它明显优于以前的SOTA方法。在本文的讨论中,我们可以看到很多潜在的应用场景,比如vlog(云游)、视频会议等。对于广大“烟酒僧”来说,如果导师让你发一段工作视频下次在实验室里(摸)做(鱼),说不定还有用。该方法系统的输入是图像或视频,图像/视频中的人站在静止的自然背景前,也需要输入纯背景图像。背景图像的获取非常简单,只需要让人走出取景区域,然后操作固定曝光和焦距的相机进行拍摄(比如智能手机相机)。对于手持相机,研究人员假设相机移动很小,并使用单应性将背景与给定的输入图像对齐。从输入中,我们还提取了目标人物的软分割。对于视频输入,可以添加相邻帧以帮助生成掩码。图2:方法概述。在Adob??e数据集上进行监督训练研究人员首先在Adob??eMatting数据集(仅不透明物体的图像)上训练了一个深度掩蔽网络。该网络将图像I与人的软分割、纯背景图像B'、人S、相邻帧的时间堆栈M(可选)作为输入,并输出前景图像F和前景掩码α。为了生成S,研究人员应用了字符分割、腐蚀、膨胀和高斯模糊。在处理视频时,他们将M设置为I的连续两帧。如果两帧之间的间隔为T,则选择的相邻帧为{I?2T,I?T,I+T,I+2T}。这些图像被转换为??灰度以忽略颜色并更多地关注运动信息。如果输入中没有视频,研究人员将M设置为{I,I,I,I},这些图像也被转换为灰度。输入集表示为{I,B′,S,M},权重参数为θ的网络的操作可以表示为:研究人员提出了上下文切换块(CS块)网络来更有效地输入图像结合来自所有输入信息的特征(参见上面的图2)。例如,当人的部分背景相似时,网络应该更加关注该区域的分割线索。该网络有四个编码器,每个编码器产生一个256个通道的特征图,然后通过对三对每对分别应用1x1卷积、BatchNorm和ReLU,将来自I的图像特征与B'、S和M的图像特征组合起来的,生成64通道特征。最后,他们将这三组64通道特征与原始256通道特征通过1x1卷积、BatchNorm和ReLU结合起来,得到编码后的特征,并将它们传递给网络的其余部分,包括残差块和解码器。研究人员观察到,上述CS块架构有助于网络从Adob??e数据集泛化到真实数据。研究人员在Adob??e数据集上训练了网络G_Adobe≡G(·;θ_Adobe),其中有监督损失:其中(F,α)=G(X;θ_Adobe),梯度项α可以促使模型生成更清晰的图像。未标记真实数据的对抗性训练尽管研究人员提出的CS块与数据增强相结合,可显着缩短真实图像与使用Adob??e数据集合成的图像之间的差距。然而,这种方法在处理真实图像时仍然存在以下困难:手指、手臂和头发附近的背景被复制到蒙版中;图像分割失败;前景重要部分的颜色与背景颜色相似;图像和背景之间没有间隙。对齐。为了解决上述问题,研究人员提出使用一种自监督学习的方法,从未标记的真实数据中训练模型。该方法的主要思想是掩码估计中的主要错误会导致合成图像在新背景下失真。例如,一个糟糕的蒙版可能包含原始图像的一些背景,当它与新背景合成时会将先前背景的一部分复制到新背景中。因此,研究人员训练了一个对抗性鉴别器来区分合成图像和真实图像,以提高掩模网络的性能。研究人员使用LS-GAN框架来训练生成器G_{Real}和判别器D,并最小化以下目标函数来训练生成器:其中,(F,α)=G(X;θ_{Real}),\bar{B}是鉴别器用来生成合成图像的给定背景。研究人员将λ设置为0.05,并在训练过程中每两个epoch将其减半,以使判别器发挥重要作用。研究人员对alpha损失函数设置了更高的权重,以鼓励模型生成更清晰的图像。研究人员使用以下目标函数训练鉴别器:其中θ_{Disc}表示鉴别器网络的权重,并且(F,α)=G(X;θ_{Real})。实验结果研究人员将该方法与其他方法进行了比较,包括几种在基准测试中表现良好的深度掩蔽算法,例如贝叶斯抠图、上下文感知抠图、索引抠图和后期融合抠图。Adobe数据集上的结果研究人员首先使用26,900个样本训练GAdobe,在100个随机背景上合成269个目标,加上背景的扰动版本作为网络输入,使用Adam优化器训练,batchsize为4,并且学习率为1e。实验对比了AdobeDataset中220种合成材质的结果,如下图所示:表1:AdobeDataset上的Alphamaskerrors,数值越低性能越好。真实数据的结果此外,研究人员使用智能手机iPhone8通过手持和固定摄像头在室内和室外拍摄视频。图3:(a-e)是手持相机在自然背景下拍摄的视频的alpha通道和前景,(e)是动态背景下的失败案例。此外,研究人员还对用户群体进行了调查,结果包括测试视频的评分总和。分数证明本文提出的方法优于其他方法,尤其是在相机捕捉的场景中,但由于非平面背景引起的视差,手持视频中仍然会出现一些掩蔽错误。表2:10个真实世界视频(固定摄像机)的用户研究结果。表3:10个真实世界视频的用户研究(手持相机)。开源代码使用简单的环境配置将项目克隆到本地:gitclonehttps://github.com/senguptaumd/Background-Matting.git作者提供的代码需要在Python3环境下运行,并且在Pytorch=1.1。0,Tensorflow=1.14,cuda10.0版本下测试通过。接下来我们创建一个conda虚拟环境并安装依赖:condacreate--nameback-mattingpython=3.6condaactivateback-matting确保CUDA10.0是默认的cuda。如果电脑的/usr/local/cuda-10.0目录下安装了CUDA10.0,则执行以下命令:exportLD_LIBRARY_PATH=/usr/local/cuda-10.0/lib64exportPATH=$PATH:/usr/local/cuda-10.0/bin安装PyTorch和Tensorflow及相关依赖:condainstallpytorch=1.1.0torchvisioncudatoolkit=10.0-cpytorchpipinstalltensorflow-gpu=1.14.0pipinstall-rrequirements.txt在示例图像上运行推理程序(1)准备数据以实现绿屏图形抠图效果,我们需要以下数据:带字符的图片(扩展名是_img.png)不带字符的背景图(扩展名是_back.png)需要插入字符的目标背景图(存放在data/background文件夹)我们也可以使用sample_data/文件夹进行测试,参考它来准备自己的测试数据。(2)预训练模型从作者提供的云盘下载预训练模型,放在Models/目录下。Pre-processingSegmentationBackgroundMatting需要主体的分割掩码。我们使用Deeplabv3+的tensorflow版本。(3)预处理作者使用Deeplabv3+的TensorFlow版本生成字符抠图的分割掩码:cdBackground-Matting/gitclonehttps://github.com/tensorflow/models.gitcdmodels/research/exportPYTHONPATH=$PYTHONPATH:`pwd`:`pwd`/slimcd../..pythontest_segmentation_deeplab.py-isample_data/input当然我们也可以使用任何其他的图像分割网络来代替Deeplabv3+。将分段结果保存为扩展名为_masksDL.png的文件。之后,我们需要对图像进行对齐预处理,即将背景与输入图像对齐。需要注意的是,我们在拍照时需要关闭自动对焦和自动曝光功能。运行pythontest_pre_process.py-isample_data/input对图像进行预处理。它会自动对齐背景图像并调整偏置和增益以匹配输入图像。(4)对于人像抠图,运行以下代码替换背景。对于使用三脚架拍摄的照片,选择-mreal-fixed-cam以获得最佳效果。选择-msyn-comp-adobe将使我们使用在Adob??e合成数据集上训练的模型而不是真实数据(最差效果)。pythontest_background-matting_image.py-mreal-hand-held-isample_data/输入/-osample