登录
原创

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

发布于 2020-12-10 阅读 478
  • 算法
原创

点赞再看,养成习惯,微信公众号搜索【JackCui-AI】关注这个爱发技术干货的程序员。本文 GitHub github.com/Jack-Cheris… 已收录,有一线大厂面试完整考点、资料以及我的系列文章。

一、前言

大家好,我是 Jack 。

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

faeab9e1ac9172e299031fe6541805c8.png

你以为今天要讲分割?错!

U^2-Net 这两天又出新活,在 U^2-Net 网络架构基础上,实现了人物肖像画的生成,细节「完美」复刻。

87f8b6c7a590913dbfd95016cb5ad6b1.png

我用自己的「歪脖子照」测试了下效果。

aff365656852f31e8bd6f5b51dc103fb.jpg

万年不变老规矩,继续手把手教学。

算法原理、环境搭建、效果实现,一条龙服务,尽在下文!

二、U^2-Net
受 U-Net 网络的启发,U^2-Net 也是一种类似编码-解码(Encoder-Decoder)的网络结构。

研究者在此基础上,提出了新型残差 U-block(ReSidual U-block, RSU),融合不同尺寸接受野的特征,以捕获更多不同尺度的上下文信息。

RSU 网络与现有卷积块的结构对比如下:

0d74690d1cf83a6660d6530053773fbf.png

最右边的结构,就是 RSU-L,L 表示编码器中的层数,C_in、C_out 分别表示输入和输出通道,M 表示 RSU 内层通道数。

具体而言,RSU 主要有三个组成部件,分别是一个输入卷积层、一个高度为 L 的类 U-Net 对称编码器 - 解码器结构以及一个通过求和来融合局部和多尺度特征的残差连接。

为了更好地理解设计理念,研究者在下图中对 RSU 与原始残差块进行了比较。

bb43f0c99cad68692e95729b6be26773.png

结果显示,RSU 与原始残差块的最大区别在于 RSU 通过一个类 U-Net 的结构替换普通单流卷积,并且通过一个由权重层转换的局部特征替换原始特征。

更值得注意的是,得益于 U 形结构,RSU 的计算开销相对较少,因为大多数运算在下采样特征图中应用。下图展示了 RSU 与其他特征提取模块的计算成本曲线图:

3f4337de8d60ba54f1cd09b579632f61.png

U^2-Net 的整体网络架构如下:

f1d4bb718c77d346fe06c455cabb0afd.jpg

U^2-Net 主要由三部分组成:

6 阶段编码器;
5 阶段解码器;
与解码器阶段和最后编码器阶段相连接的显著图融合模块。
说完网络结构,再看下损失函数,研究者使用了类似于整体嵌套边缘检测(HED)的深度监督算法:

9f3023c0daa5a63519aeae25f7bc28e5.png

其中,M=6, 为 U^2-Net 的 Sup1, Sup2, …, Sup6 stage。

0d2c200c7aeaea224be9d186ee5b6be0.png

为 Sup1, Sup2, …, Sup6 输出的显著图

ca0a543035b58d5fbb03bce9f2aba51b.png

的损失函数。

746088e958d6836a0b2022d15d64a2c4.png

为最终融合输出的显著图

ed21212a3a26defc274cb7816e56f623.png

的损失函数。

b5c0635a66915df6da04bda838f93111.png

为每个损失函数的权重。

对于每个 l ,采用标准的二值交叉熵损失函数:

1b97b9947ea626a1711930c35795cb8d.png

其中,(r, c) 为像素坐标;(H, W) 为图像尺寸,height 和 width。

3c1aa1546c9ae401ad6a3941263408b4.png

分别表示 GT 像素值和预测的显著概率图。

总的来说,U^2-Net 的设计构建了具有丰富多尺度特征以及较低计算和内存成本的深度架构。

更详细的内容,可以直接看 paper:

https://arxiv.org/pdf/2005.09007.pdf

三、效果测试
Github 项目地址:https://github.com/NathanUA/U-2-Net

第一步:搭建测试环境。

很简单,没啥特殊的库,安装好 Pytorch、Numpy、Skimage 等基础第三方库即可。

第二步:下载训练好的模型权重文件。

我将程序和权重文件都进行了打包,嫌麻烦,可以下载直接使用。

下载地址(提取码:jack):

https://pan.baidu.com/s/1qwApU0xggsBRolAai3WYtA

第三步:在工程目录,运行程序。

python u2net_portrait_test.py

在 u2net_portrait_test.py 可以查看输入图片路径和输出图片路径:

a74e37e61bf09d197b13d3319af07a36.png

最后再看下运行效果:

aa637e0d42d03967e7a05ed8c48d721d.jpg

四、絮叨
这个月,公众号送了两波福利,一次发「521」元红包,一次送 5 本书。

上周末,挨个联系,红包和书都已经送出,这是其中留言榜红包群的拼手气结果。

ceeff2f459a3b2e0603736efd6e44504.png

事实证明,拼手气红包,最后抢蛮有优势。

图书也都联系了相应的获奖者,填写了邮寄信息,现已发货。

2bb43393c1bca8a962a532de2036c556.png

简单说下我的感受,网络上存在一群薅羊毛党,留言点赞这种形式很容易被钻空子,花几毛钱,就可以刷上榜。

这次送「521」元红包活动,旨在感谢读者一直以来的支持,结果还是被这些人看到了,过来刷赞。

这都还好,也都可以理解。

可笑的是,被我发现刷赞,还有个恼羞成怒的,加好友过来开骂,这我是万万没想到的。

以后,这类福利还会有,特别是赠书,争取每个月搞一次。

这次没中奖,没关系,以后还有很多机会,中不中奖都是次要,能学到知识才是最重要的。

我是 Jack ,我们下期见。

文章持续更新,可以微信公众号搜索【JackCui-AI】第一时间阅读,本文 GitHub github.com/Jack-Cheris… 已经收录,有大厂面试完整考点,欢迎Star。

评论区

鳄鱼不是鱼。

0

0

4

举报