在向量数据库中存储多模态数据,通过文字搜索图片

在向量数据中存储多模态数据,通过文字搜索图片,Chroma 支持文字和图片,通过 OpenClip 模型对文字以及图片做 Embedding。本文通过 Chroma 实现一个文字搜索图片的功能。

OpenClip

CLIP(Contrastive Language-Image Pretraining,对比语言-图像预训练)是由OpenAI开发的一种模型,它结合了自然语言处理(NLP)和计算机视觉(CV)来理解和关联文本和视觉数据。CLIP旨在从大量的互联网数据中学习,并能够执行各种任务,例如零样本图像分类、图像到文本搜索和文本到图像搜索,而无需特定任务的数据集。CLIP 有以下特性

  • 对比学习:CLIP使用对比学习方法,模型通过区分匹配和不匹配的图像和文本对进行训练。这意味着它学习将图像与其对应的文本描述对齐,并区分不相关的对。

  • 双分支架构:CLIP包含两个分支:一个用于处理图像,另一个用于处理文本。这些分支通常基于深度学习架构,例如用于图像的Vision Transformers(ViT)或ResNet,用于文本的基于Transformer的模型(如GPT)。

  • 联合嵌入空间:模型将图像和文本投影到共享的嵌入空间中。在训练过程中,它最大化匹配图像-文本对的嵌入相似性,最小化不匹配对的嵌入相似性。

  • 零样本学习:CLIP的一个重要优势是其零样本学习能力。这意味着它可以通过利用类别的文本描述来对在训练中未见过的类别的图像进行分类。

OpenClip 是 Open AI CLIP 的开源实现。

数据准备

本文使用魔搭的数据集 tany0699/dailytags

import os
from datasets import load_dataset
from matplotlib import pyplot as plt
import matplotlib.image as mpimg
from PIL import ImageIMAGE_FOLDER = "images"
N_IMAGES = 20# For plotting
plot_cols = 5
plot_rows = N_IMAGES // plot_cols
fig, axes = plt.subplots(plot_rows, plot_cols, figsize=(plot_rows*2, plot_cols*2))
axes = axes.flatten()# Write the images to a folder
dataset_iter = iter(dataset)
os.makedirs(IMAGE_FOLDER, exist_ok=True)
for i in range(N_IMAGES):image = Image.open(next(dataset_iter)['image:FILE'])axes[i].imshow(image)axes[i].axis("off")image.save(f"images/{i}.jpg")plt.tight_layout()
plt.show()

在这里插入图片描述

安装依赖

安装 Chroma 和 OpenClip

!pip install chromadb
!pip install open_clip_torch

搜索图片

  1. 启动 Chroma
import chromadb
client = chromadb.Client()
  1. 初始化 Embedding Model
from chromadb.utils.embedding_functions import OpenCLIPEmbeddingFunction
from chromadb.utils.data_loaders import ImageLoaderembedding_function = OpenCLIPEmbeddingFunction()
image_loader = ImageLoader()
  1. 创建 Chroma 集合
collection = client.create_collection(name='multimodal_collection', embedding_function=embedding_function, data_loader=image_loader)
  1. 初始化数据
# Get the uris to the images
image_uris = sorted([os.path.join(IMAGE_FOLDER, image_name) for image_name in os.listdir(IMAGE_FOLDER)])
ids = [str(i) for i in range(len(image_uris))]collection.add(ids=ids, uris=image_uris)
  1. 查询
retrieved = collection.query(query_texts=["bird"], include=['data', 'distances'], n_results=3)
for img in retrieved['data'][0]:print(retrieved['distances'])plt.imshow(img)plt.axis("off")plt.show()

在这里插入图片描述

总结

Chroma 多模态测试下来,效果还是不错,但是目前只支持英文。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/29765.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Ps:脚本与动作

有三种脚本语言可用于编写 Photoshop 脚本:AppleScript(macOS)、JavaScript 和 VBScript(Windows)。 Photoshop 脚本文件默认文件夹 Win:C:\Program Files\Adobe\Adobe Photoshop 2024\Presets\Scripts Mac…

代码随想录-Day35

134. 加油站 在一条环路上有 n 个加油站,其中第 i 个加油站有汽油 gas[i] 升。 你有一辆油箱容量无限的的汽车,从第 i 个加油站开往第 i1 个加油站需要消耗汽油 cost[i] 升。你从其中的一个加油站出发,开始时油箱为空。 给定两个整数数组 …

Java阻塞队列:DelayQueue

Java阻塞队列:DelayQueue 在Java的并发编程中,阻塞队列是一种非常有用的数据结构,它不仅提供了线程安全的队列操作,还在必要时会自动阻塞获取操作,直到队列变得不为空。本文将重点介绍一种特殊的阻塞队列——DelayQue…

递归与回溯 || 排列问题

目录 前言: 全排列 题解: 全排列 II 题解: 子集 题解: 组合 题解: 组合总和 题解: 电话号码的字母组合 题解: 字母大小写全排列 题解: 优美的排列 题解:…

AI虚拟数字人上线需要办理哪些资质?

近年来,随着AI 技术快速发展,虚拟数字人行业也进入了新的发展阶段。AI 技术可覆盖虚拟数字人的建模、视频生成、驱动等全流程,一方面使虚拟数字人的制作成本降低、制作周期缩短,另一方面,多模态 AI 技术使得虚拟数字人…

[面试题]缓存

