感谢您为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
2条答案
按热度按时间mtb9vblg1#
谢谢!
nwlqm0z12#
感谢您的解决方案!我在COCO captioning任务的生成过程中也遇到了完全相同的问题。根据您的方法,将val split中的
is_train=True
更改为is_train=False
以解决此错误。