【多模态RAG】多模态RAG ColPali实践

关于【RAG&多模态】多模态RAG-ColPali:使用视觉语言模型实现高效的文档检索前面已经介绍了(供参考),这次来看看ColPali实践。

所需权重:

  1. 多模态问答模型:Qwen2-VL-72B-Instruct,https://modelscope.cn/models/Qwen/Qwen2-VL-72B-Instruct

  2. 基于 PaliGemma-3B 和 ColBERT 策略的视觉检索器:

    • ColPali(LoRA):https://huggingface.co/vidore/colpali

    • ColPali(基座):https://huggingface.co/vidore/colpaligemma-3b-mix-448-base

多模态检索问答实践

  • lora的adapter_config.json字段base_model_name_or_path修改地址:ColPali(基座)存储路径

  • qwen_vl_utils下载地址:https://github.com/QwenLM/Qwen2-VL/tree/main/qwen-vl-utils/src/qwen_vl_utils

  • byaldi安装方式:https://github.com/AnswerDotAI/byaldi

  • 完整代码


from byaldi import RAGMultiModalModel
from transformers import Qwen2VLForConditionalGeneration, AutoProcessor
from qwen_vl_utils import process_vision_info
import torch
from pdf2image import convert_from_pathclass DocumentQA:def __init__(self, rag_model_name: str, vlm_model_name: str, device: str = 'cuda', system_prompt: str = None):self.rag_engine = RAGMultiModalModel.from_pretrained(rag_model_name)self.vlm = Qwen2VLForConditionalGeneration.from_pretrained(vlm_model_name,torch_dtype=torch.bfloat16,attn_implementation="flash_attention_2",device_map=device)self.processor = AutoProcessor.from_pretrained(vlm_model_name, trust_remote_code=True)self.device = deviceif system_prompt is None:self.system_prompt = ("你是一位专精于计算机科学和机器学习的AI研究助理。""你的任务是分析学术论文,尤其是关于文档检索和多模态模型的研究。""请仔细分析提供的图像和文本,提供深入的见解和解释。")else:self.system_prompt = system_promptdef index_document(self, pdf_path: str, index_name: str = 'index', overwrite: bool = True):self.pdf_path = pdf_pathself.rag_engine.index(input_path=pdf_path,index_name=index_name,store_collection_with_index=False,overwrite=overwrite)self.images = convert_from_path(pdf_path)def query(self, text_query: str, k: int = 3) -> str:results = self.rag_engine.search(text_query, k=k)print("搜索结果:", results)if not results:print("未找到相关查询结果。")return Nonetry:page_num = results[0]["page_num"]image_index = page_num - 1image = self.images[image_index]except (KeyError, IndexError) as e:print("获取页面图像时出错:", e)return Nonemessages = [{"role": "system","content": self.system_prompt},{"role": "user","content": [{"type": "image", "image": image},{"type": "text", "text": text_query},],}]text = self.processor.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)image_inputs, video_inputs = process_vision_info(messages)# 准备模型输入inputs = self.processor(text=[text],images=image_inputs,videos=video_inputs,padding=True,return_tensors="pt",)inputs = inputs.to(self.device)generated_ids = self.vlm.generate(**inputs, max_new_tokens=1024)generated_ids_trimmed = [out_ids[len(in_ids):] for in_ids, out_ids in zip(inputs.input_ids, generated_ids)]output_text = self.processor.batch_decode(generated_ids_trimmed, skip_special_tokens=True, clean_up_tokenization_spaces=False)return output_text[0]if __name__ == "__main__":# 初始化 DocumentQA 实例document_qa = DocumentQA(rag_model_name="./colpali",vlm_model_name="./Qwen2-VL-7B-Instruct",device='cuda')# 索引 PDF 文档document_qa.index_document("test.pdf")# 定义查询text_query = ("文中模型在哪个数据集上相比其他模型有最大的优势?""该优势的改进幅度是多少?")# 执行查询并打印答案answer = document_qa.query(text_query)print("答案:", answer)

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

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

相关文章

推荐一款用来快速开发3D建筑模型软件:Allplan

Nemetschek Allplan是一款用来快速开发3D建筑模型软件的软件,它的简单好用但是功能强大,绝对不输AuToDesk,而且人性化的设计更让你可以快速的建立开发及维护你的建筑模型。是与ArchiCAD称兄道弟的强大建筑设计软件,功能上互有短长…

Python面向对象,实现图片处理案例,支持:高斯模糊、Canny边缘检测、反转边缘图像、生成手绘效果、调亮度......等等

实验图片如下: 命名为img1.jpg, 放在项目下新建文件夹images下 项目构造如下: app.py源码如下 import cv2 import os from matplotlib import pyplot as plt import numpy as npclass ImageProcessor:def __init__(self, image_path):self.image cv…

利用LangChain与LLM打造个性化私有文档搜索系统

我们知道LLM(大语言模型)的底模是基于已经过期的公开数据训练出来的,对于新的知识或者私有化的数据LLM一般无法作答,此时LLM会出现“幻觉”。针对“幻觉”问题,一般的解决方案是采用RAG做检索增强。 但是我们不可能把…

美定制!用Vue的:deep选择器轻松覆盖第三方组件样式

序言 在使用Vue开发时,第三方组件库往往自带样式。虽然这些样式简化了我们的开发工作,但它们默认的设计可能不完全符合项目风格。当你尝试修改这些样式时,可能会遇到Scoped样式的“保护”,让我们很难覆盖组件内部的样式。 Vue中…

