open-clip
论文
Reproducible scaling laws for contrastive language-image learning
模型结构
CLIP 模型有两个主要组件,一个文本编码器和一个图像编码器。对于文本编码器,使用了Transformer
;对于图像编码器采用了ResNet
和Vision Transformer(ViT)
。
算法原理
CLIP通过最大化文本-图像
匹配得分同时训练一个图像编码器和文本编码器。
环境配置
Docker(方法一)
docker pull image.sourcefind.cn:5000/dcu/admin/base/pytorch:2.1.0-ubuntu20.04-dtk24.04.1-py3.10
docker run --shm-size 50g --network=host --name=clip --privileged --device=/dev/kfd --device=/dev/dri --group-add video --cap-add=SYS_PTRACE --security-opt seccomp=unconfined -v 项目地址(绝对路径):/home/ -v /opt/hyhal:/opt/hyhal:ro -it <your IMAGE ID> bash
pip install timm --no-deps
pip install -r requirements.txt
pip install build
python -m build && pip install dist/open_clip_torch-2.26.1-py3-none-any.whl
Dockerfile(方法二)
docker build -t <IMAGE_NAME>:<TAG> .
docker run --shm-size 50g --network=host --name=clip --privileged --device=/dev/kfd --device=/dev/dri --group-add video --cap-add=SYS_PTRACE --security-opt seccomp=unconfined -v 项目地址(绝对路径):/home/ -v /opt/hyhal:/opt/hyhal:ro -it <your IMAGE ID> bash
pip install timm --no-deps
pip install -r requirements.txt
pip install build
python -m build && pip install dist/open_clip_torch-2.26.1-py3-none-any.whl
Anaconda (方法三)
1、关于本项目DCU显卡所需的特殊深度学习库可从光合开发者社区下载安装: https://developer.hpccube.com/tool/
DTK驱动:dtk24.04.1
python:python3.10
torch: 2.1.0
torchvision: 0.16.0
Tips:以上dtk驱动、python、torch等DCU相关工具版本需要严格一一对应
2、其它非特殊库参照requirements.txt安装
pip install timm --no-deps
pip install -r requirements.txt
pip install build
python -m build && pip install dist/open_clip_torch-2.26.1-py3-none-any.whl
数据集
CLIP
数据下载
完整数据集下载参考img2dataset。
这里提供其他数据集,可通过SCNet高速通道下载。
-
训练数据集:cc3m wds
-
验证数据集:imagenet2012-val,数据下载完成后在数据目录下运行
bash valprep.sh
对数据进行分类(将extra_utils下的valprep.sh
移动到数据目录下)。
数据处理
在准备数据集时,可以使用img2dataset
直接下载的数据集(.tar
),也可自行准备数据集,自行准备的数据集可以image_path caption
的形式并以csv
格式保存,本项目提供了相应的脚本,位于extra_utils/convert_to_csv.py
。
filepath | title |
---|---|
<path/to/image> | a white cat |
注意:更多数据处理及使用方式,可参考官方readme。
CoCa
运行extra_utils/coca_data.py
会自动下载并处理数据。也可通过SCNet高速下载通道下载数据集并修改代码中root_path
后运行该脚本处理数据。
训练
CLIP
单卡运行
python -m open_clip_train.main \
--save-frequency 1 \
--zeroshot-frequency 1 \
--report-to tensorboard \
--train-data="/path/to/train_data.csv" \
--val-data="/path/to/validation_data.csv" \
--csv-img-key filepath \
--csv-caption-key title \
--imagenet-val=/path/to/imagenet/root/val/ \
--warmup 10000 \
--batch-size=128 \
--lr=1e-3 \
--wd=0.1 \
--epochs=30 \
--workers=8 \
--model RN50 \
--csv-separator "," \
--precision amp_bf16
注意:imagenet-val
表示使用imagenet作为验证集,若不需要可以删除。
多卡运行
单节点
cd open_clip/src
torchrun --nproc_per_node 4 -m open_clip_train.main \
--train-data '/data/cc12m/cc12m-train-{0000..2175}.tar' \
--train-num-samples 10968539 \
--dataset-type webdataset \
--batch-size 320 \
--precision amp_bf16 \
--workers 4 \
--imagenet-val /data/imagenet/validation/
多节点
cd open_clip/src
torchrun --nproc_per_node=4 \
--rdzv_endpoint=$HOSTE_NODE_ADDR \
-m open_clip_train.main \
--train-data '/data/cc12m/cc12m-train-{0000..2175}.tar' \
--train-num-samples 10968539 \
--dataset-type webdataset \
--batch-size 320 \
--precision amp_bf16 \
--workers 4 \
--imagenet-val /data/imagenet/validation/ \
--precision amp_bf16
注意:更多方式请参考README_official.md,使用fp16
训练会导致nan
,需要替换为bf16
。
CoCa
python -m open_clip_train.main \
--dataset-type "csv" \
--train-data /path/to/your.csv \
--warmup 1000 \
--batch-size 32 \
--lr 1e-5 \
--wd 0.1 \
--epochs 1 \
--workers 3 \
--model "coca_ViT-L-14" \
--coca-contrastive-loss-weight 0 \
--coca-caption-loss-weight 1 \
--log-every-n-steps 100
推理
CLIP
# 不提供参数会使用默认参数并自动下载模型
# export HF_ENDPOINT=https://hf-mirror.com
python custom_tests/simple_test.py --model_name <xxx> --pretrained <可以是本地路径/path/to/open_clip_pytorch_model.bin,也可以是远程仓库名(如:laion2b_s34b_b79k)>
CoCa
# 可以仅输入image_path,其他使用默认参数
# export HF_ENDPOINT=https://hf-mirror.com
python custom_tests/coca_simple_test.py <path/to/image>
注意:可使用以下参数修改使用的模型--model_name <xxx> --pretrained <可以是本地路径/path/to/open_clip_pytorch_model.bin,也可以是远程仓库名(如:mscoco_finetuned_laion2B-s13B-b90k)>
result
python custom_test.py
CLIP:
a diagram | a dog | a cat |
---|---|---|
0.995 | 0.004 | 0.001 |
CoCa:
输入:
输出:a beautiful young woman with a long black ponytail .
精度
K100_AI与L20精度保持一致。
应用场景
算法类别
图像分类
热点应用行业
电商,绘画,交通
预训练权重
下载模型后放入pretrained_models
文件夹中(需要自行创建)。
完整模型列表可通过python -c "import open_clip; print(open_clip.list_pretrained())"
查看,这里提供常用的预训练权重链接。
model | 链接 |
---|---|
CLIP-ViT-B-32-laion2B-s34B-b79K | 原始链接/SCNet高速下载通道 |
CLIP-ViT-B-16-laion2B-s34B-b88K | 原始链接/SCNet高速下载通道 |
CLIP-ViT-H-14-laion2B-s32B-b79K | 原始链接/SCNet高速下载通道 |
CLIP-ViT-bigG-14-laion2B-39B-b160k | 原始链接/SCNet高速下载通道 |
CLIP-convnext_large_d_320.laion2B-s29B-b131K-ft-soup | 原始链接/SCNet高速下载通道 |
bioclip | 原始链接/SCNet高速下载通道 |
mscoco_finetuned_CoCa-ViT-L-14-laion2B-s13B-b90k | 原始链接/SCNet高速下载通道 |