CLIP计算图片与文本相似度(多幅图片与一个文本)

使用clip模型计算图文相似度 阅读详情
AI摘要

本文深入探讨了CLIP模型的工作原理,介绍了如何利用大规模图像文本配对数据进行对比学习,实现视觉和语言的联合表示。文章详细讲解了CLIP模型的训练过程,包括数据集构建、对比学习框架、双编码器架构以及零样本学习能力,并提供了代码实现示例,展示了模型在图像分类等任务上的高效性能。

一、CLIP介绍

  CLIP(Contrastive Language-Image Pre-training)模型是一种通过自然语言监督来学习可迁移视觉模型的方法。CLIP模型利用海量的图像和相关文本数据对图像编码器和文本编码器进行联合训练,目标是最大化图像和文本对的余弦相似性。通过这种训练方法,CLIP能够在没有针对特定任务训练的情况下(零样本学习),对多种视觉任务进行有效的预测。

CLIP代码链接

在这里插入图片描述
  CLIP(Contrastive Language-Image Pre-training)模型的技术路线包含以下几个核心方面:

  1. 数据集构建:

  CLIP模型的训练基于一个包含约4亿对图像和文本的大规模数据集。这些数据对从互联网收集而来,涵盖了极其丰富的视觉内容和对应的自然语言描述。这样广泛的数据覆盖确保了模型能够接触到多样的视觉概念和语言表达,为后续的模型训练奠定了基础。

  1. 对比学习:

  CLIP通过对比学习框架来进行训练,即通过最大化匹配的图像和文本对的相似度同时最小化不匹配对的相似度。具体来说,模型使用余弦相似性来度量图像和文本之间的匹配程度,并通过对比损失函数来优化模型参数,使得正确的图像-文本对相似度高于错误对。

  1. 双编码器架构:

  CLIP模型包括两个主要组件:图像编码器和文本编码器。图像编码器负责将输入图像转换为高维特征向量;文本编码器则将文本描述转换为同维度的向量。这两个编码器通常使用神经网络实现,如ResNet或Transformer模型。

  1. 零样本学习能力:

  在预训练结束后,CLIP能够直接利用训练好的文本编码器生成新的类别描述的特征,与图像特征进行匹配,实现零样本分类。这意味着CLIP可以在没有额外训练数据的情况下,直接根据文本描述进行图像分类或其他视觉任务。

  1. 跨任务迁移能力:

  由于CLIP在训练时不依赖于特定任务的标注,其学习到的视觉表示具有很强的通用性和迁移能力。这使得CLIP可以在多种视觉任务上表现出色,包括但不限于对象识别、场景分类、动作识别等。

  1. 效率和性能:

  CLIP的训练和应用都显示出较高的效率。在多个标准视觉任务上,CLIP与专门为特定任务训练的模型相比,展示了竞争性的或更优的性能,而且常常不需要针对特定数据集的再训练或微调。

二、代码实现

2.1代码思路

  1. 图像和文本的预处理

图像预处理

  • 功能:图像预处理的主要目的是将图像数据标准化,确保输入到模型的图像具有一致的大小和类型格式,以便模型能够正确解析和处理图像数据。

  • 操作步骤:

  尺寸调整:CLIP模型要求输入图像具有特定的尺寸(如224x224像素),预处理函数会将所有图像调整到这一尺寸。

  颜色转换:将图像从其原始颜色空间(如RGBA)转换到RGB,因为CLIP模型是在RGB图像上训练的。

  归一化:对图像的像素值进行归一化处理,通常是使其均值为0,标准差为1。这有助于模型更快地收敛,提高训练稳定性。

文本预处理

  • 功能:文本预处理确保文本数据被正确分词、编码,转换成模型能够理解的格式。

  • 操作步骤:

  分词:使用CLIP的内置tokenize函数,将一串文本分解成单独的词汇或符号。

  编码:将分词后的文本转换为模型能接受的数值ID。

  填充或截断:确保所有文本序列长度一致,以满足模型输入要求。

  1. 特征提取

