[Docs] Improve VLM docs (#33393)
* Improve docs * Update docs/source/en/model_doc/llava.md Co-authored-by: amyeroberts <22614925+amyeroberts@users.noreply.github.com> * Update docs/source/en/model_doc/llava.md Co-authored-by: amyeroberts <22614925+amyeroberts@users.noreply.github.com> * Address comment * Address comment * Improve pixtral docs --------- Co-authored-by: amyeroberts <22614925+amyeroberts@users.noreply.github.com>
This commit is contained in:
@@ -536,12 +536,8 @@
|
|||||||
title: QDQBert
|
title: QDQBert
|
||||||
- local: model_doc/qwen2
|
- local: model_doc/qwen2
|
||||||
title: Qwen2
|
title: Qwen2
|
||||||
- local: model_doc/qwen2_audio
|
|
||||||
title: Qwen2Audio
|
|
||||||
- local: model_doc/qwen2_moe
|
- local: model_doc/qwen2_moe
|
||||||
title: Qwen2MoE
|
title: Qwen2MoE
|
||||||
- local: model_doc/qwen2_vl
|
|
||||||
title: Qwen2VL
|
|
||||||
- local: model_doc/rag
|
- local: model_doc/rag
|
||||||
title: RAG
|
title: RAG
|
||||||
- local: model_doc/realm
|
- local: model_doc/realm
|
||||||
@@ -888,6 +884,10 @@
|
|||||||
title: Pix2Struct
|
title: Pix2Struct
|
||||||
- local: model_doc/pixtral
|
- local: model_doc/pixtral
|
||||||
title: Pixtral
|
title: Pixtral
|
||||||
|
- local: model_doc/qwen2_audio
|
||||||
|
title: Qwen2Audio
|
||||||
|
- local: model_doc/qwen2_vl
|
||||||
|
title: Qwen2VL
|
||||||
- local: model_doc/sam
|
- local: model_doc/sam
|
||||||
title: Segment Anything
|
title: Segment Anything
|
||||||
- local: model_doc/siglip
|
- local: model_doc/siglip
|
||||||
|
|||||||
@@ -40,7 +40,9 @@ The original code can be found [here](https://github.com/haotian-liu/LLaVA/tree/
|
|||||||
|
|
||||||
- Note the model has not been explicitly trained to process multiple images in the same prompt, although this is technically possible, you may experience inaccurate results.
|
- Note the model has not been explicitly trained to process multiple images in the same prompt, although this is technically possible, you may experience inaccurate results.
|
||||||
|
|
||||||
- For better results, we recommend users to use the processor's `apply_chat_template()` method to format your prompt correctly. For that you need to construct a conversation history, passing in a plain string will not format your prompt. Each message in the conversation history for chat templates is a dictionary with keys "role" and "content". The "content" should be a list of dictionaries, for "text" and "image" modalities, as follows:
|
### Single image inference
|
||||||
|
|
||||||
|
For best results, we recommend users to use the processor's `apply_chat_template()` method to format your prompt correctly. For that you need to construct a conversation history, passing in a plain string will not format your prompt. Each message in the conversation history for chat templates is a dictionary with keys "role" and "content". The "content" should be a list of dictionaries, for "text" and "image" modalities, as follows:
|
||||||
|
|
||||||
```python
|
```python
|
||||||
from transformers import AutoProcessor
|
from transformers import AutoProcessor
|
||||||
@@ -75,6 +77,60 @@ print(text_prompt)
|
|||||||
>>> "USER: <image>\n<What’s shown in this image? ASSISTANT: This image shows a red stop sign.</s>USER: Describe the image in more details. ASSISTANT:"
|
>>> "USER: <image>\n<What’s shown in this image? ASSISTANT: This image shows a red stop sign.</s>USER: Describe the image in more details. ASSISTANT:"
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### Batched inference
|
||||||
|
|
||||||
|
LLaVa also supports batched inference. Here is how you can do it:
|
||||||
|
|
||||||
|
```python
|
||||||
|
import requests
|
||||||
|
from PIL import Image
|
||||||
|
import torch
|
||||||
|
from transformers import AutoProcessor, LLavaForConditionalGeneration
|
||||||
|
|
||||||
|
# Load the model in half-precision
|
||||||
|
model = LLavaForConditionalGeneration.from_pretrained("llava-hf/llava-1.5-7b-hf", torch_dtype=torch.float16, device_map="auto")
|
||||||
|
processor = AutoProcessor.from_pretrained("llava-hf/llava-1.5-7b-hf")
|
||||||
|
|
||||||
|
# Get two different images
|
||||||
|
url = "https://www.ilankelman.org/stopsigns/australia.jpg"
|
||||||
|
image_stop = Image.open(requests.get(url, stream=True).raw)
|
||||||
|
|
||||||
|
url = "http://images.cocodataset.org/val2017/000000039769.jpg"
|
||||||
|
image_cats = Image.open(requests.get(url, stream=True).raw)
|
||||||
|
|
||||||
|
# Prepare a batch of two prompts
|
||||||
|
conversation_1 = [
|
||||||
|
{
|
||||||
|
"role": "user",
|
||||||
|
"content": [
|
||||||
|
{"type": "image"},
|
||||||
|
{"type": "text", "text": "What is shown in this image?"},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
]
|
||||||
|
|
||||||
|
conversation_2 = [
|
||||||
|
{
|
||||||
|
"role": "user",
|
||||||
|
"content": [
|
||||||
|
{"type": "image"},
|
||||||
|
{"type": "text", "text": "What is shown in this image?"},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
]
|
||||||
|
|
||||||
|
prompt_1 = processor.apply_chat_template(conversation_1, add_generation_prompt=True)
|
||||||
|
prompt_2 = processor.apply_chat_template(conversation_2, add_generation_prompt=True)
|
||||||
|
prompts = [prompt_1, prompt_2]
|
||||||
|
|
||||||
|
# We can simply feed images in the order they have to be used in the text prompt
|
||||||
|
inputs = processor(images=[image_stop, image_cats, image_snowman], text=prompts, padding=True, return_tensors="pt").to(model.device, torch.float16)
|
||||||
|
|
||||||
|
# Generate
|
||||||
|
generate_ids = model.generate(**inputs, max_new_tokens=30)
|
||||||
|
processor.batch_decode(generate_ids, skip_special_tokens=True)
|
||||||
|
```
|
||||||
|
|
||||||
- If you want to construct a chat prompt yourself, below is a list of prompt formats accepted by each llava checkpoint:
|
- If you want to construct a chat prompt yourself, below is a list of prompt formats accepted by each llava checkpoint:
|
||||||
|
|
||||||
[llava-interleave models](https://huggingface.co/collections/llava-hf/llava-interleave-668e19a97da0036aad4a2f19) requires the following format:
|
[llava-interleave models](https://huggingface.co/collections/llava-hf/llava-interleave-668e19a97da0036aad4a2f19) requires the following format:
|
||||||
@@ -99,7 +155,6 @@ For multiple turns conversation:
|
|||||||
"USER: <image>\n<prompt1> ASSISTANT: <answer1></s>USER: <prompt2> ASSISTANT: <answer2></s>USER: <prompt3> ASSISTANT:"
|
"USER: <image>\n<prompt1> ASSISTANT: <answer1></s>USER: <prompt2> ASSISTANT: <answer2></s>USER: <prompt3> ASSISTANT:"
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
### Using Flash Attention 2
|
### Using Flash Attention 2
|
||||||
|
|
||||||
Flash Attention 2 is an even faster, optimized version of the previous optimization, please refer to the [Flash Attention 2 section of performance docs](https://huggingface.co/docs/transformers/perf_infer_gpu_one).
|
Flash Attention 2 is an even faster, optimized version of the previous optimization, please refer to the [Flash Attention 2 section of performance docs](https://huggingface.co/docs/transformers/perf_infer_gpu_one).
|
||||||
|
|||||||
@@ -14,13 +14,13 @@ rendered properly in your Markdown viewer.
|
|||||||
|
|
||||||
-->
|
-->
|
||||||
|
|
||||||
# LLaVA-Onevision
|
# LLaVA-OneVision
|
||||||
|
|
||||||
## Overview
|
## Overview
|
||||||
|
|
||||||
The LLaVA-Onevision model was proposed in [LLaVA-OneVision: Easy Visual Task Transfer](https://arxiv.org/abs/2408.03326) by <Bo Li, Yuanhan Zhang, Dong Guo, Renrui Zhang, Feng Li, Hao Zhang, Kaichen Zhang, Yanwei Li, Ziwei Liu, Chunyuan Li
|
The LLaVA-OneVision model was proposed in [LLaVA-OneVision: Easy Visual Task Transfer](https://arxiv.org/abs/2408.03326) by <Bo Li, Yuanhan Zhang, Dong Guo, Renrui Zhang, Feng Li, Hao Zhang, Kaichen Zhang, Yanwei Li, Ziwei Liu, Chunyuan Li
|
||||||
|
|
||||||
LLaVA-Onevision is a Vision-Language Model that can generate text conditioned on one or several images/videos. The model consists of SigLIP vision encoder and a Qwen2 language backbone. The images are processed with anyres-9 technique where the image is split into 9 patches to better process high resolution images and capture as much details as possible. However, videos are pooled to a total sequence length of 196 tokens each frame for more memory efficient computation. LLaVA-Onevision is available in three sizes: 0.5B, 7B and 72B and achieves remarkable performance on benchmark evaluations.
|
LLaVA-OneVision is a Vision-Language Model that can generate text conditioned on one or several images/videos. The model consists of SigLIP vision encoder and a Qwen2 language backbone. The images are processed with anyres-9 technique where the image is split into 9 patches to better process high resolution images and capture as much details as possible. However, videos are pooled to a total sequence length of 196 tokens each frame for more memory efficient computation. LLaVA-OneVision is available in three sizes: 0.5B, 7B and 72B and achieves remarkable performance on benchmark evaluations.
|
||||||
|
|
||||||
The abstract from the paper is the following:
|
The abstract from the paper is the following:
|
||||||
|
|
||||||
@@ -32,11 +32,10 @@ yielding new emerging capabilities. In particular, strong video understanding an
|
|||||||
cross-scenario capabilities are demonstrated through task transfer from images to
|
cross-scenario capabilities are demonstrated through task transfer from images to
|
||||||
videos.*
|
videos.*
|
||||||
|
|
||||||
|
|
||||||
<img src="https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/transformers/model_doc/llava-ov-acrhitecture.png"
|
<img src="https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/transformers/model_doc/llava-ov-acrhitecture.png"
|
||||||
alt="drawing" width="600"/>
|
alt="drawing" width="600"/>
|
||||||
|
|
||||||
<small> LLaVA=Onevision architecture. Taken from the <a href="https://arxiv.org/abs/2408.03326">original paper.</a> </small>
|
<small> LLaVA-OneVision architecture. Taken from the <a href="https://arxiv.org/abs/2408.03326">original paper.</a> </small>
|
||||||
|
|
||||||
Tips:
|
Tips:
|
||||||
|
|
||||||
@@ -44,7 +43,7 @@ Tips:
|
|||||||
|
|
||||||
<Tip warning={true}>
|
<Tip warning={true}>
|
||||||
|
|
||||||
- Llava-Onevision uses different number of patches for images and thus has to pad the inputs inside modeling code, aside from the padding done when processing the inputs. The default setting is "left-padding" if model is in `eval()` mode, otherwise "right-padding".
|
- Llava-OneVision uses different number of patches for images and thus has to pad the inputs inside modeling code, aside from the padding done when processing the inputs. The default setting is "left-padding" if model is in `eval()` mode, otherwise "right-padding".
|
||||||
|
|
||||||
</Tip>
|
</Tip>
|
||||||
|
|
||||||
@@ -129,7 +128,7 @@ print(processor.decode(output[0], skip_special_tokens=True))
|
|||||||
|
|
||||||
### Multi image inference
|
### Multi image inference
|
||||||
|
|
||||||
LLaVa-Onevision can perform inference with multiple images as input, where images either belong to the same prompt or different prompts (in batched inference). For that you have to use checkpoints with an "ov" suffix. Here is how you can do it:
|
LLaVa-OneVision can perform inference with multiple images as input, where images either belong to the same prompt or different prompts (in batched inference). For that you have to use checkpoints with an "ov" suffix. Here is how you can do it:
|
||||||
|
|
||||||
```python
|
```python
|
||||||
import requests
|
import requests
|
||||||
@@ -200,7 +199,7 @@ processor.batch_decode(generate_ids, skip_special_tokens=True, clean_up_tokeniza
|
|||||||
|
|
||||||
### Video inference
|
### Video inference
|
||||||
|
|
||||||
LLaVa-Onevision also can perform inference with videos as input, where video frames are treated as multiple images. Here is how you can do it:
|
LLaVa-OneVision also can perform inference with videos as input, where video frames are treated as multiple images. Here is how you can do it:
|
||||||
|
|
||||||
```python
|
```python
|
||||||
import av
|
import av
|
||||||
|
|||||||
@@ -18,69 +18,62 @@ rendered properly in your Markdown viewer.
|
|||||||
|
|
||||||
## Overview
|
## Overview
|
||||||
|
|
||||||
The Pixtral model was released by the Mistral AI team on [vLLM](https://github.com/vllm-project/vllm/pull/8377), where a version of the code can be found!
|
The Pixtral model was released by the Mistral AI team in a [blog post](https://mistral.ai/news/pixtral-12b/). Pixtral is a multimodal version of [Mistral](mistral), incorporating a 400 million parameter vision encoder trained from scratch.
|
||||||
|
|
||||||
|
The intro from the blog says the following:
|
||||||
|
|
||||||
|
*Pixtral is trained to understand both natural images and documents, achieving 52.5% on the MMMU reasoning benchmark, surpassing a number of larger models. The model shows strong abilities in tasks such as chart and figure understanding, document question answering, multimodal reasoning and instruction following. Pixtral is able to ingest images at their natural resolution and aspect ratio, giving the user flexibility on the number of tokens used to process an image. Pixtral is also able to process any number of images in its long context window of 128K tokens. Unlike previous open-source models, Pixtral does not compromise on text benchmark performance to excel in multimodal tasks.*
|
||||||
|
|
||||||
|
<img src="https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/transformers/model_doc/pixtral_architecture.webp"
|
||||||
|
alt="drawing" width="600"/>
|
||||||
|
|
||||||
|
<small> Pixtral architecture. Taken from the <a href="https://mistral.ai/news/pixtral-12b/">blog post.</a> </small>
|
||||||
|
|
||||||
Tips:
|
Tips:
|
||||||
|
|
||||||
- Pixtral is a multimodal model, taking images and text as input, and producing text as output.
|
- Pixtral is a multimodal model, taking images and text as input, and producing text as output.
|
||||||
- This model follows the [Llava](llava) family, meaning image embeddings are placed instead of the `[IMG]` token placeholders. The model uses [`PixtralVisionModel`] for its vision encoder, and [`MistralForCausalLM`] for its language decoder.
|
- This model follows the [Llava](llava) architecture. The model uses [`PixtralVisionModel`] for its vision encoder, and [`MistralForCausalLM`] for its language decoder.
|
||||||
- The main contribution is the 2d ROPE (rotary postiion embeddings) on the images, and support for arbitrary image sizes (the images are not padded together nor are they resized).
|
- The main contribution is the 2d ROPE (rotary position embeddings) on the images, and support for arbitrary image sizes (the images are not padded together nor are they resized).
|
||||||
- The format for one or mulitple prompts is the following:
|
- Similar to [Llava](llava), the model internally replaces the `[IMG]` token placeholders by image embeddings from the vision encoder. The format for one or multiple prompts is the following:
|
||||||
```
|
```
|
||||||
"<s>[INST][IMG]\nWhat are the things I should be cautious about when I visit this place?[/INST]"
|
"<s>[INST][IMG]\nWhat are the things I should be cautious about when I visit this place?[/INST]"
|
||||||
```
|
```
|
||||||
Then, the processor will replace each `[IMG]` token with a number of `[IMG]` token that depends on the height and the width of the image. Each *row* of the image is separated by a `[IMG_BREAK]` token, and each image is separated by a `[IMG_END]` token.
|
Then, the processor will replace each `[IMG]` token with a number of `[IMG]` tokens that depend on the height and the width of each image. Each *row* of the image is separated by an `[IMG_BREAK]` token, and each image is separated by an `[IMG_END]` token. It's advised to use the `apply_chat_template` method of the processor, which takes care of all of this. See the [usage section](#usage) for more info.
|
||||||
|
|
||||||
This model was contributed by [amyeroberts](https://huggingface.co/amyeroberts) and [ArthurZ](https://huggingface.co/ArthurZ). The original code can be found [here](https://github.com/vllm-project/vllm/pull/8377).
|
This model was contributed by [amyeroberts](https://huggingface.co/amyeroberts) and [ArthurZ](https://huggingface.co/ArthurZ). The original code can be found [here](https://github.com/vllm-project/vllm/pull/8377).
|
||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
Here is an example of how to run it:
|
At inference time, it's advised to use the processor's `apply_chat_template` method, which correctly formats the prompt for the model:
|
||||||
|
|
||||||
```python
|
```python
|
||||||
from transformers import LlavaForConditionalGeneration, AutoProcessor
|
from transformers import AutoProcessor, LlavaForConditionalGeneration
|
||||||
from PIL import Image
|
from PIL import Image
|
||||||
|
|
||||||
model_id = "mistral-community/pixtral-12b"
|
model_id = "mistral-community/pixtral-12b"
|
||||||
model = LlavaForConditionalGeneration.from_pretrained(model_id).to("cuda")
|
|
||||||
processor = AutoProcessor.from_pretrained(model_id)
|
processor = AutoProcessor.from_pretrained(model_id)
|
||||||
|
model = LlavaForConditionalGeneration.from_pretrained(model_id).to("cuda")
|
||||||
|
|
||||||
IMG_URLS = [
|
url_dog = "https://picsum.photos/id/237/200/300"
|
||||||
"https://picsum.photos/id/237/400/300",
|
url_mountain = "https://picsum.photos/seed/picsum/200/300"
|
||||||
"https://picsum.photos/id/231/200/300",
|
|
||||||
"https://picsum.photos/id/27/500/500",
|
chat = [
|
||||||
"https://picsum.photos/id/17/150/600",
|
{
|
||||||
|
"role": "user", "content": [
|
||||||
|
{"type": "text", "content": "Can this animal"},
|
||||||
|
{"type": "image"},
|
||||||
|
{"type": "text", "content": "live here?"},
|
||||||
|
{"type": "image"}
|
||||||
|
]
|
||||||
|
}
|
||||||
]
|
]
|
||||||
PROMPT = "<s>[INST]Describe the images.\n[IMG][IMG][IMG][IMG][/INST]"
|
|
||||||
|
|
||||||
inputs = processor(images=IMG_URLS, text=PROMPT, return_tensors="pt").to("cuda")
|
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)
|
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]
|
output = processor.batch_decode(generate_ids, skip_special_tokens=True, clean_up_tokenization_spaces=False)[0]
|
||||||
|
|
||||||
EXPECTED_GENERATION = """
|
|
||||||
Describe the images.
|
|
||||||
Sure, let's break down each image description:
|
|
||||||
|
|
||||||
1. **Image 1:**
|
|
||||||
- **Description:** A black dog with a glossy coat is sitting on a wooden floor. The dog has a focused expression and is looking directly at the camera.
|
|
||||||
- **Details:** The wooden floor has a rustic appearance with visible wood grain patterns. The dog's eyes are a striking color, possibly brown or amber, which contrasts with its black fur.
|
|
||||||
|
|
||||||
2. **Image 2:**
|
|
||||||
- **Description:** A scenic view of a mountainous landscape with a winding road cutting through it. The road is surrounded by lush green vegetation and leads to a distant valley.
|
|
||||||
- **Details:** The mountains are rugged with steep slopes, and the sky is clear, indicating good weather. The winding road adds a sense of depth and perspective to the image.
|
|
||||||
|
|
||||||
3. **Image 3:**
|
|
||||||
- **Description:** A beach scene with waves crashing against the shore. There are several people in the water and on the beach, enjoying the waves and the sunset.
|
|
||||||
- **Details:** The waves are powerful, creating a dynamic and lively atmosphere. The sky is painted with hues of orange and pink from the setting sun, adding a warm glow to the scene.
|
|
||||||
|
|
||||||
4. **Image 4:**
|
|
||||||
- **Description:** A garden path leading to a large tree with a bench underneath it. The path is bordered by well-maintained grass and flowers.
|
|
||||||
- **Details:** The path is made of small stones or gravel, and the tree provides a shaded area with the bench invitingly placed beneath it. The surrounding area is lush and green, suggesting a well-kept garden.
|
|
||||||
|
|
||||||
Each image captures a different scene, from a close-up of a dog to expansive natural landscapes, showcasing various elements of nature and human interaction with it.
|
|
||||||
"""
|
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
## PixtralVisionConfig
|
## PixtralVisionConfig
|
||||||
|
|
||||||
[[autodoc]] PixtralVisionConfig
|
[[autodoc]] PixtralVisionConfig
|
||||||
|
|||||||
@@ -14,17 +14,22 @@ rendered properly in your Markdown viewer.
|
|||||||
|
|
||||||
-->
|
-->
|
||||||
|
|
||||||
# Qwen2_VL
|
# Qwen2-VL
|
||||||
|
|
||||||
|
|
||||||
## Overview
|
## Overview
|
||||||
|
|
||||||
The [Qwen2_VL](https://qwenlm.github.io/blog/qwen2-vl/) is a major update to our [Qwen-VL](https://arxiv.org/pdf/2308.12966) model from the Qwen team.
|
The [Qwen2-VL](https://qwenlm.github.io/blog/qwen2-vl/) model is a major update to [Qwen-VL](https://arxiv.org/pdf/2308.12966) from the Qwen team at Alibaba Research.
|
||||||
|
|
||||||
The abstract from the blog is the following:
|
The abstract from the blog is the following:
|
||||||
|
|
||||||
*This blog introduces Qwen2-VL, an advanced version of the Qwen-VL model that has undergone significant enhancements over the past year. Key improvements include enhanced image comprehension, advanced video understanding, integrated visual agent functionality, and expanded multilingual support. The model architecture has been optimized for handling arbitrary image resolutions through Naive Dynamic Resolution support and utilizes Multimodal Rotary Position Embedding (M-ROPE) to effectively process both 1D textual and multi-dimensional visual data. This updated model demonstrates competitive performance against leading AI systems like GPT-4o and Claude 3.5 Sonnet in vision-related tasks and ranks highly among open-source models in text capabilities. These advancements make Qwen2-VL a versatile tool for various applications requiring robust multimodal processing and reasoning abilities.*
|
*This blog introduces Qwen2-VL, an advanced version of the Qwen-VL model that has undergone significant enhancements over the past year. Key improvements include enhanced image comprehension, advanced video understanding, integrated visual agent functionality, and expanded multilingual support. The model architecture has been optimized for handling arbitrary image resolutions through Naive Dynamic Resolution support and utilizes Multimodal Rotary Position Embedding (M-ROPE) to effectively process both 1D textual and multi-dimensional visual data. This updated model demonstrates competitive performance against leading AI systems like GPT-4o and Claude 3.5 Sonnet in vision-related tasks and ranks highly among open-source models in text capabilities. These advancements make Qwen2-VL a versatile tool for various applications requiring robust multimodal processing and reasoning abilities.*
|
||||||
|
|
||||||
|
<img src="https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/transformers/model_doc/qwen2_vl_architecture.jpeg"
|
||||||
|
alt="drawing" width="600"/>
|
||||||
|
|
||||||
|
<small> Qwen2-VL architecture. Taken from the <a href="https://qwenlm.github.io/blog/qwen2-vl/">blog post.</a> </small>
|
||||||
|
|
||||||
|
This model was contributed by [simonJJJ](https://huggingface.co/simonJJJ).
|
||||||
|
|
||||||
## Usage example
|
## Usage example
|
||||||
|
|
||||||
@@ -78,8 +83,6 @@ generated_ids = [output_ids[len(input_ids):] for input_ids, output_ids in zip(in
|
|||||||
output_text = processor.batch_decode(generated_ids, skip_special_tokens=True, clean_up_tokenization_spaces=True)
|
output_text = processor.batch_decode(generated_ids, skip_special_tokens=True, clean_up_tokenization_spaces=True)
|
||||||
print(output_text)
|
print(output_text)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# Video
|
# Video
|
||||||
def fetch_video(ele: Dict, nframe_factor=2):
|
def fetch_video(ele: Dict, nframe_factor=2):
|
||||||
if isinstance(ele['video'], str):
|
if isinstance(ele['video'], str):
|
||||||
@@ -130,16 +133,13 @@ output_ids = model.generate(**inputs, max_new_tokens=128)
|
|||||||
generated_ids = [output_ids[len(input_ids):] for input_ids, output_ids in zip(inputs.input_ids, output_ids)]
|
generated_ids = [output_ids[len(input_ids):] for input_ids, output_ids in zip(inputs.input_ids, output_ids)]
|
||||||
output_text = processor.batch_decode(generated_ids, skip_special_tokens=True, clean_up_tokenization_spaces=True)
|
output_text = processor.batch_decode(generated_ids, skip_special_tokens=True, clean_up_tokenization_spaces=True)
|
||||||
print(output_text)
|
print(output_text)
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
### Batch Mixed Media Inference
|
### Batch Mixed Media Inference
|
||||||
|
|
||||||
The model can batch inputs composed of mixed samples of various types such as images, videos, and text. Here is an example.
|
The model can batch inputs composed of mixed samples of various types such as images, videos, and text. Here is an example.
|
||||||
|
|
||||||
```python
|
```python
|
||||||
|
|
||||||
image1 = Image.open("/path/to/image1.jpg")
|
image1 = Image.open("/path/to/image1.jpg")
|
||||||
image2 = Image.open("/path/to/image2.jpg")
|
image2 = Image.open("/path/to/image2.jpg")
|
||||||
image3 = Image.open("/path/to/image3.jpg")
|
image3 = Image.open("/path/to/image3.jpg")
|
||||||
@@ -217,26 +217,30 @@ print(output_text)
|
|||||||
|
|
||||||
### Usage Tips
|
### Usage Tips
|
||||||
|
|
||||||
#### Image Resolution for performance boost
|
#### Image Resolution trade-off
|
||||||
|
|
||||||
The model supports a wide range of resolution inputs. By default, it uses the native resolution for input, but higher resolutions can enhance performance at the cost of more computation. Users can set the minimum and maximum number of pixels to achieve an optimal configuration for their needs.
|
The model supports a wide range of resolution inputs. By default, it uses the native resolution for input, but higher resolutions can enhance performance at the cost of more computation. Users can set the minimum and maximum number of pixels to achieve an optimal configuration for their needs.
|
||||||
|
|
||||||
```python
|
```python
|
||||||
|
|
||||||
min_pixels = 224*224
|
min_pixels = 224*224
|
||||||
max_pixels = 2048*2048
|
max_pixels = 2048*2048
|
||||||
processor = AutoProcessor.from_pretrained("Qwen/Qwen2-VL-7B-Instruct", min_pixels=min_pixels, max_pixels=max_pixels)
|
processor = AutoProcessor.from_pretrained("Qwen/Qwen2-VL-7B-Instruct", min_pixels=min_pixels, max_pixels=max_pixels)
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
In case of limited GPU RAM, one can reduce the resolution as follows:
|
||||||
|
|
||||||
|
```python
|
||||||
|
min_pixels = 256*28*28
|
||||||
|
max_pixels = 1024*28*28
|
||||||
|
processor = AutoProcessor.from_pretrained("Qwen/Qwen2-VL-7B-Instruct", min_pixels=min_pixels, max_pixels=max_pixels)
|
||||||
|
```
|
||||||
|
This ensures each image gets encoded using a number between 256-1024 tokens. The 28 comes from the fact that the model uses a patch size of 14 and a temporal patch size of 2 (14 x 2 = 28).
|
||||||
|
|
||||||
#### Multiple Image Inputs
|
#### Multiple Image Inputs
|
||||||
|
|
||||||
By default, images and video content are directly included in the conversation. When handling multiple images, it's helpful to add labels to the images and videos for better reference. Users can control this behavior with the following settings:
|
By default, images and video content are directly included in the conversation. When handling multiple images, it's helpful to add labels to the images and videos for better reference. Users can control this behavior with the following settings:
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
```python
|
```python
|
||||||
|
|
||||||
conversation = [
|
conversation = [
|
||||||
{
|
{
|
||||||
"role": "user",
|
"role": "user",
|
||||||
@@ -302,7 +306,6 @@ model = Qwen2VLForConditionalGeneration.from_pretrained(
|
|||||||
)
|
)
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
## Qwen2VLConfig
|
## Qwen2VLConfig
|
||||||
|
|
||||||
[[autodoc]] Qwen2VLConfig
|
[[autodoc]] Qwen2VLConfig
|
||||||
|
|||||||
Reference in New Issue
Block a user