matting系列论文笔记(一):Deep Image Matting

matting系列论文笔记(一):Deep Image Matting

刚刚入了Image Matting的坑,后续会更新系列相关的文章。这个坑目前还没有人满为患,好的文章没有很多,综述文章也没有囊括比较新的方法。

论文链接: 2017 Deep Image Matting
pytorch代码: https://github.com/foamliu/Deep-Image-Matting-PyTorch

文章目录

  • matting系列论文笔记(一):Deep Image Matting
    • 前言
    • Abstract
    • 一、Introduction
    • 二、Related Work
    • 三、新的matting数据集
    • 四、method
      • 4.1 Matting encoder-decoder stage
      • 4.2 Matting refinement stage
    • 五、 实验结果
    • 六、总结

前言

这篇论文是Adobe出的,17年的论文,虽然时间比较久,但是目前很多的matting方法用的还是这篇文章的思路。先通过语义分割网络生成二分类的前景背景图,处理成trimap或者直接生成trimap,将trimap与原RGB图合并成4通道输入进行图像的精细分割。

Abstract

文章认为在这之前的算法在前景、背景颜色相近和文理复杂时,表现不好的原因主要有两点:

  • 只使用了低级特征
  • 缺少高级的上下文特征

这篇文章基于深度学习提出,主要为了解决如上两个问题。网络主要分为两部分:

  • 一个encoder-decoder网络:将原图和trimap合并为一个4通道的图像作为输入,并且预测出图像的alpha matte
  • 一个小的卷积网络:进行alpha prediction的精修,得到更加精确的alpha值和更加尖锐的边缘。

此外这篇文章还建立了一个大样本的数据集。

一、Introduction

解决matting的方法近似解一个超定方程:

I i = α i F i + ( 1 − α i ) B i , α ∈ [ 0 , 1 ] I_i = \alpha_i F_i + (1-\alpha_i)B_i, \alpha \in [0,1] Ii=αiFi+(1αi)Bi,α[0,1]
I i , F i , B i , α i I_i,F_i, B_i,\alpha_i Ii,Fi,Bi,αi分别代表像素i的原图RGB值,前景,背景,前景的不透明度。
如上方公式所示,难点在于每个像素有三个已知量和7个未知量。
目前的方法都有各自的限制,传统的方法较多采用的是将前景和背景进行线性组合,通过采样前景和背景颜色或者传播 α \alpha α值的方法。这些方法依赖于明显区分的颜色、位置和低级特征,对于前景和背景颜色重叠的图像容易产生重影。同时,传统数据集通常比较小,生成 α \alpha α的ground-truth比较困难。
另一个较大的限制是,能用的数据集太小,容易过拟合,泛化能力差。
matting系列论文笔记(一):Deep Image Matting_第1张图片

二、Related Work

详见paper原文,在此不再赘述。

三、新的matting数据集

原有的数据集太小,如alphamatting.com上的数据集只包含有27张训练图8张测试图。本文自行创建了一个新的大数据集。其方法大致为人工抠出较为准确的object,制作相应的trimap,然后将这些图和一些背景图合成,得到大量的训练数据。这些背景图主要来自MS COCO和Pascal VOC。这么做的主要原因还是trimap图的人工标注成本太高昂。这种方法在matting领域还在被广泛使用。

当然,这数据集还存在着一些问题,如前景,背景图片分辨率低,清晰度低,多目标等问题。
matting系列论文笔记(一):Deep Image Matting_第2张图片

四、method

matting系列论文笔记(一):Deep Image Matting_第3张图片

模型结构如上图所示,主要分为两部分。第一阶段为一个深度卷积encoder-decoder网络:将原图和trimap合并为一个4通道的图像作为输入,然后输出预测蒙版的loss+联合loss。第二阶段一个小型卷积网络:进行alpha prediction的精修,得到更加精确的alpha值和更加尖锐的边缘。

4.1 Matting encoder-decoder stage

**网络结构:**编码-解码这部分是一个典型的基础的分割网络,类似FCN网络的改版。目前已经有很多更加强大的encoder-decoder网络了,如DeepLab v3+等等。

本文为了减少参数、加快训练速度,对decoder网络进行了精简。encoder部分有14个卷积层和5个最大池化层,到了decoder部分只有6个卷积层和5个unpooling layers了

Losses: 本文使用了两个losses, alpha-prediction loss + compositional loss

alpha-prediction loss 指的是每个像素的ground truth 的Alpha值与预测Alpha值之间的绝对差,但是由于绝对差不可微分,采用相对近似值模拟,公式如下:
在这里插入图片描述

compositional loss 是ground truth RGB颜色和预测的RGB颜色之间的loss,c定义RGB通道,类似于前面的alpha-prediction loss,则compositional loss 计算公式为:
在这里插入图片描述

Implementation: 为了防止过拟合,采用了一些策略,基本是一些常用的:

  • randomly crop:没有中心点的随机裁剪超出边界等情况,本文没有讲。
  • resize:从原图中随机crop 320,480,640的训练patch,然后统一resize到320,作为网络输入(这里的操作必须对于你训练的那个样本的background,foreground,alpha同步操作)
  • flipping
  • random dilate:

这部分的操作比较简略,可以适当的采用一些更多的trick。Encoder 网络部分使用了VGG16。

PS: 本文采用了Xavier初始化,Xavier初始化主要适用于线性的激活函数,所以目前用的较多的是何凯明大佬的Kaiming Initialization,pytorch目前默认的初始化方法就是这个。

4.2 Matting refinement stage

跟之前的算法相比,效果已经比较不错了,但由于使用encoder-decoder结构的缘故,得到的结果常常过于平滑。因此,添加了第二阶段的网络,以获得更加精确的alpha matte和更锐利的边缘。

网络结构: 第二阶段网络的输入是image patch和第一阶段得到的对应的alpha预测的串联(一个4通道输入)。输出是对应的ground truth alpha matte。网络是全卷积网络,包含4个卷积层,前3个卷积层都跟着一个ReLU层。为了使得尖锐的边缘即准确轮廓产生,该阶段不再进行降采样过程。此外,在4通道输入数据进入网络前,还采用了一个“ skip-model ”使得其值变成0-1。第二阶段网络不会对alpha matte进行大规模更改,而只是细化和锐化alpha值,其效果如下图所示:

matting系列论文笔记(一):Deep Image Matting_第4张图片

Implementation: 先仅仅更新第一部分的参数,等到其收敛时,固定参数。然后更新refinement部分。等到refinement part也收敛后,微调整个网络。第一、二阶段都使用了Adam,训练时使用了一个小学习率 1 0 − 5 10^-5 105

五、 实验结果

几个实验对照表:
matting系列论文笔记(一):Deep Image Matting_第5张图片

在当时 Alpha Matting 比赛中前五名的比赛截图,文章的方法排名第一:
在这里插入图片描述
trimap对alpha预测的影响程度比对:
matting系列论文笔记(一):Deep Image Matting_第6张图片

六、总结

为了将其推广到自然图像中,文章指出抠图算法除了使用颜色作为主要提示外,需要利用更多的结构和语义特征。这篇文章证明了神经网络能够捕获高级特征并用来改进matting效果。实验也证明了,这种方法的优越性,还能广泛应用到真实图像上。

在这之后利用神经网络来进行image matting的工作,很多都受到这篇文章的启发。

你可能感兴趣的:(论文笔记,#,image,matting,matting,图像分割,深度学习)