LinWeizheDragon / Retrieval-Augmented-Visual-Question-Answering

This is the official repository for Retrieval Augmented Visual Question Answering
GNU General Public License v3.0
184 stars 15 forks source link

关于更新DPR检索的问题 #31

Closed zhaoyongchao2019 closed 10 months ago

zhaoyongchao2019 commented 10 months ago

你好,我现在使用其他的caption和object detection模型得到了更好的img-to-text的转化结果,我用新的文件替代了原来的文件,然后把cache的文件删除了,重新开始训练模型,之前我以为就这样DPR会因为更好的caption和label检索得也会更好,但是我最近认真看了一下代码,在LoadPretrainedDPROutputForGoogleSearchPassage(我觉得应该就是在这个函数里把问题相关的文章读进来)里读取的文件是../Experiments/Knowledge_Retriever_DPR_dim_768_inbatch_negative_caption_FullCorpus_NewRun/test/test_evaluation/train_predictions.json,这样就代表这个文件只要不改变,其实我的DPR检索的文章会跟我之前没改caption和object detection模型的是一样的。不知道我这个理解是否正确?然后应该是要重新跑DPR的test让它重新生成文件才行,但是我现在又遇到一个问题——测试的时候要加载一个ckpt文件但是我在你提供的预训练DPR文件中似乎找不到符合的文件。 请解答一下我的疑惑,这对我来说很重要,谢谢了

LinWeizheDragon commented 10 months ago

你更改了caption和object detection的模型 就代表你需要重新训练一个DPR 因此你应该跑DPR train 然后完成训练以后跑DPR test获得你上面提到的predictions.json 这才是你用新的caption 和 object detection做Retrieval得到的top K documents 如果你不打算重新训练DPR 那就是你要用我训练好的DPR模型 重新跑DPR test来获得Retrieval 但是这样也会有一点mismatch 因为模型训练时的caption/object和你test时候的不是来自同一个模型,可能会有轻微的表现损失

如果你想用我训练好的模型 我可以找一下链接给你

LinWeizheDragon commented 10 months ago

训练好的DPR模型已经提供在repo了 Pre-trained DPR checkpoint:

DPR pretrained on OK-VQA and Google Search dataset (batch size 30, in-batch negative sampling, 1 GPU, grad accumulation 4) Google Drive

zhaoyongchao2019 commented 10 months ago

这个文件我下载了,但是我在跑DPR的test时出现问题了,一直说找不到checkpoint文件,然后我定位到相关的代码,应该是get_checkpoint_model_path函数,但是里面都是要找一个XXX.ckpt的文件,但是这个下载的文件里好像没有这个后缀的文件,还是说哪里出问题?希望你能解答一下。谢谢。 image image

LinWeizheDragon commented 10 months ago

没有重新训练,使用我训练的模型就不需要test.load_epoch=06 可以直接修改config中的ModelVersion,在config文件中我已经展示了怎么加载: ··· "QueryEncoderModelClass": "DPRQuestionEncoder", "QueryEncoderConfigClass": "DPRConfig", "QueryEncoderModelVersion": "facebook/dpr-question_encoder-single-nq-base", // "QueryEncoderModelVersion": "/home/wl356/rds/rds-wjb31-nmt2020/wl356/Experiments/Knowledge_Retriever_DPR_dim_768_inbatch_negative_caption_FullCorpus_NewRun/train/saved_model/epoch6/query_encoder", "ItemEncoderModelClass": "DPRContextEncoder", "ItemEncoderConfigClass": "DPRConfig", "ItemEncoderModelVersion": "facebook/dpr-ctx_encoder-single-nq-base", // "ItemEncoderModelVersion": "/home/wl356/rds/rds-wjb31-nmt2020/wl356/Experiments/Knowledge_Retriever_DPR_dim_768_inbatch_negative_caption_FullCorpus_NewRun/train/saved_model/epoch6/item_encoder", "TokenizerClass": "DPRQuestionEncoderTokenizer", "TokenizerModelVersion": "facebook/dpr-question_encoder-single-nq-base", "DecoderTokenizerClass": "DPRContextEncoderTokenizer", "DecoderTokenizerModelVersion": "facebook/dpr-ctx_encoder-single-nq-base", ··· 也可以直接通过Commandline修改,例如model_config.QueryEncoderModelVersion=/path/to/query_encoder

zhaoyongchao2019 commented 10 months ago

我明白你的意思,但是具体代码里面关于加载ckpt的代码该怎么改呢?因为你的代码写死了要进行这一步,我不知道如何修改,不然就会报错运行不了

LinWeizheDragon commented 10 months ago

把阻止你运行的代码comment掉 比如 https://github.com/LinWeizheDragon/Retrieval-Augmented-Visual-Question-Answering/blob/8a235729b8e43ce794ba87c1b05457ffbeddf99d/src/main.py#L142 然后lightning的fit函数ckpt_path传入None https://github.com/LinWeizheDragon/Retrieval-Augmented-Visual-Question-Answering/blob/8a235729b8e43ce794ba87c1b05457ffbeddf99d/src/main.py#L174

zhaoyongchao2019 commented 10 months ago

行了行了,非常感谢你的传道授业解惑也