使用u^2net打造属于自己的remove-the-background

使用u^2net打造属于自己的remove-the-background

本文由小肉包老师原创,转载请注明出处,来自腾讯、阿里等一线AI算法工程师组成的QQ交流群欢迎你的加入: 1037662480

不久之前有一篇叫做u^2net的论文刷爆reddit和twitter,号称是2020年最强的静态背景分割算法。但科研归科研,我们更关心的是它能用来做什么有趣的东西。既然它能做静态物体分割,那为何不能用它来打造一个属于我们的自己的remove the background呢?

说道remove the background我第一个想到的商业应用场景就是… 证件照,曾几何时我们有一张还不错的证件照结果某某机构就需要某个颜色的底照,那么我们有办法解决吗?作为AI算法工程师的我们,秒天秒地秒空气,是否可以秒换证件照背景呢?

咳咳,先来一张小姐姐镇楼,我们今天的任务就是用u2net这个模型,来给小姐姐换个证件照背景:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9mr7Bhxr-1590112510410)(https://i.loli.net/2020/05/15/GD3ENiuHT9OVKpc.jpg)]

等等,这好像不是小姐姐…

男的也能分的,又不是不能分。还是用小姐姐把:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VUMvf3Gx-1590112510416)(https://i.loli.net/2020/05/15/sDumAWYwPyRS3I8.jpg)]

emmm, 顺眼了许多。

大家可以注意到,实际上当你i用一些分割模型,比如deeplabv3,或者ENet,ESPNet,PSPNet去分割的时候,你会发现很多细节是无法得到有效处理的。这在论文里面可以很清晰的看到。在一些细节里面这个分割模型很难处理。

u2net完成的任务和分割还不太一样,去除背景没有对前景具有明确的类别定义,也就是说它可以去掉一切的背景物体。并且只保留前景物体。我们先来看看它的一个效果:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lNDCVElj-1590112510418)(https://i.loli.net/2020/05/15/cr2jnCZYoxkM7f3.jpg)]

我们可以看到分割图mask的非常犀利的,甚至可以看到头发丝!!

我们在u2net原始代码上做了一下事情:

  • 支持mask后处理contour(角点);
  • 支持从原图根据角点扣除前景物体;
  • 支持去除背景,并且更换背景;
  • 支持证件照背景替换。

什么?你想看证件照的效果?来了,继续上小姐姐!

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SHfh8Oly-1590112510421)(https://i.loli.net/2020/05/15/ZtcWG3EYRkPfeqi.jpg)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GNNCYkwF-1590112510422)(https://i.loli.net/2020/05/15/jkZ26JPCm3v1YyK.jpg)]

可以看到,效果非常的惊艳!!

上图中前面两个颜色都是我们更换背景之后的证件照,可以看到在头发和颈部包围的部分,也可以看好的被替换!本偏博客教程的所有代码都将在末尾提供,请大家细心看完我们的教程,重要的是学到一些东西,让我们开始吧!

u2net在分割中优越性

我们在一张图上把u2net的结构画出来,一目了然,事实上在cv领域最简单的无外乎就是语义分割,因为它没有太复杂的坐标换算,有的就是一整张图的输入与输出,让我们来看看这个神奇网络的神秘面纱。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-v2adlwcH-1590112510424)(https://i.loli.net/2020/05/15/xT1eJXRoN5PDIwL.png)]

从这个结构大家应该可以看到,这有点Transformer的思想啊!通过堆叠更多的sequence2sequence (在这里是encodeer和decoder)来获取尽可能多的语义信息。

从网络结构里面我们能学习到一些比较有意思的思想:

  • 堆叠work的block来暴力获取更大的gain;
  • 使用大的空洞卷积因子来获取更大的感受野,整体的视觉信息更加丰富;
  • 通过不同level的输出来fuse最终的输出。

其实同样的idea也可以用在目标检测,实例分割等方面。。只是看你有没有足够的运气在有限的时间内找到一个work的方法。

u2net的应用

我们自始至终都倡导学以致用,即便是最fancy的模型,我们也会挖掘它的应用点。对于这个模型来说,毫无疑问,用来去除背景是最好的应用。

来在一些范例的图片上看看效果, 先来一直草拟马:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-98Zx7YzA-1590112510425)(https://i.loli.net/2020/05/15/HZcUy9I7TJQolqs.jpg)]

大家可以看到最后一张图,这只羊驼的毛发都清晰可见!

再来看看马的效果:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wXtWVGKp-1590112510426)(https://i.loli.net/2020/05/15/ZUpfM8uJHdl1GRr.jpg)]

这是马的分割同样很不错了,连马的鬃毛都可以区分出来。如果换做是传统的分割算法,可能连马腿都漏掉了。

我们要做自己的证件照!

对于一个技术宅来说,最大的好处莫过于可以用技术“为所欲为”,下次大家拍了一个证件照,想更换背景,也别去下载广告满天飞的app了,点击下面的链接,只要你会python,自己DIY一个:

http://manaai.cn/aicodes_detail3.html?id=59

我们来看看最终效果怎么样:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gpvKZ7O8-1590112510427)(https://i.loli.net/2020/05/15/9x1NPqp5jkAbOrU.jpg)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0J9AZd9u-1590112510428)(https://i.loli.net/2020/05/15/fmW9l2SjgbyxoGO.jpg)]

整体来说效果还不错。

更换的背景可以很好的fit。

代码

我们所有的代码托管在MANA AI,如果你还不是神力会员,快来加入百万AI社区,找到属于你的Spark!!如果你看完本文觉得不错,一定记得三联啊老铁!!

我们的AI交流社区:

http://t.manaai.cn

MANA平台:

http://manaai.cn

广告时间

接下来是广告时间。如果你想学习人工智能,对前沿的AI技术比较感兴趣,可以假如我们的知识星球,获取第一时间资讯,前沿学术动态,业界新闻等等!你的支持将会鼓励我们更频繁的创作,我们也会帮助你开启更深入的深度学习之旅!

image-20200515153654923

下篇预告

下一个推送中,我们将带大家体验一下如何用efficientdet构建可部署可训练的高精度且快速的目标检测器。欢迎加入我们的星球或者QQ群交流探讨。