Life sucks, but you're gonna love it.

0%

论文阅读 | Semantic Human Matting

摘要

Semantic Human Matting也被称作是人像的抠图,是一种高质量的图像分割。在图像硬分割的任务中,我们的分割只分为前景和背景两个部分,所以分割看到的边界比较明确。但是human matting的输出并不是一个 非零即一的掩码,而是一个透明度的层,这样可以将分离出的人像的边界有比较好的过度,而不至于太硬。

现存的很多抠图的算法是需要人标定出前景和背景的一小部分,然后根据标定的位置进行抠图。这篇文章提出了一个自动进行图像抠图的算法 — 语义人像抠图。

简介

高质量的抠图技术可以用在很多方面,比如说更换背景,创意设计。这些需要大量应用到抠图的操作,显然,手动抠图的效率是远远不够的。设计自动抠图系统也不是一件简单的事,并不仅仅是将语义分割和图片抠图操作简单结合起来。一方面语义分割存在的弊端在于它针对于每个像素都作类别判断,重点经常在大致的语义区域而会忽略一些结构性的细节(比如人的发丝);而图像抠图则集中于对于细节的提取,经常需要大量的人为工作和时间。

抠图具体来说对于一张图片 $I$,我们将生成它的前景 $F$, 背景$B$ 以及alpha matte $\alpha$,他们之间的关系如下:

对于彩图来说,有7个未知变量和3个已知变量,所以经常需要人为给定限制。【左侧 $I$ 代表的RGB三个值是已知量,右侧的$F$ 和 $B$ 分别有三个未知量 再加上 $\alpha$ 一共七个】

这篇文章提出了 Semantic Human Matting 的方法,将语义分割模块和基于深度学习的抠图模块相结合,自动提取alpha matte。学习到的分辨前景和背景的语义信息在深度抠图网络中可以帮助细节的提取。直接的方式是分别训练两个模块,将分割的结果当做是trimap然后送入抠图网络。然而这种方法的表现不是很好。原因在于,语义分割旨在对每一个像素进行分类,可以大致的区分前景和背景。然而抠图的目标是对每一个像素赋予一个更精细的透明度的值,而不是决定他的语义。他们分别对语义分割和抠图,所以需要仔细地结合在一起来处理高精度的人像抠图任务。

总结一下,这篇文章的贡献有三点:

  • SHM是第一个自动抠图算法,通过深度学习实现了粗略的语义分割和细节的结合;
  • 提出了新的融合策略,使得语义分割和细节提取两部分很好的合作
  • 生成了比较大的人物抠图数据库

基于FCN(fully convolution network)的结构并不适用于抠图,因为首先对于像素的分类并不满足抠图的精度,其次像素分类的准确度只体现在网络结构和语义分割方面。并不能体现出对细节的提取。

还有一些方法是需要输入trimap或者需要人工给定大致的前景和背景部分的。

Human Matting Dataset

这部分说的就是本文在实验过程中用到的dataset以及贡献了一个新的较大且拥有alpha matte的数据库

Our Method

SHM模型的输入是一张RGB的图片,输出是一张大小相同的alpha matte的图片,除了输入的一张RGB图片之外不需要任何其他附加的输入。

SHM需要同时获取粗略的分类信息【分离各个主体】,并且同时提取抠图需要的细节。所以设计了两个网络分别处理这两个部分:T-Net 和 M-Net

  • T-Net的作用时对每一个像素进行分类,将它分为:前景,背景,以及不确定部分【其实就是生成trimap】
  • M-Net的作用时将T-Net的输出作为生成alpha matte的参考。
  • 最终由一个融合模块(fusion module)将两部分结合起来生成最终的alpha matte

Screenshot 2020-03-24 at 11.03.53 AM

以上是SHM的流程图。

T-Net

T-Net主要是对图片进行粗语义分割,因此T-Net部分的模型可以应用任何一个表现比较好的语义分割模型。本文选择的是PSPNet-50.

M-Net

M-Net主要是用来捕捉细节方面的信息,并且生成alpha matte的。它的输入是T-Net的输出以及原RGB图片的结合,一共channel为6的特征。【这里和DIM模型是不一样的,DIM的模型输入是RGB+alpha matte也就是channel数为4.】M-Net模型是个深度的编译解码过程,编译的过程含有13层卷积和四层池化过程【参数和VGG16网络一样】,解码的过程有6层卷积和4层上池化过程。

M-Net和DIM网络不通的点在于:

  • 输入的channel数不同
  • Batch Norm放在每一个卷积层后面用来加速收敛
  • conv6和deconv6的层被移除,因为这些层的参数过多,趋向于造成overfitting

Fusion Module

将由T-Net输出的trimap作为matting网络的输入会造成注意力只集中在trimap中的细节提取上,对于语义分割中的前景和背景保留的不是很好。所以在后面引入了融合模型。

若分别用 $F, B, U$ 来表示前景,背景,和不确定部分,那么前景的像素概率图$F_s$就为:

同样可以得到 $B_s$ 和$U_s$, 即 $F_s + B_s + U_s = {\bf 1}$【这里的概率图应该是一张图上每个像素点为前景的概率拼在一起形成的图,所以大小等于图像的大小。其实也是T-Net最后softmax的输出结果】

若用 $\alpha _r$ 来表示从M-Net直接输出的raw alpha matte的图片。

由 T-Net生成的predicted trimap给出的是像素分别属于前景,背景和不确定部分的概率。

  • 当 T-Net预测出的点是属于不确定部分时,意味着当这个像素是处在人像边缘或者是在一些细节处的时候,我们认为这点预测的 $\alpha _r$ 是准确的。
  • 当T-Net预测数的点是属于前景或者背景部分时,这点属于前景的条件概率就变成 $\frac{F_s}{F_s+B_s}$.

这样的话,我们预测 alpha matte 的概率模型就是:

这里就是说明,只有在不确定部分,我们才参考 $\alpha_r$ 的输出,其他情况下我们参考 $F_s$ 的结果。

Loss

损失函数就结合了alpha部分的损失函数和最后生成图片的损失函数。alpha matte部分的损失函数是取 $\alpha_r$ 和 $\alpha_g$ 之间的绝对值差;compositional部分是取 $c_p$ 和 $c_g$ 之间的差值。

另外,训练的时候还加入了对于trimap的loss的计算$\mathcal L_t$,最终的损失函数为:$\mathcal L = \mathcal L_p + \lambda \mathcal L_t$

Implementation detail

  • T-Net 和 M-Net 都是分别进行预训练
  • 端到端的训练引用的是T-Net和M-Net的预训练模型,训练模型中的T-Net输入是 $800 \times 800$ 随机截取的patch,M-Net的输入是不同大小($320^2, 480^2, 640^2$)然后rescale到$320\times320$ 的patch。