CLIP 图文检索,相似度计算

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

文章介绍了OpenAI的CLIP模型,一种可以从自然语言监督中学到视觉概念的神经网络,展示了其在零样本图像分类、标签预测、图片搜索和相似度计算中的应用。通过例子演示了如何使用CLIP进行图像识别和检索,以及计算图片间的相似度。,

CLIP 是OpenAI提出的神经网络,它可以从自然语言监督中有效地学习视觉概念。
CLIP 可以应用于任何视觉分类基准,只需提供要识别的视觉类别的名称,类似于 GPT-2 和 GPT-3 的“零样本”功能。

相关paper
用法可以参考github

这里举几个使用CLIP的例子。

首先你需要安装pytorch, 还有matplotlib, opencv等,
然后安装clip

pip install git+https://github.com/openai/CLIP.git

1.零样本图像分类

这里的分类并不是直接让CLIP预测一个标签,而是你给出一些标签的候选项,它会给这些候选项预测概率。

比如这张图片
请添加图片描述
给CLIP一些标签:“a dog”, “a cat”,“a man”,“a tree”, “food”,它会给每个标签预测一个概率,概率最高的就是最后的label.
你会看到"a cat"的得分最高。

同样的,如果用多张图片去匹配一个提示标签,可以用下面代码的logits_per_text.

device = 'cuda' if torch.cuda.is_available() else 'cpu'
model, preprocess = clip.load('ViT-B/32', device=device)

image = preprocess(Image.open('cat.png')).unsqueeze(0).to(device)
text = clip.tokenize(["a dog", "a cat","a man","a tree", "food"]).to(device)

with torch.no_grad():
   #计算图像和token之间的分数
   #logits_per_image是image和每个token的分数,Tensor(1,5)
   #logits_per_text是每个token和image的分数,Tensor(5,1)
   logits_per_image, logits_per_text = model(image, text)
   probs = logits_per_image.softmax(dim=-1).cpu().numpy()

print('Label probs:', probs)
#output:Label probs: [[3.159e-03 9.927e-01 1.589e-03 3.490e-04 2.241e-03]]

2. 用提示语搜索图片

现在用COCO数据集的图片来做测试,用val_2017数据,大概5000张图片。
用一个提示语"a red bus"搜索最相近的3张图片,看能得到什么。
这里计算image feature和text feature的相似度时,用了余弦相似度。

data_folder = 'coco/val2017'
images = []
for root,dirs,files in os.walk(data_folder):
     for file in files:
         if file.endswith('jpg'):
             images.append(root + '/' + file)
text = clip.tokenize(['a red bus']).to(device)
text_features = model.encode_text(text)
result = {}
cos = nn.CosineSimilarity(dim=0)

for img in images:
    with torch.no_grad():
        image_preprocess = preprocess(Image.open(img)).unsqueeze(0).to(device)
        image_features = model.encode_image(image_preprocess)
        sim = cos(image_features[0], text_features[0]).item()
        sim = (sim+1)/2 #(-1,1) --> (0,1)
        result[img] = sim

sorted_value = sorted(result.items(), key=lambda x:x[1], reverse=True)
sorted_res = dict(sorted_value)
top_3 = dict(itertools.islice(sorted_res.items(),3))
print(top_3)
#
# fig,axs =plt.subplots(1,3)
#
# i=0
# for key in top_3:
#     key_img = cv2.cvtColor(cv2.imread(key),cv2.COLOR_BGR2RGB)
#     axs[i].imshow(key_img)
#     axs[i].set_title('sim='+"{:.3f}".format(top_3[key]))
#     axs[i].axis('off')
#     i=i+1
# fig.suptitle('a red bus')
#
# plt.show()

根据提示语,按相似度从高到低,检索出如下3张图片。

请添加图片描述

3.图片的相似度

给出两张图片,计算它们的相似度。
现在要比的是上面“a red bus"中左边2个图片的相似度。
是通过计算image feature的余弦相似度实现的,而image feature是通过CLIP的encode得到。

