卡通化-二次元的你長什麼樣

卡通化-二次元的你長什麼樣

CVPR2020收錄了一篇卡通化的文章,Xinrui Wang和Jinze Yu的《Learning to Cartoonize Using White-box Cartoon Representations》。可以把人物或者風景畫轉換為卡通風格的圖片,效果非常驚豔。

相比於之前深度學習為人詬病的“黑盒”學習,文章中提出了生成卡通化圖片的“白盒”表示法,將影象分解為三種卡通表示,指導網路最佳化生成卡通照片,三種表示分別是surface表示、structure表示、texture表示。

卡通化-二次元的你長什麼樣

我個人的理解是,影象的三種表示分別是表示影象的低頻特徵、中頻(結構)特徵和高頻特徵,就像是從遠處、不遠處和近處的視角分別看同一個人的過程:

低頻表示就是影象的整體外觀,去掉了所有的紋理和細節。就像是遙望一個人,重點在“遙望”二字。這時只有一個整體的、模糊的觀感,能看到這是一個人形生物,只能看到人身上衣服的主色調等資訊,人物與周圍背景的邊界是模糊不清的。近視的人可以摘掉眼鏡看看周圍,近似700度的我摘了眼鏡確認了下,大致就是這種感覺沒跑了。

結構表示或者中頻表示,就像是更近一點看這個人,但是距離感仍然在,鼻子眼睛等細節還是看不清楚,但是人物輪廓甚至上下衣的輪廓可以看清了,仍然看不清臉。各部分的主色調也更加清晰了。

高頻表示就是近看了,細節、紋理和更精細的輪廓等資訊都能看到了,這個時候就是所謂“有鼻子有眼”了。

影象被分解為surface表示、structure表示、texture表示之後,卡通化的任務也就比之前端對端的黑盒式學習明確了很多。作者提出用三個獨立的模組分別去學習影象的這三種表示,即三個模組分別提取影象的低頻、中頻和高頻的特徵。

卡通化-二次元的你長什麼樣

文章提出了一個包含一個生成器G(Generator)和兩個判別器Ds(D_surface)和Dt(D_texture)的GAN框架。

Ds用於判別模型從源影象中提取的影象的低頻表示與卡通圖片(標註)

Dt用於判別模型從源影象中提取的影象的高頻表示與卡通圖片(標註)

用預訓練的VGG網路提取源影象的high-leval特徵,並在提取的結構(中頻)特徵和輸出之間以及輸入照片和輸出之間對全域性內容施加空間約束

過程可以理解為,

將輸入影象透過導向濾波器處理,得到低頻表示;

透過超畫素處理,得到中頻表示;

透過隨機色彩變幻得到高頻表示。

卡通影象也一樣。

將GAN生成器產生的fake_image分別於上述表示結果做損失。其中

紋理(中頻)表示與表面(低頻)表示透過判別器得到損失

中頻特徵比較複雜,fake_image的中頻表示與fake_image,輸入影象與fake_image,分別透過vgg19網路抽取特徵,進行損失的計算。

總損失由以上各種損失加權,可以透過改變損失函式中每個特徵loss的權重來調整卡通化結果的樣式。

這樣處理之後,對於大部分圖片的卡通化處理都非常驚豔。來幾張圖看看效果吧。

卡通化-二次元的你長什麼樣

卡通化-二次元的你長什麼樣

卡通化-二次元的你長什麼樣

卡通化-二次元的你長什麼樣