[论文阅读]Deep Image matting(以及实现细节讨论)

论文地址:Deep Image Matting(CVPR2017)

---------------------------------------------------------------

Abstract

 抠图是计算机视觉的一个基本问题, 具有许多应用前景。以前的算法在图像具有相似的前景和背景颜色或复杂的纹理时性能较差。主要原因是以前方法 1) 只使用低级特征 2) 缺乏高层次的语义信息。本文提出了一种新的基于深度学习的算法, 可以解决这两个问题。我们的深层模型有两个部分。第一部分是深卷积编码解码器网络, 以图像和相应的 trimap 为输入, 并预测图像的 alpha matte。第二部分是一个小型卷积网络, 它refinement第一网络的 alpha matte预测, 以获得更准确的 alpha 值和更精细的边缘。此外, 本文还创建了一个大规模的matting数据集, 包括49300个训练图像和1000个测试图像(可以向第二作者申请数据集,而且实际并没有这么多图像)。我们对AlphaEvaluation(一个alpha matting测试网站), 作者的测试集, 和各种真实图像的算法进行了评估。实验结果清楚地证明了算法在以往方法上的优越性。

1. Introduction

 Matting是图像和视频中精确的前景估计问题, 具有重要的实际意义。它是图像编辑和胶片制作的关键技术, 有效的matting方法可以大大提高当前一些专业工作的效率。它需要在无约束场景中处理真实世界图像的方法。不幸的是, 目前的matting方法并不能很好地推广到典型的日常场景。这归结于问题的困难: 实际的matting问题是无约束的病态问题,即以7个未知数值(RGB每通道的F与B与一个 α  α ), 但仅有3已知的值(RGB),如下公式所示:

I i =α i +F i +(1α i )B i ,α i [0,1] (1)  (1) I i = α i + F i + ( 1 − α i ) B i , α i ∈ [ 0 , 1 ]

因此现有的一些解决办法还是有很大的限制,如下:

第一个限制是由于目前设计的方法来解决matting方程 (Eq1)。这个等式将matting问题作为两种颜色的线性组合来表述, 因此大多数当前的算法都是以颜色问题的方式来处理的。标准方法包括取样前景和背景颜色 [3, 9], 根据消光方程传播Alpha值 [14, 31, 22], 或两种方法混合 [32, 13, 28, 16]。这些方法主要依赖于颜色作为区别特征 (通常与像素的空间位置), 使它们对前景和背景颜色分布重叠的情况非常敏感 , 具体取决于方法 (参见图1顶行)。甚至最近提出的深层学习方法都高度依赖于颜色相关的传播方法 [8, 29]
这里写图片描述
第二个限制是由于焦点集中在一个非常小的数据集上。为matting生成地GT是非常困难的, alphamatting.com 数据集 [25] 通过提供 groundtruth 数据对matting研究作出了重要贡献。不幸的是, 它只包含27个训练图像和8个测试图像。由于其大小和约束的数据集 (如室内实验室的场景, 室内照明, 没有人或动物), 它是有其数据集的偏重的(可以理解为样本不均衡或类别过少无法泛化)。

 这部分可以参考论文中所提及的方法,然后研究参考论文原理。

3. New matting dataset

这部分是重点(深度学习作为数据驱动型方法必须要有数据),这部分作者讲述了制作新的数据集的过程。
 alphamatting.com 的matting benchmark [25] 帮助了抠图研究。然而, 由于需要精心控制的设置, 以获得matting的GT, 所以这个数据集仅有27张训练图像和8张测试图像。这不仅是没有足够的图像来训练一个神经网络, 且严重限制了多样性(仅包含小规模的实验室场景与静态对象)。因此对于这个问题来说背景也是很重要的一环
 为训练matting网络,作者通过将真实图像中的对象合成到新的背景来创建一个大的数据集。作者在简单或纯背景上找到图像(图2a),包括27训练图像从[25]和每五帧从video matting数据集中截取的图像[26]。使用 Photoshop, 作者小心地手共创建alpha matte (图2b) 和纯前景色 (图2c)。因为这些对象具有简单的背景, 所以作者可以提取准确的matte。然后,作者把每一个alphamatte和前景图像的组合作为GT,并且在MScoco[23]和PascalVOC[11]数据集中抽取背景,并将对象组合到这些背景图像以产生更丰富的数据集。
这里写图片描述
 作者以上述方式创建培训和测试数据集。训练数据集有493个唯一的前景对象和49300个图像 (n = 100), 而我们的测试数据集有50个唯一对象和1000个图像 (n = 20)。每个图像的 trimap 从它的GT α matte随机扩张(腐蚀与膨胀)。与以前的matting数据集相比, 新数据集有几个优点。1) 它有许多独特的对象, 涵盖各种matting情况, 如头发, 毛皮, 半透明等. 2) 许多复合图像具有相似的前景和背景颜色和复杂的背景纹理, 使数据集更具挑战性和实际。
 一个问题是, 这个学习过程是否会因为图像的复合性质而产生偏差,即网络学习到在前景和背景照明、噪音等各方面的差异而在真实图像上无法泛化。然而, 实验中发现, 与以前的方法相比, 本文的方法在自然图像上取得了更优越的结果 。

4. Our method

 matting网络由两个阶段组成 (图 3)。第一阶段是一个深卷积 encoder-decoder 网络(熟悉AE与Gan的应该不陌生), 它以patch的图像(crop后)和 trimap 为输入, loss包括两部分:1.alpha预测loss 2.合成图像loss。第二阶段是一个小的全卷积网络, 它细化了第一个网络的 alpha 预测, 更准确的 alpha 值和更细致的边缘。

4.1. Matting encoderdecoder