img1 = 'bus1.jpg'
img2 = 'bus2.jpg'
cos = nn.CosineSimilarity(dim=0)

img1_process = preprocess(Image.open(img1)).unsqueeze(0).to(device)
img2_process = preprocess(Image.open(img2)).unsqueeze(0).to(device)

img1_feature = model.encode_image(img1_process)
img2_feature = model.encode_image(img2_process)

sim = cos(img1_feature[0], img2_feature[0]).item()
sim = (sim+1)/2
print("similarity: ", sim)
#output: similarity:  0.844970703125

4.用图片检索图片

还是用这个红色的bus, 看看用它能从COCO数据中检索出什么。

请添加图片描述

img1='bus1.jpg'
input_image = preprocess(Image.open(img1)).unsqueeze(0).to(device)
input_image_features = model.encode_image(input_image)

result = {}
for img in images:
    with torch.no_grad():
        image_preprocess = preprocess(Image.open(img)).unsqueeze(0).to(device)
        image_features = model.encode_image( image_preprocess)
        cos = torch.nn.CosineSimilarity(dim=0)
        sim = cos(image_features[0],input_image_features[0]).item()
        sim = (sim+1)/2
        result[img]=sim


sorted_value = sorted(result.items(), key=lambda x:x[1], reverse=True)
sorted_res = dict(sorted_value)

top_3 = dict(itertools.islice(sorted_res.items(), 3))

print(top_3)

请添加图片描述

参考资料:
https://medium.com/@jeremy-k/unlocking-openai-clip-part-1-intro-to-zero-shot-classification-f81194f4dff7
https://medium.com/@jeremy-k/unlocking-openai-clip-part-2-image-similarity-bf0224ab5bb0

用CLIP实现图像相似度检索:从特征提取到服务化落地全记录 在图像检索与相似度匹配场景中,传统方法依赖像素级特征,难以理解图片的语义内容。多模态模型CLIP通过对比学习将图像与文本映射到同一向量空间,使得语义相似的图片在嵌入空间中距离更近,为跨模态检索提供了新思路。借助预训练CLIP模型,开发者无需微调即可提取高质量的图像特征,配合L2归一化与余弦相似度计算,可快速构建图像相似度服务。在实际工程中,需重点关注图像预处理链路、向量归一化、批量推理性能以及向量数据库的选型,结合FastAPI封装在线接口,并处理GPU部署、缓存策略等生产化问题。本文记录了一个后端工程师从 阅读详情

相关推荐

(pytorch进阶之路)CLIP模型 实现图像多模态检索任务

CLIP模型解决了一个多模态问题 代码地址: https://github.com/yyz159756/CLIP-VIT-

qq_19841133的博客 9239

CLIP与Chinese-CLIP:多模态预训练模型解读和图文检索体验

CLIP是2021年OpenAI提出的基于图文对比学习的多模态预训练模型,具备强大的zero-shot迁移能力。数据集:来源于互联网上搜集的4亿个image-text对,涵盖了50万个qurey,并尽量保持不同qurey的数据量均衡。核心思想:将image-text对当做一个整体,基于对比学习的方法,模型训练时尽可能地提高image与对应text的特征相似度,尽可能的降低image与不配对text的相似度。

梦坠凡尘 1万+

图像文本检索之clip

在模型上一共尝试了8个模型,从resnet到ViT,最小模型和最大模型之间的计算量相差约100倍,迁移学习的效果基本和模型大小成正相关。(3)Clip的(image, text)对都是一一配对的,一个图片只对应一个句子,所以这里也没有像一个图片对应多个句子,可以对句子进行随机采样操作。(1)在训练过程中,文本的主干网络和图片的主干网络都没使用类似ImageNet的预训练权重做初始化,全部都是随机初始化的。Clip模型训练数据都是网络爬取的,缺乏数据的过滤和筛选,会存在社会歧视问题。

年轻即出发, 2520

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