图像特征

  • 处理流程:图像数据通过CLIP的图像编码器部分(一个预训练的Vision Transformer或ResNet模型)处理,转换成高维的特征向量。

  • 归一化:对特征向量进行归一化(L2归一化),确保特征向量的长度为1,这样相似度计算将只基于向量之间的角度差异。

文本特征

  • 处理流程:同样,文本数据通过CLIP的文本编码器(基于Transformer的模型)处理,每个标记或词被映射到高维空间以形成特征向量。

  • 归一化:文本特征向量也进行L2归一化,以便与图像特征在同一度量空间比较。

  1. 相似度计算
  • 内积:归一化后的图像和文本特征向量通过计算内积(点积)来衡量相似度。因为向量已归一化,所以内积结果反映了两个向量之间的余弦相似度,即它们之间的夹角。
  1. 可视化相似度矩阵
  • 生成热图:使用matplotlib生成热图,其中横坐标表示不同的图像,纵坐标表示不同的文本描述。每个格子的颜色深浅代表了对应图像和文本之间的相似度,颜色越深表示相似度越高。

  • 视觉表示:这种可视化方法直观地展示了模型是如何理解和关联图像与文本的。

  1. 保存与展示结果
  • 保存图像:热图被保存为PNG文件,以便于文档记录或进一步分析。

  • 显示图像:同时,热图在屏幕上显示,允许用户直接观察和分析模型输出的相似度结果。

2.2完整代码

import os
from PIL import Image
import numpy as np
import torch
import clip
import matplotlib.pyplot as plt

# 加载 CLIP 模型
model, preprocess = clip.load("ViT-B/32")
# print(model)
model.cuda().eval()

# 准备你的图像和文本
your_image_folder = "img"  # 替换为你的图像文件夹路径
your_texts = ["plates with knives"]  # 替换为你的文本列表

images = []
for filename in os.listdir(your_image_folder):
    if filename.endswith(".png") or filename.endswith(".jpg"):
        path = os.path.join(your_image_folder, filename)
        image = Image.open(path).convert("RGB")
        images.append(preprocess(image))

# 图像和文本预处理
image_input = torch.tensor(np.stack(images)).cuda()
text_tokens = clip.tokenize(your_texts).cuda()

# 计算特征
with torch.no_grad():
    image_features = model.encode_image(image_input).float()
    text_features = model.encode_text(text_tokens).float()

# 计算相似度
image_features /= image_features.norm(dim=-1, keepdim=True)
text_features /= text_features.norm(dim=-1, keepdim=True)

similarity = (text_features.cpu().numpy() @ image_features.cpu().numpy().T)
print('similarity:',similarity)

# 可视化相似度
plt.imshow(similarity, cmap="hot", interpolation="nearest")
plt.colorbar()
plt.xlabel("Images")
plt.ylabel("Texts")
plt.title("Similarity between Texts and Images")
plt.xticks(range(len(images)), range(len(images)), rotation=90)
plt.yticks(range(len(your_texts)), your_texts, rotation='vertical', va='center')  # 设置标签竖向显示并居中

# 保存图像到文件
plt.savefig("similarity.png", bbox_inches='tight')  # 确保所有内容都在保存的图片里

# 显示图像
plt.show()

2.3运行结果

  我们比较了文本 plates with knives 和以下三幅图片之间的相似度:

在这里插入图片描述
  得到的相似度结果如下:

similarity: [[0.29848784 0.19507146 0.21618465]]

  将相似度结果进行可视化后的图片如下:

在这里插入图片描述

无人机遥感图像拼接实战:从特征匹配到正射影像生成 图像拼接是计算机视觉与摄影测量交叉领域中的基础技术,旨在将多幅具有重叠区域的影像通过特征提取、几何变换与融合,生成连续且可量测的大幅面影像。其核心在于使用SIFT等尺度不变特征描述子识别同名点,结合RANSAC算法剔除误匹配并稳健估计单应矩阵,再通过加权融合或多频段融合消除拼接缝隙。该技术在测绘、农业、电力巡检等场景中具有重要价值,尤其对于无人机遥感任务,单张航片覆盖范围有限,必须经过严格的几何校正与正射投影,才能获得具有地理参考的影像产品。相比普通全景拼接,无人机遥感图像拼接更强调精度、重叠度设计、像控点 阅读详情

