空 文本 这 一行 没有 分: 百度 用 BLIP 判 别 头 算 匹配 概率
百度智能云百舸文档更新于 2026-09-11。ImageTextMatchingScore 用 BLIP 的 ITM 判别头给图像和文本打 0 到 1 的匹配概率,保留 6 位小数。空文本或微批失败写成 None。它不带阈值,也不能把这个分数当成 CLIP 余弦。

空文本这一行没有分:百度用 BLIP 判别头算匹配概率
百度智能云百舸的《图文匹配评分(BLIP ITM)》更新时间是 2026-09-11。这一页是数据处理算子,名字叫 ImageTextMatchingScore。BLIP 是 Salesforce 的图文模型,ITM 是 image-text matching,也就是图文是否匹配的判别头。算子逐行把图像和配对文本送进判别头,输出 0 到 1 的匹配概率。它只产分数,没有阈值,筛样本要放到后面的 pipeline。
分数怎么来
模型用 transformers 的 BlipProcessor 和 BlipForImageTextRetrieval。前向时 use_itm_head=True,取 itm_score 的两类 logits,顺序是「不匹配、匹配」,再做 softmax,留下匹配类概率,保留 6 位小数。
这个分数是判别头的概率,量纲是 0 到 1。它和 CLIP 双塔余弦不是同一个尺度,阈值不能互相搬。CLIP 是把图像和文本各自编成向量再算点积。
只有图像列非空、文本列去掉空白后也非空的行才会推理。其余行直接输出 None。按 batch_size 切微批。某一微批抛异常,只把这一批留成 None,并记 exception 日志,其他批继续。文本由 processor 做 padding 和 truncation,超长按分词器上限截断。图像先转成 RGB。pixel_values 再按 dtype 转精度。
设备:use_gpu 且 CUDA 可用时用 cuda:(rank % 可见卡数),否则用 CPU。CPU 上如果指定 float16,会打 warning 并退回 float32。权重目录 {model_path}/{model_name} 不存在时,构造阶段抛 FileNotFoundError,不联网下载。image_src_type 和 dtype 在构造期校验。两列长度不一致抛 ValueError。
默认参数
输入列是 images 和 texts。输出列 itm_score 是 float64。任一侧为空,或该微批失败,值为 None。
image_src_type 默认 image_url,也可以是 base64 或 binary。这里的 url 包含本地路径和 BOS 路径。model_path 默认 /opt/aihc/model,注意是 model,不是 models。model_name 默认 Salesforce/blip-itm-base-coco。dtype 默认 float32,可选 float16、float32、bfloat16。batch_size 默认 16。rank 默认 0,多卡时用来选卡。
文档写明两件事。权重必须带 retrieval 或 ITM 头,例如 blip-itm-base-coco。BLIP 的 captioning 权重没有 ITM 头,加载会失败。算子没有 min_score 或 max_score,按分数过滤要在 pipeline 里另做。
示例跑在 Daft 上。actor_udf_ready_timeout 是 6000,min_cpu_per_task 是 0。调用时 num_cpus=1,num_gpus=1,concurrency=1,batch_size=2。这次调用把内部默认的 16 改成了 2。样本是同一张图配两句文本,第二句是空串,按规则这一行应是 None。路径写成占位。
限制
这一页没有准确率,没有和人工判断的对照,也没有建议阈值。0 到 1 是概率范围,不是通过线。空文本和微批失败都写成 None,页面没有第二种状态码把它们分开。示例只有 2 行,不能当成吞吐。CPU 回退 float32 之后慢多少,没有写。
百度智能云,图文匹配评分(BLIP ITM),2026-09-11,https://cloud.baidu.com/doc/AIHC/s/Xmtwqrmar
觉得有用,转给同事
微信扫码
用微信扫一扫,在手机上打开后即可转发。