什么是APISR
APISR 是一款开源的基于现实世界动漫画面的超分辨率恢复与增强工具。该工具专门设计用于改善低质量、低分辨率的动漫图像和视频。它能有效处理各种现实场景中的退化问题,提升画面质量。此外,APISR 使用最新的技术和研究成果,为动漫爱好者及专业制作人员提供高效的解决方案,进一步推动动漫产业的技术发展。
项目链接:https://github.com/Kiteretsu77/APISR
APISR安装
git clone git@github.com:Kiteretsu77/APISR.git
cd APISR# Create conda env
conda create -n APISR python=3.10
conda activate APISR# Install Pytorch and other packages needed
pip install torch==2.1.1 torchvision==0.16.1 torchaudio==2.1.1 --index-url https://download.pytorch.org/whl/cu118
pip install -r requirements.txt# To be absolutely sure that the tensorboard can execute. I recommend the following CMD from "https://github.com/pytorch/pytorch/issues/22676#issuecomment-534882021"
pip uninstall tb-nightly tensorboard tensorflow-estimator tensorflow-gpu tf-estimator-nightly
pip install tensorflow# Install FFMPEG [Only needed for training and dataset curation stage; inference only does not need ffmpeg] (the following is for the linux system, Windows users can download ffmpeg from https://ffmpeg.org/download.html)
sudo apt install ffmpeg
Gradio快速推理
Gradio 选项无需用户准备权重,但每次只能处理一张图片。
在线演示可以在以下网址找到:HuggingFace 或 Colab。
可以通过运行以下代码创建本地 Gradio:
python app.py
注意:Gradio 是为了快速推断,因此将自动下载现有权重并将图像降采样至 720P,以减少 VRAM 消耗。如需进行完整的推理,请查看下面的常规推理部分。
常规推理
从model zoo下载模型权重,并将权重放到“pretrained”文件夹中。
https://github.com/Kiteretsu77/APISR/blob/main/docs/model_zoo.md
然后,执行
python test_code/inference.py --input_dir XXX --weight_path XXX --store_dir XXX
如果你下载的权重是论文权重,那么 test_code/inference.py 的默认参数能够执行“assets”文件夹中的样本图片。
数据集管理
数据集整理管道位于 dataset_curation_pipeline 文件夹中。
你可以通过将视频(mp4 或其他格式)发送到管道中来收集你的数据集,并从视频源中获取最少压缩和最具信息量的图像。
从下方链接下载 IC9600 权重(ck.pth)并将其放置在 "pretrained/" 文件夹中(或者,你可以在以下 collect.py 执行中定义不同的 --IC9600_pretrained_weight_path)
https://drive.google.com/drive/folders/1N3FSS91e7FkJWUKqT96y_zcsG9CRuIJw
如果你有一个包含视频源的文件夹,你可以执行以下命令来获取一个基本的数据集(需要安装 ffmpeg):
python dataset_curation_pipeline/collect.py --video_folder_dir XXX --save_dir XXX
一旦你获得了具有不同宽高比和分辨率的图像数据集,你可以运行以下脚本
注意检查 uncropped_hr、degrade_hr_dataset_path 和 train_hr_dataset_path(我们将在训练阶段的 opt.py 设置中使用这些路径)
为了降低内存利用率和提高训练效率,在数据准备阶段我们预处理所有耗时的伪高清图像(train_hr_dataset_path)。
但是,为了创建面向预测的自然输入压缩,在每个周期中,从未裁剪的高清图像(uncropped_hr)开始降级,低分辨率的合成图像也同时存储。裁剪的高清高清数据集(degrade_hr_dataset_path)和裁剪的伪高清数据集(train_hr_dataset_path)在数据准备阶段固定,训练期间不会修改。
注意检查是否有任何 OOM(内存不足)现象。如果有,将无法正确完成数据集准备。通常,这是因为 scripts/anime_strong_usm.py 中的 num_workers 设置太大了!
训练
整个训练过程可以在一台 RTX3090/4090 上完成!
1.准备一个数据集(AVC / API),该数据集由数据集整理的第二步和第三步预处理。
你需要在执行以下命令之前准备好三个文件夹:
--> uncropped_hr:未裁剪的高清原图(GT)
--> degrade_hr_dataset_path:裁剪过的高清原图(GT)
--> train_hr_dataset_path:裁剪过的伪高清(Pseudo-GT)
2.训练:请仔细检查 opt.py 以设置你想要的超参数(通常只需修改常改设置即可)。
注意1:执行以下操作时,我们将创建一个“tmp”文件夹来保存生成的低分辨率图像以供检查。如果你想,可以修改代码删除它。
注意2:如果你有强大的 CPU,并且想要加速,你可以在 opt.py 中增加 parallel_num。
第一步(Net L1 损失训练):运行
python train_code/train.py
训练后的模型权重将保存在 'saved_models' 文件夹中(与checkpoint相同)
第二步(GAN 对抗性训练):
·在 opt.py 中将 opt['architecture'] 改为 "GRLGAN" 并在需要时更改批量大小。顺便说一下,我认为对于个人训练来说,不需要为 GAN 训练 300K 迭代。我这样做是为了遵循 AnimeSR 和 VQDSR 中的相同设置,但 100K ~ 130K 应该可以获得不错的视觉效果。
·根据之前的工作,GAN 应该从 L1 损失预训练网络开始,所以请带上一个预训练的路径(下面的默认路径应该就可以)。
python train_code/train.py --pretrained_path saved_models/grl_best_generator.pth