1.从github上下载blip源代码
2.下载coco训练集,train2014、val2014、test2014(将三个数据集放到一个文件夹,步骤5中需要用到)
http://images.cocodataset.org/zips/train2014.zip
http://images.cocodataset.org/zips/val2014.zip
http://images.cocodataset.org/zips/test2014.zip
3.下载预训练模型model_base_retrieval_coco.pth(或者readme里找一下)
https://storage.googleapis.com/sfr-vision-language-research/BLIP/models/model_base_retrieval_coco.pth
4.修改train_retrieval.py中的–config ./configs/retrieval_coco.yaml \以及–output_dir output/retrieval_coco
5.修改config中retrieval_coco.yaml中的image_root路径(此处为数据集路径)
6.修改config中retrieval_coco.yaml中的pretrained(此处为预训练模型路径)
注意:若路径未修改会报错:ConnectionError,意思是默认从外网下载数据集和预训练模型,所以需要在官网或r下载后按照5.6操作进行
7.修改bert模型路径
def init_tokenizer():
tokenizer = BertTokenizer.from_pretrained(‘bert-base-uncased’)
因为blip的text decoder用的是bert,也是默认从hugging face上下载,所以需要手动修改BertTokenizer.from_pretrained(‘bert-base-uncased’)将括号中修改成自己下载好的路径。
(由于本人用的vscode连接服务器,路径代码没更新,一直是ConnectionError的报错,踩了个大坑,所以如果还有报错ConnectionError的情况,则需要将这段路径直接在服务器上修改)
8.对于单卡的情况,代码需要修改(终端输入)
CUDA_VISIBLE_DEVICES=“0” python -m torch.distributed.launch --nproc_per_node=1 train_retrieval.py --config xxx --output_dir xxx --evaluate
以上如果顺利就可以复现成功,下面是我在复现中遇到的报错
1.torch. cuda.OutofMemorvError:此时需要把batch_size调小
2RuntimeError: Default process group has initialized,please make sure to call init process group:
可以在train_retrieval.py中import os下面加上os.environ[‘CUDA_VISIBLE_DEVICES’]='0’指定用哪个卡(0可以改成1.2.3,看哪个空着用哪个)
3.然后终端输入(因为我的服务器只有一个GPU,没法分布式训练)
python -m torch.distributed.run --nproc_per_node=1 train_retrieval.py
–config ./configs/retrieval_coco.yaml
–output_dir output/retrieval_coco
4.encoder_output = image_feats[topk_idx.cpu()].to(device)