Chinese-CLIP 图文匹配任务:输入单张图片和一条文本,判断这两个内容是否匹配,如何实现这个功能?

z9ju0rcb  于 9个月前  发布在  其他
关注(0)|答案(3)|浏览(242)

为了将logits转换为0-1的概率,你需要对logits应用softmax函数。softmax函数可以将一个实数向量转换为一个概率分布向量,其中每个元素都是非负的,并且所有元素之和为1。这里是如何使用softmax函数的:

给定一个logits向量$x$,softmax函数可以表示为:

$softmax(x) = \frac{exp(x)}{sum(exp(x))$}

在这个例子中,你已经有了一个名为logits_per_image的值,大约为40左右。要将其转换为0-1的概率,你可以首先计算每个类别的指数,然后除以所有类别指数的总和。这将给你一个概率分布向量,其中每个元素都是0-1之间的概率。

以下是如何实现这个过程的代码:

  1. import numpy as np
  2. # 假设 logits_per_image 是一个包含40个元素的numpy数组
  3. logits_per_image = np.array([...])
  4. # 计算每个类别的指数
  5. exp_logits = np.exp(logits_per_image)
  6. # 计算总指数
  7. total_exp_logits = np.sum(exp_logits)
  8. # 应用softmax函数并归一化
  9. probs = exp_logits / total_exp_logits

现在,probs变量包含了一个概率分布向量,其中每个元素都是0-1之间的概率。这些概率可以用来判断输入的单张图和单个文本是否匹配。

tct7dpnv

tct7dpnv1#

您好,由于CLIP需要通过大Batch对比学习进行训练,因此相对来说更适合相对的比较(例如对于C来说,A比B更匹配)。对于绝对的判别(例如A和B是否匹配),可能需要根据具体的任务和数据设定一个经验阈值。

vc9ivgsu

vc9ivgsu2#

我使用这种方法获取文本和图片的相似度,总是得到1.0。

w6lpcovy

w6lpcovy3#

我用这个方式获取一个文本和一个图片的相似度,总是得到1.0
这是我的代码(其实是git本身的代码,我应该没有去动过这里model.py)

  1. def get_similarity(self, image, text):
  2. image_features = self.encode_image(image)
  3. text_features = self.encode_text(text)

相关问题