跳过内容

变压器视觉

Outlines 允许无缝使用 vision models

outlines.models.transformers_visionoutlines.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