《A Late Fusion CNN for Digital Matting》论文笔记

参考代码:FusionMatting

1. 概述

导读:这篇文章提出了一种仅依赖RGB输入进行matting的方法,文章使用DensNet-201组成5个stage的编码器,之后跟两个解码器,用于预测前景alpha和背景的alpha,这样带来的好处是使得网络自由度更高。为了更近一步优化最后alpha的预测结果,而不是前景背景对应位置去argmax,文章通过一串卷积操作组成一个fusion模块,去优化alpha的预测结果。这样的方法相对于依靠trimap的方法其预测难度加大,因而网络的设计也变得复杂,而且训练的数据是较重要的,文章的整体思路是可行的也是具有一定的参考性的。至少本人在之前的实验中验证了单编码器单解码器的RGB输入进行matting也能取得不错的效果。

文章的方法通过分别预测前景和背景的方式,降低预测的难度并通过fusion的方式得到最后的alpha,取得的效果还是不错的,可以参考一下下面的matting结果:
在这里插入图片描述

2. 方法设计

2.1 模型构建

在之前的一些工作中对于输入图像 I I I在位置 p p p处其像素表达为(这里的 F p , B p F_p,B_p Fp,Bp表示前景背景图,下文中则表示前景背景alpha图):
I p = α p F p + ( 1 − α p ) B p I_p=\alpha_pF_p+(1-\alpha_p)B_p Ip=αpFp+(1αp)Bp
而在这篇文章中由于预测的主体变为了整个图的alpha,因而对这个模型进行了改变,使用前景背景加权的形式处理:
a l p h a p = β p F p ˉ + ( 1 − β p ) ( 1 − B p ˉ ) alpha_p=\beta_p\bar{F_p}+(1-\beta_p)(1-\bar{B_p}) alphap=βpFpˉ+(1βp)(1Bpˉ)
在一般情况两个解码器预测的结果是应该满足下面的需求的:
B p ˉ + F p ˉ = 1 \bar{B_p}+\bar{F_p}=1 Bpˉ+Fpˉ=1
在文章的设计中损失函数却使得两个预测的结果相加是下面这样的情况:
B p ˉ + F p ˉ ≠ 1 \bar{B_p}+\bar{F_p}\neq1 Bpˉ+Fpˉ=1
这可以使得产生有效的梯度去训练后面的融合网络。

2.2 网络结构

文章的网络结构见下图所示:
在这里插入图片描述
在上图中可以看到文章的网络大体上分为两个部分:

  • 1)由DenseNet-201作为编码器,再加上前景和背景解码器构成的分割网络;
  • 2)由几个卷积组成的fusion模块,用以给前景和背景预测结果进行加权;

其具体的网络结构可以参考git中提供的supplementary materials。

2.3 分割网络的损失

