基于Qwen2-VL模型针对LaTeX OCR任务进行微调训练 - 原模型 多图推理

基于Qwen2-VL模型针对LaTeX OCR任务进行微调训练 - 原模型 多图推理

flyfish

输入

在这里插入图片描述
在这里插入图片描述

输出

[‘第一张图片是一幅中国山水画,描绘了一座山峰和周围的树木。第二张图片是一张现代照片,展示了一座山峰和周围的自然景观,包括水体和植被。’]

from PIL import Image
import requests
import torch
from torchvision import io
from typing import Dict
from transformers import Qwen2VLForConditionalGeneration, AutoTokenizer, AutoProcessor
from modelscope import snapshot_download
from qwen_vl_utils import process_vision_info

# 下载模型快照并指定保存目录
model_dir = snapshot_download("qwen/Qwen2-VL-7B-Instruct")

# 加载模型到可用设备(CPU或GPU),并使用自动精度(根据设备自动选择)
# 使用 attn_implementation="flash_attention_2" 以利用更快的注意力机制实现
model = Qwen2VLForConditionalGeneration.from_pretrained(
    model_dir,
    torch_dtype="auto",
    device_map="auto",
    attn_implementation="flash_attention_2",
)

# 打印 device_map 和模型信息
print("\nDevice Map:")
print(model.device_map)

print("\nModel Information:")
print(model)

# 打印模型的所有属性及其值(不包括方法)
print("\nModel Attributes and Their Values:")
attributes_and_methods = dir(model)
for attr in attributes_and_methods:
    try:
        value = getattr(model, attr)
        if not callable(value):
            print(f"{attr}: {value}")
    except AttributeError:
        continue

# 加载图像处理器
processor = AutoProcessor.from_pretrained(model_dir, low_cpu_mem_usage=False)

# 从本地获取文件
image_path1 = "./QueHuaQiuSe1.png"
image_path2 = "./QueHuaQiuSe2.png"

# 定义对话历史,包括用户输入的文本和多个图像
messages = [
    {
        "role": "user",
        "content": [
            {"type": "image", "image": image_path1},
            {"type": "image", "image": image_path2},
            {"type": "text", "text": "识别这些图像之间的不同之处。"},
        ],
    }
]

# 使用处理器应用聊天模板,并添加生成提示
# tokenize=False 表示不进行分词处理,add_generation_prompt=True 添加生成提示
text = processor.apply_chat_template(
    messages, tokenize=False, add_generation_prompt=True
)

# 处理视觉信息(图像和视频)
image_inputs, video_inputs = process_vision_info(messages)

# 预处理输入数据,将文本和图像转换为模型可以接受的格式
inputs = processor(
    text=[text],
    images=image_inputs,
    videos=video_inputs,
    padding=True,
    return_tensors="pt",
)

# 将输入数据移动到CUDA设备上(如果可用的话)
inputs = inputs.to("cuda")

# 推理:生成输出文本
generated_ids = model.generate(**inputs, max_new_tokens=128)  # 最大新生成token数量为128

# 提取生成的token ID,去掉输入的原始token ID
generated_ids_trimmed = [
    out_ids[len(in_ids) :] for in_ids, out_ids in zip(inputs.input_ids, generated_ids)
]

# 解码生成的token ID为人类可读的文本
output_text = processor.batch_decode(
    generated_ids_trimmed, skip_special_tokens=True, clean_up_tokenization_spaces=False
)

# 打印生成的描述文本
print("\nGenerated Description Text:")
print(output_text)

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

R语言学习笔记-1