相关推荐

【信息科学与工程学】【产品体系】第十二篇 制造业生产加工05 控制算法 ——飞行(1)

航空航天控制的高级主题,包括先进飞行控制、航天器高级控制、无人机集群、航空发动机控制和飞行管理。

weixin_49199313的博客 1910

CLIP 图文检索,相似度计算

用openAI的CLIP模型做检索和相似度计算

蓝羽飞鸟的博客 5048

VINS技术路线与代码详解

VINS技术路线 写在前面:本文整和自己的思路,希望对学习VINS或者VIO的同学有所帮助,如果你觉得文章写的对你的理解有一点帮助,可以推荐给周围的小伙伴们,当然,如果你有任何问题想要交流,欢迎随时探讨。话不多说,下面上正文。 VINS代码地址:https://github.com/HKUST-Aerial-Robotics/VINS-Mono 参考文档:1.VINS-Mono A R...

wangshuailpp的博客 7万+

【计算机视觉】使用 notebook 展示如何下载和运行 CLIP models,计算图片和文本相似度,实现 zero-shot 图片分类

【计算机视觉】使用 notebook 展示如何下载和运行 CLIP models,计算图片和文本相似度,实现 zero-shot 图片分类

wzk4869的博客 5029

【Docker】Docker安装Hadoop分布式集群

hadoop目录安装在:/usr/local/hadoop-2.7.0/etc/hadoop。访问Hadoop102:9870,查看是否能够看到hdfs界面。访问hadoop103:8088,查看能够看到yarn界面。在yarn上可以看到执行情况。

weixin_46429290的博客 3460

从HSPICE到Spectre:手把手教你搞定不同SPICE仿真器的网表转换(附避坑指南)

本文详细介绍了从HSPICE到Spectre的SPICE仿真器网表转换方法,包括核心语法差异、分步转换流程和常见问题排查。通过实战案例和避坑指南,帮助工程师高效解决不同SPICE仿真器间的兼容性问题,提升集成电路设计效率。

weixin_29745609的博客 368

图像相似度比较之 CLIP or DINOv2

在人工智能领域,计算机视觉的两大巨头是CLIP和DINOv2。CLIP改变了图像理解的方式,而DINOv2为自监督学习带来了新的方法。在本文中,我们将探索定义CLIP和DINOv2的强项和微妙之处的旅程。我们旨在发现这些模型中哪一个在图像相似度任务的世界中真正出色。让我们见证这两位巨头的较量,看看哪个模型胜出。CLIP中的图像相似度使用CLIP计算两个图像之间的相似度是一个简单的过程,只需要两个步...

Warmer_Sweeter 4242

OWASP 2025版AI大模型攻击安全风险汇总(攻击方法种类)

提示词注入是大模型最基础、最常见的核心漏洞,攻击者通过构造直接或间接的恶意自然语言输入,篡改大模型原本的正常行为与输出结果。哪怕这类恶意内容对人类是隐藏、不可见的,只要模型能够正常解析读取,就会触发漏洞。它和大家常说的模型“越狱”相关,但并不等同:越狱是提示词注入的极端形式,会直接让模型彻底无视所有内置安全协议,完全脱离管控;而普通提示词注入,更多是针对性篡改模型行为、诱导执行特定操作。

墨痕诉清风的博客 517

基于CLIP模型的图像相似度计算与检索

基于CLIP模型的图像相似度计算与检索

小张学AI 2955

微搭低代码实现用户登录及注册功能

在小程序开发中,我们可以拿到微信用户的openid,openid可以作为用户的唯一标识,在查询数据的时候可以进行数据过滤实现查询自己提交的数据。那微搭中是否也有openid这个概念,可以获取用户自己提交的数据呢? 答案是肯定的,那要怎么去做呢?思路是先创建一个数据源方法,在数据源中返回openid,然后低代码中可以调用数据源的方法并且赋值给全局变量,这样在后续的业务中从全局变量就可以获取openid了,方便做数据权限的控制。 为了实现这个目的,我们从创建数据源开始。 创建数据源 我们先创建一个用户管理的数据

