YifanXu74/MQ-Det

关于LVIS finetuning-free评估结果的复现

Opened this issue · 9 comments

作者您好,我这几天都在复现论文中的LVIS finetuning-free评估结果,但自己按照步骤训练出来的模型性能和原始模型的差不多,怀疑是步骤或者设置上出错了。

在配置好环境后,我首先运行

python tools/extract_vision_query.py --config_file configs/pretrain/mq-glip-t.yaml --dataset objects365 --add_name tiny
得到MODEL/object365_query_5000_sel_tiny.pth

接着进行预训练

python -m torch.distributed.launch --nproc_per_node=1 tools/train_net.py --config-file configs/pretrain/mq-glip-t.yaml --use-tensorboard OUTPUT_DIR 'OUTPUT/MQ-GLIP-TINY/'
得到 OUTPUT/MQ-GLIP-TINY/model_final.pth

然后运行

python tools/extract_vision_query.py --config_file configs/pretrain/mq-glip-t.yaml --dataset lvis --num_vision_queries 5 --add_name tiny
得到MODEL/lvis_query_5_pool7_sel_tiny.pth

最后在LVIS Minival上进行评估

python -m torch.distributed.launch --nproc_per_node=1
tools/test_grounding_net.py
--config-file configs/pretrain/mq-glip-t.yaml
--additional_model_config configs/vision_query_5shot/lvis_minival.yaml
VISION_QUERY.QUERY_BANK_PATH MODEL/lvis_query_5_pool7_sel_tiny.pth
MODEL.WEIGHT OUTPUT/MQ-GLIP-TINY/model_final.pth
TEST.IMS_PER_BATCH 1
得到的AP只有0.251,跟GLIP-T的结果差不多

顺带一提,我用的预训练数据集是Object365v1,并没有按照步骤下载Object365v2数据集,用的GPU也是V100单卡,IMS_PER_BATCH都已设置为1,但是预训练时仅花费了五天多的时间,与原文的十天有些出入。请问整个流程有什么问题吗?非常感谢您的回复!

嗨!

我看了下流程应该没问题,我的建议是:

  1. 可以再检查下整个流程:加载官方预训练权重看看能否复现上面预训练后的两步(lvis vision query 提取和效果评估),如果可以复现,那evaluation阶段应该没有问题,问题就出在预训练上;
  2. batch size可能也有影响,我之前实验中也发现单卡效果和多卡有出入,文章中的模型是用8张V100训练的,单卡训练相当于batch size缩小了8倍,学习可能会更不稳定,需要对学习率做相应处理,这点我还没有探索过;
  3. 训练时间的话,可能有两方面因素:1)单卡训练没有通信时间,本身比多卡并行效率更高;2)Object365v2比v1数据量更大一些

嗨!

我看了下流程应该没问题,我的建议是:

  1. 可以再检查下整个流程:加载官方预训练权重看看能否复现上面预训练后的两步(lvis vision query 提取和效果评估),如果可以复现,那evaluation阶段应该没有问题,问题就出在预训练上;
  2. batch size可能也有影响,我之前实验中也发现单卡效果和多卡有出入,文章中的模型是用8张V100训练的,单卡训练相当于batch size缩小了8倍,学习可能会更不稳定,需要对学习率做相应处理,这点我还没有探索过;
  3. 训练时间的话,可能有两方面因素:1)单卡训练没有通信时间,本身比多卡并行效率更高;2)Object365v2比v1数据量更大一些

感谢回复!

1.我有试过使用您开源的官方权重进行复现,但没有重新提取vision query,只是用原来的lvis_query_5_pool7_sel_tiny和开源权重进行评估,是可以复现出论文结果的。(AP:30.4%,原文:30.1%)

2.论文中的30.1%结果是使用v2版本的数据集进行训练的吗,还是用的v1版本?

3.batch size是指IMS_PER_BATCH这个参数吗?我在整个复现过程中只调整了IMS_PER_BATCH为1,以及DATALOADER.NUM_WORKERS为8(我使用的是12核CPU)

4.我还复现了MQ-Grounding-DINO-T的结果,这次没有改work num,只修改了IMS_PER_BATCH,今天评估结果刚跑出来,还是只有25.3%的AP(原文为30.2%,原文的GroundingDINO-T为25.7%),结果与原模型非常接近,我不知道是提取视觉的问题还是单卡训练的问题,所以非常苦恼。

