hzwer / ECCV2022-RIFE

ECCV2022 - Real-Time Intermediate Flow Estimation for Video Frame Interpolation
MIT License
4.37k stars 436 forks source link

Modify input crop size (224, 224) to large size(ex:(352, 352) may cause artefacts) #220

Closed chenyuZha closed 2 years ago

chenyuZha commented 2 years ago

你好,最近在使用稳定版本的模型进行训练的时候, 我尝试修改input crop size 到 (352, 352), 因为我本身frame的size是 (1280, 720)的缘故。 与此同时,我也增加了IFBlockc 的参数, 如下面所示:

 self.block0 = IFBlock(6, c=256)
 self.block1 = IFBlock(13+4, c=192)
 self.block2 = IFBlock(13+4, c=160)
 self.block3 = IFBlock(13+4, c=128)
 self.block_tea = IFBlock(16+4, c=128)

训练完之后测试的时候,发现从较高epochs开始,生成的frames边缘会出现黑边artefacts, 如下图所示: artefact 请问遇到这种问题有没有比较好的解决方法呢? 是否是因为deconv的参数设置问题? 感谢解答!

hzwer commented 2 years ago

我的经验是,换大 patch 来训练会降低性能,没有细致分析。 曲线看起来正常吗?说实话我没见过这种 artifacts.

chenyuZha commented 2 years ago

是正常的,没有loss爆炸的情况。 想请问一下换大patch会降低性能的具体原因是reconstruction的时候会出现问题吗?

hzwer commented 2 years ago

我不知道,图像超分领域也会观察到这个现象,用大 patch 训练不好。 有件事情有没可能引起了误导,我发出的 PracticalRIFE 模型不是我用来训练模型的代码。 我的训练框架中,目前 loss function 是这样写的

loss_l1 = self.lap(merged[3], gt).mean() + self.lap(merged[2], gt).mean() loss_tea = (teacher_res[0][0] - gt).abs().mean() loss_vgg = ((self.vgg(merged[3], gt).mean() + self.vgg(merged[2], gt).mean())) loss_G = loss_vgg + loss_tea + loss_cons + loss_l1

chenyuZha commented 2 years ago

现在repo RIFE.py的loss function是这样的:

  loss_l1 = (self.lap(merged[2], gt)).mean()
  loss_tea = (self.lap(merged_teacher, gt)).mean()
  if training:
      self.optimG.zero_grad()
      loss_G = loss_l1 + loss_tea + loss_distill * 0.01

我对比了一下,发现这两者还是有区别的。 请问一下这个新的loss function是多加了一个scale到8是吗? 另外 teacher_resloss_cons这两个variable目前没有在现有的loss function里找到。。。

hzwer commented 2 years ago

teacher_res 就是存了 merged_teacher,loss_cons 在整理好的代码被命名成了 loss_distill;加了一个 scale8

chenyuZha commented 2 years ago

谢谢解答,我来测试一下!