天天看點

TensorFlow 日漫風新項目

TensorFlow 日漫風新項目

▲ 機器之心根據真實店鋪照片生成的效果圖,一度以為,這就是某個日漫番劇的截圖

随手拍張照片,順勢轉換為宮崎駿、新海誠等日漫大師的手繪風格作品,這個專門生成動漫圖像的 GAN,實測很好用。

盡管最近 2019 年的圖靈獎頒給了計算機圖形學、頒給了皮克斯 3D 動畫,但很多人可能認為二維動漫更有意思一些。像宮崎駿、新海誠這些大師手繪下的動漫,才有了靈魂,張張都能成為桌面,而整個日漫也以二維為核心。

如果有模型能将真實畫面轉化為日漫風格的手繪畫面,那一定非常炫酷。最近機器之心發現确實有這些模型,從 CartoonGAN 到 AnimeGAN 都能生成非常有意思的圖像。

TensorFlow 日漫風新項目

這裡有一個 TensorFlow 新項目,它實作了 AnimeGAN,并提供了預訓練模型。也就是說,我們下載下傳後可以直接試試生成效果。作為日漫風格的愛好者,我們很快就試用了一下新項目。

項目位址:https://github.com/TachibanaYoshino/AnimeGAN

雖然原項目給出的最佳示例很多都是街景,但我們發現各種場景也都還行,如下是我們試用的原圖與生成效果。看看第一張櫻花道生成效果,忽然有一種《千與千尋》的感覺。

TensorFlow 日漫風新項目

如果隻針對人物,轉換效果也是非常不錯的。我們嘗試将新垣結衣的照片輸入 AnimeGAN 模型,然後就有如下這種神奇的畫風,感覺直接用到動漫裡也沒什麼問題了。

TensorFlow 日漫風新項目

在原 GitHub 項目中,作者還給了非常多的示例,上面隻是機器之心試用的結果,你也可以來用一用。

AnimeGAN

整個項目實作的是論文「AnimeGAN: a novel lightweight GAN for photo animation」中所提方法,作者在論文中分别将 AnimeGAN 與 CartoonGAN、ComixGAN 進行對比。

TensorFlow 日漫風新項目

從圖中可以看到,AnimeGAN 在細節方面的表現要優于以上兩種方法,色彩相對而言更加自然,塗抹感也沒有那麼強烈。最明顯的是第二行的效果圖,使用 AnimeGAN 生成的漫畫更加接近宮崎駿的畫風。

方法簡介

對于這個項目的 AnimeGAN,如下所示為 AnimeGAN 所采用的生成器網絡與判别器網絡。看起來模型整體是比較正常地一個卷積神經網絡,但它會采用執行個體歸一化以及新型的 LReLU 激活函數。

TensorFlow 日漫風新項目

除了架構細節上的更新外,作者還提出了以下三個新的損失函數:

  • 灰階風格(grayscale style)loss
  • 灰階對抗(grayscale adversarial)loss
  • 色彩重構(color reconstruction)loss

這些損失函數能夠讓生成圖檔的風格更加接近于真實的漫畫風格。

下表比較了 ACartoonGAN 與 AnimeGAN 的模型大小與推理速度。可以明顯看出,AnimeGAN 是個相對輕量級的 GAN,具有更少的參數量以及更快的推理速度。

TensorFlow 日漫風新項目

總體來說,新提出來的 AnimeGAN 是一種輕量級的生成對抗模型,它采用了較少的模型參數,以及引入格拉姆矩陣(Gram matrix)來加強照片的風格。研究者的方法需要采用一系列真實圖檔與一系列動漫圖檔做訓練,且這些圖檔并不需要成對比對,這就表明訓練資料非常容易獲得。

項目實測

我們在 Ubuntu 18.04 下對本項目進行了測試,相關依賴環境如下:

  • python 3.6.8
  • tensorflow-gpu 1.8
  • opencv
  • tqdm
  • numpy
  • glob
  • argparse

這些依賴項可以說都是 CV 中常用的擴充庫,我們就不用費盡心思去解決各種依賴環境沖突的問題了,這裡給個好評。

以下是本項目的訓練及測試詳細流程。我們首先将 AnimeGAN 項目克隆到本地,在 Jupyter notebook 中輸入:

!git clone https://github.com/TachibanaYoshino/AnimeGAN

TensorFlow 日漫風新項目

将工作目錄切換到 AnimeGAN:

import os

os.chdir('AnimeGAN')

print(os.getcwd())

接下來下載下傳項目作者提供的預訓練模型,使用 vim download_staffs.sh 建立一個 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&cnotallow=$(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/.*cnotallow=([0-9A-Za-z_]+).*/\1\n/p')&id=1U5HCRpZWAbDVLipNoF8t0ZHpwCRX7kdF" -O $VGG_FILE && rm -rf /tmp/cookies.txt

儲存後退出,以上指令會将預訓練的模型、vgg19 權重以及訓練資料集下載下傳并儲存到其對應目錄下。在 notebook 中運作:

!bash download_staffs.sh      
TensorFlow 日漫風新項目

至此即完成所有準備工作,運作如下代碼就可以對模型進行訓練了:

!python main.py --phase train --dataset Hayao --epoch 101 --init_epoch 1      

AnimeGAN 的訓練過程如下圖所示:

TensorFlow 日漫風新項目

當進行測試時,我們需要将用于測試的圖檔儲存到 dataset/test/real 目錄下,并運作如下代碼:

!python test.py --checkpoint_dir checkpoint/saved_model --test_dir dataset/test/real --style_name H      
TensorFlow 日漫風新項目