Transformers Vision
Outlines 支持无缝使用视觉模型。
outlines.models.transformers_vision
与 outlines.models.transformers 共享接口并基于其构建。
支持的任务包括:
- 图像 + 文本 -> 文本
- 视频 + 文本 -> 文本
示例:使用 Llava-Next 视觉模型
安装依赖:pip install torchvision pillow flash-attn
创建模型
import outlines
from transformers import LlavaNextForConditionalGeneration
model = outlines.models.transformers_vision(
"llava-hf/llava-v1.6-mistral-7b-hf",
model_class=LlavaNextForConditionalGeneration,
device="cuda",
)
创建便利函数以从 URL 加载 PIL.Image
from PIL import Image
from io import BytesIO
from urllib.request import urlopen
def img_from_url(url):
img_byte_stream = BytesIO(urlopen(url).read())
return Image.open(img_byte_stream).convert("RGB")
描述图像
description_generator = outlines.generate.text(model)
description_generator(
"<image> detailed description:",
[img_from_url("https://upload.wikimedia.org/wikipedia/commons/2/25/Siam_lilacpoint.jpg")]
)
这是一张彩色照片,主角是一只拥有醒目蓝眼睛的暹罗猫。这只猫的毛色为奶油色,眼睛颜色较浅,这是暹罗猫品种的典型特征。它的特征包括细长的耳朵、细长的尾巴和醒目的毛色图案。这只猫正坐在室内环境中,可能是在猫爬架或类似的凸起平台上,平台表面覆盖着米色织物,为猫提供了舒适柔软的休息或栖息表面。猫身后墙壁的表面看起来是浅色的灰泥或石膏。
多张图像
要在提示中包含多张图像,您只需向提示添加更多 <image>
标记即可
image_urls = [
"https://cdn1.byjus.com/wp-content/uploads/2020/08/ShapeArtboard-1-copy-3.png", # triangle
"https://cdn1.byjus.com/wp-content/uploads/2020/08/ShapeArtboard-1-copy-11.png", # hexagon
]
description_generator = outlines.generate.text(model)
description_generator(
"<image><image>What shapes are present?",
list(map(img_from_url, image_urls)),
)
存在两种形状。一个形状是六边形,另一个形状是三角形。
图像分类
pattern = "Mercury|Venus|Earth|Mars|Saturn|Jupiter|Neptune|Uranus|Pluto"
planet_generator = outlines.generate.regex(model, pattern)
planet_generator(
"What planet is this: <image>",
[img_from_url("https://upload.wikimedia.org/wikipedia/commons/e/e3/Saturn_from_Cassini_Orbiter_%282004-10-06%29.jpg")]
)
土星
提取结构化图像数据
from pydantic import BaseModel
from typing import List, Optional
class ImageData(BaseModel):
caption: str
tags_list: List[str]
object_list: List[str]
is_photo: bool
image_data_generator = outlines.generate.json(model, ImageData)
image_data_generator(
"<image> detailed JSON metadata:",
[img_from_url("https://upload.wikimedia.org/wikipedia/commons/9/98/Aldrin_Apollo_11_original.jpg")]
)
ImageData(caption='月球上的宇航员', tags_list=['月球', '太空', 'nasa', '美国国旗'], object_list=['月球', '月球表面', '太空服', '美国国旗'], is_photo=True)
资源
选择模型
- https://mmbench.opencompass.org.cn/leaderboard
- https://hugging-face.cn/spaces/WildVision/vision-arena