SAFMN icon indicating copy to clipboard operation
SAFMN copied to clipboard

消融实验

Open Yzs007 opened this issue 1 year ago • 23 comments

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

Yzs007 avatar Mar 14 '23 12:03 Yzs007

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')

希望可以解答您的疑问。

sunny2109 avatar Mar 14 '23 12:03 sunny2109

非常感谢!

Yzs007 avatar Mar 14 '23 12:03 Yzs007

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')

希望可以解答您的疑问。

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

Yzs007 avatar Mar 14 '23 16:03 Yzs007

你有加载预训练模型吗?

sunny2109 avatar Mar 14 '23 17:03 sunny2109

你有加载预训练模型吗?

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

Yzs007 avatar Mar 15 '23 00:03 Yzs007

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

XF2020 avatar Apr 08 '23 05:04 XF2020

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

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

sunny2109 avatar Apr 08 '23 05:04 sunny2109

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

XF2020 avatar Apr 08 '23 05:04 XF2020

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

sunny2109 avatar Apr 08 '23 05:04 sunny2109

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

XF2020 avatar Apr 08 '23 05:04 XF2020

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

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

sunny2109 avatar Apr 08 '23 05:04 sunny2109

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

Yzs007 avatar Apr 10 '23 12:04 Yzs007

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

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

sunny2109 avatar Apr 10 '23 12:04 sunny2109

好的,谢谢!

Yzs007 avatar Apr 10 '23 12:04 Yzs007

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

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

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

Yzs007 avatar Apr 12 '23 10:04 Yzs007

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

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

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

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

sunny2109 avatar Apr 13 '23 02:04 sunny2109

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

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

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

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

orz !!

Yzs007 avatar Apr 13 '23 02:04 Yzs007

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

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

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

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

orz !!

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

sunny2109 avatar Apr 16 '23 01:04 sunny2109

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

Yzs007 avatar Apr 16 '23 07:04 Yzs007

不好意思,再次打扰一下您。因为我自己找了好久确实找不到原因,想再请教一下您。就是之前您教我显示特征图那一段代码。我尝试了您的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')

Yzs007 avatar Apr 19 '23 09:04 Yzs007

不好意思,再次打扰一下您。因为我自己找了好久确实找不到原因,想再请教一下您。就是之前您教我显示特征图那一段代码。我尝试了您的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],这种可视化方式跟模型无关的。

sunny2109 avatar Apr 19 '23 09:04 sunny2109

不好意思,再次打扰一下您。因为我自己找了好久确实找不到原因,想再请教一下您。就是之前您教我显示特征图那一段代码。我尝试了您的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下训练的,你输入的时候也要保持一致。

sunny2109 avatar Apr 19 '23 10:04 sunny2109

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

Yzs007 avatar Apr 19 '23 10:04 Yzs007

你有加载预训练模型吗?

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

您好佬,可以问问具体怎么操作的吗?我鼓捣半天也没弄出来

xujinxiaolaji avatar Dec 23 '24 08:12 xujinxiaolaji