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是如此的有效? #18

Open
dzw007 opened this issue May 13, 2023 · 2 comments
Open

为什么TLC是如此的有效? #18

dzw007 opened this issue May 13, 2023 · 2 comments

Comments

@dzw007
Copy link

dzw007 commented May 13, 2023

作者你好,我很佩服你们的工作。
我在看你的代码时发现,在将TLC扩展到SCA层时,在class AvgPool2d中你采用子矩阵和的方法,用kernel_sizekernel_size大小的框(例如384384)遍历特征图(例如1280*720)求出了每一个区域的均值(这些均值是密集的),然后用replicate方法填充到与特征图同等大小获得out,然后将out与特征图点乘(对应元素相乘)。我觉得这样做违背了CA(通道注意力)的初衷,我感觉这样做甚至破坏了原始的特征图了,但是效果又是非常好的,您可以解释以下这其中有什么道理吗,很感谢您的热心解答。

@achusky
Copy link
Collaborator

achusky commented May 14, 2023

你好,感谢你对我们的工作感兴趣。

我们的工作揭示了图像复原任务中全局操作的训练-测试不一致现象:训练时基于裁切图像的全局信息分布和推理时基于全图的全局信息的分布并不一致。为了缓解不一致性对性能的负面影响,我们提出了测试时局部转换器TLC:在模型推理时将操作的信息聚合范围从全局(整个空间维度)转换为局部窗口。

对于CA,它们在训练时只是基于裁切图像(原图中的一个局部)来计算均值/注意力。在测试时,使用全图的话就会变成“基于全局来计算”。于是就有“训练-测试的不一致”。TLC只是在测试时候让CA保持和训练一致:使用“局部均值“来计算注意力。具体而言,TLC将全局CA转成了局部CA,其中最大的区别就是将全局池化层(global avgpool)转成了滑动窗口的普通avgpool。代码实现的实际上就是实现了"使用前缀和技巧加速"的”窗口大小为384、滑动步长为1“的池化(avgpool)。

优秀的性能提升主要就是缓解了训练和测试的不一致性:让CA操作在推理时也跟训练一样(使用全像的一个局部来计算均值)。

为了更详细的了解这个模块,你可以参考TLC中文介绍以及原论文

如果我有任何没有解释清晰的地方,或者你有任何其他想法,欢迎继续留言,我们可以一起探讨。

@dzw007
Copy link
Author

dzw007 commented May 14, 2023

感谢您的及时回复和耐心的解释,你们的工作是一个很有创意的想法,很期待看到你们之后的工作。由于我是一名刚入图像复原(我的研究方向为图像去模糊)领域的新人,很希望听到科研工作者对这个领域的个人见解,最后真的很感谢作者耐心的解答!

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