Skip to content

关于RIFE从v3.8到v4.26版本演进的疑问:性能提升的关键因素 #124

Closed

Description

@zehaisang

首先感谢作者对社区的贡献,对RIFE带来了持续的改进。在观察RIFE从v3.8到v4.26的演进过程中,我发现了一些很有趣的现象:

  1. 质量提升:
    LPIPS指标有显著提高(成倍提升)
    实际应用中的视觉质量明显提升
    插帧结果更加稳定
  2. 值得关注的现象:
    核心架构(由粗到细的金字塔结构)基本保持不变
    模型参数量实际减少了
    尽管架构更简单,性能却大幅提升

这造成了一个很有趣的现象:

更简单的模型 ➡️ 更好的效果
相同的核心设计 ➡️ LPIPS指标成倍提升

因此想请教以下几点:

  1. 在这个演进过程中的关键设计原则或决策
  2. 在减少参数的同时提升质量的关键因素
  3. 您认为对于提升帧插值质量最重要的要素是什么

您的见解将对从事类似研究的社区很有帮助。

Activity

  1. hzwer commented on Dec 3, 2024

    @hzwer
    Owner

    我能想到的一些吧

    1. 关注训练和推理的 gap,早期的训练使用了不充足的尺度增广,导致在推理大运动场景会出现问题
    2. 以优化 lpips 为核心,而不看 psnr 指标
    3. 投入更多的训练时间
    4. 结构上去掉了 refine,增加了 warped feature

    我觉得只要围绕 lpips 指标,并且有一些 hard case 辅助迭代模型,其实做的事情都是小修小改,慢慢累积起来就好了很多
    还有一些可以参考 https://zhuanlan.zhihu.com/p/721430631

  2. zehaisang commented on Dec 16, 2024

    @zehaisang
    Author

    感谢您的回复,我现在想进一步追问:

    1. 具体而言,hard case是如何辅助迭代模型的? 是通过将hard case与bad case调整损失函数及训练数据集,还是使用hard case对模型进行微调?
    2. “投入更多的训练时间”是指训练1000个epoch甚至更多epoch吗?
    3. 尺度增广指的是在获取图像时进行增广吗? 例如,在训练时进行1.5x、2x、4x的随机放大,是在dataset返回数据时做随机放大(即训练patch动态改变),还是在getimg或__getitem__之前进行随机放大?但训练时都是使用384x384的patch。
    4. 使用SSIM Loss以及1e-5 * Consistency Loss的具体作用是什么? 这些损失的权重相对于主要的0.1 * L1 Loss + VGG Loss要小很多。
    5. 您提到不能太早扩数据量,具体来说应该在什么时候扩数据量?
    6. 关于VGG Loss的一些调优:
      比如:
      weights = [1.0 / 32, 1.0 / 16, 1.0 / 8, 1.0 / 4, 1.0]
      这样做相比于:
      weights = [1.0 / 2.6, 1.0 / 4.8, 1.0 / 3.7, 1.0 / 5.6, 10 / 1.5]
      有哪些优势?

    感谢您的解答!

  3. hzwer commented on Dec 16, 2024

    @hzwer
    Owner
    1. 每次发模型前,肉眼观察几十个 hard case or bad case 是不是有提升,不涉及改训练集
    2. 是的
    3. 训练时是相同大小 patch,只是从不同增广的图中裁剪出来;动态 patch 我想也可以,但是写起来比较繁琐一点
    4. SSIM 看起来会让所有指标略好一点,所以有的时候保留;后一项是我观察到光流没有正则化时,在一些动漫场景会出现奇怪 artifacts,所以稍微处理了一下;这两项不要紧
    5. 至少对于 rife 这种模型,我观察扩数据量的增益不明显,我的意思是不要太多把精力花在这上边(如果你只有一个人),因为洗数据也很花时间
    6. 这个是从别人那抄的参数,可能他们基于某些统计方法平衡的系数,我不觉得会有很大区别,后者就是深层权重稍大了一点
  4. zehaisang commented on Dec 19, 2024

    @zehaisang
    Author

    感谢您的解答,我现在有以下进一步的问题想向您请教:

    仅训练一个简单的两帧插入一帧的插帧模型,不使用timestep的情况下,

    1. 在使用如 Vimeo-Septuplet、SportSLoMo 或 Adobe240fps 等包含连续帧的数据集时,应该选择连续的三帧、左右间隔0-1帧、左右间隔0-2帧,还是随机选择帧?
    2. 推荐使用 Vimeo-Triplet、Vimeo-Septuplet中的哪个,还是两者兼用?
    3. 在训练过程中,Vimeo-Triplet、Vimeo-Septuplet、Adobe240fps、ATD-12K、SportSLoMo 这些数据集的重要性如何,也就是以哪个数据集为主?

    感谢您的解答!

  5. hzwer commented on Dec 20, 2024

    @hzwer
    Owner
    1. 建议对于帧率比较低的(~30fps) 选连续三帧,帧率高的选间隔大一点
    2. 只用 Vimeo-Septuplet,它包含 Vimeo-Triplet
    3. Vimeo-Septuplet 是主要的,其它可用可不用,我没有做出很明显的差异
  6. Qjrun commented on Jul 17, 2025

    @Qjrun

    我能想到的一些吧

    1. 关注训练和推理的 gap,早期的训练使用了不充足的尺度增广,导致在推理大运动场景会出现问题
    2. 以优化 lpips 为核心,而不看 psnr 指标
    3. 投入更多的训练时间
    4. 结构上去掉了 refine,增加了 warped feature

    我觉得只要围绕 lpips 指标,并且有一些 hard case 辅助迭代模型,其实做的事情都是小修小改,慢慢累积起来就好了很多 还有一些可以参考 https://zhuanlan.zhihu.com/p/721430631

    @hzwer 您好,想请教一下关于第4点结构上的优化,请问加入warped feature对于效果的提升很明显吗?因为加入warped feature map会引入更多的gridsmaple算子,对实时性高的应用来说不太友好,这部分带来的效果提升主要是哪方面呢?谢谢~

  7. hzwer commented on Jul 22, 2025

    @hzwer
    Owner

    @Qjrun Hi, 感觉上是模型的感受野会更大。可能可以用多次图片上 warp 来替代。

  8. hzwer commented on Oct 20, 2026

    @hzwer
    Owner

    感谢这组有价值的问题,也感谢前面完整的交流。维护者已在本帖说明:更充分的尺度增广、围绕 LPIPS 和困难样例做验证、更长训练,以及移除 refine/加入 warped feature 等共同影响了迭代效果;这些是经验总结,不等于每一项都已有独立消融结论。

    复现时建议保持独立的 OOD/hard-case 验证集,不把验证样例直接拿去微调;按数据原帧率设计时间间隔,先做空间增广再裁剪固定大小 patch,并按训练步数而不只按 epoch 对齐预算。warped feature 的收益和实时开销需要一起测量。README 已把本帖列为迭代 QA,关闭只表示这轮问答收尾,不会删除内容或改变其参考链接。

    本帖在 2026 年以前最后更新,现按维护者的历史 issue 清理安排关闭。讨论内容仍保留;如仍需跟进,欢迎附当前复现信息申请重开,或新建 issue 并链接本帖。

    由 gpt-6.1-astra 回复(AI 辅助),经仓库维护者授权发布。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions