微软Phi-3-vision:6个实际用途

2024年05月27日 由 alex 发表 331 0

微软最近发布了功能强大的语言模型 Phi-3,并推出了名为 Phi-3-vision-128k-instruct 的 Vision-Language 新变体。这个 4B 参数模型在公开基准测试中取得了令人印象深刻的成绩,在某些情况下甚至超过了 GPT-4V,在除 MMMU 之外的所有测试中都超过了 Gemini 1.0 Pro V。


这篇文章将探讨如何利用 Phi-3-vision-128k-instruct 作为数据科学工具包中的强大视觉和文本模型。我们将通过各种用例展示其功能,包括:


  • 光学字符识别 (OCR)
  • 图像标题
  • 表格解析
  • 图形理解
  • 扫描文档的阅读理解
  • 标记集提示


首先,我们将提供一个简单的代码片段,使用转换器和 bitsandbytes 在本地运行此模型。然后,我们将展示上述每个用例的示例。


本地运行模型

创建 Conda Python 环境并安装 torch 和其他 Python 依赖项:


conda install pytorch torchvision torchaudio pytorch-cuda=12.1 -c pytorch -c nvidia12.1 -c pytorch -c nvidia
pip install git+https://github.com/huggingface/transformers.git@60bb571e993b7d73257fb64044726b569fef9403 pillow==10.3.0 chardet==5.2.0 flash_attn==2.5.8 accelerate==0.30.1 bitsandbytes==0.43.1


然后,我们就可以运行这个脚本了:


# Example inspired from https://huggingface.co/microsoft/Phi-3-vision-128k-instruct
# Import necessary libraries
from PIL import Image
import requests
from transformers import AutoModelForCausalLM
from transformers import AutoProcessor
from transformers import BitsAndBytesConfig
import torch
# Define model ID
model_id = "microsoft/Phi-3-vision-128k-instruct"
# Load processor
processor = AutoProcessor.from_pretrained(model_id, trust_remote_code=True)
# Define BitsAndBytes configuration for 4-bit quantization
nf4_config = BitsAndBytesConfig(
    load_in_4bit=True,
    bnb_4bit_quant_type="nf4",
    bnb_4bit_use_double_quant=True,
    bnb_4bit_compute_dtype=torch.bfloat16,
)
# Load model with 4-bit quantization and map to CUDA
model = AutoModelForCausalLM.from_pretrained(
    model_id,
    device_map="cuda",
    trust_remote_code=True,
    torch_dtype="auto",
    quantization_config=nf4_config,
)
# Define initial chat message with image placeholder
messages = [{"role": "user", "content": "<|image_1|>\nWhat is shown in this image?"}]
# Download image from URL
url = "https://images.unsplash.com/photo-1528834342297-fdefb9a5a92b?ixlib=rb-4.0.3&q=85&fm=jpg&crop=entropy&cs=srgb&dl=roonz-nl-vjDbHCjHlEY-unsplash.jpg&w=640"
image = Image.open(requests.get(url, stream=True).raw)
# Prepare prompt with image token
prompt = processor.tokenizer.apply_chat_template(
    messages, tokenize=False, add_generation_prompt=True
)
# Process prompt and image for model input
inputs = processor(prompt, [image], return_tensors="pt").to("cuda:0")
# Generate text response using model
generate_ids = model.generate(
    **inputs,
    eos_token_id=processor.tokenizer.eos_token_id,
    max_new_tokens=500,
    do_sample=False,
)
# Remove input tokens from generated response
generate_ids = generate_ids[:, inputs["input_ids"].shape[1] :]
# Decode generated IDs to text
response = processor.batch_decode(
    generate_ids, skip_special_tokens=True, clean_up_tokenization_spaces=False
)[0]
# Print the generated response
print(response)


这段代码将像加载任何转换器模型一样加载 Phi-3 模型。我们添加了比特和字节,使其适合消费级 GPU 内存。

