在这篇自带可爱之处的文章中,作者提出了一种新模型TwinGAN,可以将现实生活中的头像转换成漫画风格的卡通头像。 开启二维、三维世界的方法都在这里啦~
成为宅男以来最大的遗憾之一就是我不会画画,因为我小时候手部有残疾。 唯一能提的就是我在美术课上把新垣结衣画成了吴三桂等悲剧。
接触了机器学习之后,我感觉我的手可以救了。 毕竟现在的AI可以下棋、开车、背好诗、画画。
为此,我研究了以下课题:AI能否打破次元墙,将真实的面孔转化为漫画风格的图片?
事实上,近年来教AI画画的尝试无数。 其中两个在我之前的文章中已经介绍过:图像风格迁移和使用生成对抗网络(GAN)进行线条绘制着色ai漫画头像生成器,两者都与我们的主题密切相关。
图像风格迁移
△图像风格迁移的最新成果
简单来说,图像风格迁移就是将绘画风格迁移到照片上的过程。 样式可以包括笔触、颜色、光影、对象比例等。
自从 Gatys 在 2015 年发明了使用神经网络的图像迁移方法以来,一直困扰研究人员的一个问题是,由于图像风格迁移大多使用预先训练的项目识别网络,而项目识别所使用的训练集是真实的图片,现有的图像迁移方法对于与真实物体比例不同的绘画风格无能为力。
具体来说,在二维或三维方面,存在头身比例不同、眼睛鼻子大小不同等一系列问题。
其实ai漫画头像生成器,最直接的解决办法并不难:花钱。 请某人注释专门用于艺术绘画的数据集并重新训练对象识别器,但很少有研究人员愿意为这项苦差事付出代价。 使用图像风格转换将人脸转换为二维风格基本上被阻止。
生成网络
如果说图像风格迁移是打破维度墙的一种方式,那么另一种方式就是生成对抗网络,即所谓的 GAN(生成对抗网络)。
GAN是著名研究者Ian Goodfellow在2014年提出的一种算法,只要给出足够的训练数据和时间以及足够强大的神经网络,就可以生成任何数据。 通过两个相互对抗的神经网络,GAN 可以模仿并生成难以辨别真假的图像。
几个著名的应用例子包括用于生成二维头像的MakeGirlsMoe,以及Nvidia研究院推出的高清真人头像生成模型PGGAN。
△图片引自PGGAN
经过几年的改进,目前的GAN已经能够生成相当高质量的图片。 不仅如此,GAN 还可以将一种类型的图片转换为另一种类型的图片。
2016 年底,Phillip Isola 等人。 伯克利大学提出了一个名为 pix2pix 的模型。 给定两对不同类型的图像(例如地图和卫星图像),Pix2pix 可以将这两种类型的图像相互转换。 与此同时,Preferred Networks工作的Taizan Yonetsuji也提出了一种基于UNet的线描着色算法。
这两种算法都非常适合我们的人脸尺寸转换项目,但遗憾的是,这两种算法都需要配对训练图像,而且由于资金成本的原因,到目前为止还没有人发布配对二维图像。 三维人脸数据集。
△图片引自pix2pix
成对跨域图像翻译
必须使用不成对图像的限制使得图像类型转换比在没有词典的情况下学习新语言更加困难。
幸运的是,似乎不是只有我一个想象力被贫穷所限制,还有Facebook人工智能研究院。 2016年,Facebook发布了一篇名为《无监督跨域图像生成》的论文。 其核心内容是如何在没有配对数据的情况下,只标记一种图像,实现两类图像之间的交互。 “翻译”。
不久之后,2017 年,Jun-Yan Zhu 等人。 针对未标记的未配对数据集提出了一个名为 CycleGan 的模型。
这两个模型的一个很大的共同点是,为了解决数据集不匹配的问题,两个模型都做了以下假设:首先将A类图片转换为B类,然后将B类转换回A类,不应该有原图和两张翻译后的图片差别太大了。
以翻译为例,将一个中文句子翻译成英文后,再将英文句子翻译回中文,结果应该与原句相同,第二次翻译与原始输入的差异可以视为循环错误(循环一致性损失)。
CycleGAN是通过降低循环误差来训练神经网络,实现两类不成对图片之间的相互转换。
尝试 CycleGAN
好消息是 CycleGan 拥有现成的开源代码。 找到现有的算法后,我开始收集训练所需的数据。 我使用了 CelebA 的 20 万张图片作为三维头像数据库,并使用 MakeGirlsMoe 中提到的方法从日本游戏网站 Getchu 中截取了总共约 3 万个二维头像。
△ 二维头像数据集示例图引用自Getchu(樱花大法不错)
结果如下:
看起来还不错,但似乎有些不太对劲。 。 。 事实证明卡通人物,CycleGAN 也有其局限性。 它对恢复误差的要求迫使它将原始图像中的所有信息一对一地映射到翻译图像。
然而,在三维到二维的转换过程中,二维和三维的信息并不对称。 例如,三维人脸的细节明显比二维多,二维的头发颜色和眼睛颜色在三维中并不常见。 要求二维和三维之间一一映射显然是不合理的,用这种不合理的损失函数训练的结果不会很好。
如何在不标注数据的情况下,尽可能保留可以对应的部分,在没有一一对应的地方进行创新,将三维头像转化为二维头像?
换个角度再试一次!
幸运的是,当现有的 GAN 算法不起作用时,图像风格迁移方面仍然有经验可以借鉴。
早在2016年,谷歌大脑的Vincent Dumoulin等人就发现,只有让神经网络学习Batch Norm(批量归一化层)中的两个参数,才有可能将一张图片转换成多种不同的风格。 效果,甚至可以将不同风格相互混合搭配。
他们的论文《A Learned Representation For Artistic Style》表明,最初用于使神经网络训练更加稳定的 Batch Norm 参数具有更大的开发潜力。
Twin-GAN – 技术细节
借鉴上面提到的想法,经过一番尝试,我确定了如下的网络结构,命名为Twin-GAN: 在图像生成器方面,我使用了NVIDIA的PGGAN,它是迄今为止效果最好的。
由于PGGAN的输入是随机的高维向量,而我们的输入是图片,所以我使用了与PGGAN对称的编码器(encoder)将输入的头像图片编码成高维向量,并为了恢复图像具体来说,我使用了UNet的结构来连接编码器和图像生成网络之间的卷积层。
我的神经网络的输入和输出主要有三种类型:
三维头像->编码器->高维向量->PGGAN生成器+三维Batch Norm参数->三维头像
二维头像->编码器->高维向量->PGGAN生成器+二维的Batch Norm参数->二维头像
三维头像->编码器->高维向量->PGGAN生成器+二维的Batch Norm参数->二维头像
正如 Facebook 论文中提到的,让三维和二维头像共享编码器和生成器的主要目的是让神经网络认识到虽然长度不一样,但二维和三维头像立体图片描绘的是一张人脸。 这对于第二维和第三维的转变至关重要。 而最终决定是二维还是三维开关是在Batch Norm参数中。
损失函数方面,我主要使用了以下四个函数:
三维转三维减少损失函数(l1+GAN损失)
从第二维到第二维的减少损失函数(l1+GAN损失)
GAN损失函数从三维到二维
从 3D 到 2D 的循环一致性损失。
成就
实际训练完成后效果如下:
Twin-GAN 的作用远不止于此。 由于二维和三维图片共享相同的嵌入(嵌入向量),因此我可以提取图片的嵌入进行最近邻搜索(Nearest Neighbor Search),并且可以在二维和三维图片中找到最相似的图片同时三维。
其中大多数都是相当准确的。 从这里我们可以看到我们训练的神经网络理解了图片。
对于金色头发,它认为与动漫中的颜色相似,而对于三维棕色头发,它认为对于二维世界来说太无聊,所以它用一点计划给每个人的头发都染了色。
表情发型也能在一些图片中找到一些对应,一些无法对应的神经网络就会有所创新。
例如,中间右边的女孩戴着一顶俄罗斯冬帽。 由于二维数据集中不存在这样的帽子,因此神经网络简单地将其视为发饰。
不满意的地方在这张图中也很明显。 有时它会用背景作为头发的颜色(比如左下角),有时他会反转人的方向。 转换图片时也会使用这些错误。 可以看到。
事实上,我们的算法的应用范围不仅限于2D和3D变换。 使用猫脸进行训练怎么样?
喵! 感觉被治愈了。 虽然看起来不错,但是还是有很多时候我可能对一张图片的转换效果不满意,比如原图是黑头发,我想转换后的二次元头像是绿头发颜色。
之前设计的网络结构不支持直接调整这些细节,所以我借鉴了条件生成对抗网络,使用illust2vec提取了角色的头发颜色、眼睛颜色等一系列相关信息卡通形象,并在同时该信息通过特征向量(嵌入)提供给生成器。
在生成图片时,我额外给神经网络一个2D角色头像作为输入,转换后的图片将成为该角色的外观,同时保留原始3D图片的姿势和表情(TODO)。 效果大概是这样的:
结果还很不完美,还有待进一步改进。 但重要的是,我现在有了一个算法,可以把三维头像变成动物、AI原创人物或者任意二维人物,再也不用担心手部受伤了。
后记
现有算法的最大问题之一仍然在于数据集。 由于我收集的大多数 2D 头像都是女性,神经网络会将 3D 男性变成 2D 女性。 此外,错误地将背景视为头发颜色、忽略和错误识别某些特征的情况也经常发生,例如下面是一个失败的例子:
需要做的不仅仅是对现有的模型进行改进和优化,此外,三维与二维之间的转换其实还有很多事情可以做,比如如何将生成的人体图片进行扩展面对更加丰富多样的图片,比如当生成的结果不理想时如何实时改进,或者将这个算法扩展到视频等。
值得一提的是,马爽这几个月提出的名为DA-GAN的图像生成算法也有不错的效果,而且该算法也有很多值得学习的地方。 英伟达昨天宣布了他们的最新研究,展示了一种可以将猫变成狗的神经网络。
这让我对未来图像变换领域的进一步发展充满期待。 这真让人兴奋!
相关论文和网站将根据情况尽快上线。 相关更新请关注我的知乎账号(ID:李嘉明)。 谢谢阅读!