[面试题]Java【基础】[面试题]Java【虚拟机】[面试题]Java【并发】[面试题]Java【集合】[面试题]MySQL[面试题]Maven[面试题]Spring Boot[面试题]Spring Cloud[面试题]Spring MVC[面试题]Spring[面试题]MyBatis[面试题]Nginx[面试题]缓存[面试题]Redis 什么是缓存?…

KVM虚拟化基础

虚拟化基础与分类 x86 CPU特权级别设为四个Ring:Kernel Mode运行在Ring 0、User Mode运行在Ring 3; 非硬件辅助虚拟化(一型) Hypervisor运行在Ring 0; Guest OS不做修改,以为自己运行在Ring 0上&#xff0…

OpenAPI Typescript Codegen 的基本使用

下载 axios npm install axios OpenAPI Typescript Codegen 官网:https://github.com/ferdikoomen/openapi-typescript-codegen 安装 OpenAPI Typescript Codegen npm install openapi-typescript-codegen --save-dev–input:指定接口文档的路径、url …

小程序餐饮点餐系统,扫码下单点菜,消费端+配送端+收银端+理端

目录 前言: 一、小程序功能有哪些 前端: 管理端: 二、实体店做小程序的好处 方便快捷的点餐和支付体验: 扩大店铺的曝光度和影响力: 优化顾客体验和服务质量: 降低成本和提高效率: 数据…

【学习】程序员资源网址

1 书栈网 简介:书栈网是程序员互联网IT开源编程书籍、资源免费阅读的网站,在书栈网你可以找到很多书籍、笔记资源。在这里,你可以根据热门收藏和阅读查看大家都在看什么,也可以根据技术栈分类找到对应模块的编程资源,…

Microsoft Visual C++ Redistributable 【安装包】【高速下载】

方法1、可以从官方下载,如下图 Visual C Redistributable for Visual Studio 2015 但是此链接只有一个版本 方法2 已经下载好并且已经整理好了2008--2022的所有版本点击下方链接即可高速下载 如果是win7-win8-win10-win11直接可以下载2015--2022版本&#xff0c…

大模型基础知识:探索人工智能的巨轮

人工智能大模型,这个在近年来频繁出现在科技新闻和学术论坛的热门词汇,已经成为了推动人工智能技术发展的关键力量。这些大模型,如OpenAI的GPT-3、谷歌的BERT、百度的ERNIE等,以其强大的性能和广泛的应用范围,引起了广…

【AI大模型】在健康睡眠监测中的深度融合与实践案例

文章目录 1. 应用方案2. 技术实现2.1 数据采集与预处理2.2 构建与训练模型2.3 个性化建议生成 3. 优化策略4. 应用示例:多模态数据融合与实时监测4.1 数据采集4.2 实时监测与反馈 5. 深入分析模型选择和优化5.1 LSTM模型的优势和优化策略5.2 CNN模型的优势和优化策略…

若依RuoYi-Vue分离版—配置多数据源

若依RuoYi-Vue分离版—配置多数据源 一、修改application-druid.yml二、修改pom文件,引入依赖第一种:下载jar包到本地,然后引入(我这边用的是这种)本地引入的,打包时需要加上配置 第二种:从远程…

随想录Day63 | 单调栈 42. 接雨水 84.柱状图中最大的矩形

随想录Day63 | 单调栈 42. 接雨水 84.柱状图中最大的矩形 42. 接雨水 题目链接 42 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图&#xff0c;计算按此排列的柱子&#xff0c;下雨之后能接多少雨水。 第一次提交 class Solution { public:int trap(vector<int>…

云原生微服务开发日趋成熟:有效拥抱左移以改善交付

在软件工程和应用程序开发方面&#xff0c;云原生已经成为许多团队的常用术语。当人们调查云原生的世界时&#xff0c;他们经常会得出这样的观点&#xff1a;云原生的整个过程都是针对大型企业应用程序的。几年前&#xff0c;情况可能确实如此&#xff0c;但随着 Kubernetes 等…

《Fundamentals of Power Electronics》——理想变压器基本公式推导

接下去推导理想变压器的基本公式。理想变压器满足以下三个条件&#xff1a; 1、无铜损。假设原副边线圈均无纯电阻&#xff0c;则不会因在铜导线中产生焦耳热引起能量损耗&#xff0c;另外也不考虑回路中的分布电容。 2、无铁损。忽略通过铁芯的磁通量变化引起的涡流损耗&…

线性二次型调节器(LQR)举例

线性二次型调节器(LQR) 线性二次型调节器(LQR)是一种用于最优控制的问题,其中目标是通过最小化某个代价函数来找到最优控制策略。LQR特别适用于线性系统。为了在人形机器人上应用LQR进行建模,主要步骤包括建立系统模型、定义代价函数以及求解最优控制律。以下是详细步骤…

Chromium 开发指南2024 Mac篇-Xcode安装(二)

1.引言 在开始编译和开发 Chromium 之前&#xff0c;确保开发环境的正确配置是至关重要的。对于 Mac 用户来说&#xff0c;Xcode 是不可或缺的工具&#xff0c;因为它不仅提供了必需的编译器和工具链&#xff0c;还包含了与 macOS 系统深度整合的开发资源。在本系列指南的第一…

Apache Druid-时序数据库

Apache Druid&#xff1a;是是一个集时间序列数据库、数据仓库和全文检索系统特点于一体的分析性数据平台&#xff0c;旨在对大型数据集进行快速的查询分析&#xff08;"OLAP"查询)。Druid最常被当做数据库来用以支持实时摄取、高性能查询和高稳定运行的应用场景&…