专栏首页贾志刚-OpenCV学堂一键智能抠图-原理与实现

一键智能抠图-原理与实现

一键智能抠图-原理实现

1. 效果秀

有些朋友已经体验过了cvpy.net最近新上的一键智能抠图和换背景的功能,智能判断前景并自动抠图,效果还是挺惊艳的,放几张图看看效果:

请注意看这位喵星人右侧性感的胡须,抠的可谓是非常精细了。

有人说了,这张图片的的背景是简单的纯色背景,体现不出难度来。

那我换一张我在路边拍的一朵不知名的花(恕我孤陋寡闻...)的图片,看看抠图的效果,顺便换个蓝色的背景:

可以看到,模型成功识别出了前景区域,而且边缘等细节识别的非常好。

再来看一张人物照的抠图效果:

注意看左手指缝肩膀后面的那一缕头发,称得上丝丝入扣了吧。

2. 体验途径

看到效果想要体验一把的小伙伴可以通过网址https://cvpy.net/studio/cv/func/DeepLearning/matting/matting/page/前往体验区体验。

3. U^2-Net (U square net)

上述一键智能抠图的所用的模型是Pattern Recognition 2020论文《U^2-Net: Going Deeper with Nested U-Structure for Salient Object Detection》提出的U^2-Net

值得一提的是,最近外网很火的增强现实应用【隔空移物(AR Cut & Paste)】和 Object CutAPI都是基于CVPR2019BASNet。而U^2-NetBASNet的作者为同一位大佬-秦雪彬。

作者认为,目前显著性目标检测有两种主流思路,一为多层次深层特征集成(multi-level deep feature integration,一为多尺度特征提取(Multi-scale feature extraction)。多层次深层特征集成方法主要集中在开发更好的多层次特征聚合策略上。而多尺度特征提取这一类方法旨在设计更新的模块,从主干网获取的特征中同时提取局部和全局信息。而几乎所有上述方法,都是为了更好地利用现有的图像分类的Backbones生成的特征映射。而作者另辟蹊径,提出了一种新颖而简单的结构,它直接逐级提取多尺度特征,用于显著目标检测,而不是利用这些主干的特征来开发和添加更复杂的模块和策略。

作者首先介绍了提出的Residual U-blocks,然后介绍了基于Residual U-blocks构建的嵌套U型网络结构。

3.1 Residual U-blocks

上图为普通卷积blockRes-like blockInception-like blockDense-like blockResidual U-blocks的对比图,明显可以看出Residual U-blocks是受了U-Net的启发。

Residual U-blocks由以下三部分组成:

  • 一个输入卷积层,它将输入的feature map x (H × W × C_in)转换成中间feature map F_1(x)F_1(x)通道数为C_out。这是一个用于局部特征提取的普通卷积层。
  • 一个U-like的对称的encoder-decoder结构,高度为L,以中间feature map F_1(x)为输入,去学习提取和编码多尺度文本信息U(F_1(x))U表示类U-Net结构。更大L会得到更深层的U-block(RSU),更多的池操作,更大的感受野和更丰富的局部和全局特征。配置此参数允许从具有任意空间分辨率的输入特征图中提取多尺度特征。从逐渐降采样特征映射中提取多尺度特征,并通过渐进上采样、合并和卷积等方法将其编码到高分辨率的特征图中。这一过程减少了大尺度直接上采样造成的细节损失。
  • 一种残差连接,它通过求和来融合局部特征和多尺度特征:F_1(x) + U(F_1(x))

RSURes block的主要设计区别在于RSUU-Net结构代替了普通的单流卷积,用一个权重层(weight layer)形成的局部特征来代替原始特征。这种设计的变更使网络能够从多个尺度直接从每个残差块提取特征。更值得注意的是,U结构的计算开销很小,因为大多数操作都是在下采样的特征映射上进行的。

3.2 U^2-Net的结构

U^2-Net的网络结构如下:

与U-Net的网络结构做一个对比:

直观上可以发现,U^2-Net的每一个Block都是一个U-Net结构的模块,即上述Residual U-blocks。当然,你也可以继续Going Deeper, 每个Block里面的U-Net的子Block仍然可以是一个U-Net结构,命名为U^3-Net。然后同理继续...,正所谓:子又生孙,孙又生子;子又有子,子又有孙;子子孙孙无穷匮也!

4. 性能表现

作者所提出的模型是使用DUTS-TR数据集进行训练,该数据集包含大约10000个样本图像,并使用标准数据增强技术进行扩充。研究人员在6个用于突出目标检测的基准数据集上评估了该模型:DUT-OMRONDUTS-TEHKU-ISECSSDPASCAL-SSOD。评价结果表明,在这6个基准点上,新模型与现有方法具有相当好的性能。

U^2-Net的实现是开源的,并为两种不同的方法提供了预训练的模型:U^2-Net176.3M的较大模型,在GTX 1080Ti GPU上为30 FPS)和一个仅为4.7mb的较小的U^2-Net版本,最高可达到40 FPS

