抠图算法Background Matting:The world is your green screen

2023-11-03

论文地址:https://arxiv.org/abs/2004.00626

代码:https://github.com/senguptaumd/Background-Matting

背景介绍

抠图是照片编辑和视觉效果中使用的标准技术,在现有的抠图算法中,要想抠出一个好的maks一般需要三分图(trimap由前景,背景,未知片段组成)。虽然现在也有不需要三分图的算法正在发展,但是这种不需要三分图的算法,在抠图的质量与有三分图的算法没有可比性。
因此,在本算法中除了需要原图片之外,还需要一张额外的背景图片。

抠图算法的公式

I = α F + ( 1 − α ) B I = \alpha F+(1-\alpha)B I=αF+(1α)B
F F F:前景图(foreground), B B B:背景图(background)。 α \alpha α:混合系数(mixing coeffcient)。 I I I:图像的合成方程
α \alpha α趋近与0的时候,就会获得背景图,相反,当 α \alpha α趋近与1时,就会获得前景图。

方法介绍

核心方法
在本文中,核心是使用一个深度抠图网络G,对输入的图片进行前景色和 α \alpha α进行提取,对背景色和软分割进行增强,在接上一个鉴别器网络D指导训练生成真实的结果

网络结构图

在这里插入图片描述

Adobe数据集上的监督训练

输入

包含对象在前景中的图像 I I I(Image),图像 I I I中对应的背景图像 B ′ B^{\prime} B(Background)(这个和真实的背景图 B B B不同),对象的软分割图像 S S S(Soft Segmentation)以及对象再相邻时间上的临近帧 M M M(Motion Cues)。

为了生成软分割图像 S S S需要对图像进行Decoder-Encoder的卷积处理后获得粗分割结果,在对图片进行腐蚀,扩张以及高斯模糊。

当选择的是视频输入时,将 M M M设置为 I I I前后两帧的拼接,令每一帧的时间间隔为T,则:
M = { I − 2 T , I − T , I + T , I + 2 T } M = \{I_{-2T},I_{-T},I_{+T},I_{+2T}\} M={I2T,IT,I+T,I+2T}
这些图像被转化为灰度图像,以忽略颜色的信息而更多地倾向于对象的运动信息。

在没有选择视频输入时,把 M M M理解为图像 I I I的复制,即:
M = { I , I , I , I } M = \{I,I,I,I\} M={I,I,I,I}

将输入集表示为 X = { I , B ′ , S , M } X = \{I,B^{\prime},S,M\} X={I,B,S,M},则带有权重的网络计算过程可抽象地表示为:
( F , α ) = G ( X ; θ ) (F,\alpha) = G(X;\theta) (F,α)=G(X;θ)

内容切换块(Context Switching Block)

聚焦于网路图左边部分:
在这里插入图片描述
输入的内容 X X X对应图中左边的四个部分,分别采用不同的Enocder对各自部分的图像进行编码,最终各自生成对应的通道数为256的feature map。接着使用Selector块将来自I的feature map与 B ′ , S , M B^{\prime},S,M B,S,M中的每一个部分分别组合,最终生成三个通道数为64的feature map。

Selector块由:1x1卷积,BatchNorm和ReLU构成

接着使用Combinator(结构与Selctor一致),将三个64通道的feature map与原始图像 I I I中256通道的feature mp进行组合,以产生编码特征(encoded features),该特征被传递到网路偶的其余部分,包括残差块和decoders。

现在看网络结构的右上角部分
在这里插入图片描述

将拼接好的编码特征,传递到通用的残差块(ResBLKs)中,在分别经过各自的残差块进行进一步的特征提取。对于前景图部分,将原图 I I I的256通道的feature map与经过残差块的feature map进行融合,输入到Decodor中,将前景分割出来,同时将 α \alpha α遮罩(alpha matte)的部分进行解码,在讲两者结合通方程:
I = α F + ( 1 − α ) F I = \alpha F+(1-\alpha) F I=αF+(1α)F
生成图像,与原图像进行对比从而优化网络。

