TLC icon indicating copy to clipboard operation
TLC copied to clipboard

TLC在平均池化中的kernel_size

Open raindrop313 opened this issue 1 year ago • 2 comments

感谢你的分享,我对于平均池化的局部性有一些疑问。

您的工作应该是想要减小推理和训练的不一致性,当推理阶段图片大于训练的图片时,根据我对论文的理解,对于平均池化,会进行一个局部的池化,应该用卷积的方式完成。例如训练用6464的patch,推理用256256的图片,那么应该池化核应该为96(64*1.5),但是您开源的代码计算方法如下: “”“ self.kernel_size[0] = x.shape[2]*self.base_size[0]//self.train_size[-2] self.kernel_size[1] = x.shape[3]*self.base_size[1]//self.train_size[-1] ”“” 由于base_size是train_size的1.5倍,那么池化核不是永远都是输入特征图x的1.5倍吗,好像和local的思想不同。

也许是我理解有误,恳请指点一二,不胜感激

raindrop313 avatar Dec 07 '23 00:12 raindrop313

你好,感谢关注我们的工作。

你对于论文的理解是对的。而代码实现是将池化核设置为训练时特征图大小的1.5倍: https://github.com/megvii-research/TLC/blob/main/basicsr/models/archs/local_arch.py#L133-L137 该部分核心代码分为两部分:

  1. 首先设置base_size, 通常为train_size的1.5倍
  2. 使用train_size创建特征图,进行一次forward来设置kernel_size,此时kernel_size会被设置为训练时特征图大小的1.5倍(或者说以base_size作为原始输入时特征图的大小)。

在进行相关设定之后,kernel_size将固定不变,与推理时的输入图像大小无关。

希望我的回答能解决你的疑惑,也欢迎继续留言探讨。

achusky avatar Dec 07 '23 08:12 achusky

好的,非常感谢

raindrop313 avatar Dec 10 '23 18:12 raindrop313