代码和预训练模型都可以在Github找到:

https://github.com/NathanUA/U-2-Net。

本文分享自微信公众号 - OpenCV学堂(CVSCHOOL)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-09-01

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • OpenCV中高效的像素遍历方法,写出工程级像素遍历代码

    初次接触OpenCV的开发者,必须过的第一道坎就是学会如何遍历访问Mat对象中每个像素,实现像素级别的图像操作,这个是最级别的编程技能,但是不同的像素遍历方法效...

    OpenCV学堂
  • OpenCV4.4 中SIFT特征匹配调用演示

    大家好,听说OpenCV4.4 已经把SIFT跟SURF特征提取又重新get回来了,可以不需要编译OpenCV源码,直接下载官方预编译版本的就可以直接使用了。如...

    OpenCV学堂
  • OpenCV实现人脸对齐

    OpenCV实现人脸对齐 一:人脸对齐介绍 在人脸识别中有一个重要的预处理步骤-人脸对齐,该操作可以大幅度提高人脸识别的准确率与稳定性,但是早期的OpenCV版...

    OpenCV学堂
  • AI生成肖像画,精细到毛发!北大校友最新研究收割2.8k星标,还登上了ICPR 2020

    不仅登上了GitHub热榜,收割了2.8k星标,还被顶会ICPR 2020 选中。更关键是,这项研究的一作还是北大校友——秦雪彬。

    公众号机器学习与生成对抗网络
  • 医学影像分割难题获突破:可自动调参,适应所有数据集

    nnU-Net的贡献在于:不仅可以用作开箱即用的分割工具,还可以用作未来医学分割相关发表论文的强大U-Net baseline和平台。

    AI掘金志
  • 易图秒懂の连接主义诞生

    我们在“易图秒懂の神经网络潜行-CNN前生" 和 “易图秒懂の神经网络潜行-RNN前生" 里面,简述了神经网络潜行的发展。”易图秒懂の符号主义诞生“里我们提到符...

    史博
  • 「完美复刻」的人物肖像画生成算法 U^2-Net

    今年提出的 U^2-Net 显著性检测算法,刷爆了 reddit 和 twitter,号称是 2020 年「地表最强」的静态背景分割算法,可以看下效果:

    Jack_Cui
  • 【教你搭建服务器系列】选择云服务器 (一)

    我们每天都在访问不同的网站,比如百度,那我们在浏览器输入 www.baidu.com 背后发生了什么,百度又是如何提供服务的呢。

    HaC
  • 【译】使用 Vue.js 创建一个全局的 Event Bus

    本文翻译自 Creating a Global Event Bus with Vue.js

    腾讯IVWEB团队
  • ng conf 2019 笔记

    lilugirl

扫码关注云+社区

领取腾讯云代金券