去年刚入坑的旧笔记,刚翻出来…

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,训练时使用了一个小学习率10−510^-510−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

Ii=αiFi+(1−αi)Bi,α∈[0,1]I_i = \alpha_i F_i + (1-\alpha_i)B_i, \alpha \in [0,1]Ii​=αi​Fi​+(1−αi​)Bi​,α∈[0,1], 之前的方法通常是有7个未知量,本文的方法近似于知道了I,BI,BI,B未知α,F\alpha,Fα,F,因为拍照得到的没有人物的背景图,会因为人的阴影,或者相机移动,图片没有对齐等原因,并不是一个真正的背景图,所以可以认为近似B′B'B′。

系统的输入是一张图像或一个视频,图像/视频中的人站在静态的自然背景前,此外还需输入一张纯背景图(就是B′B'B′)。背景图的获取很简单,只需要让人物走出取景区域,然后操作曝光、焦距都已固定的相机进行拍摄(如智能手机相机)。对于手持相机,研究者假设相机的移动幅度很小,利用单应性(homography)将背景与给定的输入图像对齐。从输入中,研究者还提取了目标人物的软分割(soft segmentation)。对于视频输入,可以添加临近的帧来辅助生成蒙版(motion prior)。

研究者首先在 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) 。

Ii=αiFi+(1−αi)Bi,α∈[0,1]I_i = \alpha_i F_i + (1-\alpha_i)B_i, \alpha \in [0,1] Ii​=αi​Fi​+(1−αi​)Bi​,α∈[0,1]

根据上面的公式,已知三个变量,未知7个变量。对于大多数现有的抠图算法,约束解空间的基本输入是三元图(trimap),一个指示不透明度和未知区域的粗糙的分割图。不论是生成trimap还是人工标注trimap,trimap通常是粗糙的。这篇文章特意指出了一个我们先前常常忽略掉的问题,输入的trimap通常是粗糙的,不精确的。之前的matting方法,基于这样的trimap尝试直接估值一个好的前景蒙版。

文章认为,在这一过程中,一个分类问题没有得到充分解决。如果仔细观看三元图,未知区域的像素将会分入三个集合:不透明前景,不透明背景以及半透明区域。前两类称之为不透明像素,后一类称之为混合像素。抠图方法的期望行为是为不透明像素生产精确的 0 和 1,同时精确评估混合像素的微小不透明度α\alphaα(介于 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,然后在合成的图片上统一添加一个高斯噪声,这样合成图片有一个相同的分布。这个方法提高了模型的泛化能力。

这部分的工作,后续可以跟和谐化的工作结合,理论上能提升效果。

matting笔记_一周小结相关推荐

  1. python笔记_第三周

    python笔记_第三周 第十天 回调函数 回调函数就是一个被作为参数传递的函数把函数a当做一个值 赋值给函数b的形参, 在调用函数b的时候 在函数体内 适当的实际调用函数a, 这个函数a就是回调函数 ...

  2. MySQL学习笔记_上(select查询)

      上次整理了一些练习发到博客上了,也说要发基础的,整理了一下午才算是把查询那块的勉强整理完,下次再整理其他的,另外还在写设计模式和数据结构的草稿,写的差不多会慢慢发的,这两项算是副线发展,主线还是按 ...

  3. 关于幂律分布的一个笔记_哈克_新浪博客

    关于幂律分布的一个笔记_哈克_新浪博客 关于幂律分布的一个笔记     (2011-03-02 18:12:27)     转载▼     标签:     幂律     二八法则     杂谈     ...

  4. Effective C++笔记_条款31将文件间的编译依存关系降至最低

    Effective C++笔记_条款31将文件间的编译依存关系降至最低 这个章节,读了两遍还是不是很清楚,有一种没法和作者沟通的感觉,看来我还是一个C++的初学者呀.好吧,不多说了,回归主题,今天的笔 ...

  5. oracle11g中用asmlib配置磁盘组,ASM学习笔记_配置ASMLIB磁盘组

    ASM学习笔记_配置ASMLIB磁盘组 目录 1 ASMLIB Introduction 2 虚拟机添加一个共享磁盘(块设备) 3 下载,安装ASMLIB 4 配置,使用ASMLib 磁盘组 #### ...

  6. MySQL学习笔记_关于MySQL的字符类型VARCHAR长度知识总结

    MySQL学习笔记_关于MySQL的字符类型VARCHAR长度知识总结 一.VARCHAR存储和行长度限制 1.VARCHAR(N)中,N指的是字符的长度,VARCHAR类型最大支持65535,指的是 ...

  7. 系统架构师学习笔记_第六章(下)_连载

    系统架构师学习笔记_第六章(下)_连载 6.3 基于 UML 的软件开发过程 6.3.1  开发过程概述 UML 是独立于软件开发过程的,能够在几乎任何一种软件开发过程中使用.迭代的渐进式软件开发过程 ...

  8. java周志第二周_20165325 2017-2018-2 《Java程序设计》结对编程_第二周:四则运算

    20165325 2017-2018-2 <Java程序设计>结对编程_第二周:四则运算 一.码云链接 1.Git提交日志已经实现一个功能/一个bug修复的注释说明,如图所示: 2.测试代 ...

  9. Go学习笔记_环境搭建

    Go学习笔记_环境搭建 Go背景知识 go的特点(官网): Build fast, reliable, and efficient software at scale- Go is an open s ...

最新文章

  1. 网络最大流的三种基础算法
  2. jfinal mysql增删改查_Jfinal简单实现增删改查
  3. 当SRS遇到K8s:如何实现高可用、回滚与灰度发布?
  4. Android实现翻牌效果,android小游戏:翻牌
  5. jQuery滚动监听插件Waypoints
  6. js获取数组最大值的索引_数组中最大值的返回索引
  7. html复选框不可修改,如何用【伪类】成功修改HTML checkbox默认样式?(新checkbox覆盖老checkbox无法点击的问题)...
  8. php sqlserver08001,PHP连接sqlserver2008,怎么连接指定ip地址上的数据库
  9. Groovy操纵集合秘籍
  10. 模板中的占位符替换问题
  11. React Native踩坑新建的RN0.64项目无法在xcode 12.5上打开
  12. 阿里大佬手把手教你用jmeter做压力测试(详图)
  13. SpringBoot实现本地、网络文件下载、zip压缩包批量下载
  14. 计算机教师培训感悟反思,省计算机培训感言
  15. openoffice 卸载 linux,openoffice装配卸载
  16. Apple’s Secret? It Tells Us What We Should Love
  17. opencv四点投影变换
  18. Python使用Faker库
  19. 一条公链的坎坷进化路 |链捕手
  20. 怎么使用XCode给iOS手机安装测试包

热门文章

  1. VScode配置Mingw64出现问题
  2. 如何从ST官网下载ST库
  3. tp5.1 PHP + Redis实现自动取消订单
  4. window下安装pytorch(不用下载cuda和cudnn)(用清华镜像)
  5. 如何用百度好看视频排名优化来做视频营销?
  6. 柱状图数据过长实现滚轴+点击某一条数据
  7. java list 快速排序_java 快速排序
  8. 使用上存储卷,部署一个网站
  9. linux系统改装window10,Ubuntu在Linux改造上获得Windows 10
  10. JS函数式编程【译】5.1 范畴论