GauGAN能有多強(qiáng)?

背景
本項(xiàng)目是為了了解GAN的發(fā)展動(dòng)態(tài),以steinsFu的一篇引導(dǎo)作為參考,進(jìn)而對(duì)GauGAN一系列知識(shí)進(jìn)行學(xué)習(xí)和了解。
目標(biāo)

該項(xiàng)目的目標(biāo)是建立一個(gè)深度學(xué)習(xí)模型,從分割蒙版生成動(dòng)漫人臉肖像。
在這個(gè)項(xiàng)目中,我將首先手動(dòng)注釋一小組圖像。然后我將使用數(shù)據(jù)增強(qiáng)和 U-Net 模型來乘以分割掩碼的數(shù)量來構(gòu)建數(shù)據(jù)集。最后,我將訓(xùn)練一個(gè) GauGAN 模型,用于從分割掩碼中合成動(dòng)漫人臉。
語義分割
語義分割是為圖像中的每個(gè)像素分配一個(gè)標(biāo)簽(又名類id)的過程。它的結(jié)果是一個(gè)分割蒙版,它是一個(gè)大小、高度*寬度的數(shù)組,每個(gè)像素包含一個(gè)類id。

數(shù)據(jù)集
在開始圖像生成任務(wù)之前,我們需要一個(gè)分割蒙版的數(shù)據(jù)集來訓(xùn)練生成模型,將蒙版轉(zhuǎn)換為圖像。
不幸的是,我在網(wǎng)上找不到任何動(dòng)畫人臉分割數(shù)據(jù)集。盡管如此,在danbooru2019 - portrait上有一個(gè)動(dòng)漫肖像數(shù)據(jù)集(512 x 512px)。所以我決定從Danbooru肖像中注釋我自己的分割面具。
標(biāo)注
要注釋圖像,我們必須確定下類別數(shù)量。我最初的想法是列出15個(gè)類:

但是為了簡(jiǎn)化,將其降低位7個(gè)類別:?

目前存在大量不同的標(biāo)注工具,這里我們使用的是labelme。

經(jīng)過我的不懈努力,標(biāo)注了200張數(shù)據(jù)集。其中左邊是原始圖像,中間是分割掩膜數(shù)據(jù),右邊是標(biāo)注數(shù)據(jù)可視化效果。

數(shù)據(jù)增強(qiáng)
當(dāng)然,200張帶注釋的圖片不足以訓(xùn)練我們的網(wǎng)絡(luò)。我們需要使用數(shù)據(jù)擴(kuò)充技術(shù)來增加數(shù)據(jù)集的大小。
通過隨機(jī)旋轉(zhuǎn)、鏡像和扭曲圖像,我從這200個(gè)樣本中生成了3000多個(gè)數(shù)據(jù)。換句話說,現(xiàn)在我有3200個(gè)數(shù)據(jù)。

然而,這些數(shù)據(jù)在內(nèi)容和風(fēng)格上是高度重復(fù)的,因?yàn)樗鼈兪菑膬H200個(gè)樣本中擴(kuò)充而來的。為了訓(xùn)練一個(gè)網(wǎng)絡(luò),將segmentation mask轉(zhuǎn)換成高質(zhì)量和多樣化的動(dòng)漫人臉,我們需要超過200 + 3000個(gè)數(shù)據(jù)點(diǎn)。
因此,我將首先使用這些數(shù)據(jù)訓(xùn)練一個(gè)U-Net模型,學(xué)習(xí)從動(dòng)漫人臉到分割蒙版的翻譯。然后我將把整個(gè)Danbooru肖像數(shù)據(jù)集輸入訓(xùn)練好的U-Net模型,生成更多不同人臉的分割蒙版。

U-Net
U-Net最初被引入是為了對(duì)醫(yī)學(xué)圖像進(jìn)行分割診斷。它通過使用skip connection來解決傳統(tǒng)FCN中出現(xiàn)的信息丟失問題,在精確分割方面做得非常好。
U-Net的架構(gòu)與Autoencoder相似,但從下采樣側(cè)到上采樣側(cè)有額外的連接層。