这部分的损失有几个部分组成,其中最直接的便是对alpha进行监督,其采用的监督形式为:
L d ( F p ˉ ) = { ∣ F p ˉ − α p ∣ , 0 < α < 1 ( F p ˉ − α p ) 2 , α p = 0 , 1 L_d(\bar{F_p}) = \begin{cases} |\bar{F_p}-\alpha_p|, & 0\lt\alpha\lt1 \\[2ex] (\bar{F_p}-\alpha_p)^2, & \alpha_p=0,1 \end{cases} Ld(Fpˉ)=Fpˉαp,(Fpˉαp)2,0<α<1αp=0,1
这里分辨使用L1和L2损失函数去监督alpha图里面的不同成分,使用这样的区别可以很好区分分割目标的soft和hard成分。

除了上面的范数损失函数之外,文章还引入了梯度的损失函数,从而去得到更加清晰的结果:
L g ( F p ˉ ) = ∣ δ x ( F p ˉ ) − δ x ( α p ) ∣ + ∣ δ y ( F p ˉ ) − δ y ( α p ) ∣ L_g(\bar{F_p})=|\delta_x(\bar{F_p})-\delta_x(\alpha_p)|+|\delta_y(\bar{F_p})-\delta_y(\alpha_p)| Lg(Fpˉ)=δx(Fpˉ)δx(αp)+δy(Fpˉ)δy(αp)

之后为了使得hard部分的前景背景部分得到的置信度更高,这里使用较差熵损失函数:
C E ( F p ˉ ) = w p ⋅ ( − α p ^ l o g ( F p ˉ ) − ( 1 − α p ^ ) l o g ( 1 − F p ˉ ) ) CE(\bar{F_p})=w_p\cdot(-\hat{\alpha_p}log(\bar{F_p})-(1-\hat{\alpha_p})log(1-\bar{F_p})) CE(Fpˉ)=wp(αp^log(Fpˉ)(1αp^)log(1Fpˉ))
其中,当 α p = 1 , 0 \alpha_p=1,0 αp=1,0的时候,其权值为 w p = 1 w_p=1 wp=1;而在其它情况下为 w p = 0.5 w_p=0.5 wp=0.5,从而使得hard部分的置信度更高一些。

综合上文,网络的整体损失函数描述为:
L F = ∑ p C E ( F p ˉ ) + L d ( F p ˉ ) + L g ( F p ˉ ) L_F=\sum_pCE(\bar{F_p})+L_d(\bar{F_p})+L_g(\bar{F_p}) LF=pCE(Fpˉ)+Ld(Fpˉ)+Lg(Fpˉ)
注意,基于上面的损失函数只是其中的前景部分的损失函数,对于背景部分的损失函数 L B L_B LB也是类似的计算过程,只是其GT变成了 α p = 1 − α p \alpha_p=1-\alpha_p αp=1αp

得到上述的分割结果之后,便可以根据上面的概率输出得到对应的trimap,可以参考下图:
在这里插入图片描述

2.4 融合网络部分

在上述内容中得到前景和背景区域之后便需要将两个部分融合起来得到最后的alpha图,这部分的加权系数是通过一些卷积实现的。这里的损失函数描述为:
L u = ∑ p w p ⋅ ∣ β p F p ˉ + ( 1 − β p ) ( 1 − B p ˉ ) − α p ∣ L_u=\sum_pw_p\cdot|\beta_p\bar{F_p}+(1-\beta_p)(1-\bar{B_p})-\alpha_p| Lu=pwpβpFpˉ+(1βp)(1Bpˉ)αp
其中,当 0 < α p < 1 0\lt\alpha_p\lt1 0<αp<1问的时候 w p = 1 w_p=1 wp=1,否则为 w p = 0.1 w_p=0.1 wp=0.1

2.5 训练过程

文章的训练过程可以划分为3个阶段:

  • 1)15个epoch的分割网络部分训练:
  • 2)保留分割网络的训练参数,并不更新,训练5个epoch的fusion网络部分训练;
  • 3)之后将分割网络和fusion网络联合起来训练7个epoch;

其中采用的是Cyclical学习率策略,整个训练阶段的基础学习率是5e-4,前面两个阶段的最大学习率为1.5e-3,联合训练的时候学习率为1e-3。

在进行联合训练的时候其损失函数描述为:
L J = L u + w 1 ( L F + L B ) + w 2 L s L_J=L_u+w_1(L_F+L_B)+w_2L_s LJ=Lu+w1(LF+LB)+w2Ls
其中, w 1 = 0.5 , w 2 = 0.01 w_1=0.5,w_2=0.01 w1=0.5,w2=0.01,其中 L s L_s Ls是对soft部分的正则:
L s = 1 N ∑ p α p γ + ( 1 − α p ) γ L_s=\frac{1}{N}\sum_p\alpha_p^{\gamma}+(1-\alpha_p)^{\gamma} Ls=N1pαpγ+(1αp)γ
其中, γ = 0.9 \gamma=0.9 γ=0.9

3. 实验结果

在这里插入图片描述
Composition-1k testing dataset:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/m_buddy/article/details/112427479