You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于Phi-3-Vision模型图像Token占用与输入维度的技术咨询

Phi-3-Vision相关问题解答

1. 单张图像占用约2000Token是否正常?

这是正常现象,并非Bug。
你之前了解的VLM用CLIP映射为单个/少量Token的属于稀疏型图像编码策略,但Phi-3-Vision采用的是密集型视觉Token编码:它会将图像分割成大量视觉补丁(Patch),每个补丁对应一个Token,再和文本Token拼接输入模型。这类设计能保留更多图像细节,所以单张图像占用约2000Token是模型的预期行为。

2. 图像形状中的数字17来源于何处?

你看到的pixel_values: torch.Size([1, 17, 3, 336, 336])里的17,是Phi-3-Vision预设的多尺度图像分块总数。
模型采用多尺度编码策略,会将原始图像处理为不同分辨率的补丁集合,17包含了原始尺寸及多个下采样尺度的图像块组,目的是捕捉不同层级的视觉特征,这是模型架构设计的固定参数。

3. 仅传入一张图像,为何image_sizes的维度是(1, 2)而非(1, 1)?

image_sizes的维度(1,2)中:

  • 第一个1代表批量大小(batch size),即你传入的1张图像;
  • 第二个2代表单张图像的宽度和高度两个维度的数值。
    这个张量用于存储每张输入图像的原始尺寸信息,方便模型后续处理时做空间对齐,所以每张图像对应宽、高两个值,即使只传一张,维度也是(1,2),这是处理器统一批量处理格式的设计。

验证代码片段

from PIL import Image
import requests
from transformers import AutoProcessor

model_id = "microsoft/Phi-3-vision-128k-instruct"
processor = AutoProcessor.from_pretrained(model_id, trust_remote_code=True)

messages = [
    {"role": "user", "content": "<|image_1|>\nWhat is shown in this image?"},
]
url = "https://sm.ign.com/t/ign_ap/review/d/deadpool-r/deadpool-review_2s7s.1200.jpg"
image = Image.open(requests.get(url, stream=True).raw)

prompt = processor.tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)
inputs = processor(prompt, [image], return_tensors="pt")

{k: v.shape for k, v in inputs.items()}
# 输出:
# {'input_ids': torch.Size([1, 2371]),
# 'attention_mask': torch.Size([1, 2371]),
# 'pixel_values': torch.Size([1, 17, 3, 336, 336]),
# 'image_sizes': torch.Size([1, 2])}

内容的提问来源于stack exchange,提问作者sachinruk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 08:43:21