当前位置: 代码迷 >> 综合 >> 《Deep Image Matting》论文笔记
  详细解决方案

《Deep Image Matting》论文笔记

热度:73   发布时间:2024-02-24 16:19:31.0

参考代码:Deep Matting

1. 概述

导读:这篇文章是在深度学习基础上进行抠图,之前也有基于此的工作,但是那些方法存在前景背景区域颜色接近或是有复杂纹理的时候表现欠佳。文章对于这些方法效果差的原因进行分析并归纳为:网络中只使用了低层次的细节信息,而忽略或是缺少高层次的上下文信息。文章针对上面提到的两个问题提出了一种新的抠图方法,该方法有两个部分组成:
1)由CNN网络构建的编解码结构,使用三色图和原图作为输入,输出预测出来的alpha图;
2)在前一个部分输出的基础上使用一个小的卷积网络去优化预测出来的alpha图,从而使得网络的输出更加精准,边界清晰;

这篇文章指出现有(论文的年代2017年)的一些方法存在着如下的问题:

  • 1)依赖于颜色等物体信息,但是这样的方式在前景背景不好分的时候matting就会存在问题,见图1第一排第二张图。文章使用编解码结构网络和refine网络去预测alpha;
  • 2)现有可供使用的训练数据集相当有限。文章使用数据合成策略增广数据集;

图【1】

2. 方法设计

2.1 网络结构

文章的方法是典型的编解码结构网络,在最后阶段还增加了一个refine模块,其网络结构见下图所示:
在这里插入图片描述

2.2 数据增广策略

由于现今可供使用的matting数据集较少,但是网络训练是需要较大的数据集的,对此文章使用数据合成的思路去进行数据增广。文章使用alpha图与原图将对应的前景区域贴到其它图片上,从而得到了不同背景的合成数据,见下图所示:
在这里插入图片描述

2.3 编解码网络部分

文章的方法第一个阶段是一个U型的编解码结构,编码器由14个卷积和5个池化层构成,解码器结构相对简单,由6个卷积和5个unpooling层构成,使用Xavier 随机初始化。由于网络的输入往外增加了一个三色图的通道,这里对增加的通道使用0值初始化。

对于网络的损失函数是由两部分组成的:alpha的预测损失和RGB合成图的预测损失

alpha图预测损失:
这里对于alpha图的预测损失采用的是L1范数,但是由于L1范数在0点不可导的问题,文章对其进行改进:
Lαi=(αpi?αgi)2+?2,αpi,αgi∈[0,1]L_{\alpha}^i=\sqrt{(\alpha_p^i-\alpha_g^i)^2+\epsilon^2},\alpha_p^i,\alpha_g^i\in [0,1]Lαi?=(αpi??αgi?)2+?2 ?,αpi?,αgi?[0,1]
其中,αpi,αgi\alpha_p^i,\alpha_g^iαpi?,αgi?是像素iii的预测值和实际标注值,?=1e?6\epsilon=1e^{-6}?=1e?6,那么对应的提督计算就可以描述为:
?Lαi?αpi=αpi?αgi(αpi?αgi)2+?2\frac{\partial L_{\alpha}^i}{\partial \alpha_p^i}=\frac{\alpha_p^i-\alpha_g^i}{\sqrt{(\alpha_p^i-\alpha_g^i)^2+\epsilon^2}}?αpi??Lαi??=(αpi??αgi?)2+?2 ?αpi??αgi??
合成损失:
这里将预测出来的alpha与背景图合并结果,gt alpha和背景图合并结果进行损失计算,表示为:
Lci=(cpi?cgi)2+?2L_c^i=\sqrt{(c_p^i-c_g^i)^2+\epsilon^2}Lci?=(cpi??cgi?)2+?2 ?
对于上面的两个损失函数文章使用如下组合的方式:
Lall=wl?Lα+(1?wl)?LcL_{all}=w_l\cdot L_{\alpha}+(1-w_l)\cdot L_cLall?=wl??Lα?+(1?wl?)?Lc?
其中,wl=0.5w_l=0.5wl?=0.5,此外由于三色图中唯一不确定的是其中的未知区域因而损失函数只需要重点关注对应的区域就好了,则对于未知区域像素设置的损失权值为wi=1w_i=1wi?=1,那么确定区域的权值则为wi=0w_i=0wi?=0

2.4 Refinement stage

这部分是在编解码网络训练完成之后对预测出来的alpha图进行细节优化的部分。这部分网络的输入是编解码网络alpha输出(255灰度级)和原始图像的concat,之后经过4层卷积提取特征之后再与编解码网络预测出来的alpha做残差。具体可以参考网络结构的右半部分。下图对照的是有无refinement stage对于整体预测的影响:
在这里插入图片描述
文章中对于网络的训练是划分为2个阶段进行的:

  • 1)去掉refinement stage单独更新编解码网络部分;
  • 2)固定编解码网络部分的参数,之后使用其输出优化refinement stage部分;

3. 实验结果

Composition-1k:
在这里插入图片描述
alphamatting.com dataset:
在这里插入图片描述

  相关解决方案