# 魔換人物(AnimeXChange) 1. [Objective](#Objective) 2. [Introduction](#Introduction) 3. [Methods](#Methods) 4. [Result](#Result) 5. [Conclusion](#Conclusion) 6. [Reference](#Reference) --- ## Objective 自從2015年後,AR/VR是未來重點發展項目,發展五年至今,應用最普遍的及擴增實境的發展,將AR與人工智慧結合的應用包含智慧更衣、智慧換臉,能夠被使用者所吸引的不外乎是趣味性及互動性,本團隊經由發想希望能夠製作出有趣且好玩的應用 -- 將真實人物變身為卡通人物,讓使用者可以獲得超現實的卡通人物。 ## Introduction 我們以Openpose pre-train model估算卡通人物的骨架圖。我們基於跳舞人物生成模型[Evdance]訓練以骨架圖生成特定卡通人物。再由生成圖片中的臉部及臉部特徵點與原圖臉部對比訓練人物臉部優化。 生成卡通人物之後我們使用情境分割模型DeepLab V3 Plus將原圖中人物部分切除。同時使用DeepMatting技術將卡通人物自生成圖中以最適方式取出。最後將取出之卡通人物貼上原圖,達到以卡通人物代換原本圖中人物的效果。 ## Methods 1. Data 從Adobe的開源3D動畫圖庫Mixamo下載同樣的卡通人物不同動作的圖片共4000張(遵守Adobe term of use),圖片中會保持人物在畫面中心附近。 2. Pre-Process for training 首先以卡通人物圖片最短邊長將中間正方形切出並以Bi-qubic方式縮放成512X512大小。接著使用Openpose pre-train model估算卡通人物的五官keypoints 共70點、人物肢體keypoints共25點、手部kepoints雙手共42點。 本來依照Every Body Dance這篇論文的作法是將keypoints依照身體部件連接方式兩兩之間產生Part afinity field map(這邊稱之為骨架),並且每個骨架都有一張獨立的feature map,例如人物肢體的骨架25點有產生24組連結,共產生24張feature map。 為減少GPU記憶體使用量,我們將多個骨架共用一個feature map,產生人物肢體共24張map、手部共10張map(每根手指一張)、臉部以keypoints產生14張map。 處理好圖片大小後,卡通人物圖片的RGB色彩值會由讀取的0~255依常態分佈方式標準化至-1~1,相對的,人物生成網路的輸出使用Tanh activation將網路結果標準化至-1~1。 3. Models 我們學習過往做法[EvbdDance,Dirty-GANcing]基於pytorch 3.0 backend[torch]使用Pixel2Pixel Unet Model建立人物Generator網路,輸入是人物肢體及手部feature map,輸出為特定卡通人物圖經標準化的結果。其中Unet中我們用了9層Resnet block實作,正數第1到第4層向前連接到倒數第1道第4層。我們使用多重解析度Discriminator分辨卡通人物原圖以及生成圖片。Discriminator分三層捲積層每層以stride=2方式降低分辨解析度達到在多重解析度下分辨圖片的效果以適應input content不同的遠近範圍。 以同樣種類的Gemerator及Discriminator組合組建了臉部強化的網路,只不過輸入變成人物生成Generator生成的人物臉部、以及臉部的14張feature map,Discriminator需分辨是卡通人物原圖的臉部還是強化後的臉部。 ![](https://i.imgur.com/aLiISGu.png) 4. Loss Discrimination loss-我們使用多個解析度下的2D discrimination loss當作主要的loss。當進入discriminator的圖片是真實圖片時,每個解析度下每個pixel輸出值需接近1、若輸入的圖片是生成圖片時則每個pixel的輸出值須接近-1。此loss用於訓練discriminator。 Generation loss-與discrimination loss 相反當進入discriminator的圖片是真實圖片時,每個解析度下每個pixel輸出值需接近-1、若輸入的圖片是生成圖片時則每個pixel的輸出值須接近1。此loss用於訓練generator。 VGG loss-另外為確保Generator輸出的圖片不只pixel wize接近目標動畫人物,我們以VGG分辨結果(imagenet pretrained)確保整體上與動畫人物處於同一domain。 * Discrimination Loss: 進入discriminator的圖片是真實圖片時,每個解析度下每個pixel輸出值需接近1,若輸入的圖片是生成圖片時則每個pixel的輸出值須接近-1。此loss用於訓練discriminator。 * Generation loss: 與判別器用法相反,當進入discriminator的圖片是真實圖片時,每個解析度下每個pixel輸出值需接近-1、若輸入的圖片是生成圖片時則每個pixel的輸出值須接近1。此loss用於訓練generator。 * VGG loss: 為確保Generator輸出的圖片不只pixel wize接近目標動畫人物,我們以VGG分辨結果(imagenet pretrained) 確保整體上與動畫人物處於相同的Domain。 5. Training 先train完人物肢體生成、再從生成的圖片中擷取臉部,用以訓練臉部表情強化。訓練臉部表情強化時會先訓練Generator可直接從前段生成之臉部及臉部featrue map生成接近原圖臉部的圖片。最後使用同個Generator訓練使生成器從前段生成之臉及臉部featrue map生成原圖臉部與前段生成臉部之差。 6. Post-Process 1. 利用Deeplabv3plus的模型對影像中的前景產生遮罩(mask),分別產生卡通人物以及真實人物的遮罩。 2. 針對卡通人物的遮罩進行膨脹(dilate)及侵蝕(erode),產生三重影 (Triamp:黑灰白),白色為前景;黑色為背景。 3. 利用[Deep-Image-matting]的VGG16架構模型來處理邊緣去背的問題,將獲得更好的去被效果。 4. 將處理好的卡通人物貼回挖空人體的實體照片,再將邊緣做模糊處理,得到最後的結果。 ![](https://i.imgur.com/pUMY0ld.jpg) ## Result >* 將真實人物生成卡通人物 >* 將卡通人物與背景無違和感融合處理 ## Discussion 1. 與Every Body Dance比較 在使用OPENPOSE抽取骨架圖上面,卡通人物也能達到與真實人物一樣好的抽取效果。 而在生成人物方面,我們背景比較單一化,使得生成卡通人物較生成真實人物來講更為容易。 ## Future Works 1. 小人物剪貼的過程還是會讓人物的邊緣也不自然的感覺,若是遇到真實人物與卡通人物差異過大,不自然現象更明顯,未來將加入GAN補圖的技術,先將背景自動生成補圖再貼上小人物,此時邊緣的模糊處理可以做得更完美。 2. 目前訓練使用固定大小的臉部增強,如臉部超越。所以未來可以增加臉部位置的多樣性,增進臉部生成細緻度 ## Reference 1.Chan, C., Ginosar, S., Zhou, T., & Efros, A. A. (2019). Everybody dance now. In Proceedings of the IEEE International Conference on Computer Vision (pp. 5933-5942). [EvbdDance] 2. [Pix2Pix]Isola, P., Zhu, J. Y., Zhou, T., & Efros, A. A. (2017). Image-to-image translation with conditional adversarial networks. In Proceedings of the IEEE conference on computer vision and pattern recognition (pp. 1125-1134). 3. [Torch]Paszke, A., Gross, S., Massa, F., Lerer, A., Bradbury, J., Chanan, G., … Chintala, S. (2019). PyTorch: An Imperative Style, High-Performance Deep Learning Library. In H. Wallach, H. Larochelle, A. Beygelzimer, F. d extquotesingle Alch'e-Buc, E. Fox, & R. Garnett (Eds.), Advances in Neural Information Processing Systems 32 (pp. 8024–8035). Curran Associates, Inc. 4. [OpenPose]Cao, Z., Hidalgo, G., Simon, T., Wei, S. E., & Sheikh, Y. (2018). OpenPose: realtime multi-person 2D pose estimation using Part Affinity Fields. arXiv preprint arXiv:1812.08008. 5. [DeepMatting]Xu, N., Price, B., Cohen, S., & Huang, T. (2017). Deep image matting. In Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition (pp. 2970-2979). 6. [Deeplab v3 plus]Chen, L. C., Zhu, Y., Papandreou, G., Schroff, F., & Adam, H. (2018). Encoder-decoder with atrous separable convolution for semantic image segmentation. In Proceedings of the European conference on computer vision (ECCV) (pp. 801-818). 7. [CGAN]Wang, T. C., Liu, M. Y., Zhu, J. Y., Tao, A., Kautz, J., & Catanzaro, B. (2018). High-resolution image synthesis and semantic manipulation with conditional gans. In Proceedings of the IEEE conference on computer vision and pattern recognition (pp. 8798-8807). [Mixamo](https://www.mixamo.com) [adobe](https://www.adobe.com/legal/terms.html) [Dirty-GANcing](https://github.com/VisiumCH/AMLD2020-Dirty-GANcing) 6. [CGAN]Wang, T. C., Liu, M. Y., Zhu, J. Y., Tao, A., Kautz, J., & Catanzaro, B. (2018). High-resolution image synthesis and semantic manipulation with conditional gans. In Proceedings of the IEEE conference on computer vision and pattern recognition (pp. 8798-8807). --- ## 討論區