ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

【多模态】27-图像到图像检索系统:基于CLIP和GPT-4V的视觉检索

【多模态】27-图像到图像检索系统:基于CLIP和GPT-4V的视觉检索 1. 案例目标本案例展示了如何使用LlamaIndex构建一个基于图像的检索系统该系统能够使用CLIP模型对图像进行嵌入实现图像间的语义相似度计算从维基百科页面下载图像并构建多模态索引基于输入图像检索相似的图像使用GPT-4V对检索结果进行推理和分析通过图像查询引擎实现更复杂的图像问答功能2. 技术栈与核心依赖LlamaIndexOpenAI GPT-4VCLIP模型Qdrant向量数据库PyTorchPILMatplotlib核心依赖包括llama-index-multi-modal-llms-openai llama-index-vector-stores-qdrant llama-index-embeddings-clip torch transformers matplotlib Pillow wikipedia3. 环境配置步骤1安装依赖pip install llama-index-multi-modal-llms-openai pip install llama-index-vector-stores-qdrant pip install llama-index-embeddings-clip pip install torch pip install transformers pip install matplotlib pip install Pillow pip install wikipedia步骤2设置API密钥import os os.environ[OPENAI_API_KEY] YOUR_API_KEY4. 案例实现步骤1从维基百科下载图像从6个维基百科页面下载图像每个页面最多30张import wikipedia from pathlib import Path import uuid import os # 定义要下载的维基百科页面 wiki_titles [Vincent van Gogh, Pablo Picasso, Leonardo da Vinci, Claude Monet, Rembrandt, Michelangelo] # 创建存储目录 image_path Path(mixed_wiki) image_path.mkdir(exist_okTrue) # 下载图像并存储元数据 for title in wiki_titles: images_per_wiki 0 try: page wikipedia.page(title) img_urls page.images[:30] # 每个页面最多30张图像 print(fDownloading images for {title}...) for img_url in img_urls: if images_per_wiki 5: # 每个页面最多5张图像 break try: image_uuid str(uuid.uuid4()) # 下载并保存图像 # ... 下载图像的代码 ... images_per_wiki 1 except Exception as e: print(fError downloading image: {e}) except Exception as e: print(fError processing {title}: {e})步骤2构建多模态索引使用Qdrant创建本地向量存储并构建多模态索引from llama_index.core import SimpleDirectoryReader, StorageContext from llama_index.core import VectorStoreIndex, MultiModalVectorStoreIndex from llama_index.vector_stores.qdrant import QdrantVectorStore import qdrant_client # 创建Qdrant客户端 client qdrant_client.QdrantClient(pathqdrant_db) # 创建文本和图像集合 text_store QdrantVectorStore( clientclient, collection_nametext_collection ) image_store QdrantVectorStore( clientclient, collection_nameimage_collection ) # 创建存储上下文 storage_context StorageContext.from_defaults( vector_storetext_store, image_storeimage_store ) # 加载文档并创建多模态索引 documents SimpleDirectoryReader(./mixed_wiki).load_data() index MultiModalVectorStoreIndex.from_documents( documents, storage_contextstorage_context, )步骤3图像到图像检索基于输入图像检索相似的图像# 创建检索引擎 retriever_engine index.as_retriever(image_similarity_top_k4) # 基于输入图像检索相似图像 retrieval_results retriever_engine.image_to_image_retrieve( ./mixed_wiki/2.jpg ) # 收集检索到的图像路径 retrieved_images [] for res in retrieval_results: retrieved_images.append(res.node.metadata[file_path]) # 显示检索结果排除输入图像本身 plot_images(retrieved_images[1:])步骤4GPT-4V推理检索结果使用GPT-4V分析输入图像与检索结果之间的关系from llama_index.multi_modal_llms.openai import OpenAIMultiModal from llama_index.core.schema import ImageDocument # 准备图像文档 image_documents [ImageDocument(image_pathinput_image)] for res_img in retrieved_images[1:]: image_documents.append(ImageDocument(image_pathres_img)) # 初始化多模态LLM openai_mm_llm OpenAIMultiModal( modelgpt-4o, api_keyOPENAI_API_KEY, max_new_tokens1500 ) # 使用GPT-4V分析图像关系 response openai_mm_llm.complete( promptGiven the first image as the base image, what the other images correspond to?, image_documentsimage_documents, ) print(response)步骤5使用图像查询引擎通过图像查询引擎实现更复杂的图像问答功能from llama_index.core import PromptTemplate # 定义问答模板 qa_tmpl_str ( Given the images provided, answer the query.\n Query: {query_str}\n Answer: ) qa_tmpl PromptTemplate(qa_tmpl_str) # 初始化多模态LLM openai_mm_llm OpenAIMultiModal( modelgpt-4o, api_keyOPENAI_API_KEY, max_new_tokens1500 ) # 创建查询引擎 query_engine index.as_query_engine( llmopenai_mm_llm, image_qa_templateqa_tmpl ) # 执行图像查询 query_str Tell me more about the relationship between those paintings. response query_engine.image_query(./mixed_wiki/2.jpg, query_str) print(response)5. 案例效果图像检索结果系统能够基于输入图像检索出风格相似的图像。例如输入梵高的《播种者》图像系统能够检索出其他梵高作品如《橄榄树》等这些图像在笔触、色彩和构图上具有相似性。GPT-4V分析结果GPT-4V能够准确识别和分析图像之间的相似性例如所有四幅图像展示了一致的艺术风格通常与后印象派相关联重点是象征性内容、形式实验和生动的调色板。独特的笔触和色彩选择表明这些绘画可能出自同一位艺术家或类似的艺术运动。图像问答结果图像查询引擎能够针对输入图像和检索结果回答复杂问题例如分析梵高作品之间的关系第一幅图像是文森特·梵高的画作《播种者》。这幅作品体现了梵高对自然周期和农村工人生活的兴趣...第二幅图像似乎是文森特·梵高的《橄榄树》...这两幅画都展示了梵高标志性的后印象派风格包括生动的色彩和动态、近乎旋转的笔触。6. 案例实现思路核心思路本案例的核心思路是将图像检索与多模态大模型相结合实现从图像检索到语义理解的完整流程图像嵌入使用CLIP模型将图像转换为向量表示捕捉图像的语义特征向量存储使用Qdrant向量数据库存储图像向量实现高效的相似度搜索图像检索基于向量相似度检索与输入图像最相似的图像语义理解使用GPT-4V对检索结果进行深度分析和推理交互问答通过图像查询引擎实现更复杂的图像理解任务技术亮点多模态融合结合图像嵌入和文本理解实现跨模态检索分层处理从底层图像特征到高层语义理解的分层处理灵活查询支持基于图像的查询和复杂的图像问答可扩展架构易于扩展到其他多模态任务7. 扩展建议功能扩展多模态混合查询支持文本图像的混合查询例如查找与这幅画风格相似的风景画跨模态检索实现文本到图像和图像到文本的双向检索细粒度分析对图像进行更细粒度的分析如构图、色彩、笔触等时序分析分析艺术家风格随时间的变化交互式探索构建交互式界面支持用户探索图像之间的关系性能优化嵌入模型优化尝试其他图像嵌入模型如DINO、ALIGN等向量数据库优化优化向量索引和搜索算法提高检索速度缓存机制实现查询结果缓存减少重复计算分布式处理支持大规模图像集的分布式处理应用场景艺术品管理博物馆和画廊的艺术品管理和推荐电商应用基于图像的商品推荐和搜索教育领域艺术教育和研究工具设计灵感设计师寻找灵感和参考内容审核基于图像内容的自动审核和分类8. 总结案例价值本案例展示了如何结合CLIP图像嵌入和GPT-4V多模态大模型构建一个完整的图像检索和理解系统。该系统不仅能够基于视觉特征检索相似图像还能通过多模态大模型进行深度的语义分析和推理实现了从看图到懂图的跨越。技术启示这个案例的技术架构具有很好的通用性可以扩展到各种多模态应用场景。通过将传统检索技术与现代大模型相结合我们能够构建更加智能和强大的应用系统为用户提供更丰富的体验。未来展望随着多模态大模型的不断发展图像检索和理解系统将变得更加智能和人性化。未来我们可以期待更加精准的图像理解、更加自然的交互方式以及更加广泛的应用场景为艺术、教育、电商等领域带来革命性的变化。
返回列表