1. 基础操作和函数 清空环境:rm(list ls()) 用于清空当前的R环境。 打印输出:print("Hello, world") 用于输出文本到控制台。 查看已安装包和加载包: search():查看当前加载的包。install.packages("package_na…

基本分页存储管理

一、实验目的 目的:熟悉并掌握基本分页存储管理的思想及其实现方法,熟悉并掌握基本分页存储管理的分配和回收方式。 任务:模拟实现基本分页存储管理方式下内存空间的分配和回收。 二、实验内容 1、实验内容 内存空间的初始化——可以由用户输…

如何将CSDN的文章保存为PDF?

目录 1、打开CSDN文章2、按F12或者鼠标右键选择检查并进入控制台3、在控制台输入以下代码4、然后回车(Enter)如果纵向显示不全就横向 1、打开CSDN文章 2、按F12或者鼠标右键选择检查并进入控制台 3、在控制台输入以下代码 (function(){ $("#side&q…

ur机器人ros-urdf

新建工作空间 mkdir -p ~/catkin_ws/src cd catkin_ws_ur5/src git clone -b melodic-devel https://github.com/ros-industrial/universal_robot.git cd .. rosdep update rosdep install --rosdistro melodic --ignore-src --from-paths src catkin_make source ~/catkin_ws…

A6688 JSP+MYSQL+LW+二手物品网上交易系统

二手物品网上交易系统的设计与实现 1.摘要2.开发目的和意义3.系统功能设计4.系统界面截图5.源码获取 1.摘要 摘 要 随着社会经济快速发展,互联网推动了电子商务业的迅速崛起。越来越多的人们喜欢在线进行商品的交易,尤其是对于二手物品的处理&#xff0…

深度学习day4|用pytorch实现猴痘病识别

🍨 本文为🔗365天深度学习训练营中的学习记录博客🍖 原作者:K同学啊 🍺要求: 训练过程中保存效果最好的模型参数。 加载最佳模型参数识别本地的一张图片。 调整网络结构使测试集accuracy到达88%&#x…

ISP(Image Signal Processor)——HDR技术总结

传统多帧融合技术 拍摄一系列不同曝光时长的图像帧(LDR),然后使用融合算法进行融合成HDR图像。 融合算法可以分为两种 基于照度图估计的融合 基于照度估计需要拟合相机响应函数,详细可以参考如下论文: Recovering H…

首程控股再发停车资产类REITs,行业走向“资产管理模式”

伴随着资产证券化的快速发展,交易结构设置和底层资产类型也愈加丰富多样。 近日,首程控股完成“国君-首程控股智慧停车第二期资产支持专项计划”的正式发行。据了解,该产品的优先级利率为2.40%,发行规模达到人民币3.70亿元&#…

如何写出优秀的单元测试?

🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快 写出优秀的单元测试需要考虑以下几个方面: 1. 测试用例设计 测试用例应该覆盖被测试代码的不同场景和边界情况,以尽可能发现潜在的问题。…

PostgreSQL的学习心得和知识总结(一百六十四)|深入理解PostgreSQL数据库之在 libpq 中支持负载平衡

目录结构 注:提前言明 本文借鉴了以下博主、书籍或网站的内容,其列表如下: 1、参考书籍:《PostgreSQL数据库内核分析》 2、参考书籍:《数据库事务处理的艺术:事务管理与并发控制》 3、PostgreSQL数据库仓库…

批量合并多个Excel到一个文件

工作中,我们经常需要将多个Excel的数据进行合并,很多插件都可以做这个功能。但是今天我们将介绍一个完全免费的独立软件【非插件】,来更加方便的实现这个功能。 准备Excel 这里我们准备了两张待合并的Excel文件 的卢易表 打开的卢易表软件…

shell编程(完结)

shell编程(完结) 声明! 学习视频来自B站up主 ​泷羽sec​​ 有兴趣的师傅可以关注一下,如涉及侵权马上删除文章 笔记只是方便各位师傅的学习和探讨,文章所提到的网站以及内容,只做学习交流,其…

docker 容器相互访问

目前采用 network 方式 1. 创建自定义网络 docker network create network-group 如下 2. 相互访问的容器更改(目前演示redis 以及netcore api 访问redis ) //redis 原有容器删除 跟之前区别就是加入 --network network-group docker run \ -p 6379:…

nVisual关于钉钉小程序打开项目及调试说明

关于钉钉小程序开发者工具的使用对于没有接触过的人可能比较陌生。如果需要部署钉钉小程序是需要对钉钉小程序开发者工具有一定的了解的,需要在此做部分上线前的测试及在开发者工具中上传项目包,故此做部分工具的解释。 分三部分来进行解释:…

免费下载 | 2024算网融合技术与产业白皮书

《2024算网融合技术与产业白皮书(2023年)》的核心内容概括如下: 算网融合发展概述: 各国细化算网战略,指引行业应用创新升级。 算网融合市场快速增长,算力互联成为投资新热点。 算网融合产业模式逐渐成型…

基于docker搭建pulsar和使用攻略

pulsar Pulsar是一个由yahoo公司于2016年开源的消息中间件,2018年成为Apache的顶级项目 我们先来看一下架构,从架构来看,和其他的消息中间件差不多,都是有消费者,生产者和broker,唯一一点不同的是pulsar的数据存储是…

[代码随想录16]二叉树的重新构造,路径总和,左下角的值

前言 关于二叉树的题目,我认为主要是把基础的思想掌握了,剩下的还是拼装和组合的题目,我们重要的就是学会一些基本的二叉思路,递归好还是迭代好,怎么递归和怎么迭代,二叉树的题目在面试过程中考的是挺多的&…

数据链路层(Java)(MAC与IP的区别)

以太网协议: "以太⽹" 不是⼀种具体的⽹络, ⽽是⼀种技术标准; 既包含了数据链路层的内容, 也包含了⼀些物理 层的内容. 例如: 规定了⽹络拓扑结构, 访问控制⽅式, 传输速率等; 例如以太⽹中的⽹线必须使⽤双绞线; 传输速率有10M, 100M, 1000M等; 以太…

梳理你的思路(从OOP到架构设计)_基本OOP知识04

目录 1、 主动型 vs.基於被动型 API 1)卡榫函数实现API 2)API的分类 3)回顾历史 4)API >控制力 2、 结语&复习: 接口与类 1)接口的表示 2)Java的接口表示 1、 主动型 vs.基於被动…

题解 - 取数排列

题目描述 取1到N共N个连续的数字(1≤N≤9),组成每位数不重复的所有可能的N位数,按从小到大的顺序进行编号。当输入一个编号M时,就能打印出与该编号对应的那个N位数。例如,当N=3时,可…