库名称:transformers
流水线标签:图像文本到文本
许可证:apache-2.0
模型ID的模型卡
兼容Transformers的Pixtral检查点。请确保从源码安装或等待v4.45版本发布!
使用示例
from PIL import Image
from transformers import AutoProcessor, LlavaForConditionalGeneration
model_id = "mistral-community/pixtral-12b"
model = LlavaForConditionalGeneration.from_pretrained(model_id)
processor = AutoProcessor.from_pretrained(model_id)
IMG_URLS = [
"https://picsum.photos/id/237/400/300",
"https://picsum.photos/id/231/200/300",
"https://picsum.photos/id/27/500/500",
"https://picsum.photos/id/17/150/600",
]
PROMPT = "<s>[INST]描述这些图片。\n[IMG][IMG][IMG][IMG][/INST]"
inputs = processor(text=PROMPT, images=IMG_URLS, return_tensors="pt").to("cuda")
generate_ids = model.generate(**inputs, max_new_tokens=500)
output = processor.batch_decode(generate_ids, skip_special_tokens=True, clean_up_tokenization_spaces=False)[0]
您将获得类似以下的输出:
描述这些图片。
当然,以下是每张图片的详细描述:
1. **图片1:**
- **描述:** 一只黑色皮毛光滑的狗正坐在木地板上。狗狗表情专注,直视镜头。
- **细节:** 木地板呈现 rustic 外观,可见木纹纹理。狗狗的眼睛颜色鲜明,可能是棕色或琥珀色,与黑色毛发形成对比。
2. **图片2:**
- **描述:** 一幅山脉景观,蜿蜒的道路穿行其中。道路两旁是茂密的绿色植被,通向远处的山谷。
- **细节:** 山脉陡峭崎岖,天空晴朗,显示天气良好。蜿蜒的道路为画面增添了纵深感。
3. **图片3:**
- **描述:** 海滩场景,海浪拍打着岸边。水中和沙滩上有几个人,正在享受海浪和日落。
- **细节:** 海浪汹涌,营造出活力四射的氛围。夕阳将天空染成橙粉色,为场景增添温暖色调。
4. **图片4:**
- **描述:** 一条花园小径通向一棵大树,树下设有长椅。小径两侧是修剪整齐的草地和花卉。
- **细节:** 小径由碎石铺就,大树提供荫凉,长椅显得格外诱人。周围环境郁郁葱葱,表明花园维护良好。
每张图片捕捉了不同的场景,从狗狗特写到广阔的自然景观,展现了自然与人类互动的多样元素。
使用聊天模板
您还可以使用聊天模板为Pixtral格式化聊天历史记录。确保传递给processor
的images
参数中的图片顺序与聊天中出现的顺序一致,以便模型理解每张图片的位置。
以下是一个在同一消息中交替使用文本和多张图片的示例:
from PIL import Image
from transformers import AutoProcessor, LlavaForConditionalGeneration
model_id = "mistral-community/pixtral-12b"
model = LlavaForConditionalGeneration.from_pretrained(model_id)
processor = AutoProcessor.from_pretrained(model_id)
url_dog = "https://picsum.photos/id/237/200/300"
url_mountain = "https://picsum.photos/seed/picsum/200/300"
chat = [
{
"role": "user", "content": [
{"type": "text", "content": "这种动物"},
{"type": "image"},
{"type": "text", "content": "能生活在这里吗?"},
{"type": "image"}
]
}
]
prompt = processor.apply_chat_template(chat)
inputs = processor(text=prompt, images=[url_dog, url_mountain], return_tensors="pt").to(model.device)
generate_ids = model.generate(**inputs, max_new_tokens=500)
output = processor.batch_decode(generate_ids, skip_special_tokens=True, clean_up_tokenization_spaces=False)[0]
从transformers>=v4.48版本开始,您还可以将图片URL或本地路径传递给对话历史记录,让聊天模板处理其余部分。聊天模板将为您加载图片,并返回可直接传递给model.generate()
的torch.Tensor
输入。
chat = [
{
"role": "user", "content": [
{"type": "text", "content": "这种动物"},
{"type": "image", "url": url_dog},
{"type": "text", "content": "能生活在这里吗?"},
{"type": "image", "url" : url_mountain}
]
}
]
inputs = processor.apply_chat_template(chat, add_generation_prompt=True, tokenize=True, return_dict=True, return_tensors"pt").to(model.device)
generate_ids = model.generate(**inputs, max_new_tokens=500)
output = processor.batch_decode(generate_ids, skip_special_tokens=True, clean_up_tokenization_spaces=False)[0]
您将获得类似以下的输出:
这种动物能生活在这里吗?当然!以下是您提供的图片的详细信息:
### 第一张图片
- **描述**:图片显示一只黑色的狗躺在木质地面上。狗狗歪着头,表情好奇。
- **细节**:这只狗看起来是一只幼犬,毛发柔软有光泽。眼睛圆睁,显得机警,整体神态活泼。
- **背景**:此图片可用于展示宠物友好环境或狗狗的性格特点。
### 第二张图片
- **描述**:图片描绘了一幅宁静的风景,前景是一座白雪覆盖的小山。天空呈现柔和的粉、橙、紫色调,可能是日出或日落时分。
- **细节**:小山被纯净的白雪覆盖,地平线与天空柔和相接。场景静谧祥和。
- **背景**:此图片可象征宁静、自然美景或冬日仙境。
### 综合背景
如果您问这只狗是否能"生活在这里"(指雪景环境),这取决于犬种及其耐寒能力。像哈士奇或圣伯纳等品种适应寒冷环境,而其他品种可能难以适应。第一张图片中的狗看起来是更适合温暖气候的品种。
您需要了解更多具体信息吗?
虽然输入中的间距可能看起来被打乱,但这实际上是由于我们跳过了显示的特殊标记。实际上,"这种动物"和"能生活在这里吗"之间由图片标记正确分隔。尝试包含特殊标记进行解码,以查看模型实际接收的内容!