Closed linchuming closed 4 years ago
Thank you for your interest in our paper!
@sniklaus Thanks for your detailed response! I tried to train the interpolation model with PWC-Net without adding additional loss, but the PWC-Net is unable to converge. Should I adjust the learning rate for PWC-Net or train interpolation model several epochs firstly and then update PWC-Net weights?
Another problem is that softmax splatting includes a small U-Net with three levels to refine the important map . So does each softmax splatting module has a independent U-Net?
Would you mind elaborating on your current state of progress? Have you implemented and trained the frame synthesis network as well as the feature pyramid extractor and you know want to fine-tune PWC-Net after successfully having trained the rest of the pipeline already?
I just checked the importance metric calculation again and noticed that we only compute it for the highest level and then downsample it to obtain the importance metric for the lower levels. I accordingly updated my response above. My apologies for having it mixed up, it has been almost two years since I wrote the code for this project.
Regarding the U-Net to fine-tune the importance metric, please see my response in #4 which you may find useful. In there, I recommend to first start trying without using this component since the effect of fine-tuning the importance metric is minor anyway.
@sniklaus Thanks for your response again! I tired to reimplement your softspalting approach. I use some configs as follows:
use the Laplacian loss:
class LaplacianPyramid(nn.Module):
def __init__(self, max_level=5):
super(LaplacianPyramid, self).__init__()
self.gaussian_conv = GaussianConv()
self.max_level = max_level
def forward(self, X):
t_pyr = []
current = X
for level in range(self.max_level):
t_guass = self.gaussian_conv(current)
t_diff = current - t_guass
t_pyr.append(t_diff)
current = F.avg_pool2d(t_guass, 2)
t_pyr.append(current)
return t_pyr
class LaplacianLoss(nn.Module): def init(self): super(LaplacianLoss, self).init()
self.criterion = nn.L1Loss()
self.lap = LaplacianPyramid()
def forward(self, x, y):
x_lap, y_lap = self.lap(x), self.lap(y)
return sum(self.criterion(a, b) for a, b in zip(x_lap, y_lap))
4. use the pretrained PWC-Net as you published:
https://github.com/sniklaus/pytorch-pwc
5. without finetuning the PWC-Net,
6. patch size is 256x256, random flip horizontally and vertically, random temporal order
7. train the model for 50 epochs, learning rate is 1e-4
Finally, I got PSNR 34.96 in Vimeo90k testing dataset. As your paper mentioned, I should get PSNR 35.54.
Therefore, could you tell me what should I change my configs. Thanks again!
Looks like you got pretty good results already, congrats!
Good luck!
Nice work! But, some questions trouble me after I read the paper: