论文地址:https://arxiv.org/abs/2012.07810
代码地址:https://github.com/PeterL1n/BackgroundMattingV2
论文小结
本文的方法名为BGMv2,其前身为Background Matting: The World Is Your Green Screen(512*512分辨率下达到8fps)是一个不需要Trimap的Matting方法。本系列的方法,需要提供一个背景图片,但不需要完全精确对齐的背景。前文提供了一个效果较好的提升模型,本文进一步将方法改善成了可以实时运行的模型(在2080Ti的GPU上,4K分辨率可达到30fps,HD分辨率可达到60fps)。
从效果上看,相对于其他的方法,本文的Matting方法提取出来的前景效果很好,精度达到了头发级别,如下图所示,效果还是很好的。对于一些动作幅度较小的对象,实践效果是完全没问题的。但需要注意的是,该方法可能对阴影(含背影、肢体的影子)等现象还有进一步的空间。在实践中发现,对于绿幕视频,长头发随意波动,也会带有绿幕的绿色“蒙雾”。
从方法上看,BGMv2是一个两阶段的方法,如下图所示,一个基础网络用以生成低分辨率的结果,然后第二个网络用以在选中的patch上生成高分辨率的结果。BGMv2的输入包括一个源图(含前景)和背景图,最终输出(Refiner的输出)为Alpha和前景残差,中间阶段输出Alpha_sm,FgR_sm,Error_Map和Hidden_sm。模型输出的前景残差是没有前景主体的,但其在forward的时候会加上源图得到一个fgr,该fgr是有主体的部分的,其表现为拥有主体,但背景部分杂乱无章。
Alpha就是融合图像所需要的alpha 通道,旨在区分前后景以及细化边缘部位;前景残差,不知道设置的目的是什么,因为有了Matting通道就可以从原图中得到需要的主题部分了,这可能是为了更容易让模拟拟合以及优化效果的,反正也不需要额外制作标签。这个前景残差的概念是个人猜想,可能是知识储备量任然不足的原因,之后有待回顾。Error_Map,就相当于以前三元图的Trimap部分,是还需要细致优化的部分,而Hidden纯粹是作为中间特征提供给Refiner的。
论文简介
很多产品,在边界处会产生人造痕迹,尤其是头发和眼镜处,如下图所示。使用传统的方法,可以产生更高质量的结果,但不能在高分辨率上实时。
本文的方法依赖于输入额外的背景图像来计算alpha matte和前景层,这种方法被称为background matting。
在训练时,先在VideoMatte240K和PhotoMatte13K/85上学习不同姿态的鲁棒性,再在公开数据集上学习细粒度细节。在制作私有数据集时,使用chromeKey来提取alpha matte和前景层。
为了达到实时的目标,作者发现需要进行细粒度细化的区域是相对较少的。因此,作者引入一个基础网络来预测低分辨率的alpha matte和前景层,以及一个指定可能需要高分辨率细化的区域的error map。Refinement network将低分辨率的结果和原始图像结合,只在选定区域上生成高分辨率的输出。
数据集
公开数据集。Adobe Image Matting(AIM)数据集提供了269个人类的训练样本和11个测试样本,分辨率都在 1000 ∗ 1000 1000*1000 1000∗1000左右。同时,作者使用了仅限人类的区分子集(Attention-guided hierarchical structure aggregation for image matting.),其有362个训练样本,11个测试样本,分辨率在 1700 ∗ 2000 1700*2000 1700∗2000左右。这些mattes都是人工制作的,因此是高质量的。但是631张训练图像是不足以在高分辨率下学习人体姿态的巨大变化和更精细的细节,所以作者使用了两个额外的数据集。
VideoMatte240K。作者收集了484个高分辨率的绿屏视频,产生了 240709 240709 240709张单独的图片帧,并使用Adobe After Effects的chroma-key软件生成alpha mattes和前景。这些视频可以作为库存素材购买,也可以在网上找到免税版的资料片。其中384个视频是4K分辨率的,100个是高清的。作者将视频按照 479 : 5 479:5 479:5的比例分成训练和验证集。数据集包括大量的人体试验对象、服装和姿势,这些有助于训练健壮的模型。作者将把提取的alpha mattes和前景作为数据集发布给公众。本数据集比现有的所有公开的抠图数据集都要大,并且是第一个包含连续帧序列而不是静态图像的公开视频抠图数据集,可以用于未来的研究中开发包含运动信息的模型。
PhotoMatte13K/85。作者收集了 13665 13665 13665张图片,在绿幕面前使用工作室质量的照明和摄像机拍摄,以及通过chroma-key算法、手动调整和错误修复提取的mattes。作者以 13165 : 500 13165:500 13165:500的比例形成训练集和验证集。这些mattes包含一个较为狭窄的姿态范围,但是mattes是高分辨率的,平均在 2000 ∗ 2500 2000*2500 2000∗2500,其包括如每根头发的细节。这个数据集被作者称为PhotoMatte13K。由于隐私和许可问题,作者不会分享这个数据集。所以作者额外收集了85个质量类似的mattes作为测试集,命名为PhotoMatte85公布出来。
作者在Flickr和谷歌上抓取了8861张高分辨率背景图像,并将它们以 8636 : 200 : 25 8636:200:25 8636:200:25的比例构造训练集、验证集和测试集。
下图展示了本文提出的两个数据集的一些例子。
方法
本文的方法,输入图片 I I I,背景图片 B B B,预测alpha matte α \alpha α和前景 F F F,这输出允许与任意背景进行合成 I ′ = α F + ( 1 + α ) B ′ I'=\alpha F+(1+\alpha)B' I′=αF+(1+α)B′,其中 B ′ B' B′是新背景。此外,作者预测前景残差 F R = F − I F^R=F-I FR=F−I,而不是直接预测前景。然后 F R F^R FR可以与输入图片 I I I进行简单相加 F = max ( min ( F R + I , 1 ) , 0 ) F=\max(\min(F^R+I, 1), 0) F=max(min(FR+I,1),0),得到恢复后的前景图。作者发现这个残差公式提高了学习能力,并允许我们通过上采样将低分辨率前景残差应用到高分辨率输入图像上。
高分辨率的matting是具有挑战性的,因为应用深度网络回直接导致不切实际的计算和内存消耗。如下图所示,人类的mattes通常是非常稀疏的,大面积的像素属于背景(
α
=
0
\alpha=0
α=0)或者属于前景(
α
=
1
\alpha=1
α=1),只有少数区域涉及更精细的细节,如头发周围、眼睛和人的轮廓等。因此,作者没有设计一个在高分辨率图像上运行的网络,而是引入两个网络:一个在较低分辨率下运行,另一个只在基于先前网络预测的原始分辨率上运行选定的补丁(patches)。
网络架构由基础网络 G b a s e G_{base} Gbase和校正网络 G r e f i n e G_{refine} Grefine组成。给定原图 I I I和背景 B B B,先由下采样因子 c c c下采样到 I c I_c Ic和 B c B_c Bc。基础网络 B b a s e B_{base} Bbase以 I c I_c Ic和 B c B_c Bc作为输入,预测粗粒度的alpha matte α c \alpha_c αc,前景残差 F c R F_c^R FcR,错误预测图 E c E_c Ec,隐藏层 H c H_c Hc。然后使用校正网络 G r e f i n e G_{refine} Grefine以 H c H_c Hc, I I I,和 B B B作为输入,将错误图 E c E_c Ec中较大值的位置进行 α c \alpha_c αc和 F c R F_c^R FcR的校正,生成的alpha α \alpha α和前景残差是在原图分辨率的。本文的网络是全卷机神经网络,在仍以大小和长宽比下进行训练的。
G b a s e G_{base} Gbase受DeepLabV3和DeepLabV3+架构的启发,这两个架构达到了2017和2018年语义分割任务的最先进性能。基础网络由三个模块组成:Backbone,ASPP和Decoder。本文的 G b a s e G_{base} Gbase采用ResNet-50作为encoder的backbone,这也可以使用ResNet-101和MobileNetV2进行替换,以达到速度和质量的权衡。如DeepLabV3一样,使用ASPP(atrous Spatial Pyramid Pooling)模块(平行空洞卷积,空洞率为3,6,9)整合backbone的输出。在Decoder网络上的每一步上都采用双线性插值上采样,并与backbone的对应部分进行skip connect,再接上一个 3 ∗ 3 3*3 3∗3 Conv,BN和ReLU(除了最后一层)。Decoder网络输出粗粒度的alpha matte α c \alpha_c αc,前景残差 F c R F_c^R FcR,误差预测图 E c E_c Ec和一个32 channel的隐藏层特征 H c H_c Hc。隐藏的特征 H c H_c Hc包含全局上下文,这对细化网络很有用。
G
r
e
f
i
n
e
G_{refine}
Grefine的目标是减少冗余计算和恢复高分辨率的matting细节,其只在Error map
E
c
E_c
Ec的选取块上进行预测。本文执行了一个两阶段的细化,第一次在原始分辨率的
1
/
2
1/2
1/2上进行,第二次在全分辨率上。在推理时,进行
k
k
k个patches的校正。这个
k
k
k要不就是预先设定的,要不就是通过阈值计算出来的。
给定粗粒度的错误预测图
E
c
E_c
Ec,其分辨率为原始分辨率的
1
/
c
1/c
1/c大小。首先我们将其重采样到原始分辨率的
1
/
4
1/4
1/4,标为
E
4
E_4
E4,使得每一个像素都对应原始分辨率的一个
4
∗
4
4*4
4∗4的patch。然后从
E
4
E_4
E4中选取topK,从原图中选取对应的k个patches给
G
r
e
f
i
n
e
G_refine
Grefine进行细节校正。该步骤校正的像素有
16
k
16k
16k个。
两阶段校正流程:首先,将粗粒度的输出都双线性上采样到原分辨率的
1
/
2
1/2
1/2大小,比如alpha matte
α
c
\alpha_c
αc,前景残差
F
c
R
F_c^R
FcR和隐藏层
H
c
H_c
Hc,都concat到一起作为特征;然后从
E
4
E_4
E4选出的错误位置处crop出
8
∗
8
8*8
8∗8的patches,然后经过 valid padding 的
3
∗
3
3*3
3∗3 Conv,BN,ReLU,将patch的大小降到
4
∗
4
4*4
4∗4。然后,这些中间特征再上采样到
8
∗
8
8*8
8∗8,与原图分辨率输入
I
I
I和背景
B
B
B对应位置中提取出的
8
∗
8
8*8
8∗8patches进行concat后,应用两层valid padding的
3
∗
3
3*3
3∗3Conv,BN和ReLU(除了最后一层)以获得
4
∗
4
4*4
4∗4的alpha matte和前景残差结果。最后,将粗粒度alpha matte
α
c
\alpha_c
αc和前景残差
F
c
R
F_c^R
FcR上采样到原始分辨率,并和最终的alpha matta
α
\alpha
α和前景残差
F
R
F^R
FR进行对应的
4
∗
4
4*4
4∗4 patches的交换。整个架构如下图所示。
论文实验
本文的训练细节和参数的设置,还是能带来不少启发性的。但由于没想进行实验,先不浪费时间进行记录了。
实验结果如下面的图片所示。