超详细微调Chinese Clip以及解决各种报错

为了重头开始演示,和为了重新再次遇到各种问题,我将从头创建环境重新开始微调。

准备工作

拉取项目

Chinese-Clip项目地址Chinese-Clip

git clone https://github.com/OFA-Sys/Chinese-CLIP.git

在这里插入图片描述

创建目录

根据官方要求构建目录

Chinese-CLIP/
├── run_scripts/
│ ├── muge_finetune_vit-b-16_rbt-base.sh
│ ├── flickr30k_finetune_vit-b-16_rbt-base.sh
│ └── … # 更多finetune或评测脚本…
└── cn_clip/
├── clip/
├── eval/
├── preprocess/
└── training/
${DATAPATH}
├── pretrained_weights/
├── experiments/
├── deploy/ # 用于存放ONNX & TensorRT部署模型
└── datasets/
├── MUGE/
├── Flickr30k-CN/
└── …/ # 更多自定义数据集…

Chinese-CLIP目录我们已经拉取了,所以需要自己创建${DATAPATH}目录,起一个名字就叫作clip-data,因为里面全是存放数据集和模型的地方,建立好如下:
第一级目录
clip-data目录
在这里插入图片描述

创建环境

conda create -n clipcsdn python==3.10

因为我的环境里面有clip了,这里创建clipcsdn来区别一下。

激活环境

conda activate clipcsdn

将目录切到Chinese-Clip目录,安装依赖

#切换目录 
cd /home/fsy23/CSDN/Chinese-CLIP/

#使用清华源安装
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple

数据集准备

由于官方要求的数据集格式比较特殊,我这里直接使用一份格式弄好的数据集,各位如果想用自己的数据集,官方也给出了数据集的修改代码。点这
我是用的数据集下载地址在这
这里面是标准的数据集格式,文件名是这个数据集的名字,将它放在clip-data/datasets目录下,并解压,弄完就是如下样式:
在这里插入图片描述
记得解压

#解压命令
unzip MUGE.zip

这个数据集是图文搜索的,是一些电商产品的图片和对应的描述。这里我们只演示文搜图的微调流程。
接下来我们开始微调

下载模型

下载模型可以根据官方的指定地址下载,这次我们微调的是基础版本的也就是clip-cn-vit-b-16.pt,下载地址
将下载好的模型放到clip-data/pretrained_weights目录之下,如下图:
在这里插入图片描述

微调

修改脚本

我们使用run_scripts/muge_finetune_vit-b-16_rbt-base.sh这个基础版的脚本。
这里面我们需要修改几个参数,各个参数的意义参考官方解释在这
在这里插入图片描述
下面还有需要改的地方
在这里插入图片描述
还有训练的超参数
在这里插入图片描述
改完之后我们开始微调,运行命令:

 nohup bash run_scripts/muge_finetune_vit-b-16_rbt-base.sh /home/fsy23/CSDN/clip-data/ > train.log 2>&1 &

将这个进程挂到后台,这样可以防止断网或者关闭页面导致训练掉线了,我们脚本后面紧跟我们的clip-data路径,不知道这个命令其他部分具体含义的 可以看我这篇博客中的讲解:点这 这里有详细的讲解。
开始微调
在这里插入图片描述

训练日志我们可以通过两个地方看到,一个是我们自己在命令行指定的 train.log,一个是官方的指定目录。我们打开log看一眼:
在这里插入图片描述
发现报错了,这里是说我们有个参数定义的有歧义,这个参数是logs,会和logs-specs、logs_specs参数有歧义。这里我们修改一下这个bug,虽然我不知道官方是怎么跑通的,(应该是我的torch版本太高了,我用的2.4.0,官方的很低,所以没有这个错误)但是这个参数必须换一下名字。
还是打开我们的脚本,在下面有个logs参数,我们改一下名字:
在这里插入图片描述
我们改一下这个,在cn_clip/training/params.py
在这里插入图片描述
除了在这改,还需要在cn_clip/training/main.py脚本里面修改一下,因为这个参数是传到这个main文件里面使用的,依照目录打开这个py文件,按照图中修改就行。
在这里插入图片描述
接下来我们再重新运行一下脚本命令:

 nohup bash run_scripts/muge_finetune_vit-b-16_rbt-base.sh /home/fsy23/CSDN/clip-data/ > train.log 2>&1 &

看日志我们已经开始训练了:
在这里插入图片描述

提取图文特征

我们微调好候得模型保存在**/clip-data/pretrained_weights/**,紧接着我们可以用它来进行,图文的特征提取,以便后续的预测和评估。
官方也给出了脚本,但是需要自己传路径,我嫌麻烦我就写到里面了,如下:

eexport CUDA_VISIBLE_DEVICES=0
export PYTHONPATH="${PYTHONPATH}:$(pwd)/cn_clip"

DATAPATH="/home/fsy23/CSDN/clip-data/"
dataset_name="MUGE"

split=test # 指定计算valid或test集特征

# 把刚训练好的模型路径填写在这
resume="${DATAPATH}/experiments/muge_finetune_vit-b-16_roberta-base_bs_22gpu/checkpoints/epoch_latest.pt"

python -u cn_clip/eval/extract_features.py \
    --extract-image-feats \
    --extract-text-feats \
    --image-data="${DATAPATH}/datasets/${dataset_name}/lmdb/${split}/imgs" \
    --text-data="${DATAPATH}/datasets/${dataset_name}/${split}_texts.jsonl" \
    --img-batch-size=32 \
    --text-batch-size=32 \
    --context-length=52 \
    --resume="${resume}" \
    --vision-model=ViT-B-16 \
    --text-model=RoBERTa-wwm-ext-base-chinese

KNN检索

新建脚本,内容如下,运行会得到最终预测结果

split=test # 指定计算valid或test集特征
DATAPATH="/home/fsy23/CSDN/clip-data/"
dataset_name="MUGE"

python -u cn_clip/eval/make_topk_predictions.py \
    --image-feats="${DATAPATH}/datasets/${dataset_name}/${split}_imgs.img_feat.jsonl" \
    --text-feats="${DATAPATH}/datasets/${dataset_name}/${split}_texts.txt_feat.jsonl" \
    --top-k=10 \
    --eval-batch-size=32768 \
    --output="${DATAPATH}/datasets/${dataset_name}/${split}_predictions.jsonl"

到这我们就得到了,一个文本和其对应检索回来的10张排序好的图片,也就是top-k10.文件存放在clip-data/datasets/MUGE/test_predictions.jsonl

评分

官方还提供了评分脚本,但是我运行后是0分,因为我把最后结果修改格式后取提交其他比赛了,也就没研究为啥官方的评分脚本为啥不能用,有兴趣的同学可以研究之后在评论区打出来问题所在,至此我们微调结束,感谢观看!

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

范sr

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值