# 1 AnimeGANv2

## 1.1 原理介绍

[AnimeGAN](https://github.com/TachibanaYoshino/AnimeGANv2)基于2018年[CVPR论文CartoonGAN](https://openaccess.thecvf.com/content_cvpr_2018/papers/Chen_CartoonGAN_Generative_Adversarial_CVPR_2018_paper.pdf)基础上对其进行了一些改进，主要消除了过度风格化以及颜色伪影区域的问题。对于具体原理可以参见作者[知乎文章](https://zhuanlan.zhihu.com/p/76574388?from_voters_page=true)。AnimeGANv2是作者在AnimeGAN的基础上添加了`total variation loss`的新模型。


## 1.2 如何使用

### 1.2.1 快速体验

安装`PaddleGAN`之后运行如下代码即生成风格化后的图像`output_dir/anime.png`，其中`PATH_OF_IMAGE`为你需要转换的图像路径。

```python
from ppgan.apps import AnimeGANPredictor
predictor = AnimeGANPredictor()
predictor.run(PATH_OF_IMAGE)
```

或者在终端中运行如下命令，也可获得相同结果：

```sh
python applications/tools/animeganv2.py --input_image ${PATH_OF_IMAGE}
```

### 1.2.1 数据准备

我们下载作者提供的训练数据，训练数据可以从[这里](https://github.com/TachibanaYoshino/AnimeGAN/releases/tag/dataset-1)下载。
下载后解压到data目录下：

```sh
wget https://github.com/TachibanaYoshino/AnimeGAN/releases/download/dataset-1/dataset.zip
cd PaddleGAN
unzip YOUR_DATASET_DIR/dataset.zip -d data/animedataset
```

解压完成后数据分布如下所示：

```sh
animedataset
├── Hayao
│   ├── smooth
│   └── style
├── Paprika
│   ├── smooth
│   └── style
├── Shinkai
│   ├── smooth
│   └── style
├── SummerWar
│   ├── smooth
│   └── style
├── test
│   ├── HR_photo
│   ├── label_map
│   ├── real
│   ├── test_photo
│   └── test_photo256
├── train_photo
└── val
```

### 1.2.2 训练
  示例以训练Hayao风格的数据为例。

  1.  为了保证模型具备生成原图的效果，需要预热模型:
  ```sh
  python tools/main.py --config-file configs/animeganv2_pretrain.yaml
  ```

  1.  预热模型完成后，训练风格迁移模型:
  **注意：** 必须先修改在`configs/animeganv2.yaml`中的`pretrain_ckpt`参数，确保指向正确的 **预热模型权重路径**
  设置`batch size=4`，`learning rate=0.00002`，在一个  GTX2060S GPU上训练30个epoch即可获得较好的效果，其他超参数请参考`configs/animeganv2.yaml`。

  ```sh
  python tools/main.py --config-file configs/animeganv2.yaml
  ```

  1.  改变目标图像的风格
  修改`configs/animeganv2.yaml`中的`style`参数即可改变风格(目前可选择`Hayao,Paprika,Shinkai,SummerWar`)。如果您想使用自己的数据集，可以在配置文件中修改数据集为您自己的数据集。

  **注意：** 修改目标风格后，必须计算目标风格数据集的像素均值，并修改`configs/animeganv2.yaml`中的`transform_anime->Add->value`参数。

  如下例子展示了如何获得`Hayao`风格图像的像素均值：
  ```sh
  python tools/animegan_picmean.py --dataset data/animedataset/Hayao/style
  image_num: 1792
  100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 1792/1792 [00:04<00:00, 444.95it/s]
  RGB mean diff
  [-4.4346957 -8.665916  13.100612 ]
  ```

### 1.2.3 测试

测试模型：
```sh
python tools/main.py --config-file configs/animeganv2.yaml --evaluate-only --load ${PATH_OF_WEIGHT}
```

## 1.3 结果展示
| 原始图像                            | 风格化后图像                       |
| ----------------------------------- | ---------------------------------- |
| ![](../../imgs/animeganv2_test.jpg) | ![](../../imgs/animeganv2_res.jpg) |