向AI转型的程序员都关注了这个号????????????1. CLIP简介  CLIP全称Constrastive Language-Image Pre-training,是OPAI推出的采用对比学习的文本-图像预训练模型。CLIP惊艳之处在于架构非常简洁且效果好到难以置信,在zero-shot文本-图像检索,zero-shot图像分类,文本→图像生成任务guidance,open-domain 检测分割等任务上均...

datayx的文章 2386

多模态表征—CLIP及中文版 Chinese-CLIP:理论讲解与代码微调

CLIP(对比语言-图像预训练)是一种通过对大量的图文对进行对比学习,从而获得图像和文本联合表征的模型。它可以将图像和文本映射到同一个向量空间,使得相似的图像和描述具有更高的相似度。本文详细介绍了 CLIP 和 Chinese-CLIP 的理论基础,并通过代码示例展示了如何进行模型的微调和应用。通过对多模态模型的掌握,能够更好地应对图像和文本之间的关联任务,为实际应用提供强有力的支持。

小蜗牛的珍贵百宝箱 1416

手把手写深度学习(16):用CILP预训练模型搭建图文检索系统/以图搜图/关键词检索系统

CLIP is all yuo need!CLIP在text-to-image、图像检索、视频理解、图像编辑、自监督学习等领域都展示了极强的统治力,这篇博客手把手教大家搭建自己的图文检索系统,能在检索指标上一举秒杀过往的工作,展示CLIP极强的统治力!.........

沉迷单车的追风少年 3602

多模态图文检索实战——基于CLIP实现图文检索系统(附源码)

利用CLIP模型实现图文检索为我们在多媒体数据处理等诸多领域提供了很大的便利,比如在图像搜索引擎、内容推荐系统等方面都有着广阔的应用前景。这也是RAG最核心的部分可以说这是多模态RAG的一个简单尝试,在实际应用中,我们还可以进一步优化模型参数、增加更多的图片和文本数据进行训练、改进相似度计算的策略等,来不断提升图文检索的准确性和效率,希望这篇博客能够帮助大家对利用CLIP实现图文检索有一个初步的了解和实践思路哦。

weixin_63866037的博客 4052

STM32单片机:驱动ADS1115四个通道全开程序

本文介绍了德州仪器(TI)的ADS1115高精度16位模数转换器(ADC)及其应用实现。该芯片具有16位分辨率、可编程增益放大器(PGA)和低功耗特性,支持±0.256V至±6.144V量程。文章提供了完整的C语言驱动代码,包括初始化、配置寄存器读写、单次/连续转换模式设置、电压值读取等功能实现。代码通过I2C接口与ADS1115通信,支持多通道选择和不同PGA设置,可实现高精度模拟信号采集。该方案适用于需要精密测量的嵌入式系统,如传感器数据采集等应用场景。

weixin_42122070的博客 689

CLIP简单认识(笔记)

上课时做的分享CLIP原文:Learning Transferable Visual Models From Natural Language Supervision。

a2633845842的博客 1129

RK3566基于Buildroot定制QT开发环境的完整指南

本文详细介绍了如何在RK3566开发板上使用Buildroot定制QT开发环境的完整流程。从基础环境搭建、Buildroot初始配置到QT模块选择与编译验证,提供了实战经验和常见问题解决方案,帮助开发者高效完成嵌入式Linux下的QT开发环境部署。

weixin_26804345的博客 357

Gartner 2025 中国网络安全成熟度曲线深度解读:AI 安全如何重构防御逻辑

2025 年 Gartner 中国网络安全技术成熟度曲线的发布,标志着国内网络安全领域正式进入 “AI 原生防御” 时代。这份聚焦中国市场特性的报告清晰揭示:网络安全的核心命题已从 “防御 AI 驱动的攻击” 演进为 “保障 AI 系统自身安全与业务协同”,AI 安全技术正成为重构企业防御体系的核心引擎。

KKKlucifer的博客 1386

Chinese-CLIP快速上手:从安装到第一个应用

