Hugging Face Transformers 中的 Chinese-CLIP:中文图文跨模态检索与零样本视觉任务实战指南 Hugging Face Transformers 中的 Chinese-CLIP中文图文跨模态检索与零样本视觉任务实战指南【免费下载链接】transformers Transformers: the model-definition framework for state-of-the-art machine learning models in text, vision, audio, and multimodal models, for both inference and training.项目地址: https://gitcode.com/GitHub_Trending/tra/transformers本文以 Hugging Face Transformers 仓库中 Chinese-CLIP 模型的官方文档为核心系统讲解中文 CLIP 模型的背景、架构组成、开箱即用的推理代码并结合仓库源码配置类、建模代码、图像处理器与处理器实现深入剖析其内部原理与关键参数。读者读完本文后将能够使用ChineseCLIPModel/ChineseCLIPProcessor完成中文图文相似度计算、跨模态检索与零样本图像分类并理解各配置项对模型行为的影响。一、Chinese-CLIP 模型概述Chinese-CLIP 由 An Yang、Junshu Pan、Junyang Lin、Rui Men、Yichang Zhang、Jingren Zhou、Chang Zhou 在论文 Chinese CLIP: Contrastive Vision-Language Pretraining in Chinese 中提出模型由 OFA-Sys 团队提供并集成进 Transformers。从本质上说Chinese-CLIP 是CLIPRadford et al., 2021面向中文场景的实现它以大规模中文图像-文本配对数据为训练语料通过对比学习将图像与文本映射到同一语义向量空间。它既可以完成跨模态检索以文搜图、以图搜文也可以作为视觉骨干网络支撑零样本图像分类、开放域目标检测等下游视觉任务。论文摘要的核心要点如下构建了包含大规模中文图像-文本配对的数据集大部分数据来自公开数据集在该新数据集上预训练中文 CLIP 模型共发布5 个不同规模的模型参数量从 7,700 万到 9 亿 5,800 万不等提出两阶段预训练方法第一阶段冻结图像编码器只训练文本侧第二阶段再放开全部参数联合优化实验表明 Chinese-CLIP 在 MUGE、Flickr30K-CN、COCO-CN 上的零样本与微调场景均取得当时领先的效果并在 ELEVATER 基准的零样本图像分类评测中具备有竞争力的表现。说明本文所依据的官方文档位于 docs/source/ja/model_doc/chinese_clip.md仓库内英文文档及源码均可交叉印证例如 src/transformers/models/chinese_clip/ 目录下的实现与 tests/models/chinese_clip/ 目录下的测试用例。二、快速上手计算图像与文本特征及相似度官方文档给出了一个非常直观的端到端示例加载预训练模型计算图像特征、文本特征并输出图文相似度概率。以下是完整代码直接继承自官方文档可复制运行 from PIL import Image import requests from transformers import ChineseCLIPProcessor, ChineseCLIPModel model ChineseCLIPModel.from_pretrained(OFA-Sys/chinese-clip-vit-base-patch16) processor ChineseCLIPProcessor.from_pretrained(OFA-Sys/chinese-clip-vit-base-patch16) url https://clip-cn-beijing.oss-cn-beijing.aliyuncs.com/pokemon.jpeg image Image.open(requests.get(url, streamTrue).raw) # 中文文本描述杰尼龟、妙蛙种子、小火龙、皮卡丘 texts [杰尼龟, 妙蛙种子, 小火龙, 皮卡丘] # 计算图像特征 inputs processor(imagesimage, return_tensorspt) image_features model.get_image_features(**inputs) image_features image_features / image_features.norm(p2, dim-1, keepdimTrue) # L2 归一化 # 计算文本特征 inputs processor(texttexts, paddingTrue, return_tensorspt) text_features model.get_text_features(**inputs) text_features text_features / text_features.norm(p2, dim-1, keepdimTrue) # L2 归一化 # 计算图文相似度分数 inputs processor(texttexts, imagesimage, return_tensorspt, paddingTrue) outputs model(**inputs) logits_per_image outputs.logits_per_image # 图像与文本的相似度分数 probs logits_per_image.softmax(dim1) # probs: [[1.2686e-03, 5.4499e-02, 6.7968e-04, 9.4355e-01]]运行结果中probs的含义是该张宝可梦图片与 4 条中文文本各自的匹配概率其中「皮卡丘」对应的概率高达约0.94说明模型成功识别出了图片内容。代码背后的调用链从源码角度看上述流程对应了三条核心调用路径实现见 modeling_chinese_clip.pyget_image_featurespixel_values经过ChineseCLIPVisionModelViT 骨干得到池化输出再经过visual_projectionnn.Linear无偏置映射到projection_dim维空间get_text_featuresinput_ids经过ChineseCLIPTextModelBERT 风格编码器取last_hidden_state[:, 0, :]CLS 位后经text_projection投影forward对两类特征做 L2 归一化后计算余弦相似度矩阵再乘以可学习的温度系数logit_scale.exp()得到logits_per_text与转置后的logits_per_image源码第 962-972 行。值得留意的是模型的 forward 中自动完成了特征归一化使用_get_vector_norm而非tensor.norm这是为了兼容 executorch 导出参见源码第 802-810 行的注释因此示例中手动归一化特征只是为了在单独调用get_*_features时保持行为一致。三、 Hub 上可用的预训练模型官方文档列出的当前可用预训练权重如下均可直接通过from_pretrained加载模型标识说明OFA-Sys/chinese-clip-vit-base-patch16base 规模patch 16默认 224 分辨率OFA-Sys/chinese-clip-vit-large-patch14large 规模patch 14OFA-Sys/chinese-clip-vit-large-patch14-336pxlarge 规模patch 14336 分辨率版本OFA-Sys/chinese-clip-vit-huge-patch14huge 规模patch 14参数量最大在 tests/models/chinese_clip/test_modeling_chinese_clip.py 的集成测试ChineseCLIPModelIntegrationTest中仓库正是以OFA-Sys/chinese-clip-vit-base-patch16为基准加载权重、计算logits_per_image形状并校验 softmax 概率与文档示例完全一致可作为复现脚本的参考。四、配置类ChineseCLIPConfig 家族Chinese-CLIP 采用「双塔 一个总配置」的设计仓库提供了三个配置类定义在 configuration_chinese_clip.pyChineseCLIPConfig总配置聚合文本与视觉两个子配置ChineseCLIPTextConfig文本编码器BERT 风格配置ChineseCLIPVisionConfig视觉编码器ViT 风格配置。4.1 ChineseCLIPConfig总配置的关键字段及默认值如下字段默认值说明text_configNone文本子配置可为字典或ChineseCLIPTextConfig实例为None时以默认值初始化vision_configNone视觉子配置可为字典或ChineseCLIPVisionConfig实例为None时以默认值初始化projection_dim512图文共同投影的目标维度logit_scale_init_value2.6592相似度温度系数logit_scale的初始值训练中可学习initializer_factor1.0权重初始化缩放因子initializer_range0.02权重初始化标准差用法示例官方文档 from transformers import ChineseCLIPConfig, ChineseCLIPModel, ChineseCLIPTextConfig, ChineseCLIPVisionConfig # 用默认配置初始化模型随机权重 configuration ChineseCLIPConfig() model ChineseCLIPModel(configuration) # 分别构造文本与视觉配置再组合成总配置 config_text ChineseCLIPTextConfig() config_vision ChineseCLIPVisionConfig() config ChineseCLIPConfig(text_configconfig_text, vision_configconfig_vision)从__post_init__的实现源码第 162-243 行可以看到总配置接受text_config_dict/vision_config_dict等旧版关键字参数以保证向后兼容并会在两个子配置缺失或冲突时给出日志提示最终统一转换为ChineseCLIPTextConfig与ChineseCLIPVisionConfig实例。ChineseCLIPConfig的model_type为chinese_clip其sub_configs声明了text_config与vision_config两个子配置键。4.2 ChineseCLIPTextConfig文本侧为 BERT 风格编码器关键字段与默认值字段默认值说明vocab_size30522词表大小hidden_size768隐藏层维度intermediate_size3072FFN 中间层维度num_hidden_layers12Transformer 层数num_attention_heads12注意力头数max_position_embeddings512最大序列长度hidden_actgelu隐藏层激活函数layer_norm_eps1e-12LayerNorm 的 epsiloninitializer_range0.02初始化标准差pad_token_id/bos_token_id0/0填充符与起始符 token ideos_token_idNone结束符 token idhidden_dropout_prob/attention_probs_dropout_prob0.1/0.1Dropout 概率type_vocab_size2token_type_ids的词表大小配置类带有strict校验validate_architecture会检查hidden_size是否能被num_attention_heads整除否则抛出ValueError。4.3 ChineseCLIPVisionConfig视觉侧为 ViT 风格编码器关键字段与默认值字段默认值说明hidden_size768隐藏层维度intermediate_size3072FFN 中间层维度projection_dim512视觉投影维度与文本侧对齐num_hidden_layers12Transformer 层数num_attention_heads12注意力头数num_channels3输入图像通道数RGBimage_size224输入图像尺寸patch_size32patch 尺寸patch16 模型对应为 16hidden_actquick_gelu激活函数区别于文本侧的 gelulayer_norm_eps1e-5LayerNorm 的 epsilonattention_dropout0.0注意力 Dropout 概率initializer_range0.02初始化标准差视觉编码器同样带strict校验。需要注意的是image_size与patch_size决定了位置编码的数量num_positions (image_size // patch_size) ** 2 1含 class token因此加载预训练权重时不应随意改动这两个参数如需在更高分辨率下推理可开启interpolate_pos_encoding让模型对位置编码做双三次插值实现见ChineseCLIPVisionEmbeddings.interpolate_pos_encoding源码第 155-194 行。五、图像处理器与总处理器5.1 ChineseCLIPImageProcessor / ChineseCLIPImageProcessorFastChineseCLIPImageProcessor负责把原始图片转换成模型所需的pixel_values其默认流水线定义在 image_processing_chinese_clip.py为处理步骤默认值说明resampleBICUBIC缩放使用的重采样算法image_mean/image_stdOPENAI-CLIP 的均值与标准差归一化参数沿用 CLIP 标准size{shortest_edge: 224}按最短边缩放到 224default_to_squareFalse不强制裁剪为正方形crop_size{height: 224, width: 224}中心裁剪尺寸do_resize/do_center_crop/do_rescale/do_normalize/do_convert_rgb均为True依次执行缩放、中心裁剪、重缩放、归一化、RGB 转换仓库同时提供基于 PIL 后端实现的ChineseCLIPImageProcessorPil见 image_processing_pil_chinese_clip.py两者默认参数完全一致ChineseCLIPImageProcessorFast为快速版本同样支持preprocess方法。归一化沿用 OPENAI-CLIP 的 mean/std保证与预训练时的输入分布一致是获得正确相似度分数的关键细节。5.2 ChineseCLIPProcessorChineseCLIPProcessor是一个ProcessorMixin组合器见 processing_chinese_clip.py把图像处理器与中文分词器tokenizer封装为统一入口。因此在使用时只需 processor ChineseCLIPProcessor.from_pretrained(OFA-Sys/chinese-clip-vit-base-patch16)之后无论是纯文本processor(text...)、纯图像processor(images...)还是图文混合processor(text..., images...)输入都会自动路由到对应的子处理器并返回模型可直接消费的张量字典。也可用AutoProcessor.from_pretrained加载两者等价。六、模型类ChineseCLIPModel 及其子模型6.1 ChineseCLIPModel双塔主模型ChineseCLIPModel是核心入口其内部结构源码第 814-832 行为text_modelChineseCLIPTextModel不附加池化层vision_modelChineseCLIPVisionModelvisual_projection/text_projection两个无偏置线性层把双塔输出统一投影到projection_dimlogit_scale可学习的温度缩放参数初始值由logit_scale_init_value决定。forward的输出类型为ChineseCLIPOutput一个ModelOutput包含以下字段字段形状含义loss(1,)图文对比损失仅在return_lossTrue时返回logits_per_image(image_batch, text_batch)图像相对文本的相似度分数logits_per_text(text_batch, image_batch)文本相对图像的相似度分数转置关系text_embeds(batch, output_dim)文本投影后的特征image_embeds(batch, output_dim)图像投影后的特征text_model_outputBaseModelOutputWithPooling文本子模型完整输出vision_model_outputBaseModelOutputWithPooling视觉子模型完整输出相似度的计算方式为特征归一化后求点积得到余弦相似度矩阵再乘以logit_scale.exp()源码第 965-972 行。若return_lossTrue则计算image_text_contrastive_loss——即对相似度矩阵的行、列各做一次交叉熵后取平均源码第 790-799 行这与 CLIP 的标准对比学习损失一致。6.2 ChineseCLIPTextModel 与 ChineseCLIPVisionModelChineseCLIPTextModel文本编码器无任何头部或投影层。forward接受input_ids、attention_mask、token_type_ids、position_ids、inputs_embeds返回last_hidden_state与pooler_outputCLS token 经 Tanh 池化。由于 Chinese-CLIP 是双向编码模型其注意力掩码由create_bidirectional_mask构造。ChineseCLIPVisionModel视觉编码器无头部或投影层。forward接受pixel_values与可选的interpolate_pos_encoding输出last_hidden_state与pooler_outputCLS 位经post_layernorm。这两个子模型适合需要单独提取单侧特征、或将其作为下游任务骨干网络的场景例如零样本图像分类、开放域目标检测等视觉任务。文档中每个类均标记了对应的forward方法可供查阅详细签名。七、训练侧要点与工程细节支持梯度检查点ChineseCLIPPreTrainedModel设置了supports_gradient_checkpointing True编码层继承自GradientCheckpointingLayer长序列/大模型微调时可开启以节省显存。多种注意力后端从源码看ChineseCLIPPreTrainedModel声明了_supports_sdpa、_supports_flash_attn、_supports_flex_attn与_supports_attention_backend注意力计算通过ALL_ATTENTION_FUNCTIONS按配置选择实现可结合硬件选用 SDPA 或 Flash Attention 加速。权重初始化_init_weights源码第 533-572 行针对视觉嵌入、文本嵌入、注意力投影、MLP 与两个投影层分别设定了初始化标准差其中注意力采用embed_dim**-0.5 * (2 * num_layers)**-0.5的缩放这与原始实现保持一致。模型并行友好_no_split_modules列出了ChineseCLIPVisionEmbeddings、ChineseCLIPTextEmbeddings、ChineseCLIPTextLayer、ChineseCLIPVisionLayer便于在模型并行/设备放置时按层切分。权重转换脚本仓库提供 convert_chinese_clip_original_pytorch_to_hf.py可将 OFA-Sys 原始 PyTorch 权重转换为 HF 格式便于自行迁移或复现官方权重。八、总结与延伸Chinese-CLIP 在 Transformers 中是一套完整、易用的中文图文多模态方案通过ChineseCLIPProcessor一键完成图文预处理通过ChineseCLIPModel即可获得对齐后的图文特征与相似度分数。基于本文内容你可以用ChineseCLIPModel/ChineseCLIPProcessor实现中文图文检索、零样本图像分类等任务通过ChineseCLIPConfig家族理解并调整模型规模隐藏维度、层数、patch 大小等借助ChineseCLIPTextModel/ChineseCLIPVisionModel单独提取文本或视觉特征作为下游任务骨干。如需进一步深入学习可继续阅读仓库内的英文模型文档、查看 src/transformers/models/chinese_clip/ 下的完整实现或参考 tests/models/chinese_clip/ 下的模型、图像处理与处理器测试用例它们完整覆盖了本模型的前向计算、处理器行为与端到端集成验证。【免费下载链接】transformers Transformers: the model-definition framework for state-of-the-art machine learning models in text, vision, audio, and multimodal models, for both inference and training.项目地址: https://gitcode.com/GitHub_Trending/tra/transformers创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考