请原谅,我的问题有点小白了,因为我刚接触这个领域,对各种参数不是很熟悉。

没事哈,多交流!

  1. 论文用的是v2版本训练的;
  2. IMS_PER_BATCH对应的就是全局batch size,比如设置成16,用8卡的话,分到每张卡上的batch size就是2;
  3. 我更倾向于是单卡训练导致batch size过小的问题,建议增大batch size试一下,如果没有条件的话,可以在官方预训练权重的基础上训练,能够节省很多训练代价;
  4. 另一种可能的方案是适当减小学习率,保持 “batch size / lr ” 和原始设置的比例不变,不过这个我没有试过

没事哈,多交流!

  1. 论文用的是v2版本训练的;
  2. IMS_PER_BATCH对应的就是全局batch size,比如设置成16,用8卡的话,分到每张卡上的batch size就是2;
  3. 我更倾向于是单卡训练导致batch size过小的问题,建议增大batch size试一下,如果没有条件的话,可以在官方预训练权重的基础上训练,能够节省很多训练代价;
  4. 另一种可能的方案是适当减小学习率,保持 “batch size / lr ” 和原始设置的比例不变,不过这个我没有试过

明白了,再次感谢您的回复

嗨!
我看了下流程应该没问题,我的建议是:

  1. 可以再检查下整个流程:加载官方预训练权重看看能否复现上面预训练后的两步(lvis vision query 提取和效果评估),如果可以复现,那evaluation阶段应该没有问题,问题就出在预训练上;
  2. batch size可能也有影响,我之前实验中也发现单卡效果和多卡有出入,文章中的模型是用8张V100训练的,单卡训练相当于batch size缩小了8倍,学习可能会更不稳定,需要对学习率做相应处理,这点我还没有探索过;
  3. 训练时间的话,可能有两方面因素:1)单卡训练没有通信时间,本身比多卡并行效率更高;2)Object365v2比v1数据量更大一些

感谢回复!

1.我有试过使用您开源的官方权重进行复现,但没有重新提取vision query,只是用原来的lvis_query_5_pool7_sel_tiny和开源权重进行评估,是可以复现出论文结果的。(AP:30.4%,原文:30.1%)

2.论文中的30.1%结果是使用v2版本的数据集进行训练的吗,还是用的v1版本?

3.batch size是指IMS_PER_BATCH这个参数吗?我在整个复现过程中只调整了IMS_PER_BATCH为1,以及DATALOADER.NUM_WORKERS为8(我使用的是12核CPU)

4.我还复现了MQ-Grounding-DINO-T的结果,这次没有改work num,只修改了IMS_PER_BATCH,今天评估结果刚跑出来,还是只有25.3%的AP(原文为30.2%,原文的GroundingDINO-T为25.7%),结果与原模型非常接近,我不知道是提取视觉的问题还是单卡训练的问题,所以非常苦恼。

请原谅,我的问题有点小白了,因为我刚接触这个领域,对各种参数不是很熟悉。

我也尝试复现GroundDino-t的精度,我使用Object365进行一个epoch的微调训练,得到的微调模型,在coco2017val验证集上进行验证,模型精度只有46.2%(mAP),而官方原生的GroundingDino的精度为48.5%(mAP),这个情况与您的情况非常类似,后面您解决了这个问题不?解决了话,可以告知一下解决方案不,万分感谢!

嗨!
我看了下流程应该没问题,我的建议是:

  1. 可以再检查下整个流程:加载官方预训练权重看看能否复现上面预训练后的两步(lvis vision query 提取和效果评估),如果可以复现,那evaluation阶段应该没有问题,问题就出在预训练上;
  2. batch size可能也有影响,我之前实验中也发现单卡效果和多卡有出入,文章中的模型是用8张V100训练的,单卡训练相当于batch size缩小了8倍,学习可能会更不稳定,需要对学习率做相应处理,这点我还没有探索过;
  3. 训练时间的话,可能有两方面因素:1)单卡训练没有通信时间,本身比多卡并行效率更高;2)Object365v2比v1数据量更大一些

