## PyTorch Implementation of [AnimeGANv2](https://github.com/TachibanaYoshino/AnimeGANv2) **Updates** * `2021-10-17` Add weights for [FacePortraitV2](#additional-model-weights) * `2021-11-07` Thanks to [ak92501](https://twitter.com/ak92501), a web demo is integrated to [Huggingface Spaces](https://huggingface.co/spaces) with [Gradio](https://github.com/gradio-app/gradio). See demo: [![Hugging Face Spaces](https://img.shields.io/badge/%F0%9F%A4%97%20Hugging%20Face-Spaces-blue)](https://huggingface.co/spaces/akhaliq/AnimeGANv2) * `2021-11-07` Thanks to [xhlulu](https://github.com/xhlulu), the `torch.hub` model is now available. See [Torch Hub Usage](#torch-hub-usage). * `2021-11-07` Add FacePortraitV2 style demo to a telegram bot. See [@face2stickerbot](https://t.me/face2stickerbot) by [sxela](https://github.com/sxela) ## Basic Usage **Weight Conversion from the Original Repo (Requires TensorFlow 1.x)** ``` git clone https://github.com/TachibanaYoshino/AnimeGANv2 python convert_weights.py ``` **Inference** ``` python test.py --input_dir [image_folder_path] --device [cpu/cuda] ``` **Results from converted [[Paprika]](https://drive.google.com/file/d/1K_xN32uoQKI8XmNYNLTX5gDn1UnQVe5I/view?usp=sharing) style model** (input image, original tensorflow result, pytorch result from left to right)       **Note:** Training code not included / Results from converted weights slightly different due to the [bilinear upsample issue](https://github.com/pytorch/pytorch/issues/10604) ## Additional Model Weights **Webtoon Face** [[ckpt]](https://drive.google.com/file/d/10T6F3-_RFOCJn6lMb-6mRmcISuYWJXGc)
samples Trained on 256x256 face images. Distilled from [webtoon face model](https://github.com/bryandlee/naver-webtoon-faces/blob/master/README.md#face2webtoon) with L2 + VGG + GAN Loss and CelebA-HQ images. See `test_faces.ipynb` for details.  
**Face Portrait v1** [[ckpt]](https://drive.google.com/file/d/1WK5Mdt6mwlcsqCZMHkCUSDJxN1UyFi0-)
samples Trained on 512x512 face images. [![Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/drive/1jCqcKekdtKzW7cxiw_bjbbfLsPh-dEds?usp=sharing) ![samples](https://user-images.githubusercontent.com/26464535/127134790-93595da2-4f8b-4aca-a9d7-98699c5e6914.jpg) [📺](https://youtu.be/CbMfI-HNCzw?t=317) ![sample](https://user-images.githubusercontent.com/26464535/129888683-98bb6283-7bb8-4d1a-a04a-e795f5858dcf.gif)
**Face Portrait v2** [[ckpt]](https://drive.google.com/uc?id=18H3iK09_d54qEDoWIc82SyWB2xun4gjU)
samples Trained on 512x512 face images. Compared to v1, `🔻beautify` `🔺robustness` [![Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/drive/1jCqcKekdtKzW7cxiw_bjbbfLsPh-dEds?usp=sharing) ![face_portrait_v2_0](https://user-images.githubusercontent.com/26464535/137619176-59620b59-4e20-4d98-9559-a424f86b7f24.jpg) ![face_portrait_v2_1](https://user-images.githubusercontent.com/26464535/137619181-a45c9230-f5e7-4f3c-8002-7c266f89de45.jpg) 🦑 🎮 🔥 ![face_portrait_v2_squid_game](https://user-images.githubusercontent.com/26464535/137619183-20e94f11-7a8e-4c3e-9b45-378ab63827ca.jpg)
## Torch Hub Usage You can load Animegan v2 via `torch.hub`: ```python import torch model = torch.hub.load('bryandlee/animegan2-pytorch', 'generator').eval() # convert your image into tensor here out = model(img_tensor) ``` You can load with various configs (more details in [the torch docs](https://pytorch.org/docs/stable/hub.html)): ```python model = torch.hub.load( "bryandlee/animegan2-pytorch:main", "generator", pretrained=True, # or give URL to a pretrained model device="cuda", # or "cpu" if you don't have a GPU progress=True, # show progress ) ``` Currently, the following `pretrained` shorthands are available: ```python model = torch.hub.load("bryandlee/animegan2-pytorch:main", "generator", pretrained="celeba_distill") model = torch.hub.load("bryandlee/animegan2-pytorch:main", "generator", pretrained="face_paint_512_v1") model = torch.hub.load("bryandlee/animegan2-pytorch:main", "generator", pretrained="face_paint_512_v2") model = torch.hub.load("bryandlee/animegan2-pytorch:main", "generator", pretrained="paprika") ``` You can also load the `face2paint` util function. First, install dependencies: ``` pip install torchvision Pillow numpy ``` Then, import the function using `torch.hub`: ```python face2paint = torch.hub.load( 'bryandlee/animegan2-pytorch:main', 'face2paint', size=512, device="cpu" ) img = Image.open(...).convert("RGB") out = face2paint(model, img) ```