Chinese-CLIP快速上手:从安装到第一个应用 【免费下载链接】Chinese-CLIP 针对中文场景下设计和构建的CLIP模型变体,它能够完成跨视觉与文本模态的中文信息检索,并能够生成有效的多模态表示。这样的工具主要用于提升人工智能系统对于不同模态(如图像和文本)数据的理解、关联与检索能力。 ...

gitblog_00384的博客 926

博途 V16(TIA portal V16)安装教程

本文提供了西门子TIA Portal V16软件的完整安装指南。内容包括百度网盘下载链接(提取码kv69)、详细安装步骤(关闭安全保护、典型安装设置)、授权破解方法,以及PLCSIM仿真功能的使用说明。重点演示了S7-1200 PLC程序的仿真过程,解析了仿真界面各元素功能,包括状态指示灯(RUN/STOP/ERROR)、操作按钮(RUN/STOP/MRES)和网络接口状态等。通过图文并茂的方式,完整呈现了从软件安装到PLC程序仿真的全流程操作。

lingchen1906的博客 6661

CLIP-GmP-ViT-L-14快速上手:Jupyter Notebook交互式图文匹配演示

本文介绍了如何在星图GPU平台上自动化部署CLIP-GmP-ViT-L-14镜像,并利用其进行图文匹配。该模型基于CLIP架构并经过GmP优化,能够精准计算图像与文本的相似度。用户可通过Jupyter Notebook交互式环境,快速实现为图片自动生成描述标签或进行以文搜图等应用,提升内容管理效率。

weixin_42608318的博客 707

springboot + netty 实现多客户端登录 超出设备 并下线

本文档旨在详细描述多平台登录控制的需求和实现方案。当前系统仅支持单设备登录,需扩展为支持多设备同时在线,并提供多种登录策略。文档详细列出四种策略:单平台登录、双平台登录、三平台登录和多平台同时在线,每种策略的具体限制和支持平台。技术实现方案包括数据结构设计、NettyUtils 工具类方法、WebSocketHandler 修改,以及相应的测试方案

Likefr 1877

SBP依赖计算中的蝴蝶效应:一个Prefab修改如何触发全量重建?

本文深入探讨了Unity中SBP(Scriptable Build Pipeline)依赖计算的蝴蝶效应,解析了Prefab修改如何触发全量重建的机制。通过分析Asset与Object的层级关系、依赖计算的三种维度及CacheEntry系统,揭示了全量重建的根本原因,并提供了依赖可视化工具开发、优化策略与最佳实践,帮助开发者提升构建效率。

weixin_29015051的博客 444

终极指南:用Chinese-CLIP快速构建中文跨模态AI应用

Chinese-CLIP是CLIP模型的中文版本,使用大规模中文数据进行训练(~2亿图文对),旨在帮助用户快速实现中文领域的图文特征&相似度计算、跨模态检索、零样本图片分类等任务。本指南将带你从安装到实战,轻松掌握这一强大工具。 ## 为什么选择Chinese-CLIP? 在AI应用开发中,处理中文图文数据常常面临两大挑战:**跨模态理解**和**中文语义精准性**。Chinese-CLIP通

gitblog_00161的博客 1081

【系统分析师】第6章-基础知识:企业信息化(核心总结)

企业信息化是数字化转型的核心,涵盖战略规划、技术应用和实施路径等方面。关键内容包括ERP、CRM、SCM等系统的定义与实施,以及数据仓库、商业智能等技术的应用。备考系统分析师需掌握信息化战略规划方法(如BSP、SDP)、系统建模工具,并能分析解决信息孤岛等问题。论文可围绕ERP实施、数据仓库应用等主题展开。企业信息化面临组织变革、技术选型等挑战,但能显著提升运营效率和竞争力。

数据知道的博客 6930

CLIP-GmP-ViT-L-14图文检索实战:单图单文+批量提示排序详解

