宮崎駿動(dòng)畫(huà)里的新垣結(jié)衣見(jiàn)過(guò)沒(méi)?這個(gè)開(kāi)源動(dòng)漫生成器讓你的照片秒變手繪日漫
隨手拍張照片,順勢(shì)轉(zhuǎn)換為宮崎駿、新海誠(chéng)等日漫大師的手繪風(fēng)格作品,這個(gè)專(zhuān)門(mén)生成動(dòng)漫圖像的 GAN,實(shí)測(cè)很好用。
機(jī)器之心根據(jù)真實(shí)店鋪照片生成的效果圖,一度以為,這就是某個(gè)日漫番劇的截圖。
盡管最近 2019 年的圖靈獎(jiǎng)?lì)C給了計(jì)算機(jī)圖形學(xué)、頒給了皮克斯 3D 動(dòng)畫(huà),但很多人可能認(rèn)為二維動(dòng)漫更有意思一些。像宮崎駿、新海誠(chéng)這些大師手繪下的動(dòng)漫,才有了靈魂,張張都能成為壁紙,而整個(gè)日漫也以二維為核心。
如果有模型能將真實(shí)畫(huà)面轉(zhuǎn)化為日漫風(fēng)格的手繪畫(huà)面,那一定非常炫酷。最近機(jī)器之心發(fā)現(xiàn)確實(shí)有這些模型,從 CartoonGAN 到 AnimeGAN 都能生成非常有意思的圖像。
這里有一個(gè) TensorFlow 新項(xiàng)目,它實(shí)現(xiàn)了 AnimeGAN,并提供了預(yù)訓(xùn)練模型。也就是說(shuō),我們下載后可以直接試試生成效果。作為日漫風(fēng)格的愛(ài)好者,我們很快就試用了一下新項(xiàng)目。
項(xiàng)目地址:https://github.com/TachibanaYoshino/AnimeGAN
雖然原項(xiàng)目給出的優(yōu)秀示例很多都是街景,但我們發(fā)現(xiàn)各種場(chǎng)景也都還行,如下是我們?cè)囉玫脑瓐D與生成效果??纯吹谝粡垯鸦ǖ郎尚Ч鋈挥幸环N《千與千尋》的感覺(jué)。
如果只針對(duì)人物,轉(zhuǎn)換效果也是非常不錯(cuò)的。我們嘗試將新垣結(jié)衣的照片輸入 AnimeGAN 模型,然后就有如下這種神奇的畫(huà)風(fēng),感覺(jué)直接用到動(dòng)漫里也沒(méi)什么問(wèn)題了。
在原 GitHub 項(xiàng)目中,作者還給了非常多的示例,上面只是機(jī)器之心試用的結(jié)果,你也可以來(lái)用一用。
AnimeGAN
整個(gè)項(xiàng)目實(shí)現(xiàn)的是論文「AnimeGAN: a novel lightweight GAN for photo animation」中所提方法,作者在論文中分別將 AnimeGAN 與 CartoonGAN、ComixGAN 進(jìn)行對(duì)比。
從圖中可以看到,AnimeGAN 在細(xì)節(jié)方面的表現(xiàn)要優(yōu)于以上兩種方法,色彩相對(duì)而言更加自然,涂抹感也沒(méi)有那么強(qiáng)烈。最明顯的是第二行的效果圖,使用 AnimeGAN 生成的漫畫(huà)更加接近宮崎駿的畫(huà)風(fēng)。
方法簡(jiǎn)介
對(duì)于這個(gè)項(xiàng)目的 AnimeGAN,如下所示為 AnimeGAN 所采用的生成器網(wǎng)絡(luò)與判別器網(wǎng)絡(luò)??雌饋?lái)模型整體是比較常規(guī)地一個(gè)卷積神經(jīng)網(wǎng)絡(luò),但它會(huì)采用實(shí)例歸一化以及新型的 LReLU 激活函數(shù)。
除了架構(gòu)細(xì)節(jié)上的更新外,作者還提出了以下三個(gè)新的損失函數(shù):
- 灰度風(fēng)格(grayscale style)loss
- 灰度對(duì)抗(grayscale adversarial)loss
- 色彩重構(gòu)(color reconstruction)loss
這些損失函數(shù)能夠讓生成圖片的風(fēng)格更加接近于真實(shí)的漫畫(huà)風(fēng)格。
下表比較了 ACartoonGAN 與 AnimeGAN 的模型大小與推理速度。可以明顯看出,AnimeGAN 是個(gè)相對(duì)輕量級(jí)的 GAN,具有更少的參數(shù)量以及更快的推理速度。
總體來(lái)說(shuō),新提出來(lái)的 AnimeGAN 是一種輕量級(jí)的生成對(duì)抗模型,它采用了較少的模型參數(shù),以及引入格拉姆矩陣(Gram matrix)來(lái)加強(qiáng)照片的風(fēng)格。研究者的方法需要采用一系列真實(shí)圖片與一系列動(dòng)漫圖片做訓(xùn)練,且這些圖片并不需要成對(duì)匹配,這就表明訓(xùn)練數(shù)據(jù)非常容易獲得。
項(xiàng)目實(shí)測(cè)
我們?cè)?Ubuntu 18.04 下對(duì)本項(xiàng)目進(jìn)行了測(cè)試,相關(guān)依賴環(huán)境如下:
- python 3.6.8
- tensorflow-gpu 1.8
- opencv
- tqdm
- numpy
- glob
- argparse
這些依賴項(xiàng)可以說(shuō)都是 CV 中常用的擴(kuò)展庫(kù),我們就不用費(fèi)盡心思去解決各種依賴環(huán)境沖突的問(wèn)題了,這里給個(gè)好評(píng)。
以下是本項(xiàng)目的訓(xùn)練及測(cè)試詳細(xì)流程。我們首先將 AnimeGAN 項(xiàng)目克隆到本地,在 Jupyter notebook 中輸入:
- !git clone https://github.com/TachibanaYoshino/AnimeGAN
將工作目錄切換到 AnimeGAN:
- import os
- os.chdir('AnimeGAN')
- print(os.getcwd())
接下來(lái)下載項(xiàng)目作者提供的預(yù)訓(xùn)練模型,使用 vim download_staffs.sh 創(chuàng)建一個(gè) Shell 文件,輸入如下命令:
- URL=https://github.com/TachibanaYoshino/AnimeGAN/releases/download/Haoyao-style_V1.0/Haoyao-style.zip
- ZIP_FILE=./checkpoint/Haoyao-style.zip
- TARGET_DIR=./checkpoint/saved_model
- mkdir -p ./checkpoint
- wget -N $URL -O $ZIP_FILE
- mkdir -p $TARGET_DIR
- unzip $ZIP_FILE -d $TARGET_DIR
- rm $ZIP_FILE
- DatesetURL=https://github.com/TachibanaYoshino/AnimeGAN/releases/download/dataset-1/dataset.zip
- ZIP_FILE=./dataset.zip
- TARGET_DIR=./dataset
- rm -rf dataset
- wget -N $DatesetURL -O $ZIP_FILE
- unzip $ZIP_FILE -d $TARGET_DIR
- rm $ZIP_FILE
- VGG_FILE=./vgg19_weight/vgg19.npy
- wget --load-cookies /tmp/cookies.txt "https://docs.google.com/uc?export=download&confirm=$(wget --quiet --save-cookies /tmp/cookies.txt --keep-session-cookies --no-check-certificate 'https://docs.google.com/uc?export=download&id=1U5HCRpZWAbDVLipNoF8t0ZHpwCRX7kdF' -O- | sed -rn 's/.*confirm=([0-9A-Za-z_]+).*/1n/p')&id=1U5HCRpZWAbDVLipNoF8t0ZHpwCRX7kdF" -O $VGG_FILE && rm -rf /tmp/cookies.txt
保存后退出,以上命令會(huì)將預(yù)訓(xùn)練的模型、vgg19 權(quán)重以及訓(xùn)練數(shù)據(jù)集下載并保存到其對(duì)應(yīng)目錄下。在 notebook 中運(yùn)行:
- !bash download_staffs.sh
至此即完成所有準(zhǔn)備工作,運(yùn)行如下代碼就可以對(duì)模型進(jìn)行訓(xùn)練了:
- !python main.py --phase train --dataset Hayao --epoch 101 --init_epoch 1
AnimeGAN 的訓(xùn)練過(guò)程如下圖所示:
當(dāng)進(jìn)行測(cè)試時(shí),我們需要將用于測(cè)試的圖片保存到 dataset/test/real 目錄下,并運(yùn)行如下代碼:
- !python test.py --checkpoint_dir checkpoint/saved_model --test_dir dataset/test/real --style_name H
當(dāng)看到以上輸出說(shuō)明程序已經(jīng)成功運(yùn)行完成,生成結(jié)果保存在 results 文件夾下??梢钥吹?,在 P100 GPU 上生成一幅圖片需要大約 2.3 秒左右。