GauGAN能有多强?

共 3987字,需浏览 8分钟

 ·

2022-02-27 05:11


No.1

背景


本项目是为了了解GAN的发展动态,以steinsFu的一篇引导作为参考,进而对GauGAN一系列知识进行学习和了解。


No.2

目标


该项目的目标是建立一个深度学习模型,从分割蒙版生成动漫人脸肖像。

在这个项目中,我将首先手动注释一小组图像。然后我将使用数据增强和 U-Net 模型来乘以分割掩码的数量来构建数据集。最后,我将训练一个 GauGAN 模型,用于从分割掩码中合成动漫人脸。


No.3

语义分割


语义分割是为图像中的每个像素分配一个标签(又名类id)的过程。它的结果是一个分割蒙版,它是一个大小、高度*宽度的数组,每个像素包含一个类id。



数据集


在开始图像生成任务之前,我们需要一个分割蒙版的数据集来训练生成模型,将蒙版转换为图像。


不幸的是,我在网上找不到任何动画人脸分割数据集。尽管如此,在danbooru2019 - portrait上有一个动漫肖像数据集(512 x 512px)。所以我决定从Danbooru肖像中注释我自己的分割面具。


标注


要注释图像,我们必须确定下类别数量。我最初的想法是列出15个类:



但是为了简化,将其降低位7个类别: 



目前存在大量不同的标注工具,这里我们使用的是labelme。



经过我的不懈努力,标注了200张数据集。其中左边是原始图像,中间是分割掩膜数据,右边是标注数据可视化效果。



数据增强


当然,200张带注释的图片不足以训练我们的网络。我们需要使用数据扩充技术来增加数据集的大小。


通过随机旋转、镜像和扭曲图像,我从这200个样本中生成了3000多个数据。换句话说,现在我有3200个数据。



然而,这些数据在内容和风格上是高度重复的,因为它们是从仅200个样本中扩充而来的。为了训练一个网络,将segmentation mask转换成高质量和多样化的动漫人脸,我们需要超过200 + 3000个数据点。


因此,我将首先使用这些数据训练一个U-Net模型,学习从动漫人脸到分割蒙版的翻译。然后我将把整个Danbooru肖像数据集输入训练好的U-Net模型,生成更多不同人脸的分割蒙版。



U-Net


U-Net最初被引入是为了对医学图像进行分割诊断。它通过使用skip connection来解决传统FCN中出现的信息丢失问题,在精确分割方面做得非常好。


U-Net的架构与Autoencoder相似,但从下采样侧到上采样侧有额外的连接层。



在下采样部分,我使用了一个预先训练的MobileNetV2来从输入图像中提取特征。在上采样部分,我使用了由Conv2DTranspose、Batchnorm和ReLU层组成的块。


在我的U-Net v1中,输入和输出大小是128 x 128px。经过训练的模型确实学会了从动画人脸到分割蒙版的很好的映射。但是因为我想在我的后期合成模型中有512 x 512px的输入和输出,我通过插值将U-Net输出的大小调整为512 x 512px。然而,结果看起来是像素化的,它未能捕捉到出现在小区域的一些类(如嘴巴)。


在UNet v2中,我只是将输入和输出大小更改为512 x 512px(一开始我没有这样做,因为我不希望输出是有噪声的,并且在图像中令人困惑的区域充满随机的点,比如衣服)。如我所料,v2的输出是有噪声的。不过,它们看起来比v1的要好。



下图是v3的架构图。在第三版中,我尝试用UpSampling2D层替换Conv2DTranspose层来缓解噪音和棋盘伪像。现在的结果比v2的要好得多。噪音更少,棋盘藏物也更少。




最后,我将整个Danbooru数据集输入到U-Net v3中,以构建segmentation mask数据集。


No.4

语义图像合成


现在,我们有了分割mask数据集,是时候进入主要任务了——语义图像合成,它只是一个花哨的名字,从分割蒙版到真实图像的转换。



GauGAN


GauGAN是由Nvidia开发的,用于从模拟mask图合成真实场景风景图。在他们的展示网站上,他们展示了GauGAN如何从几笔就能生成逼真的景观图像。



上图表示的是GauGAN模型的架构。组合的绿色blocks代表的是生成器,PatchGAN是判别器。


SPADE



GauGAN的核心模块就是SPADE,它是一个改进过的BN层。它的出现是为了解决pix2pixHD中拥有大面积统一id的语义信息丢失问题。



我们聚焦的问题是语义生成:



Pretrained Encoder


Encoder通常情况下是可选的,由于它可以通过一个没有任何输入的高斯分布的向量抽样(类似vanilla GAN)。此处加入Encoder的目的是想要生成的图像是基于参考图像的。



由于在对Encoder进行训练的同时对GauGAN进行训练是不稳定的,需要更多的时间和资源,所以我提前使用了VAE对我的编码器进行了训练,然后在对GauGAN模型进行训练的过程中,我使用了经过训练的编码器对z进行采样。


Results


以下是不同的分割蒙版和参考图像生成的结果。

链接是制作为GUI的操作和相关的效果展示。



参考

[1] D. Gwern Branwen, “Anime Crop Datasets: Faces, Figures, & Hands”, Gwern.net, 2022. https://www.gwern.net/Crops#danbooru2019-portraits

[2] “ wkentaro/labelme: Image Polygonal Annotation with Python (polygon, rectangle, circle, line, point and image-level flag annotation).”, GitHub, 2022. https://github.com/wkentaro/labelme

[3] O. Ronneberger, P. Fischer and T. Brox, “U-Net: Convolutional Networks for Biomedical Image Segmentation”, arXiv.org, 2022. https://arxiv.org/abs/1505.04597

[4] Odena, et al., “Deconvolution and Checkerboard Artifacts”, Distill, 2016. http://doi.org/10.23915/distill.00003

[5] “The NVIDIA AI Playground”, NVIDIA, 2022. https://www.nvidia.com/en-us/research/ai-playground/

[6] “NVlabs/SPADE: Semantic Image Synthesis with SPADE”, GitHub, 2022. https://github.com/NVlabs/SPADE

[7] “Semantic Image Synthesis with Spatially-Adaptive Normalization”, Nvlabs.github.io, 2022. https://nvlabs.github.io/SPADE/

[8] “rezoo/illustration2vec: A simple deep learning library for estimating a set of tags and extracting semantic feature vectors from given illustrations.”, GitHub, 2022. https://github.com/rezoo/illustration2vec



— 推荐阅读 —

最新大厂面试题


学员最新面经分享


七月内推岗位


AI开源项目论文


NLP ( 自然语言处理 )


CV(计算机视觉)


推荐

浏览 35
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报