Fried-Rice-Lab / FriedRiceLab

Official repository of the Fried Rice Lab, including code resources of the following our works: ESWT [arXiv], etc. This repository also implements many useful features and out-of-the-box image restoration models.
MIT License
209 stars 30 forks source link

About YML config #12

Closed CR7forMadrid closed 1 year ago

CR7forMadrid commented 1 year ago

您好,感谢您提供非常棒的FRL 项目,但我有一个疑问,为什么FRL需要提供两个yml文件,这样做和basicSR相比的好处在哪?(我看到在task.yml中可以根据任务不同提供数据集,但是也多了很多其他参数,比如hook_layer_type等)

CR7forMadrid commented 1 year ago

我也尝试在您提供的FRL项目中进行Interpret,但是生成的LAM Attrbution和Area of Contribution集中在左上角,与您给出的示例并不相同,请问是什么问题导致的呢? 7

jnpngshiii commented 1 year ago

有关YML的问题我抽空写个详细的回复,现在先解决有关LAM的问题。

请问你在计算LAM的时候使用的是什么模型呢?如果是ELAN或者ESWT的话,那么确实会出现LAM计算结果异常的情况。

我认为这是因为这两个模型使用了shift操作的原因(请参考_conv.py中的ShiftConv2d1x1_tool.py中的PixelMixer)。LAM的计算依赖于模型的梯度,而无参数的shift操作可能会对模型的梯度产生影响。

你可以尝试计算EDSRRCAN或者IMDN这种没有shift操作的模型的LAM,结果应该都是正确的。

顺便一提,LAM的方法是我从官方仓库里移植来的,除了包装没有做任何修改,你可以放心使用~

jnpngshiii commented 1 year ago

还有啊,README的LAM示例是从官方仓库里copy的,所以你的结果肯定和示例不同。主要是因为官方的图好看,所以就就直接拿来用了🤣。

CR7forMadrid commented 1 year ago

有关YML的问题我抽空写个详细的回复,现在先解决有关LAM的问题。

请问你在计算LAM的时候使用的是什么模型呢?如果是ELAN或者ESWT的话,那么确实会出现LAM计算结果异常的情况。

我认为这是因为这两个模型使用了shift操作的原因(请参考_conv.py中的ShiftConv2d1x1_tool.py中的PixelMixer)。LAM的计算依赖于模型的梯度,而无参数的shift操作可能会对模型的梯度产生影响。

你可以尝试计算EDSRRCAN或者IMDN这种没有shift操作的模型的LAM,结果应该都是正确的。

顺便一提,LAM的方法是我从官方仓库里移植来的,除了包装没有做任何修改,你可以放心使用~

谢谢,我使用的是ESWT模型。我将尝试使用您提供的项目测试其他网络的LAM结果。 再次表达感谢!

jnpngshiii commented 1 year ago

您好,感谢您提供非常棒的FRL 项目,但我有一个疑问,为什么FRL需要提供两个yml文件,这样做和basicSR相比的好处在哪?(我看到在task.yml中可以根据任务不同提供数据集,但是也多了很多其他参数,比如hook_layer_type等)

我个人认为,实验配置分两种:

FRL读取的两个yml文件分别对这两种实验配置进行配置。这么做有如下的考量:

比如说我现在新添了一个功能demo.py,它的配置如下:

demo_yml:
  a: 1
  b: 2
  c: 3
  ...
  z: 26

如果我想要在EDSRRCANSwinIR这几个模型上使用这个功能,我需要将这个实验配置分别复制到它们的yml文件中。这非常繁琐并很容易出错。此外,由于这个实验配置很长,这也会大大影响yml文件的可读性。因此,如果这个功能的实验配置对于不同的模型都通用,我们可以将其放在一个单独的yml文件中。这不仅使得yml文件更具有可读性,还能给你的实验带来便利(比如说你想把a的值修改为0,现在你只需要修改一次而不是多次)。

jnpngshiii commented 1 year ago

此外,这么做还有一种好处,就是你可以随意组合不同的yml文件。比如说对于如下的配置文件:

你可以随意组合它们以进行四种不同的实验,而无需修改yml文件或者使用--force_yml

CR7forMadrid commented 1 year ago

您好,感谢您提供非常棒的FRL 项目,但我有一个疑问,为什么FRL需要提供两个yml文件,这样做和basicSR相比的好处在哪?(我看到在task.yml中可以根据任务不同提供数据集,但是也多了很多其他参数,比如hook_layer_type等)

我个人认为,实验配置分两种:

  • 一种是对于不同的模型都通用的配置,如:num_in_chnum_out_chuse_hflip
  • 另一种是对于不同的模型不通用的配置,如:network_goptim_gscheduler

FRL读取的两个yml文件分别对这两种实验配置进行配置。这么做有如下的考量:

比如说我现在新添了一个功能demo.py,它的配置如下:

demo_yml:
  a: 1
  b: 2
  c: 3
  ...
  z: 26

如果我想要在EDSRRCANSwinIR这几个模型上使用这个功能,我需要将这个实验配置分别复制到它们的yml文件中。这非常繁琐并很容易出错。此外,由于这个实验配置很长,这也会大大影响yml文件的可读性。因此,如果这个功能的实验配置对于不同的模型都通用,我们可以将其放在一个单独的yml文件中。这不仅使得yml文件更具有可读性,还能给你的实验带来便利(比如说你想把a的值修改为0,现在你只需要修改一次而不是多次)。

谢谢您的详细说明,这的确减少了许多繁琐的程序,同时也感谢您整理的优秀项目,祝科研顺利! 再次感谢! (By the way,我通过您提供的LAM项目测试了我自己的网络和SwinIR,结果是正常的!)

jnpngshiii commented 1 year ago

也祝你科研顺利~