{"id":13545352,"url":"https://github.com/OFA-Sys/Chinese-CLIP","last_synced_at":"2025-04-02T15:31:04.173Z","repository":{"id":62925347,"uuid":"511745849","full_name":"OFA-Sys/Chinese-CLIP","owner":"OFA-Sys","description":"Chinese version of CLIP which achieves Chinese cross-modal retrieval and representation generation.","archived":false,"fork":false,"pushed_at":"2024-08-06T02:44:27.000Z","size":2618,"stargazers_count":5035,"open_issues_count":174,"forks_count":492,"subscribers_count":36,"default_branch":"master","last_synced_at":"2025-04-02T00:16:50.890Z","etag":null,"topics":["chinese","clip","computer-vision","contrastive-loss","coreml-models","deep-learning","image-text-retrieval","multi-modal","multi-modal-learning","nlp","pretrained-models","pytorch","transformers","vision-and-language-pre-training","vision-language"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/OFA-Sys.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"MIT-LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-07-08T03:12:21.000Z","updated_at":"2025-04-01T16:15:22.000Z","dependencies_parsed_at":"2023-02-10T15:05:13.012Z","dependency_job_id":"a8cb5d92-e0aa-48c2-8e9c-38a98bd98698","html_url":"https://github.com/OFA-Sys/Chinese-CLIP","commit_stats":{"total_commits":353,"total_committers":9,"mean_commits":39.22222222222222,"dds":0.3739376770538244,"last_synced_commit":"8a323f2702ebeca5be864e4cb66a72d9a770f25c"},"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OFA-Sys%2FChinese-CLIP","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OFA-Sys%2FChinese-CLIP/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OFA-Sys%2FChinese-CLIP/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OFA-Sys%2FChinese-CLIP/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/OFA-Sys","download_url":"https://codeload.github.com/OFA-Sys/Chinese-CLIP/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246841635,"owners_count":20842625,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["chinese","clip","computer-vision","contrastive-loss","coreml-models","deep-learning","image-text-retrieval","multi-modal","multi-modal-learning","nlp","pretrained-models","pytorch","transformers","vision-and-language-pre-training","vision-language"],"created_at":"2024-08-01T11:01:01.346Z","updated_at":"2025-04-02T15:31:04.139Z","avatar_url":"https://github.com/OFA-Sys.png","language":"Python","readme":"[**中文说明**](README.md) | [**English**](README_En.md)\r\n\r\n\u003cp align=\"center\"\u003e\r\n    \u003cbr\u003e\r\n    \u003cimg src=\"assets/Chinese_CLIP_logo_tp_path.svg\" width=\"400\" /\u003e\r\n    \u003cbr\u003e\r\n\u003cp\u003e\r\n\u003cbr\u003e\r\n\r\n\u003cp align=\"center\"\u003e\r\n        \u003ca href=\"https://www.modelscope.cn/models?name=clip\u0026tasks=multi-modal-embedding\"\u003eModelScope\u003c/a\u003e\u0026nbsp ｜ \u0026nbsp\u003ca href=\"https://www.modelscope.cn/studios/damo/chinese_clip_applications/summary\"\u003eDemo\u003c/a\u003e\u0026nbsp ｜ \u0026nbsp\u003ca href=\"https://arxiv.org/abs/2211.01335\"\u003ePaper\u003c/a\u003e\u0026nbsp ｜ \u0026nbspBlog\r\n\u003c/p\u003e\r\n\u003cbr\u003e\u003cbr\u003e\r\n\r\n本项目为CLIP模型的**中文**版本，使用大规模中文数据进行训练（~2亿图文对），旨在帮助用户快速实现中文领域的[图文特征\u0026相似度计算](#API快速上手)、[跨模态检索](#跨模态检索)、[零样本图片分类](#零样本图像分类)等任务。本项目代码基于\u003cb\u003e[open_clip project](https://github.com/mlfoundations/open_clip)\u003c/b\u003e建设，并针对中文领域数据以及在中文数据上实现更好的效果做了优化。本项目提供了API、训练代码和测试代码，下文中将详细介绍细节。\r\n\u003cbr\u003e\u003cbr\u003e\r\n\r\n# 新闻\r\n* 2023.11.30 Chinese-CLIP添加了转换Pytorch模型为coreml格式的[转换脚本](https://github.com/OFA-Sys/Chinese-CLIP/blob/master/cn_clip/deploy/pytorch_to_coreml.py)，用于部署。（感谢[@manymuch](https://github.com/manymuch)贡献代码❤️）\r\n* 2023.9.8 Chinese-CLIP支持了基于[ModelScope](https://github.com/modelscope/modelscope)库的[知识蒸馏微调功能](distillation.md)。（感谢阿里云PAI团队[@wuziheng](https://github.com/wuziheng)和[@Jaskr616](https://github.com/Jaskr616)同学[贡献代码](https://github.com/OFA-Sys/Chinese-CLIP/pull/195)❤️）\r\n* 2023.5.9 Chinese-CLIP适配Pytorch2.0。\r\n* 2023.3.20 新增对比学习的[梯度累积](#gradient_accumulation)支持，可模拟更大batch size的训练效果\r\n* 2023.2.16 新增[FlashAttention](https://github.com/HazyResearch/flash-attention)支持，提升训练速度，降低显存占用，详见[flash_attention.md](flash_attention.md)\r\n* 2023.1.15 新增部署[ONNX](https://onnx.ai/)和[TensorRT](https://developer.nvidia.com/tensorrt)模型支持（并提供预训练TensorRT模型），提升特征推理速度，满足部署需求，详见[deployment.md](deployment.md)\r\n* 2022.12.12 新增实现[FLIP](https://arxiv.org/abs/2212.00794)训练策略，在finetune训练时可[激活使用](#FLIP)（感谢[@zwkkk](https://github.com/zwkkk)同学[贡献代码](https://github.com/OFA-Sys/Chinese-CLIP/pull/26)❤️）\r\n* 2022.12.3 公开[ELEVATER](https://eval.ai/web/challenges/challenge-page/1832)图像分类数据集的中文版本，详见[数据文档](https://github.com/OFA-Sys/Chinese-CLIP/blob/master/zeroshot_dataset.md)\r\n* 2022.12.1 Chinese-CLIP模型代码\u0026特征提取API，同步合入Huggingface transformers🤗代码库\r\n* 2022.11.22 新增[零样本图像分类](#零样本图像分类)代码，可支持[ELEVATER benchmark](https://eval.ai/web/challenges/challenge-page/1832)零样本分类评测任务\r\n* 2022.11.3 新增RN50，ViT-H-14模型，公开[技术报告](https://arxiv.org/pdf/2211.01335.pdf)\r\n* 2022.9.22 新增ViT-L-14，ViT-L-14-336模型\r\n* 2022.7.13 新增[图文特征提取快速API](#API快速上手)，几行代码快速调用中文CLIP模型，计算图文特征\u0026相似度\r\n* 2022.7.8 Chinese-CLIP项目正式开源，开源[图文检索](#跨模态检索)代码\r\n\u003cbr\u003e\u003cbr\u003e\r\n\r\n# 模型及实验\r\n\u003cspan id=\"model_card\"\u003e\u003c/span\u003e\r\n## 模型规模 \u0026 下载链接\r\nChinese-CLIP目前开源5个不同规模，其模型信息和下载方式见下表：\r\n\r\n\u003ctable border=\"1\" width=\"100%\"\u003e\r\n    \u003ctr align=\"center\"\u003e\r\n        \u003cth\u003e模型规模\u003c/th\u003e\u003cth\u003e下载链接\u003c/th\u003e\u003cth\u003e参数量\u003c/th\u003e\u003cth\u003e视觉侧骨架\u003c/th\u003e\u003cth\u003e视觉侧参数量\u003c/th\u003e\u003cth\u003e文本侧骨架\u003c/th\u003e\u003cth\u003e文本侧参数量\u003c/th\u003e\u003cth\u003e分辨率\u003c/th\u003e\r\n    \u003c/tr\u003e\r\n    \u003ctr align=\"center\"\u003e\r\n        \u003ctd\u003eCN-CLIP\u003csub\u003eRN50\u003c/sub\u003e\u003c/td\u003e\u003ctd\u003e\u003ca href=\"https://clip-cn-beijing.oss-cn-beijing.aliyuncs.com/checkpoints/clip_cn_rn50.pt\"\u003eDownload\u003c/a\u003e\u003c/td\u003e\u003ctd\u003e77M\u003c/td\u003e\u003ctd\u003eResNet50\u003c/td\u003e\u003ctd\u003e38M\u003c/td\u003e\u003ctd\u003eRBT3\u003c/td\u003e\u003ctd\u003e39M\u003c/td\u003e\u003ctd\u003e224\u003c/td\u003e\r\n    \u003c/tr\u003e\r\n    \u003ctr align=\"center\"\u003e\r\n        \u003ctd\u003eCN-CLIP\u003csub\u003eViT-B/16\u003c/sub\u003e\u003c/td\u003e\u003ctd\u003e\u003ca href=\"https://clip-cn-beijing.oss-cn-beijing.aliyuncs.com/checkpoints/clip_cn_vit-b-16.pt\"\u003eDownload\u003c/a\u003e\u003c/td\u003e\u003ctd\u003e188M\u003c/td\u003e\u003ctd\u003eViT-B/16\u003c/td\u003e\u003ctd\u003e86M\u003c/td\u003e\u003ctd\u003eRoBERTa-wwm-Base\u003c/td\u003e\u003ctd\u003e102M\u003c/td\u003e\u003ctd\u003e224\u003c/td\u003e\r\n    \u003c/tr\u003e\r\n    \u003ctr align=\"center\"\u003e\r\n        \u003ctd\u003eCN-CLIP\u003csub\u003eViT-L/14\u003c/sub\u003e\u003c/td\u003e\u003ctd\u003e\u003ca href=\"https://clip-cn-beijing.oss-cn-beijing.aliyuncs.com/checkpoints/clip_cn_vit-l-14.pt\"\u003eDownload\u003c/a\u003e\u003c/td\u003e\u003ctd\u003e406M\u003c/td\u003e\u003ctd\u003eViT-L/14\u003c/td\u003e\u003ctd\u003e304M\u003c/td\u003e\u003ctd\u003eRoBERTa-wwm-Base\u003c/td\u003e\u003ctd\u003e102M\u003c/td\u003e\u003ctd\u003e224\u003c/td\u003e\r\n    \u003c/tr\u003e\r\n    \u003ctr align=\"center\"\u003e\r\n        \u003ctd\u003eCN-CLIP\u003csub\u003eViT-L/14@336px\u003c/sub\u003e\u003c/td\u003e\u003ctd\u003e\u003ca href=\"https://clip-cn-beijing.oss-cn-beijing.aliyuncs.com/checkpoints/clip_cn_vit-l-14-336.pt\"\u003eDownload\u003c/a\u003e\u003c/td\u003e\u003ctd\u003e407M\u003c/td\u003e\u003ctd\u003eViT-L/14\u003c/td\u003e\u003ctd\u003e304M\u003c/td\u003e\u003ctd\u003eRoBERTa-wwm-Base\u003c/td\u003e\u003ctd\u003e102M\u003c/td\u003e\u003ctd\u003e336\u003c/td\u003e\r\n    \u003c/tr\u003e\r\n    \u003ctr align=\"center\"\u003e\r\n        \u003ctd\u003eCN-CLIP\u003csub\u003eViT-H/14\u003c/sub\u003e\u003c/td\u003e\u003ctd\u003e\u003ca href=\"https://clip-cn-beijing.oss-cn-beijing.aliyuncs.com/checkpoints/clip_cn_vit-h-14.pt\"\u003eDownload\u003c/a\u003e\u003c/td\u003e\u003ctd\u003e958M\u003c/td\u003e\u003ctd\u003eViT-H/14\u003c/td\u003e\u003ctd\u003e632M\u003c/td\u003e\u003ctd\u003eRoBERTa-wwm-Large\u003c/td\u003e\u003ctd\u003e326M\u003c/td\u003e\u003ctd\u003e224\u003c/td\u003e\r\n    \u003c/tr\u003e\r\n\u003c/table\u003e\r\n\u003cbr\u003e\u003c/br\u003e\r\n\r\n## 实验结果\r\n针对图文检索任务，我们在[MUGE Retrieval](https://tianchi.aliyun.com/muge)、[Flickr30K-CN](https://github.com/li-xirong/cross-lingual-cap)和[COCO-CN](https://github.com/li-xirong/coco-cn)上进行了zero-shot和finetune的实验。针对图像零样本分类，我们在[ELEVATER](https://eval.ai/web/challenges/challenge-page/1832)的10个数据集上进行了实验。实验结果如下表所示。篇幅所限，我们这里给出baseline模型和Chinese-CLIP的最优规模模型结果，关于Chinese-CLIP各规模的详细结果指标，请详见[Results.md](Results.md)。\r\n\r\n**MUGE Text-to-Image Retrieval (Official Validation Set)**:\r\n\u003ctable border=\"1\" width=\"100%\"\u003e\r\n    \u003ctr align=\"center\"\u003e\r\n        \u003cth\u003eSetup\u003c/th\u003e\u003cth colspan=\"4\"\u003eZero-shot\u003c/th\u003e\u003cth colspan=\"4\"\u003eFinetune\u003c/th\u003e\r\n    \u003c/tr\u003e\r\n    \u003ctr align=\"center\"\u003e\r\n        \u003ctd\u003eMetric\u003c/td\u003e\u003ctd\u003eR@1\u003c/td\u003e\u003ctd\u003eR@5\u003c/td\u003e\u003ctd\u003eR@10\u003c/td\u003e\u003ctd\u003eMR\u003c/td\u003e\u003ctd\u003eR@1\u003c/td\u003e\u003ctd\u003eR@5\u003c/td\u003e\u003ctd\u003eR@10\u003c/td\u003e\u003ctd\u003eMR\u003c/td\u003e\r\n    \u003c/tr\u003e\r\n\t\u003ctr align=\"center\"\u003e\r\n        \u003ctd width=\"120%\"\u003eWukong\u003c/td\u003e\u003ctd\u003e42.7\u003c/td\u003e\u003ctd\u003e69.0\u003c/td\u003e\u003ctd\u003e78.0\u003c/td\u003e\u003ctd\u003e63.2\u003c/td\u003e\u003ctd\u003e52.7\u003c/td\u003e\u003ctd\u003e77.9\u003c/td\u003e\u003ctd\u003e85.6\u003c/td\u003e\u003ctd\u003e72.1\u003c/td\u003e\r\n    \u003c/tr\u003e\r\n\t\u003ctr align=\"center\"\u003e\r\n        \u003ctd width=\"120%\"\u003eR2D2\u003c/td\u003e\u003ctd\u003e49.5\u003c/td\u003e\u003ctd\u003e75.7\u003c/td\u003e\u003ctd\u003e83.2\u003c/td\u003e\u003ctd\u003e69.5\u003c/td\u003e\u003ctd\u003e60.1\u003c/td\u003e\u003ctd\u003e82.9\u003c/td\u003e\u003ctd\u003e89.4\u003c/td\u003e\u003ctd\u003e77.5\u003c/td\u003e\r\n    \u003c/tr\u003e\r\n\t\u003ctr align=\"center\"\u003e\r\n        \u003ctd width=\"120%\"\u003eCN-CLIP\u003c/td\u003e\u003ctd\u003e63.0\u003c/td\u003e\u003ctd\u003e84.1\u003c/td\u003e\u003ctd\u003e89.2\u003c/td\u003e\u003ctd\u003e78.8\u003c/td\u003e\u003ctd\u003e68.9\u003c/td\u003e\u003ctd\u003e88.7\u003c/td\u003e\u003ctd\u003e93.1\u003c/td\u003e\u003ctd\u003e83.6\u003c/td\u003e\r\n    \u003c/tr\u003e\r\n\u003c/table\u003e\r\n\u003cbr\u003e\r\n\r\n**Flickr30K-CN Retrieval (Official Test Set)**:\r\n\u003ctable border=\"1\" width=\"150%\"\u003e\r\n\t\u003ctr align=\"center\"\u003e\r\n        \u003cth\u003eTask\u003c/th\u003e\u003cth colspan=\"6\"\u003eText-to-Image\u003c/th\u003e\u003cth colspan=\"6\"\u003eImage-to-Text\u003c/th\u003e\r\n    \u003c/tr\u003e\r\n    \u003ctr align=\"center\"\u003e\r\n        \u003cth\u003eSetup\u003c/th\u003e\u003cth colspan=\"3\"\u003eZero-shot\u003c/th\u003e\u003cth colspan=\"3\"\u003eFinetune\u003c/th\u003e\u003cth colspan=\"3\"\u003eZero-shot\u003c/th\u003e\u003cth colspan=\"3\"\u003eFinetune\u003c/th\u003e\r\n    \u003c/tr\u003e\r\n    \u003ctr align=\"center\"\u003e\r\n        \u003ctd\u003eMetric\u003c/td\u003e\u003ctd\u003eR@1\u003c/td\u003e\u003ctd\u003eR@5\u003c/td\u003e\u003ctd\u003eR@10\u003c/td\u003e\u003ctd\u003eR@1\u003c/td\u003e\u003ctd\u003eR@5\u003c/td\u003e\u003ctd\u003eR@10\u003c/td\u003e\u003ctd\u003eR@1\u003c/td\u003e\u003ctd\u003eR@5\u003c/td\u003e\u003ctd\u003eR@10\u003c/td\u003e\u003ctd\u003eR@1\u003c/td\u003e\u003ctd\u003eR@5\u003c/td\u003e\u003ctd\u003eR@10\u003c/td\u003e\r\n    \u003c/tr\u003e\r\n\t\u003ctr align=\"center\"\u003e\r\n        \u003ctd width=\"120%\"\u003eWukong\u003c/td\u003e\u003ctd\u003e51.7\u003c/td\u003e\u003ctd\u003e78.9\u003c/td\u003e\u003ctd\u003e86.3\u003c/td\u003e\u003ctd\u003e77.4\u003c/td\u003e\u003ctd\u003e94.5\u003c/td\u003e\u003ctd\u003e97.0\u003c/td\u003e\u003ctd\u003e76.1\u003c/td\u003e\u003ctd\u003e94.8\u003c/td\u003e\u003ctd\u003e97.5\u003c/td\u003e\u003ctd\u003e92.7\u003c/td\u003e\u003ctd\u003e99.1\u003c/td\u003e\u003ctd\u003e99.6\u003c/td\u003e\r\n    \u003c/tr\u003e\r\n\t\u003ctr align=\"center\"\u003e\r\n        \u003ctd width=\"120%\"\u003eTaiyi\u003c/td\u003e\u003ctd\u003e60.8\u003c/td\u003e\u003ctd\u003e85.0\u003c/td\u003e\u003ctd\u003e91.0\u003c/td\u003e\u003ctd\u003e-\u003c/td\u003e\u003ctd\u003e-\u003c/td\u003e\u003ctd\u003e-\u003c/td\u003e\u003ctd\u003e-\u003c/td\u003e\u003ctd\u003e-\u003c/td\u003e\u003ctd\u003e-\u003c/td\u003e\u003ctd\u003e-\u003c/td\u003e\u003ctd\u003e-\u003c/td\u003e\u003ctd\u003e-\u003c/td\u003e\r\n    \u003c/tr\u003e\t\r\n\t\u003ctr align=\"center\"\u003e\r\n        \u003ctd width=\"120%\"\u003eR2D2\u003c/td\u003e\u003ctd\u003e60.9\u003c/td\u003e\u003ctd\u003e86.8\u003c/td\u003e\u003ctd\u003e92.7\u003c/td\u003e\u003ctd\u003e84.4\u003c/td\u003e\u003ctd\u003e96.7\u003c/td\u003e\u003ctd\u003e98.4\u003c/td\u003e\u003ctd\u003e77.6\u003c/td\u003e\u003ctd\u003e96.7\u003c/td\u003e\u003ctd\u003e98.9\u003c/td\u003e\u003ctd\u003e95.6\u003c/td\u003e\u003ctd\u003e99.8\u003c/td\u003e\u003ctd\u003e100.0\u003c/td\u003e\r\n    \u003c/tr\u003e\t\r\n\t\u003ctr align=\"center\"\u003e\r\n        \u003ctd width=\"120%\"\u003eCN-CLIP\u003c/td\u003e\u003ctd\u003e71.2\u003c/td\u003e\u003ctd\u003e91.4\u003c/td\u003e\u003ctd\u003e95.5\u003c/td\u003e\u003ctd\u003e83.8\u003c/td\u003e\u003ctd\u003e96.9\u003c/td\u003e\u003ctd\u003e98.6\u003c/td\u003e\u003ctd\u003e81.6\u003c/td\u003e\u003ctd\u003e97.5\u003c/td\u003e\u003ctd\u003e98.8\u003c/td\u003e\u003ctd\u003e95.3\u003c/td\u003e\u003ctd\u003e99.7\u003c/td\u003e\u003ctd\u003e100.0\u003c/td\u003e\r\n    \u003c/tr\u003e\r\n\u003c/table\u003e\r\n\u003cbr\u003e\r\n\r\n**COCO-CN Retrieval (Official Test Set)**:\r\n\u003ctable border=\"1\" width=\"150%\"\u003e\r\n\t\u003ctr align=\"center\"\u003e\r\n        \u003cth\u003eTask\u003c/th\u003e\u003cth colspan=\"6\"\u003eText-to-Image\u003c/th\u003e\u003cth colspan=\"6\"\u003eImage-to-Text\u003c/th\u003e\r\n    \u003c/tr\u003e\r\n    \u003ctr align=\"center\"\u003e\r\n        \u003cth\u003eSetup\u003c/th\u003e\u003cth colspan=\"3\"\u003eZero-shot\u003c/th\u003e\u003cth colspan=\"3\"\u003eFinetune\u003c/th\u003e\u003cth colspan=\"3\"\u003eZero-shot\u003c/th\u003e\u003cth colspan=\"3\"\u003eFinetune\u003c/th\u003e\r\n    \u003c/tr\u003e\r\n    \u003ctr align=\"center\"\u003e\r\n        \u003ctd\u003eMetric\u003c/td\u003e\u003ctd\u003eR@1\u003c/td\u003e\u003ctd\u003eR@5\u003c/td\u003e\u003ctd\u003eR@10\u003c/td\u003e\u003ctd\u003eR@1\u003c/td\u003e\u003ctd\u003eR@5\u003c/td\u003e\u003ctd\u003eR@10\u003c/td\u003e\u003ctd\u003eR@1\u003c/td\u003e\u003ctd\u003eR@5\u003c/td\u003e\u003ctd\u003eR@10\u003c/td\u003e\u003ctd\u003eR@1\u003c/td\u003e\u003ctd\u003eR@5\u003c/td\u003e\u003ctd\u003eR@10\u003c/td\u003e\r\n    \u003c/tr\u003e\r\n\t\u003ctr align=\"center\"\u003e\r\n        \u003ctd width=\"150%\"\u003eWukong\u003c/td\u003e\u003ctd\u003e53.4\u003c/td\u003e\u003ctd\u003e80.2\u003c/td\u003e\u003ctd\u003e90.1\u003c/td\u003e\u003ctd\u003e74.0\u003c/td\u003e\u003ctd\u003e94.4\u003c/td\u003e\u003ctd\u003e98.1\u003c/td\u003e\u003ctd\u003e55.2\u003c/td\u003e\u003ctd\u003e81.0\u003c/td\u003e\u003ctd\u003e90.6\u003c/td\u003e\u003ctd\u003e73.3\u003c/td\u003e\u003ctd\u003e94.0\u003c/td\u003e\u003ctd\u003e98.0\u003c/td\u003e\r\n    \u003c/tr\u003e\r\n\t\u003ctr align=\"center\"\u003e\r\n        \u003ctd width=\"150%\"\u003eTaiyi\u003c/td\u003e\u003ctd\u003e60.0\u003c/td\u003e\u003ctd\u003e84.0\u003c/td\u003e\u003ctd\u003e93.3\u003c/td\u003e\u003ctd\u003e-\u003c/td\u003e\u003ctd\u003e-\u003c/td\u003e\u003ctd\u003e-\u003c/td\u003e\u003ctd\u003e-\u003c/td\u003e\u003ctd\u003e-\u003c/td\u003e\u003ctd\u003e-\u003c/td\u003e\u003ctd\u003e-\u003c/td\u003e\u003ctd\u003e-\u003c/td\u003e\u003ctd\u003e-\u003c/td\u003e\r\n    \u003c/tr\u003e\t\r\n\t\u003ctr align=\"center\"\u003e\r\n        \u003ctd width=\"150%\"\u003eR2D2\u003c/td\u003e\u003ctd\u003e56.4\u003c/td\u003e\u003ctd\u003e85.0\u003c/td\u003e\u003ctd\u003e93.1\u003c/td\u003e\u003ctd\u003e79.1\u003c/td\u003e\u003ctd\u003e96.5\u003c/td\u003e\u003ctd\u003e98.9\u003c/td\u003e\u003ctd\u003e63.3\u003c/td\u003e\u003ctd\u003e89.3\u003c/td\u003e\u003ctd\u003e95.7\u003c/td\u003e\u003ctd\u003e79.3\u003c/td\u003e\u003ctd\u003e97.1\u003c/td\u003e\u003ctd\u003e98.7\u003c/td\u003e\r\n    \u003c/tr\u003e\r\n\t\u003ctr align=\"center\"\u003e\r\n        \u003ctd width=\"150%\"\u003eCN-CLIP\u003c/td\u003e\u003ctd\u003e69.2\u003c/td\u003e\u003ctd\u003e89.9\u003c/td\u003e\u003ctd\u003e96.1\u003c/td\u003e\u003ctd\u003e81.5\u003c/td\u003e\u003ctd\u003e96.9\u003c/td\u003e\u003ctd\u003e99.1\u003c/td\u003e\u003ctd\u003e63.0\u003c/td\u003e\u003ctd\u003e86.6\u003c/td\u003e\u003ctd\u003e92.9\u003c/td\u003e\u003ctd\u003e83.5\u003c/td\u003e\u003ctd\u003e97.3\u003c/td\u003e\u003ctd\u003e99.2\u003c/td\u003e\r\n    \u003c/tr\u003e\r\n\u003c/table\u003e\r\n\u003cbr\u003e\r\n\r\n**Zero-shot Image Classification**:\r\n\u003ctable border=\"1\" width=\"150%\"\u003e\r\n\t\u003ctr align=\"center\"\u003e\r\n        \u003cth\u003eTask\u003c/th\u003e\u003cth\u003eCIFAR10\u003c/th\u003e\u003cth\u003eCIFAR100\u003c/th\u003e\u003cth\u003eDTD\u003c/th\u003e\u003cth\u003eEuroSAT\u003c/th\u003e\u003cth\u003eFER\u003c/th\u003e\u003cth\u003eFGVC\u003c/th\u003e\u003cth\u003eKITTI\u003c/th\u003e\u003cth\u003eMNIST\u003c/th\u003e\u003cth\u003ePC\u003c/th\u003e\u003cth\u003eVOC\u003c/th\u003e\r\n    \u003c/tr\u003e\r\n\t\u003ctr align=\"center\"\u003e\r\n        \u003ctd width=\"150%\"\u003eGIT\u003c/td\u003e\u003ctd\u003e88.5\u003c/td\u003e\u003ctd\u003e61.1\u003c/td\u003e\u003ctd\u003e42.9\u003c/td\u003e\u003ctd\u003e43.4\u003c/td\u003e\u003ctd\u003e41.4\u003c/td\u003e\u003ctd\u003e6.7\u003c/td\u003e\u003ctd\u003e22.1\u003c/td\u003e\u003ctd\u003e68.9\u003c/td\u003e\u003ctd\u003e50.0\u003c/td\u003e\u003ctd\u003e80.2\u003c/td\u003e\r\n    \u003c/tr\u003e\r\n    \t\u003ctr align=\"center\"\u003e\r\n        \u003ctd width=\"150%\"\u003eALIGN\u003c/td\u003e\u003ctd\u003e94.9\u003c/td\u003e\u003ctd\u003e76.8\u003c/td\u003e\u003ctd\u003e66.1\u003c/td\u003e\u003ctd\u003e52.1\u003c/td\u003e\u003ctd\u003e50.8\u003c/td\u003e\u003ctd\u003e25.0\u003c/td\u003e\u003ctd\u003e41.2\u003c/td\u003e\u003ctd\u003e74.0\u003c/td\u003e\u003ctd\u003e55.2\u003c/td\u003e\u003ctd\u003e83.0\u003c/td\u003e\r\n    \u003c/tr\u003e\r\n\t\u003ctr align=\"center\"\u003e\r\n        \u003ctd width=\"150%\"\u003eCLIP\u003c/td\u003e\u003ctd\u003e94.9\u003c/td\u003e\u003ctd\u003e77.0\u003c/td\u003e\u003ctd\u003e56.0\u003c/td\u003e\u003ctd\u003e63.0\u003c/td\u003e\u003ctd\u003e48.3\u003c/td\u003e\u003ctd\u003e33.3\u003c/td\u003e\u003ctd\u003e11.5\u003c/td\u003e\u003ctd\u003e79.0\u003c/td\u003e\u003ctd\u003e62.3\u003c/td\u003e\u003ctd\u003e84.0\u003c/td\u003e\r\n    \u003c/tr\u003e\r\n    \t\u003ctr align=\"center\"\u003e\r\n        \u003ctd width=\"150%\"\u003eWukong\u003c/td\u003e\u003ctd\u003e95.4\u003c/td\u003e\u003ctd\u003e77.1\u003c/td\u003e\u003ctd\u003e40.9\u003c/td\u003e\u003ctd\u003e50.3\u003c/td\u003e\u003ctd\u003e-\u003c/td\u003e\u003ctd\u003e-\u003c/td\u003e\u003ctd\u003e-\u003c/td\u003e\u003ctd\u003e-\u003c/td\u003e\u003ctd\u003e-\u003c/td\u003e\u003ctd\u003e-\u003c/td\u003e\r\n    \u003c/tr\u003e\r\n    \t\u003ctr align=\"center\"\u003e\r\n        \u003ctd width=\"150%\"\u003eCN-CLIP\u003c/td\u003e\u003ctd\u003e96.0\u003c/td\u003e\u003ctd\u003e79.7\u003c/td\u003e\u003ctd\u003e51.2\u003c/td\u003e\u003ctd\u003e52.0\u003c/td\u003e\u003ctd\u003e55.1\u003c/td\u003e\u003ctd\u003e26.2\u003c/td\u003e\u003ctd\u003e49.9\u003c/td\u003e\u003ctd\u003e79.4\u003c/td\u003e\u003ctd\u003e63.5\u003c/td\u003e\u003ctd\u003e84.9\u003c/td\u003e\r\n    \u003c/tr\u003e\r\n\u003c/table\u003e\r\n\r\n\u003cbr\u003e\u003cbr\u003e\r\n\r\n\r\n# 开始用起来！\r\n## 安装要求\r\n开始本项目前，需先检查是否满足下列环境配置要求:\r\n\r\n* python \u003e= 3.6.4\r\n* pytorch \u003e= 1.8.0 (with torchvision \u003e= 0.9.0)\r\n* CUDA Version \u003e= 10.2\r\n\r\n运行下列命令即可安装本项目所需的三方库。\r\n\r\n```bash\r\npip install -r requirements.txt\r\n```\r\n\r\n## API快速上手\r\n下面提供一段简单的代码示例说明如何使用中文CLIP的API。开始使用前，请先安装cn_clip：\r\n```bash\r\n# 通过pip安装\r\npip install cn_clip\r\n\r\n# 或者从源代码安装\r\ncd Chinese-CLIP\r\npip install -e .\r\n```\r\n安装成功后，即可通过如下方式轻松调用API，传入指定图片（[示例](examples/pokemon.jpeg)）和文本，提取图文特征向量并计算相似度：\r\n```python\r\nimport torch \r\nfrom PIL import Image\r\n\r\nimport cn_clip.clip as clip\r\nfrom cn_clip.clip import load_from_name, available_models\r\nprint(\"Available models:\", available_models())  \r\n# Available models: ['ViT-B-16', 'ViT-L-14', 'ViT-L-14-336', 'ViT-H-14', 'RN50']\r\n\r\ndevice = \"cuda\" if torch.cuda.is_available() else \"cpu\"\r\nmodel, preprocess = load_from_name(\"ViT-B-16\", device=device, download_root='./')\r\nmodel.eval()\r\nimage = preprocess(Image.open(\"examples/pokemon.jpeg\")).unsqueeze(0).to(device)\r\ntext = clip.tokenize([\"杰尼龟\", \"妙蛙种子\", \"小火龙\", \"皮卡丘\"]).to(device)\r\n\r\nwith torch.no_grad():\r\n    image_features = model.encode_image(image)\r\n    text_features = model.encode_text(text)\r\n    # 对特征进行归一化，请使用归一化后的图文特征用于下游任务\r\n    image_features /= image_features.norm(dim=-1, keepdim=True) \r\n    text_features /= text_features.norm(dim=-1, keepdim=True)    \r\n\r\n    logits_per_image, logits_per_text = model.get_similarity(image, text)\r\n    probs = logits_per_image.softmax(dim=-1).cpu().numpy()\r\n\r\nprint(\"Label probs:\", probs)  # [[1.268734e-03 5.436878e-02 6.795761e-04 9.436829e-01]]\r\n```\r\n我们也准备了部署ONNX和TensorRT模型的相关支持，流程详见[deployment.md](deployment.md)。\r\n\r\n如果你不满足于仅仅使用API，欢迎继续阅读本文档，了解如何使用我们的项目进行CLIP模型的训练和测试。\r\n\u003cbr\u003e\u003cbr\u003e\r\n\r\n\r\n# 教程\r\n下文将包括[跨模态检索教程](#跨模态检索)（包含finetune和inference，及KNN计算等）以及[零样本图像分类教程](#零样本图像分类)。\r\n\r\n## 跨模态检索\r\n### 代码组织\r\n下载本项目后, 请创建新的文件夹 ```${DATAPATH}``` 以存放数据集、预训练ckpt、以及finetune产生的模型日志\u0026ckpt。推荐工作区目录结构如下：\r\n\r\n```\r\nChinese-CLIP/\r\n├── run_scripts/\r\n│   ├── muge_finetune_vit-b-16_rbt-base.sh\r\n│   ├── flickr30k_finetune_vit-b-16_rbt-base.sh\r\n│   └── ...           # 更多finetune或评测脚本...\r\n└── cn_clip/\r\n    ├── clip/\r\n    ├── eval/\r\n    ├── preprocess/\r\n    └── training/\r\n\r\n${DATAPATH}\r\n├── pretrained_weights/\r\n├── experiments/\r\n├── deploy/\t      # 用于存放ONNX \u0026 TensorRT部署模型\r\n└── datasets/\r\n    ├── MUGE/\r\n    ├── Flickr30k-CN/\r\n    └── .../          # 更多自定义数据集...\r\n```\r\n\r\n### 准备工作\r\n这里我们提供预训练模型参数的下载方式，以及进行finetune前对数据进行的预处理过程\r\n\r\n#### 预训练CKPT\r\n\r\n请参考前文[模型规模 \u0026 下载链接](#model_card)部分，下载对应模型ckpt。推荐将下载的ckpt文件存放于`${DATAPATH}/pretrained_weights/`目录下。\r\n\r\n#### 数据集格式预处理\r\n\r\n为了与Chinese-CLIP代码适配，同时保证数据处理和读取的效率，我们建议将训练\u0026评测使用的图文数据集统一组织成如下的方式：\r\n\r\n```\r\n${DATAPATH}\r\n└── datasets/\r\n    └── ${dataset_name}/\r\n        ├── train_imgs.tsv      # 图片id \u0026 图片内容\r\n        ├── train_texts.jsonl   # 文本id \u0026 文本内容，连同匹配的图片id列表\r\n        ├── valid_imgs.tsv\r\n        ├── valid_texts.jsonl\r\n        ├── test_imgs.tsv\r\n        └── test_texts.jsonl\r\n```\r\n其中`${dataset_name}`代指数据集名称（如MUGE）\r\n\r\n为保证文件处理效率，我们不是将图片以大量的小文件方式存放，而是将训练/验证/测试图片以base64形式分别存放在`${split}_imgs.tsv`文件中。文件每行表示一张图片，包含图片id（int型）与图片base64，以tab隔开，格式如下：\r\n```\r\n1000002\t/9j/4AAQSkZJ...YQj7314oA//2Q==\r\n```\r\n\r\n将图片原始文件转换为base64的方式非常简单，请执行以下python代码：\r\n```python\r\nfrom PIL import Image\r\nfrom io import BytesIO\r\nimport base64\r\n\r\nimg = Image.open(file_name) # 访问图片路径\r\nimg_buffer = BytesIO()\r\nimg.save(img_buffer, format=img.format)\r\nbyte_data = img_buffer.getvalue()\r\nbase64_str = base64.b64encode(byte_data) # bytes\r\nbase64_str = base64_str.decode(\"utf-8\") # str\r\n```\r\n\r\n文本信息及图文对匹配关系则保存在`${split}_texts.jsonl`文件。文件每行是一行json，格式如下：\r\n```\r\n{\"text_id\": 8428, \"text\": \"高级感托特包斜挎\", \"image_ids\": [1076345, 517602]}\r\n```\r\n对于测试集只有文本，不知道图文对匹配关系的情况，每行的`image_ids`字段处理为空列表即可，即`\"image_ids\": []`。\r\n\r\n最后，我们还需要将tsv和jsonl文件一起序列化，转换为内存索引的LMDB数据库文件，方便训练时的随机读取\r\n```\r\npython cn_clip/preprocess/build_lmdb_dataset.py \\\r\n    --data_dir ${DATAPATH}/datasets/${dataset_name}\r\n    --splits train,valid,test\r\n```\r\n例如对于MUGE数据集，则`${dataset_name}`设为MUGE，`--splits`指定需要转换的数据集划分，以逗号不加空格分隔。转换后，数据集文件夹下会对应增加以下LMDB序列化文件\r\n```\r\n${DATAPATH}\r\n└── datasets/\r\n    └── ${dataset_name}/\r\n        └── lmdb/\r\n            ├── train\r\n            │   ├── imgs\r\n            │   └── pairs\r\n            ├── valid\r\n            └── test\r\n```\r\n\r\n为了降低上手难度，我们也提供了按上述步骤预处理好的MUGE数据（[下载链接](https://clip-cn-beijing.oss-cn-beijing.aliyuncs.com/datasets/MUGE.zip)）和Flickr30K-CN数据（[下载链接](https://clip-cn-beijing.oss-cn-beijing.aliyuncs.com/datasets/Flickr30k-CN.zip)）压缩包，直接下载解压并放置于`${DATAPATH}/datasets/`目录下即可。如果需要[COCO-CN](https://github.com/li-xirong/coco-cn)数据，请向原作者进行申请许可完成后，邮件联系我们吧。\r\n\r\n### 模型finetune\r\n\r\n在此我们介绍训练的步骤，方便其他用户了解模型细节，使用我们提供的中文CLIP预训练模型进行finetune。基于MUGE和Flickr30K-CN两个下游检索数据集，我们提供了训练样例脚本`run_scripts/muge_finetune_vit-b-16_rbt-base.sh`和`run_scripts/flickr30k_finetune_vit-b-16_rbt-base.sh`。\u003cb\u003e运行脚本同时支持单机（单卡或多卡）和多机分布式训练，请在运行前，先根据脚本开头的指引注释，填写好分布式相关配置，之后运行如下命令即可开始训练（多机训练请在各机器上都运行命令）。对于显存不足的情况，可以考虑激活配置项中的[重计算策略](#checkpointing)。\u003c/b\u003e训练产生的log和模型ckpt文件，会自动保存在用户指定的目录下：\r\n\r\n```bash\r\ncd Chinese-CLIP/\r\nbash run_scripts/muge_finetune_vit-b-16_rbt-base.sh ${DATAPATH}\r\n```\r\n\r\n相关的训练配置项包括:\r\n\r\n+ 分布式\r\n  + `WORKER_CNT`: 训练的机器个数\r\n  + `GPUS_PER_NODE`: 每个机器上的GPU个数\r\n+ 训练/验证数据\r\n  + `train-data`: 训练数据LMDB目录，准备LMDB数据文件的预处理流程见上。\r\n  + `val-data`: 验证数据LMDB目录，指定为None时，则不进行训练过程中的验证。\r\n  + `num-workers`: 训练集数据处理（DataLoader）的进程数，默认为4。\r\n  + `valid-num-workers`: 验证集数据处理（DataLoader）的进程数（如果进行验证），默认为1。\r\n+ 训练超参数\r\n  + `vision-model`: 指定视觉backbone, 从 `[\"ViT-B-16\", \"ViT-L-14\", \"ViT-L-14-336\", \"ViT-H-14\", \"RN50\"]`选择。\r\n  + `text-model`: 指定文本backbone, 从 `[\"RoBERTa-wwm-ext-base-chinese\", \"RoBERTa-wwm-ext-large-chinese\", \"RBT3-chinese\"]`选择。\r\n  + `context-length`: 文本输入序列长度。\r\n  + `warmup`: warmup步数。\r\n  + `batch-size`: 训练时单卡batch-size。（请保证`训练样本总数 \u003e batch-size * GPU数`，至少满足1个训练batch）\r\n  + `lr`: 学习率。\r\n  + `wd`: weight decay。\r\n  + `max-steps`: 训练步数，也可通过`max-epochs`指定训练轮数。\r\n  + `freeze-vision`: 是否freeze视觉backbone。\r\n  + `use-augment`: 是否使用[AutoAugment](https://arxiv.org/abs/1805.09501)对图片进行数据增强。\r\n  + `valid-batch-size`: 验证时单机batch-size。（请保证`验证集样本总数 \u003e batch-size * GPU数`，至少满足1个验证batch）\r\n  + `valid-step-interval`和`valid-epoch-interval`: 验证step/epoch频率，指定为-1时则在训练中不进行验证。\r\n  + `grad-checkpointing`: \u003cspan id=\"checkpointing\"\u003e\u003c/span\u003e使用[重计算策略](https://pytorch.org/docs/stable/checkpoint.html)，在前向过程中不保存中间结果，以训练时间换取更小的显存开销，适用于显存不足的情况。（`store_true`参数，直接在脚本中加上`--grad-checkpointing`即可，目前要求Pytorch\u003e1.8.0）\r\n  + `mask-ratio`: \u003cspan id=\"FLIP\"\u003e\u003c/span\u003e参照[FLIP](https://arxiv.org/abs/2212.00794)的策略，在finetune时可指定随机mask一定比例的图像patch，以降低显存开销、加快训练速度。默认为0.0，即不激活这一策略。\r\n  + `use-flash-attention`: 使用[FlashAttention](https://arxiv.org/abs/2205.14135)，可在不影响效果的条件下为Chinese-CLIP的finetune过程显著提速以及降低显存占用。（`store_true`参数，配置好环境后，在脚本中加上`--use-flash-attention`即可，请详见[flash_attention.md](flash_attention.md)）\r\n  + `accum-freq`: \u003cspan id=\"gradient_accumulation\"\u003e\u003c/span\u003e梯度累积频率，默认为1。指定为大于1的整数时开启对比学习梯度累积，模拟更大的batch size。如果单卡batch size为`m`，则总的batch size为`accum_freq * m * GPU数`。\r\n  + `gather-with-grad`: 是否在分布式训练时进行带有完整梯度的特征gather，默认关闭。\r\n+ 输出选项\r\n  + `name`: 指定输出路径。超参日志, 训练日志以及产出ckpt均会存放至 `${DATAPATH}/experiments/${name}/`。\r\n  + `save-step-frequency`及`save-epoch-frequency`: 存ckpt的步数或轮数间隔。\r\n  + `report-training-batch-acc`: 日志是否报告训练图到文\u0026文到图batch准确率。\r\n+ 权重读取相关选项\r\n  + `resume`: 权重读取的路径。示例脚本中指定为预训练ckpt路径，也可以指定为用户自己finetune的ckpt路径做继续训练。\r\n  + `reset-data-offset`: 是否从此前的数据断点续跑。如batch size或GPU卡数超参改变，建议打开此选项。\r\n  + `reset-optimizer`: 是否使用optimizer state。\r\n\r\n训练完毕，log 会自动存在`${DATAPATH}/experiments/${name}/out_${timestamp}.log`，训练log格式如下所示:\r\n```\r\n2022-12-11,20:40:34 | INFO | Rank 0 | Global Steps: 1/735 | Train Epoch: 1 [1024/250880 (0%)] | Loss: 2.371020 | Image2Text Acc: 49.90 | Text2Image Acc: 48.73 | Data Time: 1.039s | Batch Time: 3.625s | LR: 0.000000 | logit_scale: 4.605 | Global Batch Size: 1024\r\n```\r\n验证log格式如下所示:\r\n```\r\n2022-12-11,20:42:47 | INFO | Rank 0 | Validation Result (epoch 1 @ 150 steps) | Valid Loss: 0.502810 | Image2Text Acc: 84.95 | Text2Image Acc: 84.26 | logit_scale: 4.605 | Valid Batch Size: 128\r\n```\r\n\r\n**注意**: 对比学习的训练收敛和稳定性和总batch size相关。如您使用更小的batch size（相比默认配置128 per-GPU \\* 8 GPU），建议使用更小的学习率。我们推荐使用更多的GPU和更大的batch size以取得更好的效果。\r\n\r\n### 预测及评估\r\n\r\n我们提供特征提取、以及图文检索任务评估的流程，具体如下：\r\n\r\n#### 图文特征提取\r\n\r\n目前本代码支持使用GPU单卡进行图文特征提取，请参考使用以下命令。我们也提供了部署ONNX和TensorRT模型，加速特征推理的支持，详见[deployment.md](deployment.md)。\r\n```bash\r\ncd Chinese-CLIP/\r\nexport CUDA_VISIBLE_DEVICES=0\r\nexport PYTHONPATH=${PYTHONPATH}:`pwd`/cn_clip\r\n\r\nsplit=valid # 指定计算valid或test集特征\r\nresume=${DATAPATH}/pretrained_weights/clip_cn_vit-b-16.pt\r\n\r\npython -u cn_clip/eval/extract_features.py \\\r\n    --extract-image-feats \\\r\n    --extract-text-feats \\\r\n    --image-data=\"${DATAPATH}/datasets/${dataset_name}/lmdb/${split}/imgs\" \\\r\n    --text-data=\"${DATAPATH}/datasets/${dataset_name}/${split}_texts.jsonl\" \\\r\n    --img-batch-size=32 \\\r\n    --text-batch-size=32 \\\r\n    --context-length=52 \\\r\n    --resume=${resume} \\\r\n    --vision-model=ViT-B-16 \\\r\n    --text-model=RoBERTa-wwm-ext-base-chinese\r\n```\r\n\r\n产出图文特征默认将保存于`${DATAPATH}/datasets/${dataset_name}`目录下，图片特征保存于`${split}_imgs.img_feat.jsonl`文件，每行以json存储一张图片的特征，格式如下：\r\n```\r\n{\"image_id\": 1000002, \"feature\": [0.0198, ..., -0.017, 0.0248]}\r\n```\r\n文本特征则保存于`${split}_texts.txt_feat.jsonl`，格式如下：\r\n```\r\n{\"text_id\": 248816, \"feature\": [0.1314, ..., 0.0018, -0.0002]}\r\n```\r\n\r\n#### KNN检索\r\n\r\n对于小规模的学术检索数据集，我们提供一个简单的KNN检索实现，便于计算文到图、图到文检索的top-k召回结果（tips：如想仿照我们在项目中搭建[检索demo](https://www.modelscope.cn/studios/damo/chinese_clip_applications/summary)，建议基于中文CLIP模型产出图文特征后，结合开源工程框架[clip-retrieval](https://github.com/rom1504/clip-retrieval)搭建前后端服务。）\r\n\r\n对于文到图检索（文本召回相关图片），请运行以下命令：\r\n```bash\r\ncd Chinese-CLIP/\r\nsplit=valid # 指定计算valid或test集特征\r\npython -u cn_clip/eval/make_topk_predictions.py \\\r\n    --image-feats=\"${DATAPATH}/datasets/${dataset_name}/${split}_imgs.img_feat.jsonl\" \\\r\n    --text-feats=\"${DATAPATH}/datasets/${dataset_name}/${split}_texts.txt_feat.jsonl\" \\\r\n    --top-k=10 \\\r\n    --eval-batch-size=32768 \\\r\n    --output=\"${DATAPATH}/datasets/${dataset_name}/${split}_predictions.jsonl\"\r\n```\r\n产出的结果保存在指定的jsonl文件中，每行表示一个文本召回的top-k图片id，格式如下：\r\n```json\r\n{\"text_id\": 153915, \"image_ids\": [5791244, 1009692167, 7454547004, 3564007203, 38130571, 2525270674, 2195419145, 2503091968, 4966265765, 3690431163]}\r\n```\r\n\r\n对于图到文检索（图片召回相关文本），类似地，请运行以下命令：\r\n```bash\r\nsplit=valid # 指定计算valid或test集特征\r\npython -u cn_clip/eval/make_topk_predictions_tr.py \\\r\n    --image-feats=\"${DATAPATH}/datasets/${dataset_name}/${split}_imgs.img_feat.jsonl\" \\\r\n    --text-feats=\"${DATAPATH}/datasets/${dataset_name}/${split}_texts.txt_feat.jsonl\" \\\r\n    --top-k=10 \\\r\n    --eval-batch-size=32768 \\\r\n    --output=\"${DATAPATH}/datasets/${dataset_name}/${split}_tr_predictions.jsonl\"\r\n```\r\n产出结果每行表示一个图片召回的top-k文本id，格式如下：\r\n```json\r\n{\"image_id\": 977856234, \"text_ids\": [156914, 157914, 158914, 155914, 156179, 158907, 157179, 154179, 154914, 154723]}\r\n```\r\n\r\n#### Recall计算\r\n\r\n我们提供了评测脚本计算检索任务的Recall@1/5/10，同时给出mean recall（Recall@1/5/10的平均数）。运行如下命令即可获取分数:\r\n\r\n对于文到图检索，请运行命令：\r\n```bash\r\nsplit=valid # 指定计算valid或test集特征\r\npython cn_clip/eval/evaluation.py \\\r\n    ${DATAPATH}/datasets/${dataset_name}/${split}_texts.jsonl \\\r\n    ${DATAPATH}/datasets/${dataset_name}/${split}_predictions.jsonl \\\r\n    output.json\r\ncat output.json\r\n```\r\n\r\n对于图到文检索，请先运行下面的命令，将图文对标注的jsonl文件由文到图的格式转为图到文：\r\n```bash\r\npython cn_clip/eval/transform_ir_annotation_to_tr.py \\\r\n    --input ${DATAPATH}/datasets/${dataset_name}/${split}_texts.jsonl\r\n```\r\n完成后，请运行命令：\r\n```bash\r\nsplit=valid # 指定计算valid或test集特征\r\npython cn_clip/eval/evaluation_tr.py \\\r\n    ${DATAPATH}/datasets/${dataset_name}/${split}_texts.tr.jsonl \\\r\n    ${DATAPATH}/datasets/${dataset_name}/${split}_tr_predictions.jsonl \\\r\n    output.json\r\ncat output.json\r\n```\r\n打印出的结果格式将如下：\r\n```json\r\n{\"success\": true, \"score\": 85.67, \"scoreJson\": {\"score\": 85.67, \"mean_recall\": 85.67, \"r1\": 71.2, \"r5\": 90.5, \"r10\": 95.3}}\r\n```\r\n\r\n关于整套跨模态检索的训练和测试流程，我们以MUGE检索数据集（[多模态电商图文挑战赛](https://tianchi.aliyun.com/competition/entrance/532031/introduction)）为例，也提供了一个包含上述全部流程并可运行的Jupyter Notebook（[下载链接](https://clip-cn-beijing.oss-cn-beijing.aliyuncs.com/others/Chinese-CLIP-on-MUGE-Retrieval.ipynb)），欢迎大家上手实践。\r\n\r\n\u003cbr\u003e\r\n\r\n## 零样本图像分类\r\n本部分介绍如何使用Chinese-CLIP实现零样本图像分类，以零样本图像分类Benchmark ELEVATER中的数据集为例。ELEVATER是由多个知名的分类数据集（包括CIFAR-10、CIFAR-100、MNIST等）组成的评测集合，评测模型在这些数据集上的零样本效果。我们在实验中，给其中每个数据集准备了中文版本的prompt、类别标签连同原始图片，详见[数据文档](https://github.com/OFA-Sys/Chinese-CLIP/blob/master/zeroshot_dataset.md)，用于测试Chinese-CLIP模型。更多关于该benchmark的详情请点击[链接](https://eval.ai/web/challenges/challenge-page/1832/overview)。大家也可以参考我们提供的流程，仿照在自己的中文分类数据集准备数据并进行测试。\r\n\u003cbr\u003e\r\n\r\n### 准备工作\r\n首先将数据按照如下格式进行准备。由于零样本图像分类仅需测试，因此只需要准备好测试集和预训练模型参数，按照如下目录结构，存放在用户指定的`${DATAPATH}`下：\r\n```\r\n${DATAPATH}\r\n├── pretrained_weights/\r\n└── datasets/\r\n    └── ${dataset_name}/\r\n        ├── label_cn.txt\r\n        └── test/\r\n\t    ├── 000/ # label id，如label个数大于10，则将其向左补零到3位数保证字典序\r\n\t    │   ├── image_0003.jpg # 图片样本，命名无特殊要求\r\n\t    │   ├── image_0005.jpg\r\n\t    │   └── ...\r\n\t    ├── 001/\r\n\t    │   ├── image_0001.jpg\r\n\t    │   ├── image_0002.jpg\r\n\t    │   └── ...\r\n\t    └── 002/\r\n\t        ├── image_0003.jpg\r\n\t        ├── image_0005.jpg\r\n\t        └── ...\r\n\t    ...\r\n\t\r\n```\r\n测试集保证test文件夹内数据按照label对应的id进行划分，并保证id为字典序（10以上的多位数，需向左补零`label.zfill(3)`, 如001，002等）。`label_cn.txt`为数据标签，每行一个标签名，如下所示：\r\n```\r\n手风琴\r\n飞机\r\n锚\r\n...\r\n```\r\n每行的标签对应的label id为`行号-1`，如第1行的标签的id为0，第二行的标签的id为1。如果标签总数大于10，则统一向左补零到3位数，比如标签个数为100，标签id则为`000-099`。用户需为每个label id生成对应的文件夹，并将标注该label的样本放入其中。我们以ELEVATER中的**CIFAR-100数据集**为样例，请点击[链接](http://clip-cn-beijing.oss-cn-beijing.aliyuncs.com/datasets/cifar-100.zip)下载处理好的数据。如果想尝试在其他ELEVATER包含的数据集上测试Chinese-CLIP，请参见我们的[数据文档](https://github.com/OFA-Sys/Chinese-CLIP/blob/master/zeroshot_dataset.md)。\r\n\u003cbr\u003e\r\n\r\n### 预测和评估\r\n我们准备了预测脚本，请查看`run_scripts/zeroshot_eval.sh`。运行命令例子如下：\r\n```bash\r\nbash run_scripts/zeroshot_eval.sh 0 \\\r\n    ${DATAPATH} ${dataset_name} \\\r\n    ${vision_model} ${text_model} \\\r\n    ${ckpt_path} ${index_file}\r\n```\r\n其中各参数意义为：\r\n+ 第一个入参`0`为GPU id\r\n+ `DATAPATH`参见上面的准备工作部分，根据实际位置输入对应路径\r\n+ `dataset_name`参见上面的准备工作部分，输入评测的数据集目录名，如`cifar-100`\r\n+ `vision_model`为指定模型类型，选项包括`[\"ViT-B-32\", \"ViT-B-16\", \"ViT-L-14\", \"ViT-L-14-336\", \"RN50\", \"ViT-H-14\"]`\r\n+ `text_model`包括`[\"RoBERTa-wwm-ext-base-chinese\", \"RoBERTa-wwm-ext-large-chinese\", \"RBT3-chinese\"]`\r\n+ `ckpt_path`为模型预训练ckpt的完整路径\r\n+ `index_file`（可选，仅提交ELEVATER官网评测需要指定），请参见[数据文档](https://github.com/OFA-Sys/Chinese-CLIP/blob/master/zeroshot_dataset.md)\r\n\r\n例如，用ViT-B/16规模预训练模型进行评测CIFAR-100，则运行（`${DATAPATH}`需根据实际情况替换）：\r\n```bash\r\nbash run_scripts/zeroshot_eval.sh 0 \\\r\n    ${DATAPATH} cifar-100 \\\r\n    ViT-B-16 RoBERTa-wwm-ext-base-chinese \\\r\n    ${DATAPATH}/pretrained_weights/clip_cn_vit-b-16.pt\r\n```\r\n\r\n返回结果会打印top-1的准确率。\r\n```\r\nResult:\r\nzeroshot-top1: 0.6444\r\n```\r\n在CIFAR-100上，ViT-B/16规模的Chinese-CLIP预期应该达到64.4%。我们在ELEVATER上其他规模、其他数据集的零样本分类结果，请详见[Results.md](https://github.com/OFA-Sys/Chinese-CLIP/blob/master/Results.md#zeroshot_results)。\r\n\r\n同时，程序还会存下一个json文件用于提交ELEVATER官方用，json文件内容如下所示：\r\n```json\r\n{\"model_name\": \"CN-CLIP-ViT-B-16\", \"dataset_name\": \"cifar-100\", \"num_trainable_params\": 0, \"num_params\": 188262913, \"num_visual_params\": 86192640, \"num_backbone_params\": 188262913, \"n_shot\": 0, \"rnd_seeds\": [123], \"predictions\": \"prediction probability tensor [size: (1, 10000, 100)]\"}\r\n```\r\n其中包括模型名`model_name`、数据集名称`dataset_name`、总参数量`num_params`、视觉塔的参数量`num_visual_params`等模型的meta信息，以及模型输出结果，即模型的预测概率tensor，size为`[1, 样本数, 标签个数]`。\r\n\r\n### 零样本分类在线Demo\r\n基于我们集成于Huggingface transformers的特征提取API，我们在Huggingface Model Hub🤗提供了在线简单尝试零样本图像分类的demo（Hosted inference API），各个模型规模的demo链接见下，欢迎尝试！\r\n- [OFA-Sys/chinese-clip-vit-base-patch16](https://huggingface.co/OFA-Sys/chinese-clip-vit-base-patch16)\r\n- [OFA-Sys/chinese-clip-vit-large-patch14](https://huggingface.co/OFA-Sys/chinese-clip-vit-large-patch14)\r\n- [OFA-Sys/chinese-clip-vit-large-patch14-336px](https://huggingface.co/OFA-Sys/chinese-clip-vit-large-patch14-336px)\r\n- [OFA-Sys/chinese-clip-vit-huge-patch14](https://huggingface.co/OFA-Sys/chinese-clip-vit-huge-patch14)\r\n- **（12.10日更新🔥）**[**基于Huggingface Spaces部署的新版demo**](https://huggingface.co/spaces/OFA-Sys/chinese-clip-zero-shot-image-classification)：demo页面同时包含上述4个模型规模可选，支持输入自定义prompt模板，欢迎试用 \r\n\u003cbr\u003e\u003cbr\u003e\u003cbr\u003e\r\n\r\n# 引用\r\n如果觉得本项目好用，希望能给我们提个star并分享给身边的用户，欢迎给相关工作citation，感谢支持！\r\n\r\n```\r\n@article{chinese-clip,\r\n  title={Chinese CLIP: Contrastive Vision-Language Pretraining in Chinese},\r\n  author={Yang, An and Pan, Junshu and Lin, Junyang and Men, Rui and Zhang, Yichang and Zhou, Jingren and Zhou, Chang},\r\n  journal={arXiv preprint arXiv:2211.01335},\r\n  year={2022}\r\n}\r\n```\r\n","funding_links":[],"categories":["Jupyter Notebook","Python","其他_机器视觉","Chinese NLP Toolkits 中文NLP工具"],"sub_categories":["网络服务_其他","Multi-Modal Representation \u0026 Retrieval 多模态表征与检索"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FOFA-Sys%2FChinese-CLIP","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FOFA-Sys%2FChinese-CLIP","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FOFA-Sys%2FChinese-CLIP/lists"}