当前位置: 首页 > article >正文

CLIP-GmP-ViT-L-14实战教程:对接Milvus向量库构建亿级图文混合检索系统

CLIP-GmP-ViT-L-14实战教程对接Milvus向量库构建亿级图文混合检索系统1. 项目概述CLIP-GmP-ViT-L-14是一个经过几何参数化(GmP)微调的CLIP模型在ImageNet和ObjectNet数据集上达到了约90%的准确率。这个强大的视觉-语言模型能够将图片和文本映射到同一个语义空间使得跨模态检索成为可能。在本教程中我们将展示如何将这个模型与Milvus向量数据库结合构建一个能够处理亿级数据的图文混合检索系统。通过这个系统你可以实现图片搜索相似图片文本搜索相关图片图片搜索相关文本混合模态的联合检索2. 环境准备与快速部署2.1 系统要求操作系统Linux (推荐Ubuntu 20.04)Python版本3.8GPUNVIDIA GPU (至少16GB显存)内存32GB存储SSD (建议1TB)2.2 安装依赖# 创建并激活虚拟环境 python3 -m venv clip_env source clip_env/bin/activate # 安装基础依赖 pip install torch torchvision --extra-index-url https://download.pytorch.org/whl/cu113 pip install transformers gradio milvus pymilvus pillow2.3 快速启动服务# 克隆项目 git clone https://github.com/your-repo/CLIP-GmP-ViT-L-14.git cd CLIP-GmP-ViT-L-14 # 启动Gradio界面 python app.py启动成功后访问 http://localhost:7860 即可使用基础功能。3. 对接Milvus向量数据库3.1 Milvus安装与配置首先安装并启动Milvus服务# 使用Docker安装Milvus单机版 docker pull milvusdb/milvus:v2.2.3 docker run -d --name milvus -p 19530:19530 -p 9091:9091 milvusdb/milvus:v2.2.33.2 创建向量集合我们需要在Milvus中创建一个集合来存储图片和文本的向量from pymilvus import connections, CollectionSchema, FieldSchema, DataType, Collection # 连接Milvus connections.connect(default, hostlocalhost, port19530) # 定义集合结构 fields [ FieldSchema(nameid, dtypeDataType.INT64, is_primaryTrue, auto_idTrue), FieldSchema(nameembedding, dtypeDataType.FLOAT_VECTOR, dim768), FieldSchema(nametype, dtypeDataType.INT8), # 0图片, 1文本 FieldSchema(namecontent, dtypeDataType.VARCHAR, max_length1000) ] schema CollectionSchema(fields, descriptionCLIP图文混合检索) collection Collection(clip_collection, schema) # 创建索引 index_params { index_type: IVF_FLAT, metric_type: IP, # 内积相似度 params: {nlist: 1024} } collection.create_index(embedding, index_params)3.3 向量入库与检索现在我们可以将数据编码为向量并存入Milvusfrom transformers import CLIPProcessor, CLIPModel import torch from PIL import Image # 加载CLIP-GmP-ViT-L-14模型 model CLIPModel.from_pretrained(path/to/CLIP-GmP-ViT-L-14) processor CLIPProcessor.from_pretrained(path/to/CLIP-GmP-ViT-L-14) def encode_image(image_path): image Image.open(image_path) inputs processor(imagesimage, return_tensorspt, paddingTrue) with torch.no_grad(): image_features model.get_image_features(**inputs) return image_features.numpy()[0] def encode_text(text): inputs processor(texttext, return_tensorspt, paddingTrue) with torch.no_grad(): text_features model.get_text_features(**inputs) return text_features.numpy()[0] # 插入图片向量 image_vec encode_image(example.jpg) collection.insert([[image_vec], [0], [example.jpg]]) # 插入文本向量 text_vec encode_text(a cute cat) collection.insert([[text_vec], [1], [a cute cat]])4. 构建亿级检索系统4.1 批量导入数据对于大规模数据导入建议使用批量处理import os from tqdm import tqdm def batch_import_images(image_folder, batch_size1000): image_paths [os.path.join(image_folder, f) for f in os.listdir(image_folder)] for i in tqdm(range(0, len(image_paths), batch_size)): batch_paths image_paths[i:ibatch_size] embeddings [] contents [] for path in batch_paths: try: vec encode_image(path) embeddings.append(vec) contents.append(path) except Exception as e: print(fError processing {path}: {e}) continue collection.insert([embeddings, [0]*len(embeddings), contents])4.2 高效检索实现实现跨模态检索功能def search_by_image(image_path, top_k10): query_vec encode_image(image_path) search_params {metric_type: IP, params: {nprobe: 32}} results collection.search( [query_vec], embedding, search_params, limittop_k, output_fields[type, content] ) return [(hit.entity.get(content), hit.score) for hit in results[0]] def search_by_text(text, top_k10): query_vec encode_text(text) search_params {metric_type: IP, params: {nprobe: 32}} results collection.search( [query_vec], embedding, search_params, limittop_k, output_fields[type, content] ) return [(hit.entity.get(content), hit.score) for hit in results[0]]5. 系统优化与扩展5.1 性能优化建议索引优化对于亿级数据考虑使用IVF_PQ索引调整nlist和nprobe参数平衡精度和速度批量处理使用多线程/多进程进行批量编码预先生成向量再批量导入缓存机制缓存热门查询结果实现向量预加载5.2 扩展功能混合检索def hybrid_search(image_pathNone, textNone, top_k10): if image_path and text: image_vec encode_image(image_path) text_vec encode_text(text) query_vec (image_vec text_vec) / 2 elif image_path: query_vec encode_image(image_path) elif text: query_vec encode_text(text) else: return [] search_params {metric_type: IP, params: {nprobe: 32}} results collection.search( [query_vec], embedding, search_params, limittop_k, output_fields[type, content] ) return [(hit.entity.get(content), hit.score) for hit in results[0]]过滤检索def search_with_filter(query_vec, filter_typeNone, top_k10): search_params {metric_type: IP, params: {nprobe: 32}} if filter_type is not None: expr ftype {filter_type} else: expr results collection.search( [query_vec], embedding, search_params, limittop_k, exprexpr, output_fields[type, content] ) return [(hit.entity.get(content), hit.score) for hit in results[0]]6. 总结通过本教程我们完成了从CLIP-GmP-ViT-L-14模型部署到Milvus向量库对接的全过程构建了一个强大的图文混合检索系统。关键要点包括模型优势CLIP-GmP-ViT-L-14经过几何参数化微调在跨模态任务中表现优异系统架构模型负责特征提取Milvus负责高效向量检索扩展能力系统可轻松扩展到亿级数据规模应用场景适用于电商搜索、内容推荐、数字资产管理等多种场景下一步建议尝试不同的索引类型和参数优化检索性能探索更多预处理和后处理技术提升结果质量考虑加入重排序机制进一步提升精度获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。

