PP-Matting:trimap free的高精度自然图像抠图

news2025/1/18 10:43:48

论文:https://arxiv.org/abs/2204.09433

代码:https://github.com/PaddlePaddle/PaddleSeg

1、动机

        在自然图像抠图领域,大多数方法都是基于Trimap来做抠图,这种trimap-based的方式在抠图时还需要用户绘制一个trimap作为模型输入,这大大限制了实际中的应用。虽然也有一些trimap-free方法提出,但其抠图质量往往不尽如人意,比如前景-背景模糊、过渡区域细节模糊等。

        因此,本文提出了一种trimap-free的自然图像抠图方法。该方法提出了一个高分辨率细节分支(HRDB)在保持特征分辨率不变的情况下提取前景的细粒度细节,还提出了一个语义分割上下文分支(SCB)来避免在细节预测中因语义上下文缺失而引起局部歧义。

2、基础概念

        抠图与分割的区别:

        如图1所示,抠图生成的前景更为精细,而分割生成的前景在边缘处比较粗糙:

图1. 分割和抠图的比较: 原始图像在左边,分割结果在中间,抠图结果在右边

        抠图公式表达:

         对于一幅图像I\in \mathbb{R}^{H\times W\times 3},其由前景F \in \mathbb{R}^{H\times W\times 3}和背景B \in \mathbb{R}^{H\times W\times 3}组成。原图第i个像素的值,可以有前景、背景通过一个α系数进行线性组合:

 α对前景来说,是一个不透明度系数。因此,图像抠图是高度不适定的,它需要求解七个值(前景的RGB、背景的RGB、α)但只有三个值已知(原图的GRB)。

        trimap-based:

        为了降低解决图像抠图问题的难度,之前有些研究提出了使用trimap来作为辅助输入。trimap将图像分为三个区域:前景、过渡区域、背景,以此引入先验来辅助模型的学习。这种方式仅适用于PS之类的应用中用户可以方便绘图的场景,对于自然场景、视频抠图等场景,基于trimap的方法非常不方便。

        trimap-free:

        既然让用户给出trimap不太合适,那就有研究提出了一些替代方案:给出更容易获取的背景图和原图,或者只给出原图但通过第一阶段的模型先预测一个trimap再送入第二阶段进行抠图。这两种方式都有缺点:前者对背景图要求和前景一致,不能有丝毫误差;后者则严重依赖第一阶段的trimap生成质量,容易产生误差累计。因此,最好的方式是直接只使用原图,完全trimap-free的进行Matting。已有研究提出这样的方法,但效果都不理想。

3、方法

3.1. 网络结构

        正确的语义上下文和清晰的细节是高精度Matting的关键。在trimap-based的方法中,trimap提供了足够的语义上下文,而模型只需关注过渡区域即可,所以trimap-based的方法才能效果不错。那么要是在trimap-free方法中也获得语义上下文,是不是就可以像trimap-based方法那样获取精确的结果了呢?

        因此,作者提出了一个网络结构,包含了SCB分支来获取语义上下文,同是还有一个HRDB分支来获取高分辨率细节。具体网络结构如图2所示:

图2. 网络架构概述:HRNet 作为编码器,低分辨率输出送到 PPM,高分辨率输出送到高分辨率细节分支 (HRDB) ;语义上下文分支 (SCB) 有五个块,第一个、第三个和五个块用于引导 HRDB 学习语义上下文;HRDB 保持高分辨率推理以获得高质量的细节预测。

         网络结构描述:

        backbon使用的是HRNet,也是上图中的Shared Encoder;

        backbone最后一个stage的输出送入金字塔池化(PPM)模块,以获取更为丰富的语义上下文;

        SCB分支:PPM得到的feature map和Shared Encoder的1/32倍下采样的feature map作为SCB的输入;SCB由五个块组成,每个块由Conv、BN、ReLU以及一个双线性上采样组成;此外,SCB的输出也被一个包含三个类别(前景、背景、过渡区域)的语义分割任务监督,如图2中的semantic map,和trimap非常相像;

        HRDB分支:Shared Encoder的中间特征通过上采样后concat起来作为HRDB的初始输入,然后分别从SCB的1/16 、1/4中间特征引入引导流(Guidance Flow),以引入语义信息,辅助HRDB获取更为精细的细节;

        Guidance Flow:引导流的结构如图3所示,其将来自SCB的语义上下文feature map和HRDB的细节feature mapconcat起来,送入ConvBNReLU和ConvBNSimoid得到Guidance map,然后再与来自HRDB的细节feature map点乘、相加,得到HRDB的下一级feature map;