YOLOv11改进策略【注意力机制篇】| CVPRW-2024 分层互补注意力混合层 H-RAMi 针对低质量图像的特征提取模块

一、本文介绍 本文记录的是利用H-RAMi模块优化YOLOv11的目标检测网络模型。H-RAMi结合了对来自分层编码器阶段的多尺度注意力的处理能力和对语义信息的利用能力,有效地补偿了因下采样特征导致的像素级信息损失。本文将其应用到v11中,并进行二次创新,使网络能够在处理具有复…

C++ 基础语法 一

C 基础语法 一 文章目录 C 基础语法 一const 限定符常量指针类型别名autodecltypeQStringvector迭代器指针和数组显示转换static_castconst_cast 函数尽量使用常量引用数组形参不要返回局部对象的引用和指针返回数组指针 C四种转换内联函数constexpr函数函数指针 const 限定符 …

tensorflow案例4--人脸识别(损失函数选取,调用VGG16模型以及改进写法)

🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 前言 这个模型结构算上之前的pytorch版本的,算是花了不少时间,但是效果一直没有达到理想情况,主要是验证集和训练集准确率…

力扣每日一题 超级饮料的最大强化能量 动态规划(dp)

来自未来的体育科学家给你两个整数数组 energyDrinkA 和 energyDrinkB,数组长度都等于 n。这两个数组分别代表 A、B 两种不同能量饮料每小时所能提供的强化能量。 你需要每小时饮用一种能量饮料来 最大化 你的总强化能量。然而,如果从一种能量饮料切换到…

全国产 V7 690T+FT6678 高性能实时信号处理平台设计原理

1、概述 全国产 V7 690TFT6678 高性能实时信号处理平台组成如图 1 所示,包含 1 片SMQ7VX690TFFG1761 和两片 FT-6678(国防科大)的 DSP,总共 3 个主芯片;每个主芯片外部各搭配 1 组 64bit 的 DDR3 内存模组以及各芯片启…

0.STM32F1移植到F0的各种经验总结

1.结构体的声明需放在函数的最前面 源代码: /*开启时钟*/RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE); //开启USART1的时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //开启GPIOA的时钟/*GPIO初始化*/GPIO_InitTypeDef GPIO_InitStructu…

Linux高阶——1027—守护进程

1、守护进程的基本流程 1、父进程创建子进程,父进程退出 守护进程是孤儿进程,但是是工程师人为创建的孤儿进程,低开销模式运行,对系统没有压力 2、子进程(守护进程)脱离控制终端,创建新会话 …

浔川社团官方联合会入驻后计划公告

浔川社团官方联合会入驻后计划公告 尊敬的浔川社团成员及相关人士: 大家好!随着浔川社团官方联合会的入驻,为了更好地协调社团事务,规范发布流程,现将入驻后的计划公告如下: 一、发文流程 接待与编辑 我们…

vue表格单元格数据拖拽互换

帮助兄弟记录下成果&#xff0c;借鉴了https://juejin.cn/post/6844904136056668168 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initia…

Selective Generation for Language Models 语言模型的选择性生成

生成式语言模型&#xff08;Generative Language Models, GLMs&#xff09;在文本生成任务中取得了显著进展。然而&#xff0c;生成内容的“幻觉”现象&#xff0c;即生成内容与事实或真实语义不符的问题&#xff0c;仍是GLMs在实际应用中的一个重大挑战。为了解决这一问题&…

-bash: ./my_rename.sh: /bin/bash^M: bad interpreter: No such file or directory

在windows上写了一个shell脚本&#xff0c;在Linux上执行时报错&#xff0c;然后看下解决办法&#xff1a; 查了下&#xff0c;其实就是windows系统里文件行尾的换行符和Linux不同引起的&#xff0c; sed -i s/\r$// my.sh用这行代码处理一下&#xff0c;就可以正常运行了。 执…

flutter区别于vue的写法

View.dart 页面渲染&#xff1a; 类似于vue里面使用 <template> <div> <span> <textarea>等标签绘制页面, flutter 里面则是使用不同的控件来绘制页面 样式 与传统vue不同的是 flutter里面没有css/scss样式表&#xff0c; Flutter的理念是万物皆…

Python自动化社交媒体内容发布:以微博为例

1. 引言 在当今社交媒体盛行的时代&#xff0c;定期发布内容对于保持账户活跃度非常重要。本文将介绍如何使用Python的Selenium库来实现自动化登录微博并发布内容的过程。 2. 环境准备 Python环境&#xff08;建议版本3.x&#xff09;Chrome浏览器及其对应版本的ChromeDrive…

uniapp 使用 websocket

原理和vue使用是一样的&#xff0c;这里就不多说了&#xff0c;可以去看我之前发的 websocket 的使用 传送门&#xff1a;WebScoket 使用教程 直接看代码&#xff1a; &#xff08;1&#xff09;先创建一个ws的连接。 在各个小程序平台运行时&#xff0c;网络相关的 API 在使…

idea免费安装步骤,(java集成开发环境)超详细

第一步 点击链接下载 百度网盘 请输入提取码 提取码是idea 下载步骤 可设也可不设置 我就没有设置 下一步 就点击安装就大功告成了

SAP RFC 用户安全授权

一、SAP 通讯用户 对于RFC接口的用户&#xff0c;使用五种用户类型之一的“通讯”类型&#xff0c;这种类型的用户没有登陆SAPGUI的权限。 二、对调用的RFC授权 在通讯用户内部&#xff0c;权限对象&#xff1a;S_RFC中&#xff0c;限制进一步可以调用的RFC函数授权&#xff…