模型简介
模型特点
模型能力
使用案例
🚀 上传的微调模型
本项目上传了经过微调的模型,该模型基于通义千问 Qwen2-VL 进行优化,能高效准确地从图像中提取文本,可广泛应用于文档、表格等的 OCR 任务。
🚀 快速开始
以下是使用该模型的示例代码:
加载模型和处理器
from transformers import AutoProcessor, AutoModelForImageTextToText
processor = AutoProcessor.from_pretrained("JackChew/Qwen2-VL-2B-OCR")
model = AutoModelForImageTextToText.from_pretrained("JackChew/Qwen2-VL-2B-OCR")
加载图像
# Load your image
from PIL import Image
image_path = "xxxxx" # Replace with your image path
image = Image.open(image_path)
准备模型、预处理输入并进行推理
import requests
import torch
from torchvision import io
from typing import Dict
model = model.to("cuda")
conversation = [
{
"role":"user",
"content":[
{
"type":"image",
},
{
"type":"text",
"text":"extract all data from this payslip without miss anything"
}
]
}
]
# Preprocess the inputs
text_prompt = processor.apply_chat_template(conversation, add_generation_prompt=True)
# Excepted output: '<|im_start|>system\nYou are a helpful assistant.<|im_end|>\n<|im_start|>user\n<|vision_start|><|image_pad|><|vision_end|>Describe this image.<|im_end|>\n<|im_start|>assistant\n'
inputs = processor(text=[text_prompt], images=[image], padding=True, return_tensors="pt")
inputs = inputs.to('cuda')
# Inference: Generation of the output
output_ids = model.generate(**inputs, max_new_tokens=2048)
generated_ids = [output_ids[len(input_ids):] for input_ids, output_ids in zip(inputs.input_ids, output_ids)]
output_text = processor.batch_decode(generated_ids, skip_special_tokens=True, clean_up_tokenization_spaces=True)
print(output_text)
推理过程中处理 CUDA 内存问题
如果在模型推理过程中遇到 CUDA 内存问题,常见的解决方法是调整输入图像的大小以减小其占用的内存。这有助于减少内存占用,使模型更高效地处理图像。
# Resize the image to reduce its size (e.g., scale to half its original size)
image = image.resize((image.width // 2, image.height // 2))
✨ 主要特性
- 高效微调:使用 Unsloth 和 Huggingface 的 TRL 库,训练速度提升了 2 倍。
- 精准 OCR:专注于文本提取,能够从文档、表格和工资单等图像中提取完整文本,确保信息不丢失。
- 广泛应用:可应用于工资系统、金融、法律文件分析等多个领域。
📦 安装指南
文档未提供具体安装步骤,暂不展示。
💻 使用示例
基础用法
from transformers import AutoProcessor, AutoModelForImageTextToText
processor = AutoProcessor.from_pretrained("JackChew/Qwen2-VL-2B-OCR")
model = AutoModelForImageTextToText.from_pretrained("JackChew/Qwen2-VL-2B-OCR")
from PIL import Image
image_path = "xxxxx" # Replace with your image path
image = Image.open(image_path)
import requests
import torch
from torchvision import io
from typing import Dict
model = model.to("cuda")
conversation = [
{
"role":"user",
"content":[
{
"type":"image",
},
{
"type":"text",
"text":"extract all data from this payslip without miss anything"
}
]
}
]
text_prompt = processor.apply_chat_template(conversation, add_generation_prompt=True)
inputs = processor(text=[text_prompt], images=[image], padding=True, return_tensors="pt")
inputs = inputs.to('cuda')
output_ids = model.generate(**inputs, max_new_tokens=2048)
generated_ids = [output_ids[len(input_ids):] for input_ids, output_ids in zip(inputs.input_ids, output_ids)]
output_text = processor.batch_decode(generated_ids, skip_special_tokens=True, clean_up_tokenization_spaces=True)
print(output_text)
高级用法
# 处理 CUDA 内存问题
from PIL import Image
image_path = "xxxxx" # Replace with your image path
image = Image.open(image_path)
image = image.resize((image.width // 2, image.height // 2))
from transformers import AutoProcessor, AutoModelForImageTextToText
processor = AutoProcessor.from_pretrained("JackChew/Qwen2-VL-2B-OCR")
model = AutoModelForImageTextToText.from_pretrained("JackChew/Qwen2-VL-2B-OCR")
import requests
import torch
from torchvision import io
from typing import Dict
model = model.to("cuda")
conversation = [
{
"role":"user",
"content":[
{
"type":"image",
},
{
"type":"text",
"text":"extract all data from this payslip without miss anything"
}
]
}
]
text_prompt = processor.apply_chat_template(conversation, add_generation_prompt=True)
inputs = processor(text=[text_prompt], images=[image], padding=True, return_tensors="pt")
inputs = inputs.to('cuda')
output_ids = model.generate(**inputs, max_new_tokens=2048)
generated_ids = [output_ids[len(input_ids):] for input_ids, output_ids in zip(inputs.input_ids, output_ids)]
output_text = processor.batch_decode(generated_ids, skip_special_tokens=True, clean_up_tokenization_spaces=True)
print(output_text)
📚 详细文档
模型描述
通义千问 QWEN OCR 是一个专注于文本提取的专有模型,专门用于从文档、表格和工资单等图像中提取文本。该模型的主要目标是从图像中提取完整的文本,确保不遗漏任何信息。
Qwen2-VL-2B-OCR 是 unsloth/Qwen2-VL-2B-Instruct 的微调版本,专门针对光学字符识别(OCR)进行了优化。该模型经过训练,能够从图像中提取完整的文本,尤其适用于工资单、发票和表格等文档。模型旨在提供准确的文本提取,同时尽量减少信息损失,确保捕获每一个细节。
该模型采用了先进的图像文本生成技术,可无缝应用于各种 OCR 任务,包括从具有结构化布局的复杂文档中提取文本。
预期用途
该模型的主要用途是从图像或文档中提取数据,特别是从工资单和表格中提取数据,确保不遗漏任何关键细节。它可应用于多个领域,如工资系统、金融、法律文件分析以及任何需要文档提取的领域。
提示示例:
- 文本:模型最适合处理
"Extract all text from image/payslip without miss anything"
这样的提示。
模型基准
基准测试 | InternVL2-2B | MiniCPM-V 2.0 | Qwen2-VL-2B |
---|---|---|---|
MMMUval | 36.3 | 38.2 | 41.1 |
DocVQAtest | 86.9 | - | 90.1 |
InfoVQAtest | 58.9 | - | 65.5 |
ChartQAtest | 76.2 | - | 73.5 |
TextVQAval | 73.4 | - | 79.7 |
OCRBench | 781 | 605 | 794 |
MTVQA | - | - | 20.0 |
VCRen easy | - | - | 81.45 |
VCRzh easy | - | - | 46.16 |
RealWorldQA | 57.3 | 55.8 | 62.9 |
MMEsum | 1876.8 | 1808.6 | 1872.0 |
MMBench-ENtest | 73.2 | 69.1 | 74.9 |
MMBench-CNtest | 70.9 | 66.5 | 73.5 |
MMBench-V1.1test | 69.6 | 65.8 | 72.2 |
MMT-Benchtest | - | - | 54.5 |
MMStar | 49.8 | 39.1 | 48.0 |
MMVetGPT-4-Turbo | 39.7 | 41.0 | 49.5 |
HallBenchavg | 38.0 | 36.1 | 41.7 |
MathVistatestmini | 46.0 | 39.8 | 43.0 |
MathVision | - | - | 12.4 |
微调后,该模型在提取工资单的所有相关部分方面有了显著改进,包括之前缺失的 扣除项 部分。
示例输出对比
微调后模型
以下是从工资单中提取的数据:
员工信息:
- 入职日期:2018 - 06 - 23
- 工资周期:2021 年 8 月
- 员工姓名:Sally Harley
- 职位:营销主管
- 部门:营销
收入:
收入 | 金额 | 扣除项 | 金额 |
---|---|---|---|
基本工资 | 10000 | 公积金 | 1200 |
奖金 | 1000 | 职业税 | 500 |
房租补贴 | 400 | 贷款 | 400 |
餐补 | 200 | 9500 |
总收入:$11,600 总扣除项:$2,100 实发工资:$9,500
雇主签名 员工签名
原始模型
原始模型提取了以下数据,但遗漏了 扣除项 部分:
- 入职日期:2018 - 06 - 23
- 工资周期:2021 年 8 月
- 员工姓名:Sally Harley
- 职位:营销主管
- 部门:营销
- 收入:
- 基本工资:$10,000
- 奖金:$1,000
- 房租补贴:$400
- 餐补:$200
- 总收入:$11,600
- 总扣除项:$2,100
- 实发工资:$9,500
- 雇主签名:[签名]
- 员工签名:[签名]
- 这是系统生成的工资单
🔧 技术细节
模型微调细节
该模型使用 Unsloth 框架进行微调,借助 Huggingface 的 TRL(训练强化学习)库,训练速度提高了 2 倍。应用了 LoRA(低秩自适应)技术,仅微调一小部分参数,显著减少了训练时间和计算资源。微调同时关注视觉和语言层,确保模型能够高效处理复杂的 OCR 任务。
可训练的总参数:57,901,056
硬件要求
要运行此模型,建议使用至少具有 16 GB VRAM 的 GPU。由于训练需要大量内存,对于内存较小的 GPU,可能需要使用较小的批量大小或梯度累积。
模型架构
如果您想了解更多关于模型的架构及其详细规格,可以查看 Hugging Face 上的源页面:Qwen2-VL-2B-Instruct Model Page
📄 许可证
- 许可证:apache - 2.0
模型信息表格
属性 | 详情 |
---|---|
基础模型 | unsloth/Qwen2-VL-2B-Instruct-16Bit |
标签 | text-generation-inference, text-extraction, transformers, unsloth/Qwen2-VL-2B-Instruct-16Bit |
开发者 | JackChew |
微调来源模型 | unsloth/Qwen2-VL-2B-Instruct-16Bit |
许可证 | apache - 2.0 |
语言 | en |








