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

关于正样本与负样本的选取问题 #84

Open
JiaWang0704 opened this issue Feb 7, 2023 · 3 comments
Open

关于正样本与负样本的选取问题 #84

JiaWang0704 opened this issue Feb 7, 2023 · 3 comments

Comments

@JiaWang0704
Copy link

您好!非常感谢您的工作。我在阅读您的paper的时候,如果我没有理解错的话,您是从同一LR图像中提取的其他图像块视为正样本,来自其他LR图像的图像块视为负样本。

但是我在阅读您的代码的时候,您始终都是以一个image作为单位来进行对比学习的。

因此来请教一下您,是我哪里的理解出问题了吗?

期待您的回复,谢谢!

@JiaWang0704 JiaWang0704 closed this as not planned Won't fix, can't repro, duplicate, stale Feb 8, 2023
@JiaWang0704 JiaWang0704 reopened this Feb 8, 2023
@LongguangWang
Copy link
Member

您好,您理解的没错,我们将同一LR图像中提取的其他图像块视为正样本,来自其他LR图像的图像块视为负样本。
具体到代码里也是这么操作的,dataloader里完成了的图像块的裁取,所以送入网络的就已经是图像块了。您可以再具体一下疑惑的代码位置方便进一步解释您的疑惑。

@BugMaker-99
Copy link

BugMaker-99 commented Dec 18, 2023

你好,我也有这个疑惑。trainer.py第73行代码:_, output, target = self.model_E(im_q=lr[:,0,...], im_k=lr[:,1,...])
这是将同一张LR图像的两个patch送入Moco,两个patch的退化是一样的,这都是正样本,好像没有看到负样本呀。在class Moco的forward中,有两行代码:l_pos = torch.einsum('nc,nc->n', [q, k]).unsqueeze(-1),l_neg = torch.einsum('nc,ck->nk', [q, self.queue.clone().detach()]),这两行代码写的是正负样本特征。我有点疑惑,输入的是同一张图像的两个patch,退化信息是相同的,为什么在Moco中分出了正负样本呢?

@LongguangWang
Copy link
Member

感谢关注~self.queue中保存了之前iteration送入的patch样本。由于不同图像之间的退化是不一样的,因此这些之前iteration送入的、保存在self.queue中的样本对于当前的query来说就成了负样本。

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

3 participants