感谢回复!
1.我有试过使用您开源的官方权重进行复现,但没有重新提取vision query,只是用原来的lvis_query_5_pool7_sel_tiny和开源权重进行评估,是可以复现出论文结果的。(AP:30.4%,原文:30.1%)
2.论文中的30.1%结果是使用v2版本的数据集进行训练的吗,还是用的v1版本?
3.batch size是指IMS_PER_BATCH这个参数吗?我在整个复现过程中只调整了IMS_PER_BATCH为1,以及DATALOADER.NUM_WORKERS为8(我使用的是12核CPU)
4.我还复现了MQ-Grounding-DINO-T的结果,这次没有改work num,只修改了IMS_PER_BATCH,今天评估结果刚跑出来,还是只有25.3%的AP(原文为30.2%,原文的GroundingDINO-T为25.7%),结果与原模型非常接近,我不知道是提取视觉的问题还是单卡训练的问题,所以非常苦恼。
请原谅,我的问题有点小白了,因为我刚接触这个领域,对各种参数不是很熟悉。

我也尝试复现GroundDino-t的精度,我使用Object365进行一个epoch的微调训练,得到的微调模型,在coco2017val验证集上进行验证,模型精度只有46.2%(mAP),而官方原生的GroundingDino的精度为48.5%(mAP),这个情况与您的情况非常类似,后面您解决了这个问题不?解决了话,可以告知一下解决方案不,万分感谢!

我第一次复现的时候由于内存不足,IMS_PER_BATCH是设置为1,且进行的是单卡训练。后来我将IMS_PER_BATCH设置为2,仍然是单卡训练,MQ-GLIP-T在LVIS上的免微调精度从25.1提升到了25.9。

我猜测可能有两个原因:
1.调制预训练的数据集。我使用的是Objects365的v1版本,只有60w张图片,而作者使用的是v2版本,有200w张图片;
2.显卡数量不够。我一直使用单卡进行训练,而作者是使用8台V100进行训练。
个人比较偏向第一个原因,从GLIP文章中也能看出,预训练过程使用的数据越多,模型精度也就更高。
然而,由于内存和存储空间的限制,我并没有继续进行尝试。

嗨!
我看了下流程应该没问题,我的建议是:

  1. 可以再检查下整个流程:加载官方预训练权重看看能否复现上面预训练后的两步(lvis vision query 提取和效果评估),如果可以复现,那evaluation阶段应该没有问题,问题就出在预训练上;
  2. batch size可能也有影响,我之前实验中也发现单卡效果和多卡有出入,文章中的模型是用8张V100训练的,单卡训练相当于batch size缩小了8倍,学习可能会更不稳定,需要对学习率做相应处理,这点我还没有探索过;
  3. 训练时间的话,可能有两方面因素:1)单卡训练没有通信时间,本身比多卡并行效率更高;2)Object365v2比v1数据量更大一些

感谢回复!
1.我有试过使用您开源的官方权重进行复现,但没有重新提取vision query,只是用原来的lvis_query_5_pool7_sel_tiny和开源权重进行评估,是可以复现出论文结果的。(AP:30.4%,原文:30.1%)
2.论文中的30.1%结果是使用v2版本的数据集进行训练的吗,还是用的v1版本?
3.batch size是指IMS_PER_BATCH这个参数吗?我在整个复现过程中只调整了IMS_PER_BATCH为1,以及DATALOADER.NUM_WORKERS为8(我使用的是12核CPU)
4.我还复现了MQ-Grounding-DINO-T的结果,这次没有改work num,只修改了IMS_PER_BATCH,今天评估结果刚跑出来,还是只有25.3%的AP(原文为30.2%,原文的GroundingDINO-T为25.7%),结果与原模型非常接近,我不知道是提取视觉的问题还是单卡训练的问题,所以非常苦恼。
请原谅,我的问题有点小白了,因为我刚接触这个领域,对各种参数不是很熟悉。

我也尝试复现GroundDino-t的精度,我使用Object365进行一个epoch的微调训练,得到的微调模型,在coco2017val验证集上进行验证,模型精度只有46.2%(mAP),而官方原生的GroundingDino的精度为48.5%(mAP),这个情况与您的情况非常类似,后面您解决了这个问题不?解决了话,可以告知一下解决方案不,万分感谢!

我第一次复现的时候由于内存不足,IMS_PER_BATCH是设置为1,且进行的是单卡训练。后来我将IMS_PER_BATCH设置为2,仍然是单卡训练,MQ-GLIP-T在LVIS上的免微调精度从25.1提升到了25.9。

