AnimeGAN Pytorch
AnimeGAN的Pytorch实现,用于快速照片动漫化
- 论文:AnimeGAN: a novel lightweight GAN for photo animation - Semantic scholar 或 Yoshino仓库
- Tachibana Yoshino的Tensorflow原始实现
- 在Hugging Face上试用
- 在Replicate上的演示和Docker镜像
- 动漫视频示例:https://www.youtube.com/watch?v=45ASFOR3rNU
输入 | 动画化 |
---|---|
- 2024/06/09: 集成到Hugging Face Spaces,点此试用
- 2024/06/02: 发布Arcane(结果见此)和新海诚风格
- 2024/05/05: 添加color_transfer模块以保留生成图像的原始颜色,查看此处。
- 2024/04/23: 添加DDP训练。
- 2024/04/16: 发布AnimeGANv2(宫崎骏风格)及训练代码
快速开始
git clone https://github.com/ptran1203/pytorch-animeGAN.git
cd pytorch-animeGAN
在本地机器上运行推理
--src 可以是目录或图像文件
python3 inference.py --weight hayao:v2 --src /your/path/to/image_dir --out /path/to/output_dir
- Python代码
from inference import Predictor
predictor= Predictor(
'hayao:v2',
# 如果设置为True,生成的图像将保留原始图像的颜色
retain_color=True
)
url = 'https://github.com/ptran1203/pytorch-animeGAN/blob/master/example/result/real/1%20(20).jpg?raw=true'
predictor.transform_file(url, "anime.jpg")
预训练权重
模型名称 | 模型 | 数据集 | 权重 |
---|---|---|---|
Hayao | AnimeGAN | train_photo + 宫崎骏风格 | generator_hayao.pt |
Shinkai | AnimeGAN | train_photo + 新海诚风格 | generator_shinkai.pt |
Hayao:v2 | AnimeGANv2 | Google Landmark v2 + 宫崎骏风格 | GeneratorV2_gldv2_Hayao.pt |
Shinkai:v2 | AnimeGANv2 | Google Landmark v2 + 新海诚风格 | GeneratorV2_gldv2_Shinkai.pt |
Arcane:v2 | AnimeGANv2 | Face ffhq + Arcane风格 | GeneratorV2_ffhq_Arcane_210624_e350.pt |
在自定义数据集上训练
- 在Google Colab上的训练笔记本
- 在Google Colab上的推理笔记本
1. 准备数据集
1.1 要从论文中下载数据集,请运行以下命令
wget -O anime-gan.zip https://github.com/ptran1203/pytorch-animeGAN/releases/download/v1.0/dataset_v1.zip
unzip anime-gan.zip
=> 数据集文件夹将以dataset
的名称出现在您当前的文件夹中
1.2 从动画视频创建自定义数据
您需要在机器上有一个视频文件。
步骤1. 从视频创建动画图像
python3 script/video_to_images.py --video-path /path/to/your_video.mp4\
--save-path dataset/MyCustomData/style\
--image-size 256\
步骤2. 从步骤1的数据集创建边缘平滑版本
python3 script/edge_smooth.py --dataset MyCustomData --image-size 256
2. 训练animeGAN
要从命令行训练animeGAN,您可以按如下方式运行train.py
:
python3 train.py --anime_image_dir dataset/Hayao \
--real_image_dir dataset/photo_train \
--model v2 \ # animeGAN版本,可以是v1或v2
--batch 8 \
--amp \ # 开启自动混合精度训练
--init_epochs 10 \
--exp_dir runs \
--save-interval 1 \
--gan-loss lsgan \ # 可选[lsgan, hinge, bce]之一
--init-lr 1e-4 \
--lr-g 2e-5 \
--lr-d 4e-5 \
--wadvd 300.0\ # D的对抗损失权重
--wadvg 300.0\ # G的对抗损失权重
--wcon 1.5\ # 内容损失权重
--wgra 3.0\ # Gram损失权重
--wcol 30.0\ # 颜色损失权重
--use_sn\ # 如果设置,使用谱归一化,默认为False
3. 转换图像
要转换文件夹中的图像或单个图像,运行inference.py
,例如:
--src和--out可以是目录或文件
python3 inference.py --weight path/to/Generator.pt \
--src dataset/test/HR_photo \
--out inference_images
4. 转换视频
要将视频转换为动画版本:
选择--batch-size时要小心,如果视频分辨率太大,可能会导致CUDA内存错误
python3 inference.py --weight hayao:v2\
--src test_vid_3.mp4\
--out test_vid_3_anime.mp4\
--batch-size 4
AnimeGAN v2的结果
宫崎骏风格
输入 | 宫崎骏风格v2 |
---|---|
奥术风格
输入 | Arcane |
---|---|
更多结果 - 宫崎骏 V2 风格
- 对抗损失(LSGAN)
L(adv)(D) = 0.5 * (D(x_anime) - 1)^2 + 0.5 * (D(G(x_photo)))^2
L(adv)(G) = 0.5 (D(G(x_photo)) - 1)^2
- 内容损失
L(con)(G, D) = ||VGG(x_photo) - VGG(G(x_photo))||
- Gram矩阵损失
L(gra)(G, D) = ||gram(VGG(G(x_photo))) - Gram(VGG(x_anime_gray))||
- 颜色重建损失
L(col)(G, D) = || Y(G(x_photo)) - Y(x_photo) || + Huber(|| U(G(x_photo)) - U(x_photo) ||)
+ Huber(|| V(G(x_photo)) - V(x_photo) ||)