图3. 引导流架构架构

 Guidance Flow可用公式表示为:

3.2. 损失函数

        loss包含三部分:

         第一部分,SCB中的语义分割loss,是三分类分割任务的交叉熵损失:

        第二部分,HRDB中的细节loss,仅在过渡区域起作用,由alpha预测loss和梯度loss组成:

         第三部分,最终的alpha matte loss,由alpha预测loss、梯度loss、成分loss组成,其中,成本loss是预测图与原图的绝对差:

 因此,最终的loss是上述三部分loss的加权组合:

4、实验结果

5、写在后面

        PP-Matting提出了一种trimap-free的方法,通过引入SCB和HRDB分支,并在两个分支之间增加Guidance Flow来进行信息融合,达到了trimap-free方法中的SOTA,非常适合应用与自然图像抠图。 

        之前不管是trimap还是背景图,都需要用户使用时提供额外的辅助信息,这在实际使用时相当不便。而trimap-free方法只需要用户提供一张图片,即可得到最终的抠图效果,这大大方便了使用。未来一定是trimap-free的天下~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1166063.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Vue项目运行时报错:‘vue-cli-service‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件

报错原因及解决 1.package.json 文件中未定义依赖项vue/cli-service,因此在 npm install 之后并没有安装vue/cli-service 依赖; 解决:项目目录下执行命令,npm i -D vue/cli-service。2.第1步排查后,还是报同样的错&a…

Django-vue-admin 滚动监听,锚点定位目录

就是实现滑动内容,目录也跟着滚动,同时点击目录,内容会滑动到指定位置 试过很多,反正都不适用Django-vue-admin框架,唯有这个功能可以,只是样式按照自己想要的改改就行, https://blog.csdn.ne…

【深度学习】快速制作图像标签数据集以及训练

快速制作图像标签数据集以及训练 制作DataSet 先从网络收集十张图片 每种十张 定义dataSet和dataloader import glob import torch from torch.utils import data from PIL import Image import numpy as np from torchvision import transforms import matplotlib.pyplot…

这才是当今生成式人工智能的根本性问题!

原创 | 文 BFT机器人 01 引言 近年来,生成式人工智能产品层出不穷,ChatGPT火爆出圈后,百度、谷歌等科技大佬争相研究生成式人工智能产品,将该技术的普及程度提升到了一个新的水平。然而,生成式人工智能的运营需要高昂…

谷歌浏览器解决跨域问题配置记录

在访问时出现has been blocked by CORS policy: Responspreflight request doesn’t pass access control checlAccess-Control-A1low-Origin" header is present onrequested resource. 出现跨域问题 1.先关闭浏览器 2.创建一个目录,文件夹记住路径 3.点击谷…

高德地图撒点组件

一、引入amap地图库 - public/index.html <script type"text/javascript">window._AMapSecurityConfig {securityJsCode: 地图密钥 }</script><scripttype"text/javascript"src"https://webapi.amap.com/maps?v1.4.8&key111111…

rpm 软件包管理工具

RPM&#xff08;RedHat Package Manager&#xff09;&#xff0c;RedHat软件包管理工具。 rpm 查询 rpm -qa #查询所有包(query all)rpm -qa |grep firefox #firefox-102.15.0-1.el7.centos.x86_64rpm -qi | grep firefox #(query information) #Name : firefox #…

Flink日志采集-ELK可视化实现

一、各组件版本 组件版本Flink1.16.1kafka2.0.0Logstash6.5.4Elasticseach6.3.1Kibana6.3.1 针对按照⽇志⽂件⼤⼩滚动⽣成⽂件的⽅式&#xff0c;可能因为某个错误的问题&#xff0c;需要看好多个⽇志⽂件&#xff0c;还有Flink on Yarn模式提交Flink任务&#xff0c;在任务执…

嵌入式学习的两大误区

误区一、全身投入学习桌面或服务器版本Linux系统很多想学嵌入式Linux 的同学经常问我&#xff0c;我不会Linux系统&#xff0c;怎么学习嵌入式Linux开发&#xff0c;于是他们就花费了大量的精力和时间去研究学习桌面版本Linux系统的使用&#xff0c;什么redhat 、federo&#x…

IDEA启动报端口占用

