一、要解决的问题

  • 无绿幕人像抠图
  • I=α∗F+(1−α)∗BI=\alpha *F+(1-\alpha)*BI=α∗F+(1−α)∗B

二、创新点

  • 无绿幕、无trimap人像端到端抠图
  • SOC模型泛化迁移,OFD视频抠图增强
  • Validation Benchmark

三、具体细节


MODNet网络结构如上图所示。主要包括三个自网络:Semantic Branch;Detail Branch;Fusion Branch。

Sematic Branch

Encoder-Decoder结构,采用Mobilenet-v2作为Encoder,并使用channel-wise Attention给Hidden Features添加权重,re-weight后的特征通过上采样-卷积-BN-ReLU套装恢复分辨率到原分辨率的1/8。Sigmoid激活后输出,作为Semantics SpS_pSp​

Detail Branch

Encoder-Decoder结构,输入包括Image以及Semantic Branch不同层的hidden features,通过上采样-卷积-BN-ReLU套装输出原分辨率的detail_alpha图

Fusion Branch

Encoder-Decoder结构,输入包括Semantic Branch以及Detail Branch的hidden features。通过上采样-卷积-BN-ReLU套装恢复到原分辨率,Sigmoid激活后输出,作为最终的α\alphaα。

四、代码分析

网络结构较为简单,不分析此部分代码。

看一下各部分的损失函数。

Semantic Branch的损失函数,G(αg)G(\alpha_g)G(αg​)表示对gound truth alpha下采样。使用L2 Loss。

Detail Branch的损失函数,使用L1 Loss。mdm_dmd​表示边缘区域。

Fusion Branch的损失函数,除了L1损失,还引入合成损失。

整个网络的损失函数:

# forward the model
pred_semantic, pred_detail, pred_matte = modnet(image, False)# calculate the boundary mask from the trimap
boundaries = (trimap < 0.5) + (trimap > 0.5)# calculate the semantic loss
gt_semantic = F.interpolate(gt_matte, scale_factor=1/16, mode='bilinear')
gt_semantic = blurer(gt_semantic)
semantic_loss = torch.mean(F.mse_loss(pred_semantic, gt_semantic))
semantic_loss = semantic_scale * semantic_loss# calculate the detail loss
pred_boundary_detail = torch.where(boundaries, trimap, pred_detail)
gt_detail = torch.where(boundaries, trimap, gt_matte)
detail_loss = torch.mean(F.l1_loss(pred_boundary_detail, gt_detail))
detail_loss = detail_scale * detail_loss# calculate the matte loss
pred_boundary_matte = torch.where(boundaries, trimap, pred_matte)
matte_l1_loss = F.l1_loss(pred_matte, gt_matte) + 4.0 * F.l1_loss(pred_boundary_matte, gt_matte)
matte_compositional_loss = F.l1_loss(image * pred_matte, image * gt_matte) \+ 4.0 * F.l1_loss(image * pred_boundary_matte, image * gt_matte)
matte_loss = torch.mean(matte_l1_loss + matte_compositional_loss)
matte_loss = matte_scale * matte_loss# calculate the final loss, backward the loss, and update the model
loss = semantic_loss + detail_loss + matte_loss
loss.backward()
optimizer.step()

五、总结

MODnet结构清晰,优秀的训练数据是关键,可惜不开源。

MODNet matting相关推荐

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

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

  2. 【Matting】MODNet:实时人像抠图模型-笔记

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

  3. 带你「周游世界」的 MODNet 算法

    来源 | Jack Cui 责编 | 晋兆雨 头图 | CSDN下载自视觉中国 最近又有一个算法火了,不知道你们看到没?直接看效果! 效果这么稳定的人像 Image Matting 算法真的不多,并且 ...

  4. opencv 图像 抠图 算法_人工智能 | 不用绿幕也能实时抠图,商汤等提出只需单张图像、单个模型的新方法MODNet...

    openEA开源周刊 openEA开源社区的官方运营载体 这里每天给大家呈现有价值的开源资讯,欢迎您的来稿与推荐,点击上方蓝色字,加入我们吧! 摘要:近日,香港城市大学和商汤提出一种新型人像抠图方法 ...

  5. 图像抠图Image Matting算法调研

    目录 1.Trimap和Strokes 2. 相关数据集 3.论文算法调研 3.1 Deep Image Matting 3.2 Semantic Image Matting 3.3 Backgrou ...

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

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

  7. MODNet模型部署以及一些改动

    部署日记:MODNet的使用以及一些改动 文献和git git地址:https://github.com/ZHKKKe/MODNet 论文地址:https://arxiv.org/abs/1703.0 ...

  8. Image Matting 客观评价指标、数据集及主观评价

    Image Matting 客观评价指标.数据集及主观评价 2021.7更新 PPM-100数据集已经开放,GitHub,详情见下文章节2.4 目录 Image Matting 客观评价指标.数据集及 ...

  9. ModNet抠图算法及摄像头实时抠图示例

    目录 一.视频抠图采用绿幕的原因 1.摄像机成色原因 2.抠图效果原因 3.经济成本 二.抠图背景知识 1.Trimap 2.什么是抠图 3.抠图算法分类 三.Deep Image Matting算法 ...

最新文章

  1. 四位共阳极数码管显示函数_Verilog笔记
  2. 提升Azure App Service的几个建议
  3. 电气工程及其自动化学不学c语言,电气工程及其自动化学什么 就业方向有哪些...
  4. Effective_STL 学习笔记(四十八) 总是 #incude 适当的头文件
  5. 网站二次开发如何防止别人打包源码_企业网站制作前需注意的几个事项
  6. 南理工OJ-1098 - 字符串问题
  7. PHP生成HTML的技术原理
  8. 机器学习数学基础之高数篇——函数极限和导数(python版)
  9. [转载]JXTA概念介绍
  10. linux红帽子镜像下载,红帽Red Hat Linux相关产品iso镜像下载
  11. 使用jemalloc优化java_C++性能优化(十) —— JeMalloc
  12. 边缘计算是什么?边缘计算系统的组成及概念
  13. vue的keep-alive属性
  14. 统计个人CSDN的博客文章数量
  15. MySQL解决幻读详解
  16. Java实现hanoi塔
  17. [转]java中文乱码解决之道(三)-----编码详情:伟大的创想---Unicode编码
  18. 读卡耐基《人性的弱点》总结
  19. 指针数组和数组指针区别
  20. keil5提示main.c: error C237: ‘wd‘: function already has a body

热门文章

  1. 进程控制块(PCB) 包含哪些信息
  2. Android面试:Glide的缓存机制,文末领取面试资料
  3. 如何造出39元的智能插座?——小米智能插座拆解
  4. 装箱问题(20 分)
  5. stm32驱动lcd段码io配置_LCD驱动型单片机与段码液晶屏配合使用参考
  6. 日志收集工具 Fluentd 使用教程
  7. 20_ue4进阶末日生存游戏开发[AI基础框架搭建]
  8. hexo 菜单_Hexo-修改Hexo主题
  9. 搭建博客hexo 安装hexo、配置hexo、hexo主题美化和添加live2d看板娘--详细步骤
  10. Android 利用ReplacementSpan打造纯文本填空题(附源码)