低代码布道师的博客 2998

YOLOv11改进 | 细节涨点篇 | DySample一种最新的轻量化动态上采样算子(效果完爆CARAFE)

本文给大家带来的最新改进机制是一种号称超轻量级且有效的动态上采样器——DySample。与传统的基于内核的动态上采样器相比,DySample采用了一种基于点采样的方法,相比于以前的基于内核的动态上采样器,DySample具有更少的参数、浮点运算次数、GPU内存和延迟。此外,DySample在包括语义分割、目标检测、实例分割、全景分割和单目深度估计在内的五个预测任务中,性能均优于其他上采样器(截至目前最有效的上采样算子),

Snu77的博客 4211

【AI数学】余弦相似性(含python实现)

Cosine Similarity,即余弦相似度,又叫余弦相似性。是一个中学数学的概念,即用两个向量之间的夹角余弦值代表这两个向量之间的相似度。Cosine Similarity虽然简单,但广泛应用在AI模型中,比如CLIP计算图像embedding和文本embedding之间的相似性等。 Python实现(Pytorch版本) 在代码实现中,通常先分别计算A⃗∣A∣\vec{A} \over{\vert{A}\vert}∣A∣A​、B⃗∣B∣\vec{B} \over{\vert{B}\vert}∣B∣B

木盏 4442

智能车图像处理12-进阶篇4--环岛辅助判断条件

主函数: 第6行: 含义是当前需要不在坡道和车库状态 第11-12行 : 寻找一下环岛的双断点(在辅助函数中) 第16-66行: 当左右线的方差满足一边很大,一边很小时,truepianfangflag /truepianfangflagforleft 置1,在环岛的判断中使用。 辅助函数: 双断点函数(左与右相似,以做为例): 第13-28行: 第一处断点 第29-40行: 第一处断点后 连续边线 第41-52行: 第一处连续后,第二处断点 第53-64行: 第二处断点后,第二处

taiyuezyh的博客 1万+

CLIP-GmP-ViT-L-14惊艳效果:艺术画作风格描述与图像匹配的高相关性示例

本文介绍了如何在星图GPU平台上自动化部署CLIP-GmP-ViT-L-14镜像,实现艺术画作风格描述与图像匹配的高相关性分析。该模型特别擅长理解图像内容与文本描述的语义关联,可应用于艺术教育辅助、艺术品数字化管理等场景,帮助用户快速识别和分类不同艺术流派的作品风格。

weixin_33773084的博客 570

SimSwap复现指引及代码分析【2023有更新】

我的环境!!!😚😚😚 之后会遇到:还会遇到至此环境配置完毕!下面是所需要的checkpoint。至此环境准备结束。先试试环境是否有问题,图片是代码包中给的。我用的是512的checkpoint,无水印,a是源脸,b是目标脸。输出到./output/result_whole_swapsingle.jpg 如图是可以成功换脸的:(为了方便查看将图像裁剪到了128x128) 表示图像预处理,相应的改为也是一样。不加就是对已经面部对齐的图像进行简单的面部交换。 加上就是无水印。 交换一张图片中的所有面孔。

zik的博客 2047

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

不用训练也能分割!手把手教你用CLIP+FreeSOLO实现零样本参考图像分割

本文详细介绍了如何利用CLIP与FreeSOLO实现零样本参考图像分割(Zero-shot Referring Image Segmentation),无需训练即可精准分割图像中的特定对象。通过结合CLIP的语义理解能力和FreeSOLO的无监督分割优势,提供了一种高效的开箱即用解决方案,适用于电商、医学等多个领域。

weixin_30363509的博客 431

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Datawhale训练营AIGC方向 第二期

Datawhale AIGC方向 第二天

2301_79996254的博客 1615

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