在这个过程中 B ′ B^{\prime} B的获取不是真实的 B B B,而是通过对前景区域部分进行小伽马校正 γ ∼ N ( 1 , 0.12 ) \gamma \sim \mathcal{N}(1,0.12) γN(1,0.12)或者通过添加高斯噪声 η ∼ N ( μ ∈ [ − 7 , 7 ] , σ ∈ [ 2 , 6 ] ) \eta \sim \mathcal{N}(\mu \in[-7,7], \sigma \in[2,6]) ηN(μ[7,7],σ[2,6])来生成的。

在最后的运动线索中,合成到背景上之前,对前景和 α \alpha α遮罩进行随机仿射变换,然后转化为灰度图。为了计算I和M,最后是用B(真实的背景图)来应用到图像合成方程中,但是,最初输入进网络的仍然是 B ′ B^{\prime} B

最后训练网络 G A d o b e = G ( X ; θ A d o b e ) G_{Adobe} = G(X;\theta_{Adobe}) GAdobe=G(X;θAdobe)的损失函数为:
L = min ⁡ θ Adobe  E X ∼ p X [ ∥ α − α ∗ ∥ 1 + ∥ ∇ ( α ) − ∇ ( α ∗ ) ∥ 1 + 2 ∥ F − F ∗ ∥ 1 + ∥ I − α F − ( 1 − α ) B ∥ 1 ] L = \min _{\theta_{\text {Adobe }}} E_{X \sim p_{X}}\left[\left\|\alpha-\alpha^{*}\right\|_{1}+\left\|\nabla(\alpha)-\nabla\left(\alpha^{*}\right)\right\|_{1}\right.\left.+2\left\|F-F^{*}\right\|_{1}+\|I-\alpha F-(1-\alpha) B\|_{1}\right] L=θAdobe minEXpX[αα1+(α)(α)1+2FF1+IαF(1α)B1]

未标记真实数据的对抗训练

对于未标记的数据来说,在图像的细节部分,比如人的手指,头发以及和背景色相近的前景色区域。在这些区域的表现一般都会比较粗糙。举个例子,原来抠图的图像前景中,掺杂着一部分的背景色,对抗训练就是为了解决这个问题而设计的一个网络。

算法采用的是LS-GAN框架来训练生成器 G R e a l G_{Real} GReal和判别器 D D D,为此,对生成器来说,要更新参数,使得以下式子最小化:
min ⁡ θ R e a l E X , B ˉ ∼ p X , B ˉ [ ( D ( α F + ( 1 − α ) B ˉ ) − 1 ) 2 + λ { 2 ∥ α − α ~ ∥ 1 + 4 ∥ ∇ ( α ) − ∇ ( α ~ ) ∥ 1 + ∥ F − F ∥ 1 + ∥ I − α F − ( 1 − α ) B ′ ∥ 1 } ] \min _{\theta_{\mathrm{Real}}} \mathbb{E}_{X, \bar{B} \sim p_{X, \bar{B}}}\left[(D(\alpha F+(1-\alpha) \bar{B})-1)^{2}\right.+\lambda\left\{2\|\alpha-\tilde{\alpha}\|_{1}+4\|\nabla(\alpha)-\nabla(\tilde{\alpha})\|_{1}\right.\left.\left.+\|F-F\|_{1}+\left\|I-\alpha F-(1-\alpha) B^{\prime}\right\|_{1}\right\}\right] θRealminEX,BˉpX,Bˉ[(D(αF+(1α)Bˉ)1)2+λ{2αα~1+4(α)(α~)1+FF1+IαF(1α)B1}]
其中, B ˉ \bar{B} Bˉ表示生成器D中看到的合成背景,设置 λ \lambda λ从0.05向每两轮之间衰减 1 2 \frac12 21,使得判别器发挥更重要的作用,尤其是对图像的锐化。

