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

关于您给的pascal-5i base annotation数据集的问题 #63

Open
cs-xiyan opened this issue Apr 22, 2024 · 4 comments
Open

关于您给的pascal-5i base annotation数据集的问题 #63

cs-xiyan opened this issue Apr 22, 2024 · 4 comments

Comments

@cs-xiyan
Copy link

cs-xiyan commented Apr 22, 2024

pascal-5i是从20个类别挑选五个作为查询集,剩下15个作为支持集,不同I代表不同采样方法,可是您给的base annotation,i无论是0还是3,无论是train还是val都只是1-15类。这是为什么呢?
image
image
image

@cs-xiyan
Copy link
Author

我好像理解怎么回事了,BAM 中的base_annotation实际上只是产生了支持集,被用于pspnet的训练,也就是支持分支,他是两段式训练。虽然都是1-15但是实际上包含了不同类别。不知道这样解释是否正确。

@qjmltz
Copy link

qjmltz commented May 29, 2024

您好,我刚开始研究FSS,请问您知道为什么在BAM之前的模型,像是PFEnet和HSNenet、SSP都没有用到base_annotation,而为什么BAM用到base_annotation?HSNenet和SSP虽然有下载VOC2012的annotation,但似乎不加也没有关系。
非常期待您的回复,十分感谢!

@cs-xiyan
Copy link
Author

我是这么理解的假设一共20类,base_annotation是将数据集进行了处理,选择15个类重新映射为1-15,比如前5类是novel class,后15类是base class,那么把6-20映射成1-15。然后新建一个数据集。其他模型并没有重新映射这步。因为需要用基学习器也就是传统语义分割模型先把15类分好。所以需要重新映射,方便后续损失计算。
BAM/util
/get_mulway_base_data.py 69-74 line

for cls in range(1,num_classes+1):
        select_pix = np.where(label_tmp == cls)
        if cls in sub_list:
            label[select_pix[0],select_pix[1]] = sub_list.index(cls) + 1
        else:
            label[select_pix[0],select_pix[1]] = 0

BAM是两段训练,先训练好基学习器,分出15类,然后加载基学习器权重,再训练元学习器。
PFENET不需要这样,他是直接像传统语义分割一样读取image,和mask,在自定义dataset类部分直接分成支持集和查询集,直接训练。

@qjmltz
Copy link

qjmltz commented May 30, 2024

我是这么理解的假设一共20类,base_annotation是将数据集进行了处理,选择15个类重新映射为1-15,比如前5类是novel class,后15类是base class,那么把6-20映射成1-15。然后新建一个数据集。其他模型并没有重新映射这步。因为需要用基学习器也就是传统语义分割模型先把15类分好。所以需要重新映射,方便后续损失计算。 BAM/util /get_mulway_base_data.py 69-74 线

for cls in range(1,num_classes+1):
        select_pix = np.where(label_tmp == cls)
        if cls in sub_list:
            label[select_pix[0],select_pix[1]] = sub_list.index(cls) + 1
        else:
            label[select_pix[0],select_pix[1]] = 0

BAM是两段训练,先训练好基学习器,分出15类,然后加载基学习器权重,再训练元学习器。 PFENET不需要这样,他是直接像传统语义分割一样读取image,和mask,在自定义数据集类部分直接分成支持集和查询集,直接训练。

非常感谢您的回复,让我对BAM的论文理解更加深了一层,对于初学者的我来说帮助很大,感谢~

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