《从零开始编写NES模拟器教程》第3课、用代码实现总线、内存、ROM、Mapper

《从零开始编写NES模拟器教程》第3课、用代码实现总线、内存、ROM、Mapper

2501_93199744的博客 323

探索扩散模型在图像风格迁移中的应用——基于ILVR的条件生成技术

本文深入探讨了扩散模型在图像风格迁移中的应用,重点介绍了基于ILVR的条件生成技术。通过分析扩散模型的基础原理和ILVR的核心工作机制,揭示了无需额外训练即可实现风格迁移的奥秘。文章还提供了详细的实战指南和高级应用技巧,帮助读者掌握这一创新技术,提升艺术创作效率。

weixin_29070721的博客 551

Apriel-1.5多模态大模型:中段训练与混合推理技术解析

多模态大模型通过融合视觉与语言信号实现复杂认知任务,其核心技术在于跨模态表征学习与推理能力构建。中段训练(Mid-training)作为预训练与微调间的关键阶段,采用知识蒸馏、跨模态对齐和推理模式植入的三阶段策略,显著提升模型的概念关联与逻辑推理能力。混合推理引擎结合符号推理与神经推理优势,通过动态仲裁机制处理结构化与非结构化任务,在视觉问答等场景中展现23%的性能提升。该技术路线在15B参数规模下平衡计算成本与模型能力,配合课程学习与记忆增强等优化策略,已成功应用于教育辅导、工业质检等需要多跳推理的领域。

weixin_42526310的博客 336

OpenCV(Python 版)

计算机中的图像本质上是由无数像素组成的网格,彩色图像通常通过红(R)、绿(G)、蓝(B)三个独立的颜色通道来记录信息,每个通道都是一个二维数字矩阵,矩阵中的数值代表对应位置像素该颜色的亮度(通常为 0-255),三个通道的数值组合决定了像素最终呈现的颜色,计算机存储的就是这些通道矩阵数据,以及图像的宽、高、通道数等元信息。

qq_32381773的博客 408

相似度算法余弦相似度

余弦相似度

dream_home8407的博客 2486

【CLIP详读】

OpenAI的CLIP项目自从推出以来,CLIP引起了广泛的关注。它的方法看似简单,但效果非常出色,许多结果令人惊叹。例如,预训练模型可以在任何视觉分类数据集上实现出色的效果,而且最重要的是,它具有零样本学习的能力,这意味着它无需在这些数据集上进行额外的训练,就能够表现出色。作者进行了大量实验,涵盖了30多个数据集,包括OCR、视频动作检测、坐标定位和许多细粒度分类任务。

天风的人工智能博客 1268

深度学习--CLIP算法(文本搜图片,图片搜图片)

主要对CLIP模型(多模态)做了一个基本的介绍,CLIP模型可以使用文本去搜索图片,也可以图片搜图片。

积木的笔记 1万+

CLIP介绍

CLIP的基本介绍

weixin_43480889的博客 4875

【计算机视觉】使用 python-notebook 展示如何下载和运行 CLIP models,计算图片和文本相似度,实现 zero-shot 图片分类

例如,通过将一张图片和一个描述该图片内容的文本查询进行编码,可以计算它们在向量空间中的距离,并找到与之相似的图片或文本。此外,CLIP还能够理解和生成自然语言描述的图像,以及生成图像描述的文本,具备了一定的语义理解和生成能力。在训练过程中,CLIP通过最大化相似图像和文本的相似性,并最小化不相似图像和文本的相似性来调整模型参数。开发的一个深度学习模型,用于处理图像和文本之间的联合表示。它的目标是将图像和文本嵌入到一个共享的向量空间中,使得相似的图像和文本在这个空间中距离较近,而不相似的图像和文本距离较远。

weixin_44955407的博客 1165
上一篇: 场景图生成网络——RelTR(TPAMI2023)
下一篇: AI2THOR 2.1.0使用教程
晓shuo
晓shuo 优质创作者: 人工智能技术领域 优质创作者: 人工智能技术领域
博客等级 码龄6年 4万+粉丝 113原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

晓shuo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值