我猜测可能有两个原因: 1.调制预训练的数据集。我使用的是Objects365的v1版本,只有60w张图片,而作者使用的是v2版本,有200w张图片; 2.显卡数量不够。我一直使用单卡进行训练,而作者是使用8台V100进行训练。 个人比较偏向第一个原因,从GLIP文章中也能看出,预训练过程使用的数据越多,模型精度也就更高。 然而,由于内存和存储空间的限制,我并没有继续进行尝试。

尴尬的是,我用的就是8卡v100,并且是object365的V2版本的标签。这种情况下,模型的精度46.2不如原始GroundingDino的精度48.5。目前我能想到的,可能是因为我一开始的那个视觉提取查询文件,我每个类别只生成了5个查询条例,并没有按照论文中生成5000条查询条例,如果训练时每次提取时是随机提取5个视觉提示作为当前iter的视觉提示的话,那么就有问题了,我目前正在验证

嗨!
我看了下流程应该没问题,我的建议是:

  1. 可以再检查下整个流程:加载官方预训练权重看看能否复现上面预训练后的两步(lvis vision query 提取和效果评估),如果可以复现,那evaluation阶段应该没有问题,问题就出在预训练上;
  2. batch size可能也有影响,我之前实验中也发现单卡效果和多卡有出入,文章中的模型是用8张V100训练的,单卡训练相当于batch size缩小了8倍,学习可能会更不稳定,需要对学习率做相应处理,这点我还没有探索过;
  3. 训练时间的话,可能有两方面因素:1)单卡训练没有通信时间,本身比多卡并行效率更高;2)Object365v2比v1数据量更大一些

感谢回复!
1.我有试过使用您开源的官方权重进行复现,但没有重新提取vision query,只是用原来的lvis_query_5_pool7_sel_tiny和开源权重进行评估,是可以复现出论文结果的。(AP:30.4%,原文:30.1%)
2.论文中的30.1%结果是使用v2版本的数据集进行训练的吗,还是用的v1版本?
3.batch size是指IMS_PER_BATCH这个参数吗?我在整个复现过程中只调整了IMS_PER_BATCH为1,以及DATALOADER.NUM_WORKERS为8(我使用的是12核CPU)
4.我还复现了MQ-Grounding-DINO-T的结果,这次没有改work num,只修改了IMS_PER_BATCH,今天评估结果刚跑出来,还是只有25.3%的AP(原文为30.2%,原文的GroundingDINO-T为25.7%),结果与原模型非常接近,我不知道是提取视觉的问题还是单卡训练的问题,所以非常苦恼。
请原谅,我的问题有点小白了,因为我刚接触这个领域,对各种参数不是很熟悉。

我也尝试复现GroundDino-t的精度,我使用Object365进行一个epoch的微调训练,得到的微调模型,在coco2017val验证集上进行验证,模型精度只有46.2%(mAP),而官方原生的GroundingDino的精度为48.5%(mAP),这个情况与您的情况非常类似,后面您解决了这个问题不?解决了话,可以告知一下解决方案不,万分感谢!

我第一次复现的时候由于内存不足,IMS_PER_BATCH是设置为1,且进行的是单卡训练。后来我将IMS_PER_BATCH设置为2,仍然是单卡训练,MQ-GLIP-T在LVIS上的免微调精度从25.1提升到了25.9。
我猜测可能有两个原因: 1.调制预训练的数据集。我使用的是Objects365的v1版本,只有60w张图片,而作者使用的是v2版本,有200w张图片; 2.显卡数量不够。我一直使用单卡进行训练,而作者是使用8台V100进行训练。 个人比较偏向第一个原因,从GLIP文章中也能看出,预训练过程使用的数据越多,模型精度也就更高。 然而,由于内存和存储空间的限制,我并没有继续进行尝试。

尴尬的是,我用的就是8卡v100,并且是object365的V2版本的标签。这种情况下,模型的精度46.2不如原始GroundingDino的精度48.5。目前我能想到的,可能是因为我一开始的那个视觉提取查询文件,我每个类别只生成了5个查询条例,并没有按照论文中生成5000条查询条例,如果训练时每次提取时是随机提取5个视觉提示作为当前iter的视觉提示的话,那么就有问题了,我目前正在验证

你好,请问你复现出DINO的结果了吗

请问下你在LVIS minival上进行测试要多久呢?我3卡3090要4个小时,是不是太久了