Real-ESRGAN 动漫视频模型对比指南:AnimeVideo-v3 与 waifu2x、Real-CUGAN 的实测比较与推理速度分析
【免费下载链接】Real-ESRGANReal-ESRGAN aims at developing Practical Algorithms for General Image/Video Restoration.项目地址: https://gitcode.com/gh_mirrors/re/Real-ESRGAN
Real-ESRGAN 在 2022/04/24 发布了专为动漫视频优化的小模型AnimeVideo-v3(realesr-animevideov3.pth),本指南以仓库文档 docs/anime_comparisons_CN.md 为核心,完整还原该模型与 waifu2x、Real-CUGAN 的对比评测方法、三类视觉结果差异与 V100 上的推理速度数据,并结合 inference_realesrgan_video.py、realesrgan/archs/srvgg_arch.py 等源码,给出可复制、可运行的 PyTorch 与 ncnn 实测复现方案。读完本文,你将掌握 AnimeVideo-v3 的适用场景、评测口径与完整上手动线。
一、AnimeVideo-v3 是什么
AnimeVideo-v3 是 Real-ESRGAN 为动漫视频超分设计的轻量模型,权重文件为realesr-animevideov3.pth,属于仓库模型库(见 docs/model_zoo.md)中"For Animation Videos"一栏的唯一模型:
| 模型 | 缩放倍率 | 说明 |
|---|---|---|
| realesr-animevideov3 | X4(同时可用于 X1、X2、X3) | 面向动漫视频的 XS 尺寸模型 |
从 inference_realesrgan_video.py 的模型注册逻辑可以看到其底层架构,它并非常规的 RRDBNet,而是:
model = SRVGGNetCompact(num_in_ch=3, num_out_ch=3, num_feat=64, num_conv=16, upscale=4, act_type='prelu') netscale = 4 file_url = ['https://github.com/xinntao/Real-ESRGAN/releases/download/v0.2.5.0/realesr-animevideov3.pth']SRVGGNetCompact定义在 realesrgan/archs/srvgg_arch.py 中,是一种紧凑型 VGG 风格网络:1 个输入卷积 +num_conv个主体卷积层 + 1 个输出卷积,最后通过nn.PixelShuffle(upscale)在末层完成上采样,且不在 HR 特征空间做卷积,因此参数与计算量都远小于 23 个 RRDB block 的RealESRGAN_x4plus。网络还通过F.interpolate(x, scale_factor=upscale, mode='nearest')叠加最近邻上采样的原始输入作为残差基线,让网络只学习残差,加速收敛并稳定输出。这解释了文档中反复强调的"XS size + 更快推理速度"的底气来源。
二、v3 版本的更新要点
docs/anime_comparisons_CN.md记录了 2022/04/24 发布 AnimeVideo-v3 时的五项核心改进,这也是对比评测围绕的核心维度:
- 更自然(better naturalness):整体观感更接近原生动漫画面;
- 更少瑕疵(fewer artifacts):边缘与色块区域更干净;
- 颜色保持得更好(more faithful to the original colors):减少色偏与饱和度漂移;
- 更好的纹理恢复(better texture restoration):细节纹理重建更扎实;
- 虚化背景处理(better background restoration):对景深虚化背景的恢复更自然。
三、对比评测设置
文档中的横向对比严格限定在三个方法之间:
- waifu2x(基于 ncnn 的 waifu2x 实现),固定超参数:
tile=0、noiselevel=2; - Real-CUGAN,采用 2022-02-27 发布的"faster/low-memory"版本,固定超参数:
cache_mode=0、tile=0、alpha=1; - RealESRGAN-AnimeVideo-v3。
对比评测的结论表述是:AnimeVideo-v3 在更快的推理速度下取得更好的结果。需要强调的是,这一结论建立在上述固定超参数与固定版本的评测口径之上,属于该文档声明的对比结果,不构成对任意配置组合的普遍性结论。
四、视觉结果对比的三组维度
文档中的对比图像均来自原图中裁剪出的 patch,再经 resize 后的结果,因此查看时建议放大或单击查看完整尺寸才能比较细节。原始输入与输出素材随文档发布提供下载,方便读者自行复现与肉眼核验。对比按三个主题分组:
1. 更自然的结果、更好的虚化背景恢复:示例来自157083983-*、a0010、00000044等帧,重点考察大面积虚化背景上是否出现生硬的纹理假象。
2. 更少瑕疵、更好的细节纹理:示例来自00000053、Disney_v4_22_018514_s2、Japan_v2_0_007261_s2、huluxiongdi_2(葫芦兄弟)等帧,重点考察线条边缘、渐变区域是否出现振铃、色块等伪影。
3. 其他更好的结果:示例来自Japan_v2_1_128525_s1、tianshuqitan_2(天书奇谭)、00000051(含两帧连排)、00000099、00000016等帧,覆盖不同画风与场景下的综合表现。
这三组维度与"更新要点"一一对应,构成了评测的主观指标框架:自然度、伪影、颜色保真、纹理恢复与背景恢复。
五、推理速度对比(PyTorch)
文档明确指出,速度表只报告模型推理时间,忽略硬盘读写(IO)时间。测试 GPU 为 V100,结果如下:
| GPU | 输入尺寸 | waifu2x | Real-CUGAN | RealESRGAN-AnimeVideo-v3 |
|---|---|---|---|---|
| V100 | 1921 x 1080 | - | 3.4 fps | 10.0fps |
| V100 | 1280 x 720 | - | 7.2 fps | 22.6fps |
| V100 | 640 x 480 | - | 24.4 fps | 65.9fps |
三档分辨率下 AnimeVideo-v3 的吞吐约为 Real-CUGAN 的 2.7~3 倍,同时原生 4 倍超分倍率支持降倍使用(X1/X2/X3),进一步放大了高分辨率场景的速度优势。这一优势的实现基础正是上一节提到的紧凑架构:num_conv=16、特征通道num_feat=64,计算量与显存占用均显著低于 23-block 的通用模型。
另外,文档中"ncnn"一栏标注为 TODO,即基于 ncnn 可执行文件的官方速度对比数据在仓库中尚未公布,读者不应将 PyTorch 侧的数值直接等同于 ncnn 侧表现。
六、复现一:PyTorch 视频推理
AnimeVideo-v3 的完整使用教程见 docs/anime_video_model.md,推理入口为 inference_realesrgan_video.py。该脚本默认模型名即为realesr-animevideov3(见 main 函数),并支持对视频、图片、文件夹三类输入做流式超分。
6.1 下载模型
wget https://github.com/xinntao/Real-ESRGAN/releases/download/v0.2.5.0/realesr-animevideov3.pth -P weights模型放入仓库根目录的weights/下;若缺失,脚本会自动通过 load_file_from_url 下载。
6.2 三种启动方式
# 单 GPU 单进程 CUDA_VISIBLE_DEVICES=0 python inference_realesrgan_video.py -i inputs/video/onepiece_demo.mp4 -n realesr-animevideov3 -s 2 --suffix outx2 # 单 GPU 多进程(提升 GPU 利用率) CUDA_VISIBLE_DEVICES=0 python inference_realesrgan_video.py -i inputs/video/onepiece_demo.mp4 -n realesr-animevideov3 -s 2 --suffix outx2 --num_process_per_gpu 2 # 多 GPU 多进程 CUDA_VISIBLE_DEVICES=0,1,2,3 python inference_realesrgan_video.py -i inputs/video/onepiece_demo.mp4 -n realesr-animevideov3 -s 2 --suffix outx2 --num_process_per_gpu 26.3 关键参数说明(取自 argparse 定义)
| 参数 | 默认值 | 说明 |
|---|---|---|
-i / --input | inputs | 输入视频、图片或文件夹 |
-n / --model_name | realesr-animevideov3 | 模型名,还支持RealESRGAN_x4plus_anime_6B、RealESRGAN_x4plus、RealESRNet_x4plus、RealESRGAN_x2plus、realesr-general-x4v3 |
-o / --output | results | 输出文件夹 |
-s / --outscale | 4 | 最终放大倍率,可自由设定(v3 模型支持 X1/X2/X3) |
--suffix | out | 输出视频文件名后缀 |
-t / --tile | 0 | 分块推理的 tile 尺寸,0 表示不分块;显存不足时报错会提示调小此值 |
--tile_pad | 10 | 分块时的边缘 padding |
--pre_pad | 0 | 每个边界的预填充尺寸 |
--face_enhance | 关闭 | 是否使用 GFPGAN 增强人脸,动漫模型不支持 |
--fp32 | 关闭 | 默认 fp16 半精度推理,开启则使用 fp32 |
--fps | None | 指定输出视频帧率,缺省沿用输入帧率 |
--ffmpeg_bin | ffmpeg | ffmpeg 可执行文件路径 |
--extract_frame_first | 关闭 | 多进程遇到 ffmpeg 报错时,先抽帧再处理 |
--num_process_per_gpu | 1 | 每张 GPU 的进程数,总进程数 = GPU 数 × 该值;瓶颈在 IO 时建议调大,以不超过显存为限 |
--alpha_upsampler | realesrgan | alpha 通道上采样器,可选realesrgan | bicubic |
--ext | auto | 输出图片扩展名,auto | jpg | png |
6.4 多进程与 IO 瓶颈的源码级理解
文档特别指出"程序的瓶颈在 IO,GPU 通常未被充分利用",这正是--num_process_per_gpu存在的意义。查看 run 函数 可确认其实现机制:num_process > 1时,脚本先用 ffmpeg 将输入视频按进程数切成若干子视频(get_sub_video),再用torch.multiprocessing的 spawn 上下文并行对每个子视频推理,最后通过 ffmpeg concat demuxer(vidlist.txt)无损拼接回完整视频。Reader/Writer类则通过 ffmpeg 的 rawvideo 管道以bgr24像素格式逐帧读写,推理与编解码流水并行。
若多进程下遇到 ffmpeg 错误,可开启--extract_frame_first:脚本会先用ffmpeg -qscale:v 1 -qmin 1 -qmax 1 -vsync 0将视频抽帧为 PNG 序列(run 函数),再以文件夹模式逐帧处理。此外,脚本对.flv输入会自动先转封装为.mp4(见 main 函数)。
七、复现二:ncnn 可执行文件三步流程
若不使用 PyTorch/CUDA 环境,可使用支持 Intel/AMD/Nvidia GPU 的 ncnn 便携版可执行文件(无需安装 CUDA 与 PyTorch),完整流程见 docs/anime_video_model.md:
Step 1:用 ffmpeg 抽帧
ffmpeg -i onepiece_demo.mp4 -qscale:v 1 -qmin 1 -qmax 1 -vsync 0 tmp_frames/frame%08d.png需预先创建tmp_frames目录。
Step 2:用 ncnn 可执行文件推理
以 Windows 为例:
./realesrgan-ncnn-vulkan.exe -i tmp_frames -o out_frames -n realesr-animevideov3 -s 2 -f jpg需预先创建out_frames目录。可执行文件内置了模型文件,-n指定模型名,-s为放大倍率,-f为输出格式。ncnn 版可执行文件并不支持 Python 脚本的全部功能(如outscale),且因为采用分块处理再拼接,输出图像可能存在轻微割裂感,与 PyTorch 输出不完全一致——这是 ncnn 实现的固有限制,详见 README_CN.md。
Step 3:合并回视频
先用ffmpeg -i onepiece_demo.mp4查看输入视频帧率,再按该帧率合并:
ffmpeg -r 23.98 -i out_frames/frame%08d.jpg -c:v libx264 -r 23.98 -pix_fmt yuv420p output.mp4若需保留原音频,追加一条输入流并映射:
ffmpeg -r 23.98 -i out_frames/frame%08d.jpg -i onepiece_demo.mp4 -map 0:v:0 -map 1:a:0 -c:a copy -c:v libx264 -r 23.98 -pix_fmt yuv420p output_w_audio.mp4其中-r为帧率(按实际输入修改)、-c:v通常用libx264、-pix_fmt yuv420p保证播放兼容性。ncnn 模型的转换方法可参考 docs/ncnn_conversion.md(PyTorch → ONNX → ncnn,再经ncnnoptimize优化并修改 param 中的 blob 名)。
八、使用注意事项
- 人脸增强与动漫不兼容:FAQ(docs/FAQ.md)明确说明
face_enhance只能用于真实人脸,不推荐在动漫图片/视频上开启以节省显存。即使强行开启,inference_realesrgan_video.py 也会在检测到'anime' in model_name时自动关闭并打印提示。 - 显存管理:推理时遇到 CUDA OOM,优先用
--tile设置更小的分块尺寸;输出视频超过 4K 时,脚本会提示 IO 速度成为瓶颈,建议调低-s。 - 对比口径:本文所有速度与画质数据均出自该文档在 V100 上的既定评测设置(waifu2x
tile=0, noiselevel=2;Real-CUGAN 20220227 版cache_mode=0, tile=0, alpha=1),若更换硬件、版本或参数,结果可能变化。
九、延伸阅读
- docs/anime_comparisons.md:本文的英文原版;
- docs/anime_video_model.md:AnimeVideo-v3 的完整使用教程与演示视频;
- docs/anime_model.md:面向动漫图片的
RealESRGAN_x4plus_anime_6B模型介绍; - docs/model_zoo.md:全模型清单(通用、动漫图片、动漫视频);
- inference_realesrgan_video.py:视频推理脚本源码;
- realesrgan/archs/srvgg_arch.py:AnimeVideo-v3 所用紧凑 VGG 网络的实现。
【免费下载链接】Real-ESRGANReal-ESRGAN aims at developing Practical Algorithms for General Image/Video Restoration.项目地址: https://gitcode.com/gh_mirrors/re/Real-ESRGAN
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考