paper:MODNet: Real-Time Trimap-Free Portrait Matting via Objective Decomposition (AAAI 2022)

github:https://github.com/ZHKKKe/MODNet

抠图在线体验:CV案例

部署教程:

【Matting】MODNet:实时人像抠图模型-onnx python部署

【Matting】MODNet:实时人像抠图模型-onnx C++部署

NCNN 量化部署教程(模型大小降低为1/4):

【Matting】MODNet:实时人像抠图模型-NCNN C++量化部署

现有的Matting方法常常需要辅助的输入如tripmap才能获得好的效果,但是tripmap获取成本较高。MODNet是一个不需要Trimap的实时抠图算法。MODNet包含2种新颖的方法来提升模型效率和鲁棒性:

(1)e-ASPP(Efficient Atrous Spatial Pyramid Pooling)融合多尺度特征图;

(2)自监督SOC(sub-objectives consistency)策略使MODNet适应真实世界的数据。

MODNet在1080Ti上FPS为67。

抠图效果(官方提供的权重):


目录

一、MODNet

1、Semantic Estimation

2、Efficient ASPP (e-ASPP)

3、Detail Prediction

4、Semantic-Detail Fusion

二、SOC(sub-objectives consistency)

三、实验结果


一、MODNet

MODNet网络结构如图所示,主要包含3个部分:semantic estimation(S分支)、detail prediction(D分支)、semantic-detail fusion(F分支)。

1、Semantic Estimation

Semantic Estimation用来定位肖像的位置,这里仅使用了encoder来提取高级语义信息,这里的encoder可以是任意backbone网络,论文中使用mobilenetv2。这么做有2个好处:

(1)Semantic Estimation效率更高,因为没有decoder,参数减少了;

(2)得到的高级语义表示S(I)对后续分支有利;

将S(I)送入通道为1的卷积层,输出经过sigmoid得到Sp,与计算损失,由GT进行16倍下采样经过高斯模糊得到。使用L2损失,损失函数如下:

2、Efficient ASPP (e-ASPP)

DeepLab提出的ASPP已被证明可以显著提升语义分割效果,它利用多个不同空洞率的卷积来得到不同感受野的特征图,然后将多个特征图融合(ASPP可以参考这里)。

为了减少计算量,对ASPP进行以下修改:

(1)将每个空洞卷积改为depth-wise conv+point-wise conv;

(2)交换通道融合和多尺度特征图融合的顺序,ASPP是各个通道先计算,得到不同尺度特征图然后用conv融合,e-ASPP是每个通道不同空洞率的卷积,concat后融合(这里是参考论文理解的,源码没找到这部分);

(3)输入e-ASPP的特征图通道数减少为原来的1/4。

PS:这里结合图和论文看了一下,还是不太明白下图中的M是怎么来的,也有点没看到最右边的concat维度怎么回事,看了源码,好家伙,没有e-ASPP(我看错了??)。

3、Detail Prediction

Detail Prediction是高分辨率分支,它的输入由I、S(I)、S分支输出的低分辨率特征组成。D分支额外做了简化:

(1)与S分支相比,D的卷积层更少;

(2)D分支的卷积层通道数较少;

(3)分支D的所有特征图分辨率在前向传播时会降低以减少计算量;

分支D的输出是,它的目标是学习到肖像的边缘细节,它的损失函数是L1损失,如下式,其中是二值图,它的计算公式为

4、Semantic-Detail Fusion

分支F结合分支D和分支S的输出,预测图,损失如下式,Lc是 compositional loss(论文传送门)

二、SOC(sub-objectives consistency)

发丝级的Matting数据标注成本非常高,常用的数据增强方法是替换背景,但是这样生成的图像和生活中的图像相差甚远,因此现有的trimap-free模型常常过拟合训练集,在真实场景下表现较差。

论文提出了一种自监督方法,不需要标注数据即可训练网络,使其适应真实世界的数据。MODNet分支S的输出为S(I),F的输出为F(S(I), D(S(I)))。S(I)是F(S(I), D(S(I)))的先验,可以利用这种关系实现自监督训练(有了预测结果F(S(I), D(S(I))),将其下采样然后模糊当作S(I)的标签)。

假设模型为M,有:

设计损失函数(和有监督的损失类似,不过这里用来代替):

上面的损失函数后半部分如下,它存在一个问题:只需要模型不预测任何细节就可以使损失最小。

改进方法也比较简单,在自监督训练时,创建模型M的副本M',用M'预测的作为目标值(用替换上式的)。因为M'也输出,在给细节分支加上正则化损失Ldd:

SOC优化过程中,使用Lcons+Ldd作为损失。

三、实验结果

1、PPM-100

在数据集PPM-100上表现如下。

2、真实世界Matting

OFD(One-Frame Delay):一个简单的视频抠图策略,对于连续的alpha图\\,如果非常接近,且和它两差值大,那么说明可能存在抖动,将其移除并用代替。