本文介绍了如何在星图GPU平台上自动化部署CLIP-GmP-ViT-L-14镜像,实现高效的图文检索功能。该镜像特别适用于电商商品图片与描述的精确匹配,通过简单的Web界面操作,用户可快速计算单图单文相似度或进行批量提示排序,显著提升内容管理效率。

weixin_42504649的博客 160

基于LSTM的股票价格预测系统,Django框架,Web的股票预测系统,训练+数据集+源码(无需安装环境版)

股票价格预测是投资领域的一个重点关注课题。由于股票价格受到诸多非线性因素的影响,得到精确的预测结果较为困难。使用 PyCharm 作为代码开发工具,通过下载好的股票金融数据,进行数据预处理,构建 LSTM 网络模型,训练模型并训练出最优模型,输出股票未来收盘价波动的走势,最后在训练好的模型上,设计股票模型应用系统,运行效率较高,对股票预测具有一定的积极意义。

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 951

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

CLIP-GmP-ViT-L-14部署案例:中小企业AI内容中台图文语义中枢建设

本文介绍了如何在星图GPU平台上自动化部署CLIP-GmP-ViT-L-14镜像,构建中小企业AI内容中台的图文语义中枢。该解决方案能够高效计算图片与文本的语义匹配度,典型应用于电商平台的商品图文一致性检查,显著提升内容管理效率与转化率。

weixin_31139479的博客 352

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

CLIP-GmP-ViT-L-14保姆级教程:免配置镜像+7860端口快速启用图文检索

本文介绍了如何在星图GPU平台上一键自动化部署CLIP-GmP-ViT-L-14镜像,快速搭建图文检索系统。该模型通过7860端口提供高效的图文匹配服务,特别适用于电商商品描述匹配、社交媒体内容分析等场景,显著提升多模态数据处理效率。

weixin_28235889的博客 421

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

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

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

CLIP-GmP-ViT-L-14图文检索实战:单图多文批量匹配详细步骤

本文介绍了如何在星图GPU平台上自动化部署CLIP-GmP-ViT-L-14镜像,实现高效的图文检索功能。该模型支持单图多文批量匹配,可广泛应用于图片标注、内容检索等场景,帮助用户快速分析图片与文本描述的关联性。通过简单的Web界面操作,即可获得精准的匹配结果。

StarfallHawk37的博客 411

CLIP-GmP-ViT-L-14一文详解:ViT-L-14架构+GmP微调的开源图文理解实践

本文介绍了如何在星图GPU平台上自动化部署CLIP-GmP-ViT-L-14镜像,实现高效的图文理解功能。该镜像基于ViT-L-14架构和GmP微调技术,特别适用于电商产品检索等场景,能快速匹配图片与文本描述,提升搜索效率。

weixin_28850145的博客 593

遥感图像检索神器Git-RSCLIP:开箱即用,一键部署图文相似度计算

本文介绍了如何在星图GPU平台上自动化部署Git-RSCLIP镜像,实现遥感图像的智能分析与检索。该平台简化了部署流程,用户可快速搭建服务,利用该镜像的核心功能——图文相似度计算,轻松实现“以文搜图”,例如从海量卫星图像中快速定位包含特定地物(如河流、农田)的区域。

weixin_42596246的博客 32

CLIP-GmP-ViT-L-14实战教程:结合RAG构建图文增强型智能客服

本文介绍了如何在星图GPU平台上自动化部署CLIP-GmP-ViT-L-14镜像,构建图文增强型智能客服系统。该模型具备精准的图文匹配能力,可自动化计算图片与文本的相似度,应用于电商客服场景,实现基于图片的智能问答功能,显著提升用户体验。

AzureMeadow65的博客 173
上一篇: 从头搭建GPT(Andrej Karpathy) 笔记
下一篇: CLIP模型 图片问答
蓝羽飞鸟
博客等级 码龄8年 1万+粉丝 727原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

打赏作者

蓝羽飞鸟

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

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

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

打赏作者

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

抵扣说明:

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

余额充值