有关测试指标
您好!不好意思又打扰您!
-
我们在VOC数据集上从头训练模型后推理,发现有1-2个点左右的差异,想问下您是用几张GPU跑的呢?
-
我们使用您提供的模型权重进行推理,在VOC数据集的四个split上(resnet50/shot=1)得到68.77/73.48/67.18/60.27的指标,和原论文中的68.97/73.59/67.55/61.13平均后有0.4左右的差异。
想请教您这种差异是什么原因导致的呢?(因为固定了随机种子,我们使用两台不同机器跑结果是一致的。) 非常感谢!
您好,
- 1-shot实验我们只使用了1张GPU,5-shot实验使用了2/4张GPU,但GPU数量对性能的影响很小。请避免使用resume(中断训练,重新加载),这会在一定程度上产生影响。另外,多卡训练只需根据GPU数量对应修改batch_size,学习率保持不变。
- 不同的实验环境可能会引起结果差异。即使固定了随机种子,也较难保证获得完全相同的结果,例如"双线性插值"过程存在的随机性不受种子影响,这对于多轮迭代的训练过程影响更大。
- 这里我的建议是尝试1次以上的复现,并更换随机种子进行训练/测试。如仍不能取得论文中的指标,可以在今后的工作中呈现您复现的指标,这并不会产生对论文评估的潜在负面影响,可参考ASGNet (CVPR'21) 对PFENet的复现。
您好,
- 1-shot实验我们只使用了1张GPU,5-shot实验使用了2/4张GPU,但GPU数量对性能的影响很小。请避免使用resume(中断训练,重新加载),这会在一定程度上产生影响。另外,多卡训练只需根据GPU数量对应修改batch_size,学习率保持不变。
- 不同的实验环境可能会引起结果差异。即使固定了随机种子,也较难保证获得完全相同的结果,例如"双线性插值"过程存在的随机性不受种子影响,这对于多轮迭代的训练过程影响更大。
- 这里我的建议是尝试1次以上的复现,并更换随机种子进行训练/测试。如仍不能取得论文中的指标,可以在今后的工作中呈现您复现的指标,这并不会产生对论文评估的潜在负面影响,可参考ASGNet (CVPR'21) 对PFENet的复现。
请问两张卡的batch_size在lr保持不变的情况下,您是设置的多少?
您好,
- 1-shot实验我们只使用了1张GPU,5-shot实验使用了2/4张GPU,但GPU数量对性能的影响很小。请避免使用resume(中断训练,重新加载),这会在一定程度上产生影响。另外,多卡训练只需根据GPU数量对应修改batch_size,学习率保持不变。
- 不同的实验环境可能会引起结果差异。即使固定了随机种子,也较难保证获得完全相同的结果,例如"双线性插值"过程存在的随机性不受种子影响,这对于多轮迭代的训练过程影响更大。
- 这里我的建议是尝试1次以上的复现,并更换随机种子进行训练/测试。如仍不能取得论文中的指标,可以在今后的工作中呈现您复现的指标,这并不会产生对论文评估的潜在负面影响,可参考ASGNet (CVPR'21) 对PFENet的复现。
请问两张卡的batch_size在lr保持不变的情况下,您是设置的多少?
您好,我按照原论文中bs=12/8进行复现的。
您好,
- 1-shot实验我们只使用了1张GPU,5-shot实验使用了2/4张GPU,但GPU数量对性能的影响很小。请避免使用resume(中断训练,重新加载),这会在一定程度上产生影响。另外,多卡训练只需根据GPU数量对应修改batch_size,学习率保持不变。
- 不同的实验环境可能会引起结果差异。即使固定了随机种子,也较难保证获得完全相同的结果,例如"双线性插值"过程存在的随机性不受种子影响,这对于多轮迭代的训练过程影响更大。
- 这里我的建议是尝试1次以上的复现,并更换随机种子进行训练/测试。如仍不能取得论文中的指标,可以在今后的工作中呈现您复现的指标,这并不会产生对论文评估的潜在负面影响,可参考ASGNet (CVPR'21) 对PFENet的复现。
请问两张卡的batch_size在lr保持不变的情况下,您是设置的多少?
您好,我按照原论文中bs=12/8进行复现的。
多卡时相应调整为12/num_GPU, 8/num_GPU;学习率不变。
您好, 我看了代码里面测试的时候是以未知类中的随机一张图作为surport图像的,然后测试同类其他样本的分割效果,这样是不是可以解释每个人测试的时候复现出来的指标结果会有差别呢?理论上5-shot是不是差别会小一点?
您好, 我看了代码里面测试的时候是以未知类中的随机一张图作为surport图像的,然后测试同类其他样本的分割效果,这样是不是可以解释每个人测试的时候复现出来的指标结果会有差别呢?理论上5-shot是不是差别会小一点?
是的,更多的shot数会减小实验波动。
您好,
- 1-shot实验我们只使用了1张GPU,5-shot实验使用了2/4张GPU,但GPU数量对性能的影响很小。请避免使用resume(中断训练,重新加载),这会在一定程度上产生影响。另外,多卡训练只需根据GPU数量对应修改batch_size,学习率保持不变。
- 不同的实验环境可能会引起结果差异。即使固定了随机种子,也较难保证获得完全相同的结果,例如"双线性插值"过程存在的随机性不受种子影响,这对于多轮迭代的训练过程影响更大。
- 这里我的建议是尝试1次以上的复现,并更换随机种子进行训练/测试。如仍不能取得论文中的指标,可以在今后的工作中呈现您复现的指标,这并不会产生对论文评估的潜在负面影响,可参考ASGNet (CVPR'21) 对PFENet的复现。
请问两张卡的batch_size在lr保持不变的情况下,您是设置的多少?
您好,我按照原论文中bs=12/8进行复现的。
多卡时相应调整为12/num_GPU, 8/num_GPU;学习率不变。
您好!感谢回复。现有新的问题向您请教一下: 1.您的指标(baseline)也是高于PFENet的,也就是说在不使用base learner的情况下指标也是优于PFENet的,这部分提升是来自哪里的改进呢? 2.VOC数据集的训练集是由VOC自带的训练集(voc_original_train.txt,含有1464张)和SBD附加数据集(sbd_data.txt,含有5653张)共同构成voc_sbd_merge_noduplicate.txt。那么sbd_data.txt,含有5653张是怎么来的呢?从官方下载的SBD训练集给的是8498张,去除掉VOC val重复的部分好像不止5653张? 再次感谢!
您好!感谢回复。现有新的问题向您请教一下: 1.您的指标(baseline)也是高于PFENet的,也就是说在不使用base learner的情况下指标也是优于PFENet的,这部分提升是来自哪里的改进呢? 2.VOC数据集的训练集是由VOC自带的训练集(voc_original_train.txt,含有1464张)和SBD附加数据集(sbd_data.txt,含有5653张)共同构成voc_sbd_merge_noduplicate.txt。那么sbd_data.txt,含有5653张是怎么来的呢?从官方下载的SBD训练集给的是8498张,去除掉VOC val重复的部分好像不止5653张? 再次感谢!
- Baseline就是方法中的meta-learner,其共享了base-learner的骨干网络,相比imagenet预训练的模型更适用分割任务。
- 我们沿用了PFENet的设置,请参考这里。不过基类数据量对结果的影响似乎不大,在我们的实验中使用5953还是10582用于训练差异不明显。
祝好,
您好!感谢回复。现有新的问题向您请教一下: 1.您的指标(baseline)也是高于PFENet的,也就是说在不使用base learner的情况下指标也是优于PFENet的,这部分提升是来自哪里的改进呢? 2.VOC数据集的训练集是由VOC自带的训练集(voc_original_train.txt,含有1464张)和SBD附加数据集(sbd_data.txt,含有5653张)共同构成voc_sbd_merge_noduplicate.txt。那么sbd_data.txt,含有5653张是怎么来的呢?从官方下载的SBD训练集给的是8498张,去除掉VOC val重复的部分好像不止5653张? 再次感谢!
1. Baseline就是方法中的meta-learner,其共享了base-learner的骨干网络,相比imagenet预训练的模型更适用分割任务。 2. 我们沿用了PFENet的设置,请参考[这里](https://github.com/dvlab-research/PFENet)。不过基类数据量对结果的影响似乎不大,在我们的实验中使用[5953](https://github.com/dvlab-research/PFENet)还是[10582](https://github.com/kaixin96/PANet)用于训练差异不明显。祝好,
感谢解答!训练base learner时您使用全部的数据(VOC:5953张),将新类别(不存在self.sub_list中)的label置为0(在dataset.py的661-666行),这有可能出现一张图中label全是0和255(不知道我们的理解对不对),这个会不会有一些负面影响,我们想知道base learner训练时为什么不采用fss_list下的数据(保证每张图都包含有base类别),而是采用全部数据(voc_sbd_merge_noduplicate.txt)呢?
for cls in range(1, self.num_classes+1): select_pix = np.where(label_tmp == cls) if cls in self.sub_list: label[select_pix[0],select_pix[1]] = self.sub_list.index(cls) + 1 else: label[select_pix[0],select_pix[1]] = 0
还有就是我们看到验证集和测试集对应相同的数据,只是随机种子设置不同? 再次感谢!
- 是的,会出现0,255这种情况,还不确定会有怎样的影响,但目前来看结果是符合预期的。
- 提高数据量会促进base-learner的分割性能,使用fss_list下的数据也是可行的。
- 大多数文章这样设置验证/测试集,区别在于1次验证与多次测试。
欢迎讨论~
是的,会出现0,255这种情况,还不确定会有怎样的影响,但目前来看结果是符合预期的。
提高数据量会促进base-learner的分割性能,使用fss_list下的数据也是可行的。
大多数文章这样设置验证/测试集,区别在于1次验证与多次测试。
欢迎讨论~
感谢回复!已理解!受益匪浅! 您的Usage说明: ”Run util/get_mulway_base_data.py to generate [base annotations] for stage1”,数据部分需要先生成base annotations。但我们看到Stage1 Pre-training BaseData (Dataset) 代码里未使用该离线base annotations,是在线处理的(在dataset.py的661-666行)。
而在stage2 Meta-training使用了base annotations,
label_b = cv2.imread(os.path.join(self.base_path,label_path.split('/')[-1]), cv2.IMREAD_GRAYSCALE)
在该阶段是否也可以在线处理嘞?
您注释的这部分代码应该是等同于离线生成的结果?
for cls in range(1,self.num_classes+1): select_pix = np.where(label_b_tmp == cls) if cls in self.sub_list: label_b[select_pix[0],select_pix[1]] = self.sub_list.index(cls) + 1 else: label_b[select_pix[0],select_pix[1]] = 0
可以的话,离线生成这个步骤是为了读取速度更快还是有其他考虑?
是的,会出现0,255这种情况,还不确定会有怎样的影响,但目前来看结果是符合预期的。
- 提高数据量会促进base-learner的分割性能,使用fss_list下的数据也是可行的。
- 大多数文章这样设置验证/测试集,区别在于1次验证与多次测试。
欢迎讨论~
感谢回复!已理解!受益匪浅! 您的Usage说明: ”Run util/get_mulway_base_data.py to generate [base annotations] for stage1”,数据部分需要先生成base annotations。但我们看到Stage1 Pre-training BaseData (Dataset) 代码里未使用该离线base annotations,是在线处理的(在dataset.py的661-666行)。
而在stage2 Meta-training使用了base annotations,
label_b = cv2.imread(os.path.join(self.base_path,label_path.split('/')[-1]), cv2.IMREAD_GRAYSCALE)在该阶段是否也可以在线处理嘞? 您注释的这部分代码应该是等同于离线生成的结果?
for cls in range(1,self.num_classes+1): select_pix = np.where(label_b_tmp == cls) if cls in self.sub_list: label_b[select_pix[0],select_pix[1]] = self.sub_list.index(cls) + 1 else: label_b[select_pix[0],select_pix[1]] = 0可以的话,离线生成这个步骤是为了读取速度更快还是有其他考虑?
两个阶段都可以使用离线生成的基类标注。 生成标注仅为了加快数据读取。
您好!不好意思又打扰您! 最近跑了您的代码,在COCO数据集上,backbone为ResNet50,1shot的情况下基本和您论文提供的数据一致(除了split0有些差异),当5shot时,训练效果和您提供的数据差距很大。切换shot训练时,我们的操作是改动coco_splitx_resnet50.yaml文件里面的shot (1改成5),是我们操作少了什么步骤吗?我们跑出来coco split2(5 shot)只有48.46,split3(5 shot)只有46.35。
非常感谢!
您好!不好意思又打扰您! 最近跑了您的代码,在COCO数据集上,backbone为ResNet50,1shot的情况下基本和您论文提供的数据一致(除了split0有些差异),当5shot时,训练效果和您提供的数据差距很大。切换shot训练时,我们的操作是改动coco_splitx_resnet50.yaml文件里面的shot (1改成5),是我们操作少了什么步骤吗?我们跑出来coco split2(5 shot)只有48.46,split3(5 shot)只有46.35。
非常感谢!
您好! 您的操作没有问题。只不过coco数据集相比voc波动更大,如果较难获得论文的结果,可以在后续实验中与复现的结果进行比较,并不会影响所提出方案的先进性。另外,您在voc 5-shot上的实验结果如何?
祝好, 春博
您好!不好意思又打扰您! 最近跑了您的代码,在COCO数据集上,backbone为ResNet50,1shot的情况下基本和您论文提供的数据一致(除了split0有些差异),当5shot时,训练效果和您提供的数据差距很大。切换shot训练时,我们的操作是改动coco_splitx_resnet50.yaml文件里面的shot (1改成5),是我们操作少了什么步骤吗?我们跑出来coco split2(5 shot)只有48.46,split3(5 shot)只有46.35。 非常感谢!
您好! 您的操作没有问题。只不过coco数据集相比voc波动更大,如果较难获得论文的结果,可以在后续实验中与复现的结果进行比较,并不会影响所提出方案的先进性。另外,您在voc 5-shot上的实验结果如何?
祝好, 春博
您好!感谢回复,跑了一下VOC 5-shot指标确实波动较小,与论文结果相差不到一个点。 COCO上我们再尝试复现几次看看结果。
再次感谢您耐心的回复!