对于判别器来说,也要更新参数,使得一下式子最小化:
min ⁡ θ D i s c E X , B ˉ ∼ p X , B ˉ [ ( D ( α F + ( 1 − α ) B ˉ ) ) 2 ] + E I ∈ p data  [ ( D ( I ) − 1 ) 2 ] \min _{\theta_{\mathrm{Disc}}} \mathbb{E}_{X, \bar{B} \sim p_{X, \bar{B}}}\left[(D(\alpha F+(1-\alpha) \bar{B}))^{2}\right]+\mathbb{E}_{I \in p_{\text {data }}}\left[(D(I)-1)^{2}\right] θDiscminEX,BˉpX,Bˉ[(D(αF+(1α)Bˉ))2]+EIpdata [(D(I)1)2]

θ D i s c \theta_{Disc} θDisc代表的是生成器的权重,与 ( F , α ) = G ( X ; θ R e a l ) (F,\alpha) = G(X;\theta_{Real}) (F,α)=G(X;θReal)中的含义相同

在后处理过程中,设置 α \alpha α的阈值为 α > 0.05 \alpha > 0.05 α>0.05并提取前N个最大的相连组间,为每一个不在这些组间中的像素将 α \alpha α值设置为0。其中, N N N是图像中不相交的人物分割的数量。

对生成器与判别器部分的网络结构解析

如下图所示:
在这里插入图片描述
首先输入还是和之前的格式一样,首先是用生成器网络 G R e a l G_{Real} GReal和初始网络 G A d o b e G_{Adobe} GAdobe分别生成前景 F F F和系数 α \alpha α,通过对比两个生成器的 F F F α \alpha α进行参数调整。

接着使用背景图 B ˉ \bar{B} Bˉ与生成器生成的 F F F α \alpha α通过合成公式生成图像,在经过判别器(Discriminator)进行判断,通过自监督对抗损失(Self-Supervised Adversarial Loss)进行优化。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

抠图算法Background Matting:The world is your green screen 的相关文章

  • 笔试

    文章目录 前言 38 FIFO的深度计算问题 1 情况1 fa gt fb 且在读和写中都没有空闲周期 2 情况2 fa gt fb 两个连续的读写之间有一个时钟周期延迟 3 情况3 fa gt fb 在读和写中都有空闲周期 4 情况4 f
  • 以字符串形式读取github上.json文件

    如下 https github com hpu spring87 ebooks blob master update json 如果直接用httpclient读取该URL地址 得到结果是这样的

