如何用深度學習模型爲自己做個漫畫畫像(含代碼流程)

最近看到一個特別有意思的開源項目,能把照片自動轉化成漫畫效果,經過半個小時的調試,終於跑通了。正先給大家看下實際效果,我在網上的隨便搜了一張帥哥的證件照片試了下。基本上會把腦袋切出來,然後放大眼睛。

原照:

IMG_2843.JPG

漫畫效果後:

cartoon_result.png

使用的是開源項目:https://github.com/minivision-ai/photo2cartoon

具體原理直接摘錄read.me的一段描述:

人像卡通風格渲染的目標是,在保持原圖像ID信息和紋理細節的同時,將真實照片轉換爲卡通風格的非真實感圖像。我們的思路是,從大量照片/卡通數據中習得照片到卡通畫的映射。一般而言,基於成對數據的pix2pix方法能達到較好的圖像轉換效果,但本任務的輸入輸出輪廓並非一一對應,例如卡通風格的眼睛更大、下巴更瘦;且成對的數據繪製難度大、成本較高,因此我們採用unpaired image translation方法來實現。

Unpaired image translation流派最經典方法是CycleGAN,但原始CycleGAN的生成結果往往存在較爲明顯的僞影且不穩定。近期的論文U-GAT-IT提出了一種歸一化方法——AdaLIN,能夠自動調節Instance Norm和Layer Norm的比重,再結合attention機制能夠實現精美的人像日漫風格轉換。

與誇張的日漫風不同,我們的卡通風格更偏寫實,要求既有卡通畫的簡潔Q萌,又有明確的身份信息。爲此我們增加了Face ID Loss,使用預訓練的人臉識別模型提取照片和卡通畫的ID特徵,通過餘弦距離來約束生成的卡通畫。

此外,我們提出了一種Soft-AdaLIN(Soft Adaptive Layer-Instance Normalization)歸一化方法,在反規範化時將編碼器的均值方差(照片特徵)與解碼器的均值方差(卡通特徵)相融合。

模型結構方面,在U-GAT-IT的基礎上,我們在編碼器之前和解碼器之後各增加了2個hourglass模塊,漸進地提升模型特徵抽象和重建能力。

由於實驗數據較爲匱乏,爲了降低訓練難度,我們將數據處理成固定的模式。首先檢測圖像中的人臉及關鍵點,根據人臉關鍵點旋轉校正圖像,並按統一標準裁剪,再將裁剪後的頭像輸入人像分割模型去除背景。

實際操作也很簡單:

  1. Clone 上述項目

  2. 安裝python 3.6、pytorch 1.4、tensorflow-gpu 1.14、face-alignment、dlib一定要用conda

  3. 安裝過程中有很多坑,比如pillow的版本要調整之類的

  4. 下載pretrain的模型(提取碼:z2nm)放到model路徑下:https://pan.baidu.com/s/1DxWWBAoaBpsei_rynZUZzw

  5. 執行以下命令,生成圖片會在save_path路徑下找到:python3 test.py --photo_path ./images/photo_test.jpg --save_path ./images/cartoon_result.png

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章