请教轻量化RIFE的思路
Opened this issue · 12 comments
你好作者,这是一个非常棒的工作,我想和您请教沟通下如何对模型做轻量化的部署。
- 降低ResConv层数及channel。
- 对上下采样做更快的,例如使用conv替换。
- 估计1/2,1/4甚至1/8的光流,上采样至原分辨率做warp
- grid_sample操作较为耗时,是否有更好的替换方案?可不可以不内建warp
- 为了解决4,是否可以在不做warp的情况下做多尺度处理,从而提升性能?
不知道上述构想您是否尝试过,性能如何?或者是否有后续的相关研究?
以及在RIFE的各种版本中(从4.3到4.26),所使用的模型训练集都是vimeo_triplet吗。是否有用到其他数据集?
期待您的回答。
你好,这些方法都行除了4,warp没有特别好的替代方案
我有加atd12k和adobe240fps;但是只用vimeo90k也挺好
只把warp放在最后一步,内嵌的warp操作去掉,然后保存flow和mask自己解析的话会很影响性能吗。去掉中间warp您有什么想法吗
依然会比较影响,但是会比纯 CAIN 好一些
中间多一次 warp 都会提升挺多的
能不能所有 warp 都做在小图上,然后和原始图一起再融合一下
想请教下您vimeo_septuplet.json和123test.json的大概内容是?方便的话可以问下您这两个文件是怎么生成的吗
with nori.smart_open('s3://chenmingrui/datasets/vimeo_septuplet/vimeo_septuplet.json') as f:
for data in json.load(f):
self.train_data.append((0, data))
with nori.smart_open(self.path + '123test.json') as f:
for data in json.load(f):
self.val_data.append((0, data))
以及vimeo数据集具体应该使用3帧的版本还是7帧的版本?
用的是7帧的版本
没什么特别的东西,就是把文件列表写在 json 里面
您好作者,我目前有新的问题向您请教。
目前是在模型非常小的情况下无法很好处理大尺度运动。
如果从loss层面、数据增强层面、模型结构层面做改进来适应大尺度运动。您有什么建议吗
@zehaisang 你好
数据可以通过增加 resize 倍数来扩充大运动,模型中可以增加下采样倍数以获得更大的感受野
你想讨论的是纯 cnn 不带光流的情况吗?
@hzwer 您好
我理解的是:
数据可以通过增加 resize 倍数来扩充大运动:通过输入更大尺寸的图像
模型中可以增加下采样倍数以获得更大的感受野:增加更低尺度的图像特征(例如从1/4, 1/2, 1变为1/16, 1/8, 1/4, 1/2, 1)
想问您我理解的对吗?
我讨论的是一种取消内嵌image warp的一种轻量化的情况,也就是只在最后一层预测flow和mask,并做image warp。我目前做了一些实验,发现使用Adobe240fps+ATD12K+VimeoSeptuplet的连续三帧做训练,在vimeo_triplet上做测试,效果要比仅在vimeo_triplet上做训练要差,并且泛化性能也变差了,这让我感到很困惑。您有什么想法吗
我觉得你的理解是对的
毕竟 vimeo_triplet 是 in domain 测试,而且你有没有检查过你的 vimeo_triplet 测试的 image_id 是否包含在你的训练集?
感谢您的回复~
我检查了下vimeo_triplet 测试的 image_id 并不包含在训练集中。在泛化性测试中PSNR、SSIM比纯使用vimeo_triplet训练有较小提升,但是LPIPS性能下降了(数值提升)。
以及想请教下作者,
-
绝大多数视频内插模型都内嵌了warp操作,但是有少量工作不包含(例如CAIN),想问下您有什么超轻量化(Params小于2M) / 不使用内嵌Warp 的视频插帧工作推荐吗?
-
如何判断模型的可用临界值:视频插帧模型在Vimeo90K Triplet上的PSNR、SSIM、LPIPS中的哪一个指标大于什么数值可以判断模型是刚刚可用的?
-
似乎VFIMamba使用了更高分辨率的数据集,您有尝试过在这些数据集上训练吗?我理解的是Vimeo90K Triplet构建了基础插帧能力,Adobe240fps扩充了慢动作能力,ATD12K扩充了动漫视频的能力。但是我没有看到目前的版本中使用大运动数据集以及高分辨率数据集(例如2K及以上的数据集),但是最新的RIFE模型(例如4.26)却在这些情况下表现良好,想问下您应该怎么归因?
-
基于问题3,我想找到处理高分辨率&大尺度运动的改进目标,我目前尝试超小模型(Params小于0.5M,无内嵌Warp)扩大感受野&增加下采样尺度几乎无效,所以还有什么改进点吗
-
Loss的选择?如何针对性的提升LPIPS?除了基础的L1 Loss外,您有什么常用的Loss组合建议吗
- 这方面没有听说过显著超过 CAIN 的工作
- 不好判断,首先每个人在意的场景不一样,其次不同的结构可能在类似的指标下也有不同的表现
- 因为我用了很多尺度增广操作,而学术界工作没有搞的这么脏
- 我理解超小模型是不是要用 depthwise conv 这类的操作,不然的话 feature map 太小导致模型没法建模
- 我用 0.2 l1loss + 1.0 vgg loss,直接用 LPIPS loss 据说会更好,但是应该差不太多
感谢您的回复,为了理清思路,想请教下您,
在不改变网络结构的情况下。
- 您之前尝试过有什么操作可以提升在Vimeo90K Triplet上的PSNR、SSIM、LPIPS测试性能?
- 例如改变Loss、训练策略
- 增加训练集或数据增强方式?
我当前使用您在此仓库中的默认Loss(您论文中默认的拉普拉斯L1 Loss及特权蒸馏Loss)、默认训练策略、训练数据为默认的Vimeo90K Triplet及数据增强方式。