论文地址:https://arxiv.org/abs/2004.00626

代码:https://github.com/senguptaumd/Background-Matting

背景介绍

抠图是照片编辑和视觉效果中使用的标准技术,在现有的抠图算法中,要想抠出一个好的maks一般需要三分图(trimap由前景,背景,未知片段组成)。虽然现在也有不需要三分图的算法正在发展,但是这种不需要三分图的算法,在抠图的质量与有三分图的算法没有可比性。
因此,在本算法中除了需要原图片之外,还需要一张额外的背景图片。

抠图算法的公式

深度学习抠图源码 图像抠图算法_Adobe
深度学习抠图源码 图像抠图算法_计算机视觉_02:前景图(foreground),深度学习抠图源码 图像抠图算法_Adobe_03:背景图(background)。深度学习抠图源码 图像抠图算法_背景图_04:混合系数(mixing coeffcient)。深度学习抠图源码 图像抠图算法_计算机视觉_05:图像的合成方程
深度学习抠图源码 图像抠图算法_背景图_04趋近与0的时候,就会获得背景图,相反,当深度学习抠图源码 图像抠图算法_背景图_04趋近与1时,就会获得前景图。

方法介绍

核心方法
在本文中,核心是使用一个深度抠图网络G,对输入的图片进行前景色和深度学习抠图源码 图像抠图算法_背景图_04进行提取,对背景色和软分割进行增强,在接上一个鉴别器网络D指导训练生成真实的结果

网络结构图

深度学习抠图源码 图像抠图算法_Adobe_09

Adobe数据集上的监督训练

输入

包含对象在前景中的图像深度学习抠图源码 图像抠图算法_计算机视觉_05(Image),图像深度学习抠图源码 图像抠图算法_计算机视觉_05中对应的背景图像深度学习抠图源码 图像抠图算法_深度学习_12(Background)(这个和真实的背景图深度学习抠图源码 图像抠图算法_Adobe_03不同),对象的软分割图像深度学习抠图源码 图像抠图算法_深度学习_14(Soft Segmentation)以及对象再相邻时间上的临近帧深度学习抠图源码 图像抠图算法_深度学习抠图源码_15(Motion Cues)。

为了生成软分割图像深度学习抠图源码 图像抠图算法_深度学习_14需要对图像进行Decoder-Encoder的卷积处理后获得粗分割结果,在对图片进行腐蚀,扩张以及高斯模糊。

当选择的是视频输入时,将深度学习抠图源码 图像抠图算法_深度学习抠图源码_15设置为深度学习抠图源码 图像抠图算法_计算机视觉_05前后两帧的拼接,令每一帧的时间间隔为T,则:
深度学习抠图源码 图像抠图算法_计算机视觉_19
这些图像被转化为灰度图像,以忽略颜色的信息而更多地倾向于对象的运动信息。

在没有选择视频输入时,把深度学习抠图源码 图像抠图算法_深度学习抠图源码_15理解为图像深度学习抠图源码 图像抠图算法_计算机视觉_05的复制,即:
深度学习抠图源码 图像抠图算法_Adobe_22

将输入集表示为深度学习抠图源码 图像抠图算法_Adobe_23,则带有权重的网络计算过程可抽象地表示为:
深度学习抠图源码 图像抠图算法_深度学习抠图源码_24

内容切换块(Context Switching Block)

聚焦于网路图左边部分:

深度学习抠图源码 图像抠图算法_Adobe_25


输入的内容深度学习抠图源码 图像抠图算法_背景图_26对应图中左边的四个部分,分别采用不同的Enocder对各自部分的图像进行编码,最终各自生成对应的通道数为256的feature map。接着使用Selector块将来自I的feature map与深度学习抠图源码 图像抠图算法_Adobe_27中的每一个部分分别组合,最终生成三个通道数为64的feature map。

Selector块由:1x1卷积,BatchNorm和ReLU构成

接着使用Combinator(结构与Selctor一致),将三个64通道的feature map与原始图像深度学习抠图源码 图像抠图算法_计算机视觉_05中256通道的feature mp进行组合,以产生编码特征(encoded features),该特征被传递到网路偶的其余部分,包括残差块和decoders。

现在看网络结构的右上角部分

深度学习抠图源码 图像抠图算法_背景图_29

