sunny2109 / SAFMN

[ICCV 2023] Spatially-Adaptive Feature Modulation for Efficient Image Super-Resolution; runner-up method for the model complexity track in NTIRE2023 Efficient SR challenge

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

消融实验

Yzs007 opened this issue · comments

commented

您好,我想请教一些问题:
1、消融实验中SAFM模块是怎么验证的? 去掉的意思是完全不用这个模块还是 换成别的模块替代呢
2、您的特征图可视化是怎么做的呢?
非常希望您能解答我的疑惑,谢谢!

A ->None是完全不用A模块;A->B是指A用B替换
特征图可视化的伪代码如下:

   feat = model(input)
   feat = feat.squeeze().cpu().numpy()
   feat = np.mean(feat, axis=0)
   plt.figure()
   plt.imshow(feat)
   plt.savefig('./save_path/feat.png')

希望可以解答您的疑问。

commented

非常感谢!

commented

A ->None是完全不用A模块;A->B是指A用B替换 特征图可视化的伪代码如下:

   feat = model(input)
   feat = feat.squeeze().cpu().numpy()
   feat = np.mean(feat, axis=0)
   plt.figure()
   plt.imshow(feat)
   plt.savefig('./save_path/feat.png')

希望可以解答您的疑问。

打扰了,我试了您的特征图可视化方法, 但为什么每次可视化的特征图都不一样呢?我是直接把图片输入模型然后可视化,是不是我这操作错误了?

你有加载预训练模型吗?

commented

你有加载预训练模型吗?

确实忽略了这个。感谢大佬帮助

commented

大佬,你好。请问下,我安照你的实验设置,并没有达到论文中的数值,有可能是显卡的问题嘛?
还有一个问题是:“F表示快速傅里叶变换,λ是一个权值参数,根据经验设置为0.05” 经验设置是实验出来的嘛?在你的 ShuffleMixer 论文中,λ=0.1

结果差很多吗?我之前让我师弟复现过,基本跟论文的一致。论文里的结果是用best_model测的不是latest_model。

FFT loss的权重是试验后设置的。

commented

我用的是3060显卡,在windows系统上跑的。
在set5数据集差0.04db。谢谢大佬,有一直关注你的工作!

非常感谢你的关注。你要不选一下model😂应该结果就一致了。

commented

好的好的,大佬,非常感谢你。

好的好的,大佬,非常感谢你。

不用客气,我们互相学习、多多交流。

commented

大佬,小白再问一个问题,网络结构没变,训练的参数完全一致,随机种子也固定,为什么每次训练后的结果还是会有差别呢?还是这是正常现象呢?

大佬,小白再问一个问题,网络结构没变,训练的参数完全一致,随机种子也固定,为什么每次训练后的结果还是会有差别呢?还是这是正常现象呢?

这是正常的,主要是由于网络模型的权重和偏置是随机初始化的,随机种子只是决定了参数初始化的分布,这样每一次采样到的初始权重参数是不一样的,就会导致结果有些差别,但最终都会收敛到一个合理的范围内。

commented

好的,谢谢!

commented

大佬,小白再问一个问题,网络结构没变,训练的参数完全一致,随机种子也固定,为什么每次训练后的结果还是会有差别呢?还是这是正常现象呢?

这是正常的,主要是由于网络模型的权重和偏置是随机初始化的,随机种子只是决定了参数初始化的分布,这样每一次采样到的初始权重参数是不一样的,就会导致结果有些差别,但最终都会收敛到一个合理的范围内。

佬,我又冒出一个问题,既然训练不稳定, 那么消融实验怎么做呢?

大佬,小白再问一个问题,网络结构没变,训练的参数完全一致,随机种子也固定,为什么每次训练后的结果还是会有差别呢?还是这是正常现象呢?

这是正常的,主要是由于网络模型的权重和偏置是随机初始化的,随机种子只是决定了参数初始化的分布,这样每一次采样到的初始权重参数是不一样的,就会导致结果有些差别,但最终都会收敛到一个合理的范围内。

佬,我又冒出一个问题,既然训练不稳定, 那么消融实验怎么做呢?

同样的setting下,最终的结果是非常接近的,不会有多大的误差。

commented

大佬,小白再问一个问题,网络结构没变,训练的参数完全一致,随机种子也固定,为什么每次训练后的结果还是会有差别呢?还是这是正常现象呢?

这是正常的,主要是由于网络模型的权重和偏置是随机初始化的,随机种子只是决定了参数初始化的分布,这样每一次采样到的初始权重参数是不一样的,就会导致结果有些差别,但最终都会收敛到一个合理的范围内。

