变压器视觉
Outlines 允许无缝使用 vision models。
outlines.models.transformers_vision 与 outlines.models.transformers 共享接口,并基于其构建。
支持的任务包括
- 图像 + 文本 -> 文本
- 视频 + 文字 -> 文字
示例:使用 Llava-Next 视觉模型
安装依赖
pip install torchvision pillow flash-attn
Create the model
import outlines
from transformers import LlavaNextForConditionalGeneration
model = outlines.models.transformers_vision(
"llava-hf/llava-v1.6-mistral-7b-hf",
model_class=LlavaNextForConditionalGeneration,
device="cuda",
)
Create convenience function to load a PIL.Image from URL
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_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='An astronaut on the moon', tags_list=['moon', 'space', 'nasa', 'americanflag'], object_list=['moon', 'moon_surface', 'space_suit', 'americanflag'], is_photo=True)
资源
选择模型
- https://mmbench.opencompass.org.cn/leaderboard
- https://huggingface.co/spaces/WildVision/vision-arena