为了让MODNet更适应真实数据,从400个视频裁剪了50000张图片,使用SOC自监督训练。下图蓝框为SOC训练后改进的结果,橙框为OFD的效果。

【Matting】MODNet:实时人像抠图模型-笔记相关推荐

  1. 【Matting】MODNet:实时人像抠图模型-NCNN C++量化部署

    相关链接: [Matting]MODNet:实时人像抠图模型-onnx python部署 [Matting]MODNet:实时人像抠图模型-笔记 [Matting]MODNet:实时人像抠图模型-on ...

  2. 超强实时人像抠图算法开源,随心所欲背景替换!

    谈到人像抠图想必大家都不陌生.在影视剪辑.直播娱乐.线上教学.视频会议等场景中都有人像分割的身影,它可以帮助用户实时.精准地将人物和背景精准识别出来,实现更精细化的人物美颜.背景虚化替换.弹幕穿人等, ...

  3. RobustVideoMatting实时人像抠图实践

    一.准备工作 Code地址:GitHub - PeterL1n/RobustVideoMatting: Robust Video Matting in PyTorch, TensorFlow, Ten ...

  4. untiy 实时人像抠图

    最近公司要求做一个抠图程序,作者想到接一个百度AI来实现抠图,做出来之后效果不是太好,然后领导说想要实时抠图,让用户现场体验更好些,没办法,只能推倒重来,然后在网上找个shader,然后自己改改,就实 ...

  5. 视频人像抠图论文阅读

    视频人像抠图论文阅读 1.Prime Sample Attention in Object Detection 2.Mask RCNN 3.Background Matting: The World ...

  6. 目前最大的人像抠图数据集P3M-10k开源了!助力隐私保护的人像抠图研究

    点击下方卡片,关注"CVer"公众号 AI/CV重磅干货,第一时间送达 点击进入-> CV 微信技术交流群 转载自:京东探索研究院 人像抠图,是指从人物图像中提取人物前景,是 ...

  7. Libtorch C++实现人像抠图——面向Windows(部署教程)

    目录 一.环境安装 1.1 基本环境介绍 1.2 pth模型序列化导出转pt 1.2 下载libtorch 1.3 安装OpenCV 1.4 创建win32 C++控制台工程 二.完整推理代码 三.测 ...

  8. Python实现自动人像抠图(小白也能学会)

    原理:AI人工智能,机器学习 工具:paddlehub包和人像抠图模型deeplabv3p_xception65_humanseg 步骤一:安装软件 1.nodepad++ (自行百度安装) 2.py ...

  9. 一键抠图Portrait Matting人像抠图 (C++和Android源码)

    一键抠图Portrait Matting人像抠图 (C++和Android源码) 目录 一键抠图Portrait Matting人像抠图 (C++和Android源码) 1. 项目介绍: 2. MOD ...

最新文章

  1. 句法依存分析_恭喜 | 黑龙江大学自然语言处理实验室获得NLPCC2019跨领域移植中文依存句法分析封闭测试第一名!...
  2. windows远程修改密码
  3. 多个硬件体验如一,华为终端分布式技术会重构IoT生态吗?
  4. 【数据库系统概论】考研第二部分重点分析【2.1】
  5. C#语言之“string格式的日期时间字符串转为DateTime类型”的方法
  6. 聚宽macd底背离_老股民技巧一招鲜:MACD顶、底背离图解及近期实战应用,字字斗金...
  7. 832计算机组成原理和数据结构,考试科目832计算机组成原理和数据结构.doc
  8. VS2010下开发WebApi 基本步骤
  9. PHP时间戳和日期相互转换操作总结
  10. vb/vb.net开发精粹(14)
  11. love2d贪吃蛇---画方格
  12. 100个常用的 PHP 类库、资源和技巧小结
  13. 稀里糊涂的解决了 cuda 和cudnn的安装以及conda安装pytorch出现的torch.cuda.is_available()为false的问题
  14. ROS 机器人模型节点的运动控制原理
  15. java设计模式之模板
  16. 【C++入门篇】深入理解函数重载
  17. Jenkins定时发布项目
  18. 白话空间统计二十七:统计学七支柱之空间统计版本(二)聚合(2)
  19. 信息学奥赛的“一二三四”
  20. scrapy爬虫框架简绍与安装使用

热门文章

  1. backtrace java_Android下面打印进程函数调用堆栈(dump backtrace)的方法
  2. python实现用微信每天给女朋友发晚安
  3. CentOS7 安装 Python 3.9.0
  4. Skia的初探(Skia的GN脚本编译与第一个Skia应用)
  5. Visual Tracking Using Attention-Modulated Disintegration and Integration
  6. 47_ue4进阶末日生存游戏开发[基础游戏循环]
  7. ubuntu下设置IP的方法
  8. 软件测试之测试人员的分工
  9. TChart book
  10. leetcode——第121题——只买一次股票