佬,我又冒出一个问题,既然训练不稳定, 那么消融实验怎么做呢?

同样的setting下,最终的结果是非常接近的,不会有多大的误差。

orz !!

大佬,小白再问一个问题,网络结构没变,训练的参数完全一致,随机种子也固定,为什么每次训练后的结果还是会有差别呢?还是这是正常现象呢?

这是正常的,主要是由于网络模型的权重和偏置是随机初始化的,随机种子只是决定了参数初始化的分布,这样每一次采样到的初始权重参数是不一样的,就会导致结果有些差别,但最终都会收敛到一个合理的范围内。

佬,我又冒出一个问题,既然训练不稳定, 那么消融实验怎么做呢?

同样的setting下,最终的结果是非常接近的,不会有多大的误差。

orz !!

你可以看看这篇论文 ,他探讨了神经网络训练过程中重复运行间差异的问题。

commented

大佬,你可真是我的导师,你的解答对我的帮助非常大,感谢!!!

commented

不好意思,再次打扰一下您。因为我自己找了好久确实找不到原因,想再请教一下您。就是之前您教我显示特征图那一段代码。我尝试了您的SAFMN,以及别的RFDN、FMEN等网络都能正常显示图特征图像。但是也有另外一些网络比如BSRN、RLFN这些网络,我用同样的方式和代码(全都加载了预训练模型),显示的特征图却是马赛克,但这些网络的PSNR和SSIM都是比较高的。难道代码是要根据什么进行修改才能适应吗?
if name== 'main':
image_path = './img_003_SRF_4_LR.png'
source_image = io.imread(image_path)
source_image = np.expand_dims(source_image.transpose((2, 0, 1)), 0)
input = torch.Tensor(source_image)

model = RLFN()
model_path = './rlfn.pth'
model.load_state_dict(torch.load(model_path)['params'], strict=True)

with torch.no_grad():
    feat = model(input)
    feat = feat.squeeze().cpu().numpy()
    feat = np.mean(feat, axis=0)

    plt.figure()
    plt.imshow(feat)
    plt.savefig('./RLFN.png')

不好意思,再次打扰一下您。因为我自己找了好久确实找不到原因,想再请教一下您。就是之前您教我显示特征图那一段代码。我尝试了您的SAFMN,以及别的RFDN、FMEN等网络都能正常显示图特征图像。但是也有另外一些网络比如BSRN、RLFN这些网络,我用同样的方式和代码(全都加载了预训练模型),显示的特征图却是马赛克,但这些网络的PSNR和SSIM都是比较高的。难道代码是要根据什么进行修改才能适应吗? if name== 'main': image_path = './img_003_SRF_4_LR.png' source_image = io.imread(image_path) source_image = np.expand_dims(source_image.transpose((2, 0, 1)), 0) input = torch.Tensor(source_image)

model = RLFN()
model_path = './rlfn.pth'
model.load_state_dict(torch.load(model_path)['params'], strict=True)

with torch.no_grad():
    feat = model(input)
    feat = feat.squeeze().cpu().numpy()
    feat = np.mean(feat, axis=0)

    plt.figure()
    plt.imshow(feat)
    plt.savefig('./RLFN.png')

你看看这些模型的输入数据范围是不是[0,1],这种可视化方式跟模型无关的。

不好意思,再次打扰一下您。因为我自己找了好久确实找不到原因,想再请教一下您。就是之前您教我显示特征图那一段代码。我尝试了您的SAFMN,以及别的RFDN、FMEN等网络都能正常显示图特征图像。但是也有另外一些网络比如BSRN、RLFN这些网络,我用同样的方式和代码(全都加载了预训练模型),显示的特征图却是马赛克,但这些网络的PSNR和SSIM都是比较高的。难道代码是要根据什么进行修改才能适应吗? if name== 'main': image_path = './img_003_SRF_4_LR.png' source_image = io.imread(image_path) source_image = np.expand_dims(source_image.transpose((2, 0, 1)), 0) input = torch.Tensor(source_image)

model = RLFN()
model_path = './rlfn.pth'
model.load_state_dict(torch.load(model_path)['params'], strict=True)

with torch.no_grad():
    feat = model(input)
    feat = feat.squeeze().cpu().numpy()
    feat = np.mean(feat, axis=0)

    plt.figure()
    plt.imshow(feat)
    plt.savefig('./RLFN.png')

有的模型训练是在0-255下训练的,你输入的时候也要保持一致。

commented

噢,好的好的,我明白您的意思了。谢谢!