随机推荐

  • Java JFrame常用的布局

    setLayout 布局对象 声明布局格式的方式 如 setLayout new FlowLayout 1 FlowLayout布局 FlowLayout布局是JPanel 的默认布局 组建按照加入的先后顺序从左到右排列 一行排满之后就转到
  • 二进制应用

    一 什么是二进制 逢二进一的计数规则 规律 数字 0 1 进位基权 2 权 8 4 2 1 基数的幂次 二 为什么要用二进制 成本最优的解决方案 三 如何用二进制 3 1二进制与十进制的转换 3 1 1 十进制转二进制 方法为 十进制数除2
  • 写之前的项目关于使用git remote -v 找不到项目地址的解决方案

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 一 报错解析 1 报错内容 2 报错翻译 3 报错解析 1 使用git branch来查看git仓库有几个分支 2 使用git remote v 3 查看根目录的g
  • Wireshark 实验

    Wireshark 实验 Wireshark 实验 数据链路层 实作一 熟悉 Ethernet 帧结构 实作二 了解子网内 外通信时的 MAC 地址 实作三 掌握 ARP 解析过程 网络层 实作一 熟悉 IP 包结构 实作二 IP 包的分段
  • matlab arma 仿真,基于Matlab的ARMA模型时间序列分析法仿真

    自适应滤波器设计等等 基于Matlab的ARMA模型时间序列分析法仿真 ARMA模型时间序列分析法简称为时序分析法 是一种利用参数模型对有序随机振动响应数据进行处理 从而进行模态参数识别的方法 参数模型包括AR自回归模型 MA滑动平均模型和
  • llvm编译linux,在Linux上编译LLVM/Clang 8.0.0等全部源代码

    本教程使用的操作系统是Ubuntu Linux 18 04 2 LTS版本 编译器是GCC 6 5 0 不用新版的原因是某些代码不支持更高的版本 要编译的LLVM源代码是8 0 0 1 安装必要的软件 它们是 build essential
  • 使用mediapipe训练手指数字识别

    mediapipe手指数字识别 本文是从0开始创建一个识别手势的机器学习模型 为了识别手势 采用mediapipe模型 这个模型会返回手指的位置 之后再通过训练一个模型将这些位置分类得到手势 一 导入依赖 import cv2 import
  • js中的var详解

    var是js的一个关键字 它是用来声明变量的 声明一个变量有两种方式 第一种 var num 1 如果在方法中声明 则为局部变量 如果在全局中声明 则为全局变量 第二种 num 1 事实上这是对属性进行赋值操作 首先 它会尝试在当前作用域链
  • 操作符浅解

    1 移位操作符 作用的对象是数的二进制位 1 gt gt 向左边移动一位 左边丢弃 右边补0 相当于这个数乘以2移动n位 相当于乘以2的n次方 int main int a 2 int b a lt lt 1 打a的二进制向左移动一位 pr
  • vulnhub靶机练习-Me and My Girlfriend: 1

    vulnhub靶机练习 Me and My Girlfriend 1 靶机下载地址 https www vulnhub com entry me and my girlfriend 1 409 点击直接下载 靶机介绍 Description
  • 安达发

    APS Advanced Planning and Scheduling 先进计划与排程 是一种集成了生产计划 物料需求计划 MRP 库存控制和车间调度等功能的管理系统 在制造业中 物料清单 BOM 管理是APS系统中的一个重要组成部分 它
  • 电脑显示DNS服务器没检测到,连网时出现"该设备或资源(DNS 服务器)没有检测到有响应",怎么办?...

    连网时出现 该设备或资源 DNS 服务器 没有检测到有响应 怎么办 卡饭网 梦在深巷 2016 05 05 11 23 15 小编整理了以下2种解决方法大家可以参考以下 方法一 有可能是由于无线网络连接里面的DNS服务器错误 导致的网卡断网
  • 自动化遍历-appcrawler

    下载appclawler 下载地址 https pan baidu com s 1dE0JDCH list path 2F 查看帮助文档 java jar appcrawler 2 4 0 jar with dependencies jar
  • JS-ES6类

    使用js的class需注意以下几点 1 通过class关键字创建类 类名我们还是习惯性定义首字母大写 2 类里面有个constructor函数 可以接受传递过来的参数 同时返回实例对象 3 constructor 函数只要new生成实例时
  • seq2seq

    我的书 淘宝购买链接 当当购买链接 京东购买链接 seq2seq是通用编码器 解码器框架 encoder decoder framework 可以用在机器翻译 文本摘要 会话建模 图像描述 源码 https github com googl
  • 【编译原理】flex实现词法分析器

    flex自动实现词法分析器 FLEX 与 BISON 的使用 FLEX介绍 Flex是一个生成词法分析器的工具 它可以利用正则表达式来生成匹配相应字符串的C语言代码 其语法格式基本同Lex相同 单词的描述称为模式 Lexical Patte
  • 项目中好用的方法

    1 过滤 数组子项是对象的 对象有重复的 let arr res data filter function item index self return self findIndex el gt el applyPerson item ap
  • jsp 不能识别 el 表达式 的解决方法

    在以前使用EL表达式的时候 在JSP页面直接使用就可以了 但昨天我在做项目的时候在JSP页面上的EL表达式不能被识别 如 loginForm username 在页面上还是显示 loginForm username 后来我在JSP头上加上红
  • java面向对象----封装 && 构造器

    目录 封装和隐藏 为什么需要封装 信息的封装和隐藏 四种访问权限修饰符 构造器 构造方法 构造器的特征 语法格式 构造器重载 构造器重载举例 属性赋值过程 JavaBean UML类图 关键字 this this是什么 使用this 调用属
  • 抠图算法Background Matting:The world is your green screen

    论文地址 https arxiv org abs 2004 00626 代码 https github com senguptaumd Background Matting 背景介绍 抠图是照片编辑和视觉效果中使用的标准技术 在现有的抠图算