【CVPR 2019】A Late Fushion CNN for Digital Matting
摘要
- 单张RGB图预测Alpha Matte。
- 有两个Decoder分支,对前景和背景进行分类(观察到更好的分类的到硬分割的结果)。
- Late Fusion是指在网络的后面,对两个分类网络的结果进行融合。
- 设计Loss使得分类网络在前景和背景上达成一致,在Fusion 上对软分割的区域进行校正。
- Fusion Layer不是简单的最大最小化或者求平均,而是通过网络学习一个fusion权重。
- 构建了新的人像数据集
方法
3.1 方法概述
核心思想,用网络预测3个图:
- 前景概率图
- 背景概率图
- 混合权重概率图
然后利用以下Fusion公式来预测alpha的值
α
p
=
β
p
F
p
ˉ
+
(
1
−
β
p
)
(
1
−
B
p
ˉ
)
\alpha_p = \beta_p \bar{F_p} + (1 - \beta_p) (1 - \bar{B_p})
αp=βpFpˉ+(1−βp)(1−Bpˉ)
其中
F
p
ˉ
\bar{F_p}
Fpˉ、
B
p
ˉ
\bar{B_p}
Bpˉ分别是预测的前景和背景在p像素的概率值,$ \beta_p$是Fusion网络预测的融合权重
Fusion网络的输入是图片和两个分类网络逻辑回归前的特征。
注意:当 F p ˉ + B p ˉ = 1 \bar{F_p}+ \bar{B_p} = 1 Fpˉ+Bpˉ=1的时候, α p \alpha_p αp对 β p \beta_p βp求导梯度会消失。
利用上面的融合公式有两个好处:
- 如果预测的前景和背景准确的话,Fusion网络可以更关注于学习过渡的区域
- 仔细的设计Loss使得 F p ˉ + B p ˉ ≠ 1 \bar{F_p}+ \bar{B_p} \not = 1 Fpˉ+Bpˉ=1,使得过渡区域可以给Fusion Net提供有用的梯度。
3.2 语义分割网络
网络结构:
Encoder: DenseNet-201去掉全连接层当做特征提取器,共5个Encoder.
Decoder: 2个Decoder使用特征金字塔,对应5个Encoder,预测出前景和背景的概率。
额外使用Skip Connection:将Encoder中多尺度的特征图和,反卷积层的上采样特征concat到一起。
Loss函数:
Loss函数包括L1、L2、交叉熵。根据alpha区域给不同的像素不同的权重。
先看针对前景分类Decoder的Loss
第一个Loss首先计算预测出的前景和alpha的距离。在过渡区域使用L1距离(恢复alpha的细节),在前背景区域使用L2距离(惩罚分割的错误),这样能够更好地处理软分割和应分割的不同。
第二个Loss计算预测前景图的梯度的L1Loss,用于去除分类后的模糊
第三个Loss计算前景分类的交叉熵损失。
- w p w_p wp,当 α p \alpha_p αp是1/0的时候(前景和背景区域)设为1,在过渡区域的时候设置为0.5.
- α ^ p \hat{\alpha}_p α^p,当处在前景和过渡区域的时候设为1,背景的时候设置为0.
交叉熵损失鼓励语义分割的网络将输出的概率值1做为一个上界。但是并没有提供有用过渡区域的梯度,因此在过渡区域给一个小的权重,然后组合L1、L2 loss的到一个初步的分割的结果。
最终前景分类的总Loss如下:
先看针对背景分类Decoder的Loss
将上面的
α
p
=
1
−
α
p
\alpha_p = 1- \alpha_p
αp=1−αp,剩下的同理。
注意:
在过渡区域组合交叉熵和L1 Loss,会输出比GT的值更大的概率值,这是因为交叉熵损失更倾向于让概率输出为1。因为
1
−
B
p
1-B_p
1−Bp会比真实的aplha要小,因此真实的alpha的值会落在两个分类网络概率形成的区间中。
- 这种设计可以使得Fusion之后得到一个比较准确的回归的结果。
- 强制让前景和背景的语义分割使用不同的Loss进行训练,可以学习到不同的特征。类似ensemble learning的思想。
- 让alpha的[0,1]值大概率落在两个网络预测的概率的区间内。
例如中间是alpha的GT,右边输出的alpha的预测结果。其中红色的部分就是使用 F p F_p Fp和 1 − B p 1-B_p 1−Bp两个概率的中间值取得。
3.3 Fusion网络
Fusion网络的目的在于输出一个 β p \beta_p βp权重,融合前景和背景分类的结果。
网络结构:
5个卷积层和1一个sigmoid层,计算出混合的权重。
输入有两个,一部分是decoder的最后一层的特征图,另一部分是RBG输入原图卷积后的特征图(卷积核采用3×3大小)。
Loss:
假设前面的分类网络decoder已经对固定的像素预测出了可信的分割的类别,Fusion的loss的更倾向于过渡区域像素:
- w p w_p wp等于1,当处于过渡区域时
- w p w_p wp等于0.1,当处于其他区域时
训练细节
- Encoder-使用DenseNet-201在ImageNet上pre-train
- 预训练语义分割网络:先在语义分割的网络上预训练15个epoch
- 预训练fusion网络:冻结语义分割的参数,单独训练4个epoch
- End-to-End联合训练:7个epoch。此时冻结所有的BN层(节约内存)
- 使用Cyclical learning策略加速收敛
在端到端联合训练的时候fine-tune整个网络,使用一个特殊的Loss,基于Fusion Loss和分割的Loss避免过拟合:
- w 1 w_1 w1=0.5, w 2 w_2 w2 = 0.01
- L s L_s Ls用来惩罚软分割像素的数量, γ \gamma γ设置为0.9
实验结果
1. 实验设置
测试数据集:
- Human Image Matting: 收集了40个人像,其中29个来自网上,alpha仔细的手动抠图。11个来自Composition 1-K testing dataset,从VOC中随机找25张背景图片进行合成。
- Composition-1K 测试集
训练数据集:
- 228张人像和211张从DIM中的人像,从COCO随机挑选背景进行合成,共28610张图片
- Composition-1K 数据集
数据增强,训练阶段:
- 在trimap的过渡区域像素为中心,随机裁剪image和trimap到512512和800800尺寸
- resize所有的训练图片到512*512用来warm-up
- 对所有裁剪和resize过的训练数据进行随机翻转和旋转
- 长边不超过800
P100,HIM上训练2.5天,DIM上训练4天。测试时800*800每张0.39秒
2. Human数据集下的结果:
- 输入的Trimap的生成是在alpha的非0非1的像素处随机膨胀生成的。
- 用于度量的trimap的过渡区域是通过25个像素膨胀生成的
如果只计算trimap过渡区域的指标,此方法比DIM要好(ours-raw-25, ours-refined-25)
在整张图上计算指标,指标略有下降(Ours-raw-full, Ours-refined-full)
Ours-FG/BG-Only-25和Ours-Fusion-Only-25显示了各个子网络是有效果的。
在各个姿势上和大小上效果都还不错
3. DIM数据集下的结果
DIM数据集下量化指标的对比:
量化指标全面超过传统方法,但是比DIM还差一点点,这是因为DIM的输入条件更强。
DIM-Trimap-less-25指的是不输入Trimap这个通道
DIM数据集下可视化效果:
上面这个图7b比较的是当Trimap的区域更大的时候,抠图的效果就更差了。
4. 自我比较
两个decoder分支的设计是为了让优化器平衡不同区域的得到更好结果,提供了3种方式的组合(前景概率,背景概率,Fusion概率)
- Simgle branch: 忽略背景和Fusion的两支,类似DIM的做法。只使用卷积网络来refine和L1 Loss来做监督。
- 本文使用Fusion,前景和背景预测的概率在非过渡区域更加的solid(是0就是0,是1就是1),因为语义分割的任务更偏向于一个硬分割。最后的Fusion部分能够更好的融合两个预测的概率图FG、BG 。