方法一 netstat -ano | findstr :1099 这将列出正在使用1099端口的进程的相关信息&#xff0c;包括进程ID&#xff08;PID&#xff09;。查找使用1099端口的进程ID&#xff0c;并记下该进程的ID号。输入以下命令并按Enter键执行&#xff0c;其中PID是你在上一步中找到的进程ID…

Openssl生成证书-nginx使用ssl

Openssl生成证书并用nginx使用 安装openssl yum install openssl -y创库目录存放证书 mkdir /etc/nginx/cert cd /etc/nginx/cert配置本地解析 cat >>/etc/hosts << EOF 10.10.10.21 kubernetes-master.com EOF10.10.10.21 主机ip、 kubernetes-master.com 本…

【Unity实战】最全面的库存系统(三)

文章目录 先来看看最终效果前言新增脚本获取唯一ID保存和加载保存地面物品将玩家快捷栏和背包合并快捷栏物品显示完结先来看看最终效果 前言 本期紧跟着上期,继续来完善我们的库存系统,实现物品背包仓库数据的存储和加载功能 新增脚本获取唯一ID 新增脚本,自定义控制只读…

超详细Linux搭建Hadoop集群

一、给计算机集群起别名——互通 总纲&#xff1a; 1、准备3台客户机&#xff08;关闭防火墙、静态IP、主机名称都设置好&#xff09; 2、安装JDK&#xff08;可点击&#xff09; 3、配置环境变量 4、安装Hadoop 5、配置hadoop的环境变量 6、配置集群 7、群起测试 1.1、环境准备…

素材搜罗利器!产品设计必须知道的13款最佳网站!

灵感素材类 1.即时设计 在网页中搜索“即时设计”&#xff0c;进入官网后登录账号&#xff0c;之后进入「资源广场」版块便能看到即时设计提供的上万条设计素材。在搜索框内根据需要进行搜索&#xff0c;比如输入“网页设计”&#xff0c;便会看到即时设计提供的网页设计素材…

代码训练营第59天:动态规划part17|leetcode647回文子串|leetcode516最长回文子序列

leetcode647&#xff1a;回文子串 文章讲解&#xff1a;leetcode647 leetcode516&#xff1a;最长回文子序列 文章讲解&#xff1a;leetcode516 DP总结&#xff1a;动态规划总结 目录 1&#xff0c;leeetcode647 回文子串。 2&#xff0c;leetcode516 最长回文子串&#xff1…

实验室装修公司的线上推广成功案例_上海添力网络科技

2018年7月&#xff0c;也是我的书《快速见效的企业网络营销方法 B2B 大宗B2C》出版后两个月&#xff0c;某装修公司的市场部总监在阅读完这本书后&#xff0c;找到了我&#xff0c;希望能帮到他们公司提升线上获客能力。 当时他们已经成立了线上推广团队&#xff0c;配置了SEM岗…

echarts中 对seriesLayoutBy的理解

https://echarts.apache.org/handbook/zh/concepts/dataset/ ‘row’: 系列被安放到 dataset 的行上面。 这里x轴是目录轴&#xff0c;那么一列就是一个系列 ‘column’: 默认值。系列被安放到 dataset 的列上面。 用自己的话总结就是&#xff1a; 当 seriesLayoutBy 为行时&…

xxx cannot be resolved to a variable之解决方法

错误原因&#xff1a; 大致意识是&#xff1a;无法解析为变量 可能是没有声明、变量名识别不了、要么拼写错误&#xff0c;如果是int类型要考虑是否赋初值 解决方法&#xff1a; 声明为Stirng类型即可

JUL 日志

JUL日志级别 日志分为7个级别&#xff0c;详细信息我们可以在Level类中查看&#xff1a; SEVERE&#xff08;最高值&#xff09;- 一般用于代表严重错误WARNING - 一般用于表示某些警告&#xff0c;但是不足以判断为错误INFO &#xff08;默认级别&#xff09; - 常规消息CON…

STM32F4X SDIO(六) 例程讲解-SD_PowerON

STM32F4X SDIO&#xff08;六&#xff09; 例程讲解-SD_PowerON 例程讲解-SD_PowerONSDIO引脚初始化和时钟初始化SDIO初始化(单线模式)CMD0:GO_IDLE_STATE命令发送程序命令响应程序 CMD8:SEND_IF_CONDCMD8参数命令发送程序命令响应程序 CMD55:APP_CMDCMD55命令参数命令发送命令…