去年刚入坑的旧笔记,刚翻出来…
1. 利用神经网络做抠图的入坑之作《Deep Image Matting》
详情见之前的笔记
matting系列论文笔记(一):Deep Image Matting
由于image matting的工作没有特别好的综述,有的综述也不是特别新,deep image matting这篇paper就作为进入这个方向的引导论文。这篇paper是Adobe出品,2017年的论文,虽然时间比较久,但是目前很多的matting方法用的还是这篇文章的思路。先通过语义分割网络生成二分类的前景背景图,处理成trimap或者直接生成trimap,将trimap与原RGB图合并成4通道输入进行图像的精细分割。
简要介绍
在这之前的算法在前景、背景颜色相近和文理复杂时,普遍表现不好,其原因主要有两点:只使用了低级特征,没有利用高级的上下文特征。这篇文章基于深度学习提出,主要为了解决如上两个问题。网络主要分为两部分:
- 一个encoder-decoder网络:将原图和trimap合并为一个4通道的图像作为输入,并且预测出图像的alpha matte
- 一个小的卷积网络:进行alpha prediction的精修,得到更加精确的alpha值和更加尖锐的边缘。
此外这篇文章做的工作还包括建立一个大样本的数据集。
传统的方法较多采用的是将前景和背景进行线性组合,通过采样前景和背景颜色或者传播 α alpha α值的方法。这些方法依赖于明显区分的颜色、位置和低级特征,对于前景和背景颜色重叠的图像容易产生重影。同时,传统数据集通常比较小,生成 α alpha α的ground-truth比较困难。另一个较大的限制是,能用的数据集太小,容易过拟合,泛化能力差。
文章针对这些问题,设计了一个输入为图像和 trimap 的,end-to-end的蒙板学习方法。同时,通过合成得到一个抠图大数据集,将单一背景下的目标进行提取,合成到复杂的新背景下。
新的matting数据集
原有的数据集太小,如alphamatting.com上的数据集只包含有27张训练图8张测试图。本文自行创建了一个新的大数据集。其方法大致为人工抠出较为准确的object,制作相应的trimap,然后将这些图和一些背景图合成,得到大量的训练数据。这些背景图主要来自MS COCO和Pascal VOC。这么做的主要原因还是trimap图的人工标注成本太高昂。这种方法在matting领域还在被广泛使用。
PS: 当然,这数据集还存在着一些问题,如前景,背景图片分辨率低,清晰度低,多目标等问题。关于这一部分可以参考**《End-to-end Animal Image Matting》**,这篇论文针对前面这些问题做了一些研究,提出了一个新的图像合成流程。
method
模型结构如上图所示,主要分为两部分。第一阶段为一个深度卷积encoder-decoder网络:将原图和trimap合并为一个4通道的图像作为输入,然后输出预测蒙版的loss 联合loss。第二阶段一个小型卷积网络:进行alpha prediction的精修,得到更加精确的alpha值和更加尖锐的边缘。
**网络结构:**编码-解码这部分是一个典型的基础的分割网络,类似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。
Implementation: 为了防止过拟合,采用了一些策略,基本是一些常用的:
- randomly crop:没有中心点的随机裁剪超出边界等情况,本文没有讲。
- resize:从原图中随机crop 320,480,640的训练patch,然后统一resize到320,作为网络输入(这里的操作必须对于你训练的那个样本的background,foreground,alpha同步操作)
- flipping
- random dilate:
PS: 这部分的操作比较简略,可以适当的采用一些更多的trick。Encoder 网络部分使用了VGG16。
PS: 本文采用了Xavier初始化,Xavier初始化主要适用于线性的激活函数,所以目前用的较多的是何凯明大佬的Kaiming Initialization,pytorch目前默认的初始化方法就是这个。
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值,其效果如下图所示:
Implementation: 先仅仅更新第一部分的参数,等到其收敛时,固定参数。然后更新refinement部分。等到refinement part也收敛后,微调整个网络。第一、二阶段都使用了Adam,训练时使用了一个小学习率 1 0 − 5 10^-5 10−5。
总结
为了将其推广到自然图像中,文章指出抠图算法除了使用颜色作为主要提示外,需要利用更多的结构和语义特征。这篇文章证明了神经网络能够捕获高级特征并用来改进matting效果。实验也证明了,这种方法的优越性,还能广泛应用到真实图像上。
在这之后利用神经网络来进行image matting的工作,很多都受到这篇文章的启发。
论文笔记见附件2
2. 《Towards Real-Time Automatic Portrait Matting on Mobile Devices》
这篇文章的工作主要是移动端的,比较粗略地看了一下。
文章主要为了解决移动设备上实时自动人像抠像的问题,提出了名为MMNet的网络模型,基于具有线性瓶颈块的多分支扩张卷积,其性能优于当时的最新模型,还比Mobile DeepLabv3更快。
网络如下图所示:
网络结构大致分为三类:
- encoder: 深度可分离卷积的ASPP模块
- decoder : 1x1 卷积 双线性插值
- Refinement Block: depthwise pointwise
这一块其实有点像 Inception的工作。
3. 2020CVPR《Background Matting: The World Is Your Green Screen 》无需trimap输入的抠图
详细见之前的笔记:matting系列论文笔记(二):Background Matting: The World is Your Green Screen
近来Matting领域越来越多的工作在尝试无需输入Trimap的抠图,并取得了一些很惊艳的工作,无需trimap大大提高了matting的易用性。
这篇文章刚出来的时候非常轰动,开发者提供了完整的测试代码,并支持在图像和视频上进行抠图。这篇文章提出了一种新的无需输入trimap的方法,而且要求很低:在日常环境中使用手持摄像机(手机就可以)拍摄照片或者视频来创建matter(每个像素的前景颜色和alpha)。跟目前一些需要绿幕或者手动标注trimap的方法相比,无疑是非常简便的。虽然,这篇文章的方法需要额外拍一张不带人物的照片,但这仍旧比创建trimap节省很多时间。
研究者用对抗损失训练了一个深度网络,用来预测蒙版。他们首先利用带有 ground truth 的合成数据训练了一个具有监督损失的蒙版网络。为了在不label的情况下缩小合成图像与真实图像的差距,他们在第一个网络的指导下训练了另一个蒙版网络,并通过一个判别器来判断合成图像的质量。研究者在诸多图像和视频上测试了他们提出的新方法,发现这一方法显著优于之前的 SOTA。
其实这里也用到了GAN的方式。
本文方法一些限制:
- 需要两张图:人物前景 无人纯背景
- 静态背景,固定相机效果最好
- 主要适合前景为人的
method
研究者首先在 Adobe Matting 数据集(只用不透明物体的图像)上训练了一个深度蒙版网络。该网络将带有人物的图像 I、纯背景图像 B‘、人物 S、相邻帧的时间堆栈 M(可选)的软分割作为输入,输出则是一个前景图 F 和一个前景蒙版α。为了生成 S,研究者应用了人物分割、腐蚀(erode)、膨胀(dilate)以及高斯模糊。在处理视频时,他们将 M 设为 I 前后相连的两帧。设两帧间隔为 T,则选取的相邻帧为 {I−2T , I−T , I T , I 2T }。这些图像被转换为灰度图,以忽略颜色,更加专注于运动信息。如果输入中没有视频,研究者就将 M 设定为 {I, I, I, I},这些图像也转化为灰度图。
研究者提出了一个语境转换块(Context Switching block,CS block)网络,以根据输入图像更有效地结合所有输入信息的特征(见上图 2)。举个例子,当人物的一部分背景相似时,网络应该更加关注该区域的分割线索。该网络有四个编码器,分别产生 256 个通道的特征图,然后通过应用 1x1 卷积、BatchNorm 和 ReLU 将来自 I 的图像特征分别与 B '、S 和 M 的结合起来,为这三对中的每一对生成 64 通道特征。最后,他们通过 1x1 卷积、BatchNorm 和 ReLU 将这三组 64 通道特征与最初的 256 通道特征相结合,得到编码后的特征并将其传给网络的其他部分,包括残差块和解码器。研究者观察到,上述 CS 块架构有助于网络从 Adobe 数据集泛化到实际数据。
实验结果 见paper
总结: 提出了一种背景matting技术,该技术可以在自然环境中随意捕获高质量的前景 alpha matter。该方法需要固定相机拍摄两张图,有目标的 无目标的背景图。不需要绿幕/trimap。
看到这篇文章的demo,真的很惊艳,效果很好,头发边缘清晰,即使视频中的人物甩头也没有影响合成效果。而且文章开源了代码,给出了完整的训练和测试代码。还有很多细节的地方,后续再细看,跑一下代码。
4. 旷视 ICCV2019 《Disentangled Image Matting》
这篇文章的方法在当时的通用的数据集 Adobe Composition-1k 上刷新了最优成绩,并在 http://alphamatting.com 上取得第一。
文章发现抠图可分为 trimap adaptation 和 alpha estimation 两个任务,并受此启发,旷视研究院提出了一个简单但强大的抠图框架,称之为 AdaMatting (Adaptation and Matting) 。
根据上面的公式,已知三个变量,未知7个变量。对于大多数现有的抠图算法,约束解空间的基本输入是三元图(trimap),一个指示不透明度和未知区域的粗糙的分割图。不论是生成trimap还是人工标注trimap,trimap通常是粗糙的。这篇文章特意指出了一个我们先前常常忽略掉的问题,输入的trimap通常是粗糙的,不精确的。之前的matting方法,基于这样的trimap尝试直接估值一个好的前景蒙版。
文章认为,在这一过程中,一个分类问题没有得到充分解决。如果仔细观看三元图,未知区域的像素将会分入三个集合:不透明前景,不透明背景以及半透明区域。前两类称之为不透明像素,后一类称之为混合像素。抠图方法的期望行为是为不透明像素生产精确的 0 和 1,同时精确评估混合像素的微小不透明度α(介于 0 和 1 之间)。
所以文章认为抠图这一任务包含两个相关但又不同的任务。
第一个是分类未知区域中的像素以确认混合像素,本文称之为 trimap adaptation,第二个是精确计算混合像素的不透明值,本文称之为 alpha estimation。
- trimap adaptation可以近似的看为分类
- alpha estimation可以近似的认为对alpha做回归
网络结构上是一个encoder,两个decoder分别处理 trimap adaptation 和 alpha estimation 两个任务。
这篇paper官方在知乎出了比较详细的讲解,在此不再赘述。
5. 2020.10 《End-to-end Animal Image Matting》
这篇文章主要的工作是端到端的动物抠图,其实还另外做了部分图片合成的工作。这篇文章目前主要仔细研读了新的图片合成route部分。
文章把任务分解为两个并行的子任务:高级语义分割和低级细节抠图。结构上部分跟Disentangled Image Matting类似,一个encoder,两个decoder分别处理两个任务。
RSSN: A NOVELCOMPOSITIONROUTE
文章分析了伪影等的产生原因,数据集小的缺点,做了一些改进,并提出了新的数据集。
- 分辨率低,容易失真,使用了高分辨率背景图片和前景图片
- 语义模糊,使用YOLOv3检测,背景图片是否有多余的目标。
- 分析了清晰度对结果的影响
- 噪声差异:用BM3D去除各自的noise,然后在合成的图片上统一添加一个高斯噪声,这样合成图片有一个相同的分布。这个方法提高了模型的泛化能力。
这部分的工作,后续可以跟和谐化的工作结合,理论上能提升效果。