Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

TLC在平均池化中的kernel_size #25

Open
raindrop313 opened this issue Dec 7, 2023 · 2 comments
Open

TLC在平均池化中的kernel_size #25

raindrop313 opened this issue Dec 7, 2023 · 2 comments

Comments

@raindrop313
Copy link

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

您的工作应该是想要减小推理和训练的不一致性,当推理阶段图片大于训练的图片时,根据我对论文的理解,对于平均池化,会进行一个局部的池化,应该用卷积的方式完成。例如训练用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的思想不同。

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

@achusky
Copy link
Collaborator

achusky commented Dec 7, 2023

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

你对于论文的理解是对的。而代码实现是将池化核设置为训练时特征图大小的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将固定不变,与推理时的输入图像大小无关。

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

@raindrop313
Copy link
Author

好的,非常感谢

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants