lorenmt / reco

The implementation of "Bootstrapping Semantic Segmentation with Regional Contrast" [ICLR 2022].
https://shikun.io/projects/regional-contrast
Other
162 stars 25 forks source link

关于Active Query Sampling的一些问题 #3

Closed chaochao42 closed 2 years ago

chaochao42 commented 2 years ago

作者你好!拜读了一下这篇论文,感觉收获很大!但是关于Active Query Sampling这一块我有一些小疑问:文中的策略采用的是选取高entropy的像素点作为query,但是高entropy代表着模型对这个像素的预测不够确信而且也不够准确,从而使得这种query和它对应的positive key之间的拉近实际上不一定是准确的,即错误的拉近了query和positive key的距离,很有可能降低了模型的performance,你们是怎么看待这事的。

lorenmt commented 2 years ago

Hello!

你的逻辑是没问题,所以这里的问题是如何保证选取的 active query 的 label 是正确的。在文章中已经解释了 [Eq 6. 那一段],一是 active query 是来自 gt image,那 label 一定是正确的,二是 active query 来自 pseudo-label 的 confidence 大于 delta_w。这样避免了 sample 错误的 query 尤其在模型刚开始训练时,预测的 pseudo-label 大部分都是不正确的。所以严格意义上说,这里的 active query 满足以下这个条件 (weak augmentation)pseudo-label 上的 confidence 至少保证了 delta_w 在 (hard augmentation)上小于 delta_s 。

Haochen-Wang409 commented 2 years ago

保证选取的 active query 的 label 是正确的,这一点我十分同意,选到错误的 active query 会存在较大的风险。

论文为什么选择 在 weak augmentation 上比较 confident,但在 strong augmentation 上不 confident 的样本?是这情况是否存在负样本选错的情况?把不该推开的推开了?这里有什么特殊的考虑嘛?

我理解是要选择 active query 是在 weak augmentation 和 strong augmentation 上都很 confident 的样本?为什么不选择这种十分确定的样本?

lorenmt commented 2 years ago

这个问题很好。

首先这里的 weak augmentation 仅仅是 cropping,只是为了保证模型 predict 的 pseudo-label 尽可能的正确。为了进一步得到更加 confident 的 label 因此加了一个 threshold,保证 label 至少大于这个 threshold。所以在 active query 里 sample 的 pseudo-label 我们默认他是正确的了。

那至于为什么在 strong augmentation 下选不 confident,这里是为了找模型容易混淆的区域 (Fig 2.)。因为在 strong augmentation 里,我们有 classmix 这种重新生成的新数据,我们可以依赖 geometric consistency (数据和 label 的变化是一一对应的) 对物体边界学的更好。因此,对于混淆不 confident 的点的梯度更新才能真正帮助到 极端 sparse supervision 里的模型预测准确度。

那是否可以直接选择 weak 和 strong augmentation 上都很 confident 的样本? 可以。但 segmentation 的一大特性是即使你只有绝对 sparse 的 supervision,90%+的区域的预测都很准,比如依赖颜色,或者一些大物体的中间区域,真正预测错误的永远是小物体和或者物体边缘,因此同时在 weak 和 strong augmentation 上 confident 的样本进行 contrastive learning 对模型预测并没有任何帮助,因为这些样本已经学的很好了。你可以在代码里试着改变 delta_w delta_s 的值看结果。

Haochen-Wang409 commented 2 years ago

谢谢您耐心的回答!

lrjj commented 2 years ago

你好,我还是不太理解,我想问一下,query是来自strong augmentation的confident<delta_s 的部分,这部分就是我们要针对的不确定区域,但是query要有label才可以分正负样本,对于有标签部分label是有的,对于无标签部分,论文是只选用这些query对应位置在weak augmentation 上 confident>delta_w ,其余的confident<delta_w的query删除掉吗?,并且把剩下的query根据weak augmentation的预测标签当作标签来进行分正负样本,请问是这样嘛?这样的话,被舍弃的query怎么办呢,不是很理解,非常期待你的回答,谢谢呀。

lorenmt commented 2 years ago

Hello 你的理解完全正确。我们选择query, key 都来自一个大feature pool。这个feature pool 来自两个部分,一个是 所有 有label的feature (因为这些label一定是对),和没有label 但是predicted pseudo label confidence 大于 delta_w 的feature (有高confidence 的pseudo label)。然后在这个大feature pool 我们会基于不同class 选择不同 query 和key 但这些query 和key 都来自这个大feature pool。 然后在此,我们以delta_s 为区分 大于delta_s 是easy query 小于delta_s是hard query;然后我们在hard query上做梯度,easy query会自动抹掉。

lrjj commented 2 years ago