相关文章:

CLIP-GmP-ViT-L-14实战教程:对接Milvus向量库构建亿级图文混合检索系统

CLIP-GmP-ViT-L-14实战教程:对接Milvus向量库构建亿级图文混合检索系统 1. 项目概述 CLIP-GmP-ViT-L-14是一个经过几何参数化(GmP)微调的CLIP模型,在ImageNet和ObjectNet数据集上达到了约90%的准确率。这个强大的视觉-语言模型能够将图片和文本映射到同…...

iOS逆向工程入门:利用class-dump与Hopper Disassembler解析ipa文件

1. iOS逆向工程入门:工具与基础概念 刚接触iOS逆向工程时,很多人会被"逆向"这个词吓到,觉得需要掌握高深的汇编语言才能入门。其实不然,就像我刚开始研究时发现的那样,通过class-dump和Hopper Disassembler这…...

Alpamayo-R1-10B惊艳效果展示:64步轨迹预测+鸟瞰图动态可视化

Alpamayo-R1-10B惊艳效果展示:64步轨迹预测鸟瞰图动态可视化 1. 自动驾驶的“大脑”革命:当AI学会像人一样开车 想象一下,你坐在一辆自动驾驶汽车里,前方是一个复杂的十字路口,行人、自行车、对向车辆交织在一起。传…...

中文文本分段可解释性分析:BERT文本分割模型关键token贡献度可视化

中文文本分段可解释性分析:BERT文本分割模型关键token贡献度可视化 你有没有遇到过这样的情况?拿到一份长长的会议记录或者讲座文稿,从头读到尾,感觉信息都堆在一起,找不到重点,读起来特别累。这其实就是因…...

Xilinx FPGA开发效率提升:Vivado 2018.3中那些你可能不知道的快捷键和实用技巧

Xilinx FPGA开发效率提升:Vivado 2018.3中那些你可能不知道的快捷键和实用技巧 在FPGA开发领域,时间就是金钱。对于资深工程师来说,掌握工具的高效使用方式往往比单纯的技术知识更能带来质的飞跃。Vivado作为Xilinx FPGA开发的主力工具&#…...

从黑客视角看ARP协议:Wireshark抓包演示ARP欺骗攻防(含防御配置)

ARP协议攻防实战:从Wireshark抓包到企业级防御方案 当你坐在办公室,突然发现网络异常缓慢,甚至无法访问某些内部系统时,可能正遭遇一场ARP欺骗攻击。这种看似古老的攻击手法至今仍在企业内网中频繁出现,而理解它的运作…...