在下采樣部分,我使用了一個(gè)預(yù)先訓(xùn)練的MobileNetV2來從輸入圖像中提取特征。在上采樣部分,我使用了由Conv2DTranspose、Batchnorm和ReLU層組成的塊。
在我的U-Net v1中,輸入和輸出大小是128 x 128px。經(jīng)過訓(xùn)練的模型確實(shí)學(xué)會(huì)了從動(dòng)畫人臉到分割蒙版的很好的映射。但是因?yàn)槲蚁朐谖业暮笃诤铣赡P椭杏?12 x 512px的輸入和輸出,我通過插值將U-Net輸出的大小調(diào)整為512 x 512px。然而,結(jié)果看起來是像素化的,它未能捕捉到出現(xiàn)在小區(qū)域的一些類(如嘴巴)。
在UNet v2中,我只是將輸入和輸出大小更改為512 x 512px(一開始我沒有這樣做,因?yàn)槲也幌M敵鍪怯性肼暤?,并且在圖像中令人困惑的區(qū)域充滿隨機(jī)的點(diǎn),比如衣服)。如我所料,v2的輸出是有噪聲的。不過,它們看起來比v1的要好。

下圖是v3的架構(gòu)圖。在第三版中,我嘗試用UpSampling2D層替換Conv2DTranspose層來緩解噪音和棋盤偽像?,F(xiàn)在的結(jié)果比v2的要好得多。噪音更少,棋盤藏物也更少。

最后,我將整個(gè)Danbooru數(shù)據(jù)集輸入到U-Net v3中,以構(gòu)建segmentation mask數(shù)據(jù)集。
語義圖像合成
語義圖像合成
現(xiàn)在,我們有了分割mask數(shù)據(jù)集,是時(shí)候進(jìn)入主要任務(wù)了——語義圖像合成,它只是一個(gè)花哨的名字,從分割蒙版到真實(shí)圖像的轉(zhuǎn)換。

GauGAN
GauGAN是由Nvidia開發(fā)的,用于從模擬mask圖合成真實(shí)場(chǎng)景風(fēng)景圖。在他們的展示網(wǎng)站上,他們展示了GauGAN如何從幾筆就能生成逼真的景觀圖像。

上圖表示的是GauGAN模型的架構(gòu)。組合的綠色blocks代表的是生成器,PatchGAN是判別器。
SPADE

GauGAN的核心模塊就是SPADE,它是一個(gè)改進(jìn)過的BN層。它的出現(xiàn)是為了解決pix2pixHD中擁有大面積統(tǒng)一id的語義信息丟失問題。

我們聚焦的問題是語義生成:

Pretrained Encoder
Encoder通常情況下是可選的,由于它可以通過一個(gè)沒有任何輸入的高斯分布的向量抽樣(類似vanilla GAN)。此處加入Encoder的目的是想要生成的圖像是基于參考圖像的。

由于在對(duì)Encoder進(jìn)行訓(xùn)練的同時(shí)對(duì)GauGAN進(jìn)行訓(xùn)練是不穩(wěn)定的,需要更多的時(shí)間和資源,所以我提前使用了VAE對(duì)我的編碼器進(jìn)行了訓(xùn)練,然后在對(duì)GauGAN模型進(jìn)行訓(xùn)練的過程中,我使用了經(jīng)過訓(xùn)練的編碼器對(duì)z進(jìn)行采樣。
Results
以下是不同的分割蒙版和參考圖像生成的結(jié)果。
鏈接是制作為GUI的操作和相關(guān)的效果展示。

參考
[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
— 推薦閱讀 — 最新大廠面試題
學(xué)員最新面經(jīng)分享
七月內(nèi)推崗位
AI開源項(xiàng)目論文
NLP ( 自然語言處理 )
CV(計(jì)算機(jī)視覺)
推薦

