language:
- 英文
- 韩文
license: cc-by-nc-4.0
tags:
- 多模态
- 对话式
- ncsoft
- varco
base_model:
- Qwen/Qwen2.5-14B-Instruct
- google/siglip-so400m-patch14-384
library_name: transformers
pipeline_tag: 图像文本到文本
VARCO-VISION-14B-HF
关于模型
VARCO-VISION-14B 是一款强大的英韩视觉语言模型(VLM)。VARCO-VISION的训练流程包含四个阶段:特征对齐预训练、基础监督微调、高级监督微调以及偏好优化。在多模态和纯文本基准测试中,VARCO-VISION-14B不仅超越了同规模的其他模型,其得分甚至可与专有模型相媲美。该模型目前支持单张图像和文本作为输入,并生成文本输出,具备定位、指代以及光学字符识别(OCR)功能。
使用方法
直接使用
使用此模型前,请确保已安装transformers >= 4.45.0
。
import torch
import requests
from PIL import Image
from transformers import LlavaOnevisionForConditionalGeneration, AutoProcessor
model_name = "NCSOFT/VARCO-VISION-14B-HF"
model = LlavaOnevisionForConditionalGeneration.from_pretrained(
model_name,
torch_dtype="float16",
device_map="auto",
attn_implementation="flash_attention_2"
)
processor = AutoProcessor.from_pretrained(model_name)
device = model.device
conversation = [
{
"role": "user",
"content": [
{"type": "text", "text": "描述这张图片。"},
{"type": "image"},
],
},
]
prompt = processor.apply_chat_template(conversation, add_generation_prompt=True)
EOS_TOKEN = "<|im_end|>"
image_file = "http://images.cocodataset.org/val2017/000000039769.jpg"
raw_image = Image.open(requests.get(image_file, stream=True).raw)
inputs = processor(images=raw_image, text=prompt, return_tensors='pt').to(device, torch.float16)
output = model.generate(**inputs, max_new_tokens=1024, do_sample=False)
output = processor.decode(output[0][inputs.input_ids.shape[1]:])
if output.endswith(EOS_TOKEN):
output = output[: -len(EOS_TOKEN)]
output = output.strip()
print(output)
特殊功能
如果问题基于边界框或需要输出边界框,请在输入文本中包含特殊标记。
以下特殊标记用于定义模型的具体任务、输入和输出:
<gro>
:表示模型的响应应包含边界框信息。
<ocr>
:指定OCR任务以识别图像中的文本。
<char>
和</char>
:用于标记文本短语。
<obj>
和</obj>
:用于指示对象。
<bbox>
和</bbox>
:用于表示边界框。
<delim>
:表示单个对象或文本的多个位置点。
定位
定位任务要求模型识别图像中的特定位置以提供适当的答案。执行定位时,在问题前添加特殊标记<gro>
。
conversation = [
{
"role": "user",
"content": [
{"type": "text", "text": "<gro>\n详细描述这张图片。"},
{"type": "image"},
],
},
]
预期输出示例:
图片显示<obj>两只猫</obj><bbox>0.014, 0.106, 0.51, 0.996<delim>0.51, 0.054, 0.996, 0.787</bbox>躺在<obj>一条粉色毯子</obj><bbox>0.003, 0.231, 0.999, 0.999</bbox>上。左边的猫侧躺着,头靠在毯子上,而右边的猫趴着,头也靠在毯子上。两只猫看起来都很放松和舒适。图片中还有<obj>两个遥控器</obj><bbox>0.037, 0.141, 0.283, 0.253<delim>0.506, 0.171, 0.581, 0.295</bbox>,一个在图片左侧,一个在右侧。
指代
VARCO-VISION-14B可以通过边界框处理位置特定的问题。执行指代任务时,在对话中包含用<obj>
和</obj>
标记的对象,并用<bbox>
和</bbox>
标记指定其位置。这使模型能够理解上下文并专注于指定位置的对象。边界框以(x1, y1, x2, y2)形式表示,前两个值表示边界框的左上位置,后两个值表示右下位置。
conversation = [
{
"role": "user",
"content": [
{
"type": "text",
"text": "<obj>这个东西</obj><bbox>0.039, 0.138, 0.283, 0.257</bbox>怎么用?",
},
{"type": "image"},
],
},
]
预期输出示例:
**这个东西**是遥控器,主要用于远程控制电视或其他电子设备。遥控器上有各种按钮,每个按钮执行频道切换、音量调节、电源开关等功能。用户手持遥控器按下按钮时,会向设备发送信号,实现所需操作。遥控器通常用于家庭或办公室,方便操作电子设备。
OCR
执行光学字符识别(OCR)时,使用<ocr>
标记。
image_file = "./assets/ocr_1.png"
raw_image = Image.open(image_file)
conversation = [
{
"role": "user",
"content": [
{"type": "text", "text": "<ocr>"},
{"type": "image"},
],
},
]
预期输出示例:
<char>백범로</char><bbox>0.172, 0.266, 0.328, 0.341</bbox>
<char>124번길</char><bbox>0.347, 0.266, 0.512, 0.341</bbox>
<char>Baekbeom-ro</char><bbox>0.171, 0.337, 0.433, 0.392</bbox>
<char>124</char><bbox>0.444, 0.341, 0.508, 0.392</bbox>
<char>만수주공아파트</char><bbox>0.109, 0.531, 0.335, 0.601</bbox>
<char>시흥</char><bbox>0.443, 0.518, 0.522, 0.581</bbox>
<char>시청</char><bbox>0.711, 0.521, 0.811, 0.594</bbox>
<char>Mansu</char><bbox>0.102, 0.601, 0.181, 0.648</bbox>
<char>Jugong</char><bbox>0.186, 0.601, 0.273, 0.658</bbox>
<char>Apt</char><bbox>0.28, 0.601, 0.327, 0.651</bbox>
<char>42</char><bbox>0.377, 0.601, 0.416, 0.648</bbox>
<char>Shieung</char><bbox>0.445, 0.578, 0.53, 0.625</bbox>
<char>인천대공원</char><bbox>0.43, 0.621, 0.609, 0.684</bbox>
<char>모래내시장역</char><bbox>0.651, 0.59, 0.873, 0.665</bbox>
<char>IncheonGrand</char><bbox>0.432, 0.681, 0.561, 0.723</bbox>
<char>Park</char><bbox>0.564, 0.681, 0.611, 0.723</bbox>
引用模型
如果您在研究中使用了VARCO-VISION-14B,请引用以下内容:
@misc{ju2024varcovisionexpandingfrontierskorean,
title={VARCO-VISION:拓展韩语视觉语言模型的前沿},
author={Jeongho Ju and Daeyoung Kim and SunYoung Park and Youngjune Kim},
year={2024},
eprint={2411.19103},
archivePrefix={arXiv},
primaryClass={cs.CV},
url={https://arxiv.org/abs/2411.19103},