unilm 在微调Beit3进行COCO标注时可能会出现错误,

sqserrrh  于 2个月前  发布在  其他
关注(0)|答案(2)|浏览(32)

感谢您为beit3提供如此简洁干净的代码。在这里,datasets.py可能存在一个拼写错误/错误:
unilm/beit3/datasets.py
第847行
| | create_dataset_by_split(args, split="val", is_train=True) |
我认为is_train标志应该为验证集设置为false,这可能会影响数据加载器的一些行为,例如这里的drop_last标志:
unilm/beit3/datasets.py
第733行
| | drop_last=is_train, |
在COCO captioning任务中,由于您正在使用COCOEval在训练过程中评估生成的标题,您需要确保生成的标题的image_id与地面真实标签的image_id完全相同。如果在验证数据加载器中设置了drop_last=True,那么在丢弃一些验证示例时可能会出现错误(错误的eval_batch_size)...
我重现此错误的完整命令是:

python -m torch.distributed.launch --nproc_per_node=8 run_beit3_finetuning.py \
                         --model beit3_base_patch16_480 --input_size 480 \
                         --task coco_captioning --batch_size 256 --eval_batch_size 16 --num_max_bpe_tokens 32 \
                         --sentencepiece_model my/path/to/beit3.spm \
                         --finetune my/path/to/beit3_base_indomain_patch16_480_vqa.pth \
                         --finetune mu/path/to/beit3_base_indomain_patch16_480_coco_captioning.pth \
                         --data_path my/path/to/mscoco \
                         --captioning_mask_prob 0.7 \
                         --drop_worst_after 12000 \
                         --dist_eval
nwlqm0z1

nwlqm0z12#

感谢您的解决方案!我在COCO captioning任务的生成过程中也遇到了完全相同的问题。根据您的方法,将val split中的is_train=True更改为is_train=False以解决此错误。

相关问题