具体网络结构如下图:
这里写图片描述
Network tructure对网络的输入是一个patch图像(经过crop)和相应的 trimap, 通过concat, 有4通道输入入网络。整个网络由编码器网络和解码网络组成。编码器网络的输入由连续conv和max_pooling来进行下采样(这里是否使用BN有待实验,但依据现在的经验来看是需要BN的)。解码网络反过来又使用unpooling 层来反转Max_pooling操作(这里貌似使用deconv后得到的结果不如unpool)最后得到预测的alpha matte。具体地说, 我们的编码器网络有14个conv和5个max_pooling。对于解码的结构比编码器网络小, 减少了参数的个数, 加快了训练过程。具体来说, 解码网络有6个conv层, 5 unpooling 层与最终的 alpha matte预测层。
Losses:网络使用了两个损失(可以看作是multitask)。第一个损失称为alpha-prediction loss, 这是在每个像素的GT 的alpha值和预测的 alpha 值之间的绝对差。然而, 由于绝对值的不可微性, 作者使用下面的损耗函数来逼近它。

L i α =(α i p α i g ) 2 +ϵ 2  − − − − − − − − − − − −   α i p ,α i g [0,1] (2)  (2) L α i = ( α p i − α g i ) 2 + ϵ 2 α p i , α g i ∈ [ 0 , 1 ]

这里 α i p   α p i 指的是预测出的像素i点处的预测alpha值, α i g   α g i 指的是GT中i像素的alpha值, ϵ  ϵ 在这里是 10 6   10 − 6 ,主要为了在两值近似甚至完全相等时也能有值做backward

Loss的导数由此就可以计算了:

L i α α i p  =α i p α i g (α i p α i g ) 2 +ϵ 2  − − − − − − − − − − − −     (3)  (3) ∂ L α i ∂ α p i = α p i − α g i ( α p i − α g i ) 2 + ϵ 2

第二个损失称为compositional损失, 这是RGB的GT和预测的RGB的绝对差值,计算方式为利用预测的 alpha matte计算出预测RGB值,另外使用GT的alpha matte计算真实的RGB值,将两者都放入所选择的背景图途中,然后将得到的两张图片做绝对差。同样, 用下面的损耗函数来近似它。

L i c =(c i p c i g ) 2 +ϵ 2  − − − − − − − − − − −    (4)  (4) L c i = ( c p i − c g i ) 2 + ϵ 2

c 表示 RGB 通道时, p 表示由预测 alpha 合成的图像, g 表示GT alpha合成的图像。

总损失:两个损失的加权总和, 即, L overall =w l L alpha +1w l L c   L o v e r a l l = w l ⋅ L a l p h a + ( 1 − w l ) ⋅ L c , 作者将 w l   w l 设置为0.5。此外, 由于只有 trimaps 未知区域内的 alpha 值需要推断, 因此作者根据像素位置对两种类型的损失设置附加权重, 可以帮助网络关注重要的区域(即trimap中unknown区域)。具体地说, W l   W l = 1 如果像素 i 是在未知区域, 否则为0。
Implemantation:虽然训练数据集有49300个图像, 但只有493个前景。为了避免 overfitting 以及更有效地利用训练数据, 作者使用了几种训练策略。首先, 我们随机裁剪以未知区域中像素为中心的 320×320 (图像、trimap) 对。这增加了取样空间。其次, 作者还裁剪不同大小的训练对 (例如480×480、640×640), 并调整它们 到320×320的大小。这使得方法更健壮, 以扩展和帮助网络更好地学习上下文信息和语义信息。第三, 每个训练对都随机翻转。第四, trimaps 从GT alpha matte中随机膨胀。最后, 在每个训练时代之后, 随机重新创建训练输入。网络的编码器部分初始化, VGG-16 的前14层卷积层 [30] (第十四层是完全连通层 “fc6”, 可以转换成卷积层)。由于网络有4通道输入, 作者用零初始化第一层卷积滤波器额外通道。所有解码网络中参数都用Xavier随机变量初始化。测试时, 图像和相应的 trimap concat为输入。将执行网络的正向传递以输出 alpha matte预测。

4.2. Matting refinement stage

 网络第二阶段的输入是图像patch的串联和第一阶段的 alpha matte预测 (在0和255之间缩放),4通道输入。输出是对应的是最终预测的alpha matte。网络是一个完整的卷积网络, 包括4卷积层。前3卷积层中都跟一个非线性的 “ReLU” 层。不进行downsample。此外, 使用 “skip model” ,将输入数据的第4个通道(第一阶段预测的alpha matte)缩放到0和1之间, 然后再添加到网络的输出中。详细的配置如图3所示。我们的细化阶段的效果在图4中说明。请注意, 它不会对 alpha matte进行大规模的更改, 而是只细化和锐化alpha 值。
这里写图片描述
Implementation:在训练过程中, 我们首先更新编码解码器部分, 而不更新Refinement部分。在编码解码器部分Loss收敛后, 固定其参数, 然后更新Refinement部分。第二价段只使用alpha预测损失 (Eq 2) (由于其简单的结构)。作者还使用了第一阶段的所有训练策略(除第四个)。当第二阶段Loss也收敛后, 最后一起微调整个网络。作者使用 Adam [20] 更新两个部分。在训练过程中, 设置一个小的学习率10−5。在测试中, 给定一个图像和一个 trimap, 我们的算法首先使用了matting编码解码器阶段来得到一个初始的alpha matting预测。然后将图像和 alpha 预测连接成细化阶段的输入, 以产生最终的alpha matte。

实现的细节基本已经讨论清楚,具体可以查看github上一篇复现过程文,讲述的更加详细,另外实验结果可以看原文。

  • 4
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值