非常感谢你的回复!那也就是说在无标签的数据,论文的做法是只对confident>delta_w的hard query部分进行(不严谨的假设:如果weak augmentation和strong augmentation的预测输出完全一致,那就是这部分的hard query实际上是delta_s>confident>delta_w这部分),请问是这样嘛?

lorenmt commented 2 years ago

非常感谢你的回复!那也就是说在无标签的数据,论文的做法是只对confident>delta_w的hard query部分进行(不严谨的假设:如果weak augmentation和strong augmentation的预测输出完全一致,那就是这部分的hard query实际上是delta_s>confident>delta_w这部分),请问是这样嘛?

对. 严格意义上来说,confident > delta_w 是选择正确的feature 这里跟query 没关系; query的选择来自delta_s. 另外 delta_s>confident>delta_w可以这么理解,但更严格的说是 delta_s的confidence 是来自 hard augmentation 而 delta_w 的confidence 是来自weak augmentation.

lrjj commented 2 years ago

你好,我还是想再打扰一下弄清楚一些,真的很抱歉,我们只看无标签数据的部分,这部分的query也是通过在hard augmentation上面通过confident<delta_s这个条件筛选的,这些query的label是通过weak augmentation对应位置上面的预测的伪分类标签来一一确定,但是当hard augmentation上面的confident很小的时候,很有可能weak augmentation对应位置上面的预测的标签的confident也很小,所以论文有了这个条件:在hard augmentation上筛选出来的query对应于weak augmentation位置上面的confident>delta_w时,才去参与对比学习,那么也就是说,在无标签数据的部分,hard augmentation上筛选出来的低置信度的query是可能不参与对比学习的(比如说论文里面delta_s=0.97,delta_w=0.7,那有可能,hard augmentation上面置信度为0.4以下的query不参与对比学习,0.4是我假设的低置信度的值),请问我的理解对吗?很抱歉一个问题纠结这么久,很感谢你的耐心回复,谢谢你呀。

lorenmt commented 2 years ago

我们只看无标签数据的部分,这部分的query也是通过在hard augmentation上面通过confident<delta_s这个条件筛选的,这些query的label是通过weak augmentation对应位置上面的预测的伪分类标签来一一确定,但是当hard augmentation上面的confident很小的时候,很有可能weak augmentation对应位置上面的预测的标签的confident也很小,所以论文有了这个条件:在hard augmentation上筛选出来的query对应于weak augmentation位置上面的confident>delta_w时,才去参与对比学习

到这里正确.

在无标签数据的部分,hard augmentation上筛选出来的低置信度的query是可能不参与对比学习的(比如说论文里面delta_s=0.97,delta_w=0.7,那有可能,hard augmentation上面置信度为0.4以下的query不参与对比学习,0.4是我假设的低置信度的值),请问我的理解对吗?

有点不太对. 对于无label的情况, 只要weak augmentation < delta_w 这些数据就不会再被选到query了. 参看这里:https://github.com/lorenmt/reco/blob/71c1b7324fd36049c6657b122ba3fef373877b72/train_semisup.py#L115 https://github.com/lorenmt/reco/blob/71c1b7324fd36049c6657b122ba3fef373877b72/module_list.py#L71

所以这里 weak_aug > delta_w 和 strong_aug < delta_s 不是平行关系, 而是顺序关系. 先满足第一个条件,我们知道这个pixel 的标签是对的, 再看 strong_aug是不是小于delta_s. 这里的confidence 有可能是 0.4 没关系, 因为我知道他在 weak aug下的预测是高confidence的.

客观的讲: 最理想的情况就是weak_aug的预测非常高, strong_aug的预测非常低. 这样的梯度更新是最有效的, 这些query也是最重要的.

lrjj commented 2 years ago

我明白了!非常感谢,谢谢你,耐心帮我解决疑惑,论文思路很棒!

DISAPPEARED13 commented 1 year ago

您好!作者。我也阅读了您的论文。感觉到收获很大! 我也存在一个小小的问题希望能得到您的解答。就是您提及到,在SSL unlabeled data的情境下,对于pseudo label中也通过weak aug的方式来保证它的可靠程度能尽可能高,但是尽管如此,当然也有可能错误选择的问题,还要涉及到sample数量多少等问题,当选点错误数量多的情况下,可能导致计算出query +的中心会被偏移到可能不那么准确的位置,那这样的情况下怎么能保证ReCo loss能往着我们想要的“拉进类内距离,拉远类间距离”的方向走呢?

lorenmt commented 1 year ago

由于我们有GT label的约束, 通常情况大部分点都是正确的...因为如果中心点被错误点拉到错误距离, 那么 class relationship 也就错掉了, 然后他会 sample 更加简单的点来重新拉回来.

DISAPPEARED13 commented 1 year ago

您说的sample更简单的点是等待下一次iteration时候的采样吗?

lorenmt commented 1 year ago