将拼接好的编码特征,传递到通用的残差块(ResBLKs)中,在分别经过各自的残差块进行进一步的特征提取。对于前景图部分,将原图深度学习抠图源码 图像抠图算法_计算机视觉_05的256通道的feature map与经过残差块的feature map进行融合,输入到Decodor中,将前景分割出来,同时将深度学习抠图源码 图像抠图算法_背景图_04遮罩(alpha matte)的部分进行解码,在讲两者结合通方程:
深度学习抠图源码 图像抠图算法_计算机视觉_32
生成图像,与原图像进行对比从而优化网络。

在这个过程中深度学习抠图源码 图像抠图算法_深度学习_12的获取不是真实的深度学习抠图源码 图像抠图算法_Adobe_03,而是通过对前景区域部分进行小伽马校正深度学习抠图源码 图像抠图算法_深度学习_35或者通过添加高斯噪声深度学习抠图源码 图像抠图算法_计算机视觉_36来生成的。

在最后的运动线索中,合成到背景上之前,对前景和深度学习抠图源码 图像抠图算法_背景图_04遮罩进行随机仿射变换,然后转化为灰度图。为了计算I和M,最后是用B(真实的背景图)来应用到图像合成方程中,但是,最初输入进网络的仍然是深度学习抠图源码 图像抠图算法_深度学习_12

最后训练网络深度学习抠图源码 图像抠图算法_深度学习抠图源码_39的损失函数为:
深度学习抠图源码 图像抠图算法_背景图_40

未标记真实数据的对抗训练

对于未标记的数据来说,在图像的细节部分,比如人的手指,头发以及和背景色相近的前景色区域。在这些区域的表现一般都会比较粗糙。举个例子,原来抠图的图像前景中,掺杂着一部分的背景色,对抗训练就是为了解决这个问题而设计的一个网络。

算法采用的是LS-GAN框架来训练生成器深度学习抠图源码 图像抠图算法_Adobe_41和判别器深度学习抠图源码 图像抠图算法_Adobe_42,为此,对生成器来说,要更新参数,使得以下式子最小化:
深度学习抠图源码 图像抠图算法_Adobe_43
其中,深度学习抠图源码 图像抠图算法_计算机视觉_44表示生成器D中看到的合成背景,设置深度学习抠图源码 图像抠图算法_深度学习抠图源码_45从0.05向每两轮之间衰减深度学习抠图源码 图像抠图算法_背景图_46,使得判别器发挥更重要的作用,尤其是对图像的锐化。

对于判别器来说,也要更新参数,使得一下式子最小化:
深度学习抠图源码 图像抠图算法_Adobe_47

深度学习抠图源码 图像抠图算法_Adobe_48代表的是生成器的权重,与深度学习抠图源码 图像抠图算法_深度学习_49中的含义相同

在后处理过程中,设置深度学习抠图源码 图像抠图算法_背景图_04的阈值为深度学习抠图源码 图像抠图算法_Adobe_51并提取前N个最大的相连组间,为每一个不在这些组间中的像素将深度学习抠图源码 图像抠图算法_背景图_04值设置为0。其中,深度学习抠图源码 图像抠图算法_Adobe_53是图像中不相交的人物分割的数量。

对生成器与判别器部分的网络结构解析

如下图所示:

深度学习抠图源码 图像抠图算法_计算机视觉_54


首先输入还是和之前的格式一样,首先是用生成器网络深度学习抠图源码 图像抠图算法_Adobe_41和初始网络深度学习抠图源码 图像抠图算法_深度学习抠图源码_56分别生成前景深度学习抠图源码 图像抠图算法_计算机视觉_02和系数深度学习抠图源码 图像抠图算法_背景图_04,通过对比两个生成器的深度学习抠图源码 图像抠图算法_计算机视觉_02深度学习抠图源码 图像抠图算法_背景图_04进行参数调整。

接着使用背景图深度学习抠图源码 图像抠图算法_计算机视觉_44与生成器生成的深度学习抠图源码 图像抠图算法_计算机视觉_02深度学习抠图源码 图像抠图算法_背景图_04通过合成公式生成图像,在经过判别器(Discriminator)进行判断,通过自监督对抗损失(Self-Supervised Adversarial Loss)进行优化。