为什么你的MCP服务重启后连接数暴涨300%?源码级定位Connection Leak根源(附GDB内存快照分析法)

第一章:MCP服务连接数异常现象与问题定义在生产环境中,MCP(Microservice Control Plane)服务近期频繁出现连接数陡增、连接超时及主动断连等异常行为。监控系统持续上报 mcp_server_active_connections 指标突破阈值(设…...

RV1126通过创建多线程获取高低编码器的分辨率视频

效果高VENC低VENC占用空间高分辨率的是20几MB,低分辨率是几MB编码流程一、VI(Video Input 视频输入)模块初始化,使能通道int ret;RK_MPI_SYS_Init();// VI Init......VI_CHN_ATTR_S vi_chn_attr;vi_chn_attr.pcVideoNode "…...

Nano-Banana在软件测试中的应用:自动化测试脚本生成

Nano-Banana在软件测试中的应用:自动化测试脚本生成 最近跟几个做测试开发的朋友聊天,发现他们都在为一个事儿头疼:UI自动化测试脚本的维护成本太高了。页面稍微改个按钮位置,或者加个新字段,之前写的脚本就得跟着改&…...

Sentry 9.1.2安装中PostgreSQL连接问题的排查与解决

1. Sentry 9.1.2安装中PostgreSQL连接问题现象 最近在部署Sentry 9.1.2版本时,遇到了一个典型的PostgreSQL连接问题。执行./install.sh安装脚本后,控制台报错显示: django.db.utils.OperationalError: could not translate host name "p…...

ABB机器人Profinet通信中Real类型数据的字节序处理技巧

1. 为什么需要关注Real类型数据的字节序? 在工业自动化领域,ABB机器人与PLC之间的Profinet通信已经成为标配。但很多工程师在实际配置时,经常会遇到一个看似简单却容易踩坑的问题:Real类型数据的传输错误。明明发送端的数据是正确…...

丹青识画应用场景:为非遗影像库自动生成文人雅趣描述文本

丹青识画应用场景:为非遗影像库自动生成文人雅趣描述文本 1. 引言:当科技遇见非遗,如何让影像“开口说话”? 想象一下,你是一位非遗保护工作者,面对一个庞大的数字影像库,里面存放着数千张珍贵…...

手把手教你在麒麟系统用Docker-Compose部署MySQL+ClickHouse联合作业环境

麒麟系统实战:Docker-Compose编排MySQLClickHouse混合数据库环境 在数据分析领域,OLTP(在线事务处理)与OLAP(在线分析处理)系统的协同工作已成为现代数据架构的标配。MySQL作为经典的关系型数据库&#xff…...

凸缺陷(convexityDefects)在图像处理中的5个实际应用场景(附OpenCV代码示例)

凸缺陷(convexityDefects)在图像处理中的5个实际应用场景(附OpenCV代码示例) 当你第一次听说"凸缺陷"这个概念时,可能会觉得它听起来像某种需要修复的错误。但实际上,在计算机视觉领域,凸缺陷是一种极其有用…...

SlowFast实战:手把手教你用AVA数据集训练行为识别模型(附最新v2.2标注文件处理技巧)

SlowFast实战:从AVA v2.2数据集处理到高效训练行为识别模型 行为识别技术正逐渐成为智能监控、人机交互等领域的核心技术之一。作为该领域的标杆算法,SlowFast网络凭借其双路径设计在精度与效率间取得了出色平衡。本文将带您从零开始,基于最新…...

告别PS!ComfyUI+Mixlab-Nodes实现电商产品图智能合成(含图层混合技巧)

电商设计革命:ComfyUIMixlab-Nodes智能合成全流程解析 在电商行业,产品图的视觉呈现直接影响转化率。传统Photoshop合成流程需要设计师手动完成背景分离、元素排版、调色匹配等繁琐操作,一套高质量商品图往往需要数小时打磨。而如今&#xff…...

Qwen Pixel Art零基础教程:无需代码,用浏览器生成专业级像素图

Qwen Pixel Art零基础教程:无需代码,用浏览器生成专业级像素图 你是不是也曾经羡慕过那些复古游戏里的像素风画面,或者想为自己独立游戏项目创作一些独特的像素美术,却苦于不会画画、不会代码?别担心,今天…...

Kook Zimage 真实幻想 Turbo效果分享:1024×1024下0.1mm级皮肤纹理与毛孔表现

Kook Zimage 真实幻想 Turbo效果分享:10241024下0.1mm级皮肤纹理与毛孔表现 想象一下,你描述了一个“月光下,皮肤泛着珍珠光泽的精灵少女”,AI生成的图片里,她的脸颊上不仅有细腻的光泽,甚至能看到几乎不可…...

ComfyUI工作流集成:SenseVoice-Small语音识别驱动AI图像生成

ComfyUI工作流集成:SenseVoice-Small语音识别驱动AI图像生成 你有没有想过,有一天动动嘴皮子,就能让电脑把你脑海里的画面画出来?比如,你对着麦克风说“一只戴着宇航员头盔的橘猫,在月球上喝咖啡”&#x…...

看FLUX.1如何生成高质量图片:SDXL风格预设效果实测

看FLUX.1如何生成高质量图片:SDXL风格预设效果实测 想看看FLUX.1模型到底能生成多惊艳的图片?今天我们不聊复杂的部署,直接带你走进ComfyUI,用SDXL Prompt Styler预设的各种风格,实测FLUX.1的文生图能力。从奇幻插画到…...

Gemma-3-12b-it极简UI使用教程:零配置启动图文混合对话(含代码实例)

Gemma-3-12b-it极简UI使用教程:零配置启动图文混合对话(含代码实例) 想体验一个能看懂图片、还能跟你流畅聊天的AI助手吗?今天给大家介绍一个基于Google Gemma-3-12b-it大模型开发的本地多模态交互工具。它最大的特点就是“简单”…...

[4个维度解决GitHub访问难题:开发者工具效率提升指南](https://gitcode.com/gh_mirrors/fa/Fast-GitHub)

4个维度解决GitHub访问难题:开发者工具效率提升指南 【免费下载链接】Fast-GitHub 国内Github下载很慢,用上了这个插件后,下载速度嗖嗖嗖的~! 项目地址: https://gitcode.com/gh_mirrors/fa/Fast-GitHub GitHub作为全球最大…...

CasRel关系抽取模型真实效果:法律判决书中‘原告-主张-被告’三元组

CasRel关系抽取模型真实效果:法律判决书中‘原告-主张-被告’三元组 1. 引言:从法律文书中自动提取关键信息 每天都有成千上万的法律判决书需要处理,法官、律师和法律研究者需要从这些冗长的文档中提取关键信息:谁起诉了谁&…...

GitHub访问优化新范式:开发者网络加速解决方案

GitHub访问优化新范式:开发者网络加速解决方案 【免费下载链接】Fast-GitHub 国内Github下载很慢,用上了这个插件后,下载速度嗖嗖嗖的~! 项目地址: https://gitcode.com/gh_mirrors/fa/Fast-GitHub 在日常开发工作中&#…...

EcomGPT-7B在学术研究中的应用:自动化生成电商领域论文摘要与文献综述

EcomGPT-7B在学术研究中的应用:自动化生成电商领域论文摘要与文献综述 最近和几位做电商研究的朋友聊天,他们都在抱怨同一个问题:文献调研和论文写作的前期准备工作太耗时了。面对海量的中英文论文PDF,光是阅读、整理核心观点&am…...

免费AI视觉神器DAMO-YOLO部署教程:界面酷炫,功能强大

免费AI视觉神器DAMO-YOLO部署教程:界面酷炫,功能强大 1. 从零开始,10分钟拥有你的AI视觉大脑 想象一下,你有一双能瞬间看懂图片里所有东西的“眼睛”——行人、汽车、猫狗、手机,甚至一个水杯,它都能在毫…...

打工人上班摸魚小說-第二十四章 西行、夜车与后视镜里的眼睛

# 打工人上班摸魚小說-第二十四章 西行、夜车与后视镜里的眼睛---车往西开。窗外的天从黑变成灰,从灰变成白。太阳升起来的时候,林舟才发现自己靠窗户睡着了。脖子酸得厉害,他揉了揉,坐直了身子。车厢里人不多。前排坐着一个老人&…...

M2LOrder模型效果深度评测:不同参数下的生成质量对比

M2LOrder模型效果深度评测:不同参数下的生成质量对比 最近在星图GPU平台上部署了M2LOrder模型,用了一段时间后,我发现这个模型在不同参数设置下的表现差异还挺明显的。有些参数下生成的文本创意十足但逻辑性稍弱,有些参数下则严谨…...

Ubuntu 20.04 LTS下Pycharm专业版2023.3安装与激活全攻略(学生福利版)

Ubuntu 20.04 LTS下PyCharm专业版2023.3安装与激活全指南(学生专属方案) 作为一名长期在Linux环境下开发的工程师,我深刻体会到PyCharm专业版对Python项目开发的效率提升。特别是在Ubuntu 20.04 LTS这样的稳定系统上,合理配置开发…...

避坑指南:为什么你的Verilog pullup会编译失败?wire与logic的深度解析

避坑指南:为什么你的Verilog pullup会编译失败?wire与logic的深度解析 在数字电路设计中,Verilog作为硬件描述语言的代表,其数据类型的选择往往直接影响着电路的行为和仿真结果。许多初学者在使用pullup/pulldown时遭遇的编译错误…...