MASA-SR
MASA-SR copied to clipboard
some question
1.stage1中的LR与Ref↓大小不应该都是40x40吗,为什么图中画的不一样大 2.后两层索引图Dk的尺寸小于x2,x4参考特征的大小,怎么根据Dk取这些尺寸不一致的参考特征中取特征 3.dilation=1就是patch=3x3吗 4。LR先变成LR_down,再变回LR进行后续处理的意义是什么
- 只是在训练过程中LR和Ref↓大小相同,但测试时并不一定,这么画是为了体现更general的cases。
- 具体参考这部分code:https://github.com/dvlab-research/MASA-SR/blob/9f0cccb71beafa764dadc5984fc8751cc0740c79/models/archs/MASA_arch.py#L427-L432 针对不同大小的参考特征,会对kernel size,stride做相应调整。例如,若x1的patch大小为3x3,则对于x2的参考特征,我们会将其切为6x6,且stride设为2,这样一来产生的patch数就会与x1的patch数相同。
- 是的
- 并没有对LR进行downsample。
- 只是在训练过程中LR和Ref↓大小相同,但测试时并不一定,这么画是为了体现更general的cases。
- 具体参考这部分code:https://github.com/dvlab-research/MASA-SR/blob/9f0cccb71beafa764dadc5984fc8751cc0740c79/models/archs/MASA_arch.py#L427-L432 针对不同大小的参考特征,会对kernel size,stride做相应调整。例如,若x1的patch大小为3x3,则对于x2的参考特征,我们会将其切为6x6,且stride设为2,这样一来产生的patch数就会与x1的patch数相同。
- 是的
- 并没有对LR进行downsample。
Thank you very much for your reply.
我还有个疑惑:
self.ref_down_block_size = 1.5与
我理解的是12x12,这两个对应不上;
另外,Ref↓ block的大小不应该和LR Block的大小(8x8)一样吗,不然patch怎么一一对应
Hi,文中的block和patch是两个不一样的概念,patch是从block中取的。Ref↓ block的大小可以与LR Block的大小不一样,但Ref↓ patch的大小是需要与LR patch的大小一样的(比如都是3x3)。具体见正文的Fig.3,淡蓝色实线框为block(当然文中LR block可能跟Ref↓ block画成一样大小了,但实际可以不一样大小),其他颜色虚线框为patch,计算correlation是patch之间相互计算,只需要保持patch大小一样就可以。
谢谢!可是Ref↓的3x3patch是从Ref↓ Block中取得,ref_down_block_size = 1.5,怎么从1.5x1.5中取3x3?我看代码中的reflr_patches大小为15x15,是1.5变换来的,为什么不直接设置ref_down_block_size=15,这个地方不太明白。
首先我们设置了lr_block_size=8,ref_down_block_size = 1.5(这里的1.5并不是表示实际block大小,而是表示成了比例的形式,代码可能写得没有太简洁直观以至于造成了你的误解)。 那么这里 https://github.com/dvlab-research/MASA-SR/blob/9f0cccb71beafa764dadc5984fc8751cc0740c79/models/archs/MASA_arch.py#L356 的计算结果是px=w_lr / 8。 再通过这一行 https://github.com/dvlab-research/MASA-SR/blob/9f0cccb71beafa764dadc5984fc8751cc0740c79/models/archs/MASA_arch.py#L361 的计算,代入px=w_lr / 8,我们可以得到diameter_x=1.5*w_ref_down/px+1,即diameter_x=12*w_lr/w_ref_down+1(加1是为了让它为奇数,方便后续取中心patch)。
好的,还想请教下,如果LR patch对应到的Ref↓ patch在边界,比如在左上角的3x3,那这时以这个patch为中心进行裁剪ref_down_block,会超出图像范围,这个问题怎么处理的,对应代码中哪一部分
我们在crop patch之前先对block进行了padding(unfold函数中的padding参数),以保证不会出现这种情况。 https://github.com/dvlab-research/MASA-SR/blob/9f0cccb71beafa764dadc5984fc8751cc0740c79/models/archs/MASA_arch.py#L303
我们在crop patch之前先对block进行了padding(unfold函数中的padding参数),以保证不会出现这种情况。
https://github.com/dvlab-research/MASA-SR/blob/9f0cccb71beafa764dadc5984fc8751cc0740c79/models/archs/MASA_arch.py#L303
可是padding后的大小是42x42,若以左上角3x3patch为中心取13x13的block,还是不够大,这里提到的以patch为中心裁剪block,不是这么理解的吗
不好意思,上面的回答理解错你的意思了。超出图像边界的话,我们就只裁到图像边界: https://github.com/dvlab-research/MASA-SR/blob/9f0cccb71beafa764dadc5984fc8751cc0740c79/models/archs/MASA_arch.py#L391-L405 比如这里的mask会把超出图像左边界的坐标置为0,右/上/下边界情况同理。不知道这是否回答了你的问题?
非常感谢,明白了!