Haochen-Wang409 / U2PL

[CVPR'22] Semi-Supervised Semantic Segmentation Using Unreliable Pseudo-Labels
Apache License 2.0
426 stars 59 forks source link

对比学习的实现细节 #135

Closed Hugo-cell111 closed 1 year ago

Hugo-cell111 commented 1 year ago

你好!关于对比学习,我的理解是有一个memory bank,存储了C类不可靠像素,然后每类至多存放10000个特征。如果需要采样negative keys,就从memory bank里采样,那么就写个嵌套for循环,第一层循环是对每个query(比如共256个),第二层循环是对每一类,每一类采样50个像素,那么就从10000个数随机选取50个index,最后把2562150个特征拼接起来,组成一个(256*21, 50)的negative keys,采取跟moco一样的方法计算logits 但是我觉得这样循环的效率很低,而且代码似乎并不是这么操作的,而且代码里negative keys的维度是(num_queries, num_negative, num_feat),我不是很能看得懂代码,所以有几个问题想请教一下您:(1)如何能较高效率地采样negative keys?(2)moco关于keys的维度和您代码里的keys维度(包括ReCo等一系列在半监督语义分割里使用对比学习的工作)是不一样的,前者是二维,后者是三维。可以请教一下这两者会有不同吗?谢谢!