我们使用一个简单的提示语"<|image_1|>/nWhat is shown in this image?"(这张图片显示了什么?该提示与图片(与本博客的缩略图相同)一起处理,并送入模型。结果输出如下:


图片显示的是一朵黄色的花,绿色的茎,蓝色的背景。


加载模型后,在 RTX3080 上进行处理和预测只需 2 秒钟。


现在,我们已经准备就绪,让我们来探索一些使用案例:


光学字符识别(OCR)

我们要从图像中转录文本。为此,请将上面代码片段中的信息和图片 URL 行改为:


messages = [{"role": "user", "content": "<|image_1|>\nOCR the text of the image as is. OCR:"}]
url = "https://i.postimg.cc/fRFvFVyv/Screenshot-from-2024-05-22-20-55-43.png"


输入:


2


输出:


3 项实验
我们证明了位置插值可以有效地将上下文窗口扩展到原始大小的 32 倍,而这种扩展只需数百个训练步骤即可完成。我们证明了由此产生的模型是强大的 LLM,具有完全有效的长上下文窗口。我们展示了它在语言建模、密钥检索和长文档摘要等多项任务中的表现。
文档摘要。我们还展示了扩展模型在原始 LLaMA 评估基准上的基准结果。


结果不出所料!全文转录耗时 6 秒,与普通 OCR 相比稍慢。


图像标题

这里的目标是为自然图像添加标题:


messages = [{"role": "user", "content": "<|image_1|>\nWhat is this image of?"}]
url = "https://i.postimg.cc/q7Wjtj3n/Screenshot-from-2024-05-22-20-56-56.png"


输入:


3


输出:


该图像显示的是一个毛绒玩具,与一部流行电视动画系列剧中的角色十分相似。玩具的身体是圆形的,带着头罩,戴着一副眼镜。图像中看不到角色的脸。


表格解析

我们想看看模型能否将表格解析成机器可读的格式:


messages = [{"role": "user", "content": "<|image_1|>\nExtract the table content of the table in JSON format: "}]
url = "https://i.postimg.cc/W1YwqXk8/Screenshot-from-2024-05-22-21-41-03.png"


输入:


4


输出:


```json
[
  {
    "Benchmark": "Phi-3 Vision-128K-In1",
    "MMMU": 40.2,
    "MMBench": 80.5,
    "ScienceQA": 90.8
  },
  {
    "Benchmark": "LlaVA-1.6 Vicuna-7B",
    "MMMU": 34.2,
    "MMBench": 76.3,
    "ScienceQA": 70.6
  },
  {
    "Benchmark": "QWEN-VI Chat",
    "MMMU": 39.0,
    "MMBench": 75.8,
    "ScienceQA": 67.2
  }
]
```


它确实能够直接从截图中提取结构化格式的表格内容。


图表理解

我们提示模型描述一幅图:


messages = [{"role": "user", "content": "<|image_1|>\nWhat is this figure about? "}]
url = "https://i.postimg.cc/Y0sRQR4Q/Screenshot-from-2024-05-22-21-47-39.png"


输入:


5


输出:


该图是一个比较各种机器学习模型性能的条形图,每个模型由一对堆叠的条形图表示,分别显示基础模型和微调模型的性能。


扫描文件阅读理解

目标是对扫描或拍摄的文本提出问题。这与光学字符识别(OCR)不同,我们感兴趣的不是简单地转录文本。相反,我们希望评估模型是否能够理解书面内容并直接回答相关问题。


messages = [{"role": "user", "content": "<|image_1|>\nWhat is this book about? "}]
url = "https://i.postimg.cc/rmHxPbQY/Screenshot-from-2024-05-22-20-56-21.png"


输入:


6


输出:


图片显示的是一本名为《SAM TALLENT RUNNING THE LIGHT》的书的封面,内容简介描述了一个名叫比利-雷-舍费尔的喜剧演员在面对个人和职业挑战时的故事。该书似乎是一部小说作品,可能是一部长篇小说,因为书中引用了《偶像》作者杜格-斯坦霍普(DOUG STANHOPE)的一段话,称赞该书精彩绝伦,是喜剧的最佳虚构代表作。


书名是错的,但 MLLM 能够理解图片中文字的内容,并一针见血地概括出来。


标记集提示

标记集(Set-of-Mark,SoM)提示使用交互式分割模型将图像划分为多个区域,并用符号对其进行标记,从而使大型多模态模型能够更好地理解和回答以视觉为基础的问题。


在本例中,为了简化操作,我没有使用模型,而是手动标记了对象,然后在提示中引用了标记 (4):


messages = [{"role": "user", "content": "<|image_1|>\nWhat is object number 4? "}]
url = "https://i.postimg.cc/fy0Lz798/scott-webb-p-0l-WFknspg-unsplash-2.jpg"


输入:


7


4 号物品是一盆开着橙色花朵的仙人掌。


MLLM 能够理解我的参考资料,并相应地回答我的问题。


结论

就是这样!Phi-3-Vision 是一个功能强大的图像和文本处理模型,它能够理解图像内容,从图像中提取文本,甚至还能回答关于它所看到的内容的问题。虽然它的体积小,只有 40 亿个参数,可能会限制它对要求较强语言技能的任务的适用性,但大多数同类模型的参数至少是它的两倍,达到 80 亿个或更多,这使它在效率方面脱颖而出。它在文档解析、表格结构理解和野生 OCR 等应用中大放异彩。它的紧凑特性使其非常适合部署在边缘设备或本地消费级 GPU 上,尤其是在量化之后。在所有文档解析和理解管道中,它都将是我的首选模型,因为它的零镜头功能使其成为一个能干的工具,尤其是对于其适中的尺寸而言。接下来,我还将为这个模型开发一些 LoRA 微调脚本,看看在更专业的任务中我能将它推进到什么程度。


文章来源:https://medium.com/towards-data-science/6-real-world-uses-of-microsofts-newest-phi-3-vision-language-model-8ebbfa317fe8
欢迎关注ATYUN官方公众号
商务合作及内容投稿请联系邮箱:bd@atyun.com
评论 登录
热门职位
Maluuba
20000~40000/月
Cisco
25000~30000/月 深圳市
PilotAILabs
30000~60000/年 深圳市
写评论取消
回复取消