Transformers documentation

Video-LLaVA

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v5.22.1).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

Mô hình này được công bố trên HF papers vào ngày 16-11-2023 và được đóng góp cho Hugging Face Transformers vào ngày 15-05-2024.

Video-LLaVA

FlashAttention SDPA

Tổng quan

Video-LLaVa là một LLM đa phương thức mã nguồn mở được huấn luyện bằng cách tinh chỉnh LlamA/Vicuna trên dữ liệu tuân theo chỉ thị đa phương thức do Llava1.5 và VideChat tạo ra. Đây là một mô hình ngôn ngữ tự hồi quy, dựa trên kiến trúc transformer. Video-LLaVa thống nhất các biểu diễn thị giác vào không gian đặc trưng ngôn ngữ, cho phép LLM thực hiện khả năng suy luận thị giác trên cả hình ảnh và video đồng thời.

Mô hình Video-LLaVA được đề xuất trong Video-LLaVA: Learning United Visual Representation by Alignment Before Projection của Bin Lin, Yang Ye, Bin Zhu, Jiaxi Cui, Munang Ning, Peng Jin, Li Yuan.

Tóm tắt từ bài báo như sau:

Mô hình Ngôn ngữ - Thị giác Lớn (LVLM) đã nâng cao hiệu suất của nhiều tác vụ hạ nguồn trong lĩnh vực hiểu ngôn ngữ - thị giác. Hầu hết các phương pháp hiện có mã hóa hình ảnh và video vào các không gian đặc trưng riêng biệt, sau đó đưa chúng vào làm đầu vào cho các mô hình ngôn ngữ lớn. Tuy nhiên, do thiếu sự thống nhất trong việc token hóa hình ảnh và video, cụ thể là sự lệch pha trước khi chiếu, nên việc một Mô hình Ngôn ngữ Lớn (LLM) học được các tương tác đa phương thức từ một số lớp chiếu kém hiệu quả trở nên khó khăn. Trong công việc này, chúng tôi thống nhất biểu diễn thị giác vào không gian đặc trưng ngôn ngữ để thúc đẩy LLM nền tảng tiến tới một LVLM thống nhất. Kết quả, chúng tôi thiết lập một baseline LVLM đơn giản nhưng vững chắc, Video-LLaVA, được huấn luyện từ một tập dữ liệu hỗn hợp gồm hình ảnh và video, qua đó tăng cường lẫn nhau. Video-LLaVA đạt hiệu suất vượt trội trên một loạt 9 benchmark hình ảnh trải rộng trên 5 bộ dữ liệu hỏi đáp hình ảnh và 4 bộ công cụ benchmark hình ảnh. Ngoài ra, Video-LLaVA của chúng tôi cũng vượt trội hơn Video-ChatGPT lần lượt 5,8%, 9,9%, 18,6% và 10,1% trên MSRVTT, MSVD, TGIF và ActivityNet. Đáng chú ý, các thí nghiệm mở rộng cho thấy Video-LLaVA mang lại lợi ích tương hỗ cho cả hình ảnh và video trong một biểu diễn thị giác thống nhất, vượt qua các mô hình được thiết kế riêng cho hình ảnh hoặc video. Chúng tôi hy vọng công việc này sẽ cung cấp những hiểu biết khiêm tốn về đầu vào đa phương thức cho LLM

Mẹo sử dụng

  • Chúng tôi khuyên người dùng nên sử dụng padding_side=“left” khi tính toán sinh theo lô (batched generation) vì cách này cho kết quả chính xác hơn. Chỉ cần đảm bảo gọi processor.tokenizer.padding_side = “left” trước khi sinh.

  • Lưu ý rằng mô hình chưa được huấn luyện rõ ràng để xử lý nhiều hình ảnh/đoạn video trong cùng một prompt, mặc dù về mặt kỹ thuật là khả thi, bạn có thể gặp kết quả không chính xác.

  • Lưu ý rằng đầu vào video phải có chính xác 8 khung hình, vì các mô hình được huấn luyện trong cấu hình đó.

Mô hình này được đóng góp bởi RaushanTurganbay. Mã nguồn gốc có thể được tìm thấy tại đây.

Các mô hình LLaVA sau bản phát hành v4.46 sẽ phát ra cảnh báo về việc thêm processor.patch_size = {{patch_size}}, processor.num_additional_image_tokens = {{num_additional_image_tokens}} và processor.vision_feature_select_strategy = {{vision_feature_select_strategy}}. Bạn nên thêm các thuộc tính này vào processor nếu bạn sở hữu checkpoint của mô hình, hoặc mở một PR nếu checkpoint không thuộc về bạn. Việc thêm các thuộc tính này có nghĩa là LLaVA sẽ cố gắng suy luận số lượng token hình ảnh cần thiết cho mỗi hình ảnh và mở rộng văn bản với số lượng placeholder <image> tương ứng với số token đó. Thông thường, mỗi hình ảnh cần khoảng 500 token, vì vậy hãy đảm bảo rằng văn bản không bị cắt cụt, nếu không sẽ xảy ra lỗi khi gộp các embeddings. Các thuộc tính này có thể lấy từ cấu hình mô hình, dưới dạng model.config.vision_config.patch_size hoặc model.config.vision_feature_select_strategy. Giá trị của num_additional_image_tokens nên là 1 nếu vision backbone thêm một token CLS, hoặc 0 nếu không có gì thêm được bổ sung vào các vision patches.

Ví dụ sử dụng

Chế độ phương tiện đơn

Mô hình có thể nhận cả hình ảnh và video làm đầu vào. Dưới đây là một mã ví dụ cho suy luận ở độ chính xác nửa (torch.float16):

import av
import numpy as np

from transformers import VideoLlavaForConditionalGeneration, VideoLlavaProcessor


def read_video_pyav(container, indices):
    '''
    Decode the video with PyAV decoder.
    Args:
        container (`av.container.input.InputContainer`): PyAV container.
        indices (`list[int]`): List of frame indices to decode.
    Returns:
        result (np.ndarray): np array of decoded frames of shape (num_frames, height, width, 3).
    '''
    frames = []
    container.seek(0)
    start_index = indices[0]
    end_index = indices[-1]
    for i, frame in enumerate(container.decode(video=0)):
        if i > end_index:
            break
        if i >= start_index and i in indices:
            frames.append(frame)
    return np.stack([x.to_ndarray(format="rgb24") for x in frames])

# Load the model in half-precision
model = VideoLlavaForConditionalGeneration.from_pretrained("LanguageBind/Video-LLaVA-7B-hf", device_map="auto")
processor = VideoLlavaProcessor.from_pretrained("LanguageBind/Video-LLaVA-7B-hf")

# Load the video as an np.array, sampling uniformly 8 frames
video_path = hf_hub_download(repo_id="raushan-testing-hf/videos-test", filename="sample_demo_1.mp4", repo_type="dataset")
container = av.open(video_path)
total_frames = container.streams.video[0].frames
indices = np.arange(0, total_frames, total_frames / 8).astype(int)
video = read_video_pyav(container, indices)

# For better results, we recommend to prompt the model in the following format
prompt = "USER: <video>\nWhy is this funny? ASSISTANT:"
inputs = processor(text=prompt, videos=video, return_tensors="pt").to(model.device)

out = model.generate(**inputs, max_new_tokens=60)
processor.batch_decode(out, skip_special_tokens=True, clean_up_tokenization_spaces=True)

Đối với hội thoại nhiều lượt, hãy thay đổi định dạng prompt thành:

"USER: <video>\nWhat do you see in this video? ASSISTANT: A baby reading a book. USER: Why is the it funny? ASSISTANT:"

Chế độ Phương tiện hỗn hợp

Mô hình cũng có thể tạo nội dung từ các đầu vào hình ảnh và video xen kẽ. Tuy nhiên, cần lưu ý rằng mô hình không được huấn luyện trong cấu hình hình ảnh-video xen kẽ, điều này có thể ảnh hưởng đến hiệu suất. Dưới đây là một ví dụ sử dụng đầu vào phương tiện hỗn hợp, hãy thêm các dòng sau vào đoạn mã ở trên:

import requests
from PIL import Image


# Generate from image and video mixed inputs
# Load and image and write a new prompt
url = "http://images.cocodataset.org/val2017/000000039769.jpg"
image = Image.open(requests.get(url, stream=True).raw)
prompt = "USER: <image>\nHow many cats are there in the image? ASSISTANT: There are two cats. USER: <video>\nWhy is this video funny? ASSISTANT:"

inputs = processor(text=prompt, images=image, videos=clip, padding=True, return_tensors="pt").to(model.device)

# Generate
generate_ids = model.generate(**inputs, max_length=50)
processor.batch_decode(generate_ids, skip_special_tokens=True, clean_up_tokenization_spaces=True)

Tối ưu hóa mô hình

Lượng tử hóa sử dụng Bitsandbytes để tối ưu hiệu quả bộ nhớ

Mô hình có thể được nạp ở các bit thấp hơn, giảm đáng kể gánh nặng bộ nhớ trong khi vẫn duy trì hiệu suất của mô hình gốc. Điều này cho phép triển khai hiệu quả trong các trường hợp tài nguyên bị hạn chế.

Trước tiên, hãy đảm bảo cài đặt bitsandbytes bằng cách chạy pip install bitsandbytes và có quyền truy cập vào GPU/bộ tăng tốc được thư viện hỗ trợ.

bitsandbytes đang được tái cấu trúc để hỗ trợ nhiều backend khác ngoài CUDA. Hiện tại, các triển khai ROCm (GPU AMD) và Intel CPU đã trưởng thành, trong khi Intel XPU đang được phát triển và hỗ trợ Apple Silicon dự kiến có mặt vào Q4/Q1. Để xem hướng dẫn cài đặt và các cập nhật backend mới nhất, hãy truy cập liên kết này.

Chúng tôi rất coi trọng phản hồi của bạn để giúp xác định các lỗi trước khi phát hành chính thức! Xem những tài liệu này để biết thêm chi tiết và các liên kết phản hồi.

Tải mô hình đã lượng tử hóa bằng cách đơn giản thêm BitsAndBytesConfig như minh họa bên dưới:

from transformers import BitsAndBytesConfig, VideoLlavaForConditionalGeneration


# specify how to quantize the model
quantization_config = BitsAndBytesConfig(
    load_in_4bit=True,
    bnb_4bit_quant_type="nf4",
    bnb_4bit_compute_dtype=torch.float16,
)

model = VideoLlavaForConditionalGeneration.from_pretrained("LanguageBind/Video-LLaVA-7B-hf", quantization_config=quantization_config, device_map="auto")

Flash-Attention 2 để tăng tốc độ sinh

Ngoài ra, chúng ta có thể tăng tốc đáng kể quá trình suy luận của mô hình bằng cách sử dụng Flash Attention, một cách triển khai nhanh hơn của cơ chế chú ý được sử dụng bên trong mô hình.

Đầu tiên, hãy đảm bảo cài đặt phiên bản mới nhất của Flash Attention 2:

pip install -U flash-attn --no-build-isolation

Ngoài ra, bạn cần có phần cứng tương thích với Flash-Attention 2. Đọc thêm về điều này trong tài liệu chính thức của flash attention repository. FlashAttention-2 chỉ có thể được sử dụng khi mô hình được nạp ở torch.float16 hoặc torch.bfloat16.

Để tải và chạy một mô hình bằng Flash Attention-2, chỉ cần thêm attn_implementation="flash_attention_2" khi tải mô hình như sau:

from transformers import VideoLlavaForConditionalGeneration

model = VideoLlavaForConditionalGeneration.from_pretrained(
    "LanguageBind/Video-LLaVA-7B-hf", , 
    attn_implementation="flash_attention_2",
).to(0, device_map="auto")

VideoLlavaConfig

lớp transformers.VideoLlavaConfig

< >

( transformers_version: str | None = Nonearchitectures: list[str] | None = Noneoutput_hidden_states: bool | None = Falsereturn_dict: bool | None = Truedtype: str | torch.dtype | None = Nonechunk_size_feed_forward: int = 0is_encoder_decoder: bool = Falseid2label: dict[int, str] | dict[str, str] | None = Nonelabel2id: dict[str, int] | dict[str, str] | None = Noneproblem_type: Literal['regression', 'single_label_classification', 'multi_label_classification'] | None = Nonevision_config: dict | transformers.configuration_utils.PreTrainedConfig | None = Nonetext_config: dict | transformers.configuration_utils.PreTrainedConfig | None = Noneimage_token_index: int = 32000video_token_index: int = 32001projector_hidden_act: str = 'gelu'vision_feature_select_strategy: typing.Literal['default', 'full'] = 'default'vision_feature_layer: int | list[int] = -2image_seq_length: int = 256video_seq_length: int = 2056multimodal_projector_bias: bool = Truetie_word_embeddings: bool = False )

Tham số

  • vision_config (Union[dict, ~configuration_utils.PreTrainedConfig], tùy chọn) — Đối tượng cấu hình hoặc từ điển của bộ khung thị giác.
  • text_config (Union[dict, ~configuration_utils.PreTrainedConfig], tùy chọn) — Đối tượng cấu hình hoặc từ điển của bộ khung văn bản.
  • image_token_index (int, tùy chọn, mặc định là 32000) — Chỉ số token hình ảnh được dùng làm ký tự thay thế cho các hình ảnh đầu vào.
  • video_token_index (int, tùy chọn, mặc định là 32001) — Chỉ số token video được dùng làm ký tự thay thế cho các video đầu vào.
  • projector_hidden_act (str, tùy chọn, mặc định là gelu) — Hàm kích hoạt được sử dụng bởi bộ chiếu đa phương thức.
  • vision_feature_select_strategy (Literal[default, full], tùy chọn, mặc định là default) — Chiến lược chọn đặc trưng được sử dụng để chọn đặc trưng thị giác từ bộ khung thị giác.
  • vision_feature_layer (Union[int, list[int]], tùy chọn, mặc định là -2) — Chỉ số của lớp để chọn đặc trưng thị giác. Nếu cung cấp nhiều chỉ số, đặc trưng thị giác của các chỉ số tương ứng sẽ được nối lại với nhau để tạo thành các đặc trưng thị giác.
  • image_seq_length (int, tùy chọn, mặc định là 256) — Chiều dài chuỗi của một embedding ảnh.
  • video_seq_length (int, tùy chọn, mặc định là 2056) — Chiều dài chuỗi của một embedding video.
  • multimodal_projector_bias (bool, tùy chọn, mặc định là True) — Có sử dụng bias trong bộ chiếu đa phương thức hay không.
  • tie_word_embeddings (bool, tùy chọn, mặc định là False) — Có nên gắn kết các trọng số nhúng theo ánh xạ tied_weights_keys của mô hình hay không.

Đây là lớp cấu hình để lưu trữ cấu hình của một VideoLlavaModel. Nó được sử dụng để khởi tạo một mô hình Video Llava theo các đối số được chỉ định, xác định kiến trúc của mô hình. Khởi tạo một cấu hình với các giá trị mặc định sẽ tạo ra một cấu hình tương tự như cấu hình của LanguageBind/Video-LLaVA-7B-hf

Các đối tượng cấu hình kế thừa từ PreTrainedConfig và có thể được sử dụng để kiểm soát đầu ra của mô hình. Đọc tài liệu từ PreTrainedConfig để biết thêm thông tin.

Ví dụ:

>>> from transformers import VideoLlavaForConditionalGeneration, VideoLlavaConfig, CLIPVisionConfig, LlamaConfig

>>> # Initializing a CLIP-vision config
>>> vision_config = CLIPVisionConfig()

>>> # Initializing a Llama config
>>> text_config = LlamaConfig()

>>> # Initializing a VideoLlava video_llava-1.5-7b style configuration
>>> configuration = VideoLlavaConfig(vision_config, text_config)

>>> # Initializing a model from the video_llava-1.5-7b style configuration
>>> model = VideoLlavaForConditionalGeneration(configuration)

>>> # Accessing the model configuration
>>> configuration = model.config

VideoLlavaImageProcessor

lớp transformers.VideoLlavaImageProcessor

< >

( do_resize: bool = Truesize: dict[str, int] | None = Noneresample: Resampling = <Resampling.BICUBIC: 3>do_center_crop: bool = Truecrop_size: dict[str, int] | None = Nonedo_rescale: bool = Truerescale_factor: int | float = 0.00392156862745098do_normalize: bool = Trueimage_mean: float | list[float] | None = Noneimage_std: float | list[float] | None = Nonedo_convert_rgb: bool = True**kwargs )

Tham số

  • do_resize (bool, tùy chọn, mặc định là True) — Có nên điều chỉnh kích thước (chiều cao, chiều rộng) của ảnh thành size được chỉ định hay không. Có thể bị ghi đè bởi do_resize trong phương thức preprocess.
  • size (dict[str, int] tuỳ chọn, mặc định là {"shortest_edge" -- 224}): Kích thước của ảnh sau khi thay đổi kích thước. Cạnh ngắn nhất của ảnh sẽ được thay đổi kích thước thành size[“shortest_edge”], với cạnh dài nhất được thay đổi kích thước để giữ nguyên tỷ lệ khung hình đầu vào. Có thể bị ghi đè bởi size trong phương thức preprocess.
  • resample (PILImageResampling, tuỳ chọn, mặc định là Resampling.BICUBIC) — Bộ lọc lấy mẫu lại (resampling) được sử dụng khi thay đổi kích thước ảnh. Có thể bị ghi đè bởi resample trong phương thức preprocess.
  • do_center_crop (bool, tùy chọn, mặc định là True) — Có nên cắt ảnh ở giữa theo crop_size đã chỉ định hay không. Có thể bị ghi đè bởi do_center_crop trong phương thức preprocess.
  • crop_size (dict[str, int] không bắt buộc, mặc định là 224) — Kích thước của ảnh đầu ra sau khi áp dụng center_crop. Có thể được ghi đè bởi crop_size trong phương thức preprocess.
  • do_rescale (bool, tùy chọn, mặc định là True) — Có nên tái tỷ lệ (rescale) hình ảnh theo hệ số rescale_factor được chỉ định hay không. Có thể bị ghi đè bởi do_rescale trong phương thức preprocess.
  • rescale_factor (int hoặc float, tùy chọn, mặc định là 1/255) — Hệ số tỷ lệ để sử dụng khi thay đổi tỷ lệ ảnh. Có thể bị ghi đè bởi rescale_factor trong phương thức preprocess.
  • do_normalize (bool, tùy chọn, mặc định là True) — Có nên chuẩn hóa hình ảnh hay không. Có thể bị ghi đè bởi do_normalize trong phương thức preprocess.
  • image_mean (float hoặc list[float], tùy chọn, mặc định là [0.48145466, 0.4578275, 0.40821073]) — Giá trị trung bình được sử dụng khi chuẩn hóa ảnh. Đây là một float hoặc danh sách các float có độ dài bằng số kênh của ảnh. Có thể ghi đè bằng tham số image_mean trong phương thức preprocess.
  • image_std (float hoặc list[float], tùy chọn, mặc định là [0.26862954, 0.26130258, 0.27577711]) — Độ lệch chuẩn được sử dụng khi chuẩn hóa ảnh. Đây là một float hoặc danh sách các float có độ dài bằng số kênh trong ảnh. Có thể ghi đè bằng tham số image_std trong phương thức preprocess. Có thể ghi đè bằng tham số image_std trong phương thức preprocess.
  • do_convert_rgb (bool, tùy chọn, mặc định là True) — Có chuyển đổi ảnh sang RGB hay không.

Tạo một bộ xử lý ảnh CLIP.

preprocess

< >

( images: list[typing.Union[ForwardRef('PIL.Image.Image'), numpy.ndarray, ForwardRef('torch.Tensor'), list['PIL.Image.Image'], list[numpy.ndarray], list['torch.Tensor']]] | None = Nonedo_resize: bool | None = Nonesize: dict[str, int] | None = Noneresample: PIL.Image.Resampling | None = Nonedo_center_crop: bool | None = Nonecrop_size: int | None = Nonedo_rescale: bool | None = Nonerescale_factor: float | None = Nonedo_normalize: bool | None = Noneimage_mean: float | list[float] | None = Noneimage_std: float | list[float] | None = Nonedo_convert_rgb: bool | None = Nonereturn_tensors: str | transformers.utils.generic.TensorType | None = Nonedata_format: transformers.image_utils.ChannelDimension | None = <ChannelDimension.FIRST: 'channels_first'>input_data_format: str | transformers.image_utils.ChannelDimension | None = Nonereturn_legacy_image_output: bool = True )

Tham số

  • images (ImageInput, tùy chọn) — Danh sách các hình ảnh cần tiền xử lý. Kỳ vọng một hình ảnh đơn lẻ hoặc một lô hình ảnh có giá trị pixel từ 0 đến 255. Nếu truyền vào các hình ảnh có giá trị pixel từ 0 đến 1, hãy đặt do_rescale=False.
  • do_resize (bool, tùy chọn, mặc định là self.do_resize) — Có nên thay đổi kích thước ảnh hay không.
  • size (dict[str, int], tuỳ chọn, mặc định là self.size) — Kích thước của ảnh sau khi thay đổi kích thước. Cạnh ngắn nhất của ảnh sẽ được thay đổi kích thước thành size[“shortest_edge”], với cạnh dài nhất được thay đổi kích thước để giữ nguyên tỷ lệ khung hình đầu vào.
  • resample (int, tùy chọn, mặc định là self.resample) — Bộ lọc lấy mẫu lại (resampling filter) được sử dụng khi thay đổi kích thước ảnh. Giá trị này có thể là một trong các enum PILImageResampling. Chỉ có hiệu lực khi do_resize được đặt thành True.
  • do_center_crop (bool, tùy chọn, mặc định là self.do_center_crop) — Có nên cắt ảnh theo tâm hay không.
  • crop_size (dict[str, int], tuỳ chọn, mặc định là self.crop_size) — Kích thước của phần cắt ở giữa. Chỉ có hiệu lực nếu do_center_crop được đặt thành True.
  • do_rescale (bool, tùy chọn, mặc định là self.do_rescale) — Có nên điều chỉnh lại tỷ lệ ảnh hay không.
  • rescale_factor (float, tùy chọn, mặc định là self.rescale_factor) — Hệ số để thay đổi kích thước ảnh nếu do_rescale được đặt thành True.
  • do_normalize (bool, tùy chọn, mặc định là self.do_normalize) — Có nên chuẩn hóa hình ảnh hay không.
  • image_mean (float hoặc list[float], tùy chọn, mặc định là self.image_mean) — Giá trị trung bình của ảnh để sử dụng cho việc chuẩn hóa. Chỉ có hiệu lực nếu do_normalize được đặt thành True.
  • image_std (float hoặc list[float], tùy chọn, mặc định là self.image_std) — Độ lệch chuẩn của ảnh để sử dụng cho việc chuẩn hóa. Chỉ có hiệu lực nếu do_normalize được đặt thành True.
  • do_convert_rgb (bool, tùy chọn, mặc định là self.do_convert_rgb) — Có chuyển đổi ảnh sang RGB hay không.
  • return_tensors (str hoặc TensorType, tùy chọn) — Loại tensor cần trả về. Có thể là một trong các giá trị sau:
    • Unset: Trả về một danh sách np.ndarray.
    • TensorType.PYTORCH hoặc 'pt': Trả về một batch có kiểu torch.Tensor.
    • TensorType.NUMPY hoặc 'np': Trả về một batch có kiểu np.ndarray.
  • data_format (ChannelDimension hoặc str, tùy chọn, mặc định là ChannelDimension.FIRST) — Định dạng chiều kênh cho ảnh đầu ra. Có thể là một trong các giá trị sau:
    • "channels_first" hoặc ChannelDimension.FIRST: ảnh ở định dạng (num_channels, height, width).
    • "channels_last" hoặc ChannelDimension.LAST: ảnh ở định dạng (height, width, num_channels).
    • Unset: Sử dụng định dạng chiều kênh của ảnh đầu vào.
  • input_data_format (ChannelDimension hoặc str, tùy chọn) — Định dạng chiều kênh cho ảnh đầu vào. Nếu không được đặt, định dạng chiều kênh sẽ được suy ra từ ảnh đầu vào. Có thể là một trong các giá trị sau:
    • "channels_first" hoặc ChannelDimension.FIRST: ảnh ở định dạng (num_channels, height, width).
    • "channels_last" hoặc ChannelDimension.LAST: ảnh ở định dạng (height, width, num_channels).
    • "none" hoặc ChannelDimension.NONE: ảnh ở định dạng (chiều cao, chiều rộng).

Tiền xử lý một hình ảnh hoặc một lô hình ảnh.

VideoLlavaVideoProcessor

lớp transformers.VideoLlavaVideoProcessor

< >

( **kwargs: *<class 'transformers.processing_utils.VideosKwargs'> )

Tham số

  • do_convert_rgb (bool, kwargs, tuỳ chọn, mặc định là True) — Có chuyển đổi ảnh sang RGB hay không.
  • do_resize (bool, kwargs, tuỳ chọn, mặc định là True) — Có nên thay đổi kích thước ảnh hay không.
  • size (Annotated[int | list[int] | tuple[int, ...] | dict[str, int] | None, None], kwargs, mặc định là {'shortest_edge' -- 224}): Mô tả kích thước đầu vào tối đa của mô hình.
  • default_to_square (bool, kwargs, tuỳ chọn, mặc định là False) — Có nên mặc định dùng ảnh vuông khi thay đổi kích thước không, nếu size là một số nguyên.
  • resample (Annotated[Union[int, PILImageResampling, NoneType], None], kwargs, mặc định là 3) — Bộ lọc lấy mẫu lại (resampling filter) được sử dụng khi thay đổi kích thước ảnh. Giá trị này có thể là một trong các hằng số liệt kê (enum) của PILImageResampling. Chỉ có hiệu lực khi do_resize được đặt thành True.
  • do_rescale (bool, kwargs, tuỳ chọn, mặc định là True) — Có nên điều chỉnh lại tỷ lệ ảnh hay không.
  • rescale_factor (float, kwargs, optional, mặc định là 0.00392156862745098) — Hệ số rescale để rescale ảnh nếu do_rescale được đặt thành True.
  • do_normalize (bool, kwargs, tuỳ chọn, mặc định là True) — Có nên chuẩn hóa hình ảnh hay không.
  • image_mean (Union[float, list[float], tuple[float, ...]], kwargs, optional, mặc định là [0.48145466, 0.4578275, 0.40821073]) — Giá trị trung bình của ảnh để sử dụng cho việc chuẩn hóa. Chỉ có hiệu lực nếu do_normalize được đặt thành True.
  • image_std (Union[float, list[float], tuple[float, ...]], kwargs, optional, mặc định là [0.26862954, 0.26130258, 0.27577711]) — Độ lệch chuẩn của ảnh để sử dụng cho việc chuẩn hóa. Chỉ có hiệu lực nếu do_normalize được đặt thành True.
  • do_center_crop (bool, kwargs, tuỳ chọn, mặc định là True) — Có nên cắt ảnh ở vị trí trung tâm hay không.
  • do_pad (bool, kwargs, optional) — Có nên chèn padding cho ảnh hay không. Padding được thực hiện đến kích thước lớn nhất trong batch hoặc đến một kích thước vuông cố định cho mỗi ảnh. Chiến lược padding cụ thể phụ thuộc vào model.
  • crop_size (Annotated[int | list[int] | tuple[int, ...] | dict[str, int] | None, None], kwargs, mặc định là {'height' -- 224, 'width': 224}): Kích thước của ảnh đầu ra sau khi áp dụng center_crop.
  • data_format (Union[str, ~image_utils.ChannelDimension], kwargs, optional) — Chỉ hỗ trợ ChannelDimension.FIRST. Được thêm vào để tương thích với các bộ xử lý chậm.
  • input_data_format (Union[str, ~image_utils.ChannelDimension], kwargs, tùy chọn) — Định dạng chiều kênh cho ảnh đầu vào. Nếu không được đặt, định dạng chiều kênh sẽ được suy ra từ ảnh đầu vào. Có thể là một trong các giá trị:
    • "channels_first" hoặc ChannelDimension.FIRST: ảnh ở định dạng (num_channels, height, width).
    • "channels_last" hoặc ChannelDimension.LAST: ảnh ở định dạng (height, width, num_channels).
    • "none" hoặc ChannelDimension.NONE: ảnh ở định dạng (chiều cao, chiều rộng).
  • device (Annotated[Union[str, torch.device, NoneType], None], kwargs) — Thiết bị để xử lý các video. Nếu không được đặt, thiết bị sẽ được suy ra từ các video đầu vào.
  • do_sample_frames (bool, kwargs, tuỳ chọn, mặc định là False) — Có lấy mẫu các khung hình từ video trước khi xử lý hay xử lý toàn bộ video hay không.
  • video_metadata (Annotated[~video_utils.VideoMetadata | dict | list[dict | ~video_utils.VideoMetadata] | list[list[dict | ~video_utils.VideoMetadata]] | None, None], kwargs) — Metadata của video, chứa thông tin về tổng thời lượng, fps và tổng số khung hình. Nó sẽ được sử dụng để lấy mẫu các khung hình từ video hoặc tính toán mốc thời gian. Không truyền bất kỳ metadata nào trừ khi bạn đang cố gắng giải mã video thủ công trước khi xử lý
  • fps (Annotated[int | float | None, None], kwargs) — Số khung hình mục tiêu cần lấy mẫu mỗi giây khi do_sample_frames=True.
  • num_frames (Annotated[int | None, None], kwargs) — Số khung hình tối đa cần lấy mẫu khi do_sample_frames=True.
  • return_metadata (bool, kwargs, tuỳ chọn, mặc định là False) — Có trả về metadata của video hay không. Video metadata là một đối tượng chứa thông tin về thời lượng video, fps, backend giải mã, v.v.
  • return_tensors (Annotated[str | ~utils.generic.TensorType | None, None], kwargs) — Nếu được đặt, sẽ trả về tensor của một framework cụ thể. Các giá trị chấp nhận được là:
    • 'pt': Trả về các đối tượng torch.Tensor của PyTorch.
    • 'np': Trả về các đối tượng np.ndarray của NumPy.
  • **kwargs (VideosKwargs, optional) — Các tùy chọn xử lý bổ sung cho từng phương thức (text, hình ảnh, video, âm thanh). Các tham số cụ thể của model được liệt kê ở trên; xem lớp TypedDict để biết danh sách đầy đủ các đối số được hỗ trợ.

Tạo một bộ xử lý video VideoLlavaVideoProcessor.

VideoLlavaProcessor

lớp transformers.VideoLlavaProcessor

< >

( image_processor = Nonevideo_processor = Nonetokenizer = Nonepatch_size = 14vision_feature_select_strategy = 'default'image_token = '<image>'video_token = '<video>'chat_template = Nonenum_additional_image_tokens = 1**kwargs )

Tham số

  • image_processor (VideoLlavaImageProcessor) — Bộ xử lý ảnh là một đầu vào bắt buộc.
  • video_processor (VideoLlavaVideoProcessor) — Bộ xử lý video là một đầu vào bắt buộc.
  • tokenizer (tokenizer_class) — Tokenizer là đầu vào bắt buộc.
  • patch_size (int, tùy chọn, mặc định là 14) — Kích thước patch từ vision tower.
  • vision_feature_select_strategy (str, tùy chọn, mặc định là "default") — Chiến lược chọn đặc trưng được sử dụng để chọn đặc trưng thị giác từ bộ khung thị giác. Phải giống với cấu hình của mô hình
  • image_token (str, tùy chọn, mặc định là "<image>") — Token đặc biệt được sử dụng để chỉ định vị trí của hình ảnh.
  • video_token (str, tùy chọn, mặc định là "<video>") — Token đặc biệt được sử dụng để chỉ định vị trí video.
  • chat_template (str) — Một mẫu Jinja để chuyển đổi các danh sách tin nhắn trong một cuộc trò chuyện thành chuỗi có thể token hóa.
  • num_additional_image_tokens (int, tuỳ chọn, mặc định là 1) — Số lượng token bổ sung được thêm vào các embedding của ảnh, chẳng hạn như CLS (+1). Nếu backbone không có CLS hay các token bổ sung khác được nối thêm, không cần thiết lập tham số này.

Tạo một VideoLlavaProcessor, đóng gói một bộ xử lý ảnh, một bộ xử lý video và một tokenizer thành một bộ xử lý duy nhất.

VideoLlavaProcessor cung cấp đầy đủ các chức năng của VideoLlavaImageProcessor, VideoLlavaVideoProcessor và tokenizer_class. Xem ~VideoLlavaImageProcessor, ~VideoLlavaVideoProcessor và ~tokenizer_class để biết thêm thông tin.

__call__

< >

( images: typing.Union[ForwardRef('PIL.Image.Image'), numpy.ndarray, ForwardRef('torch.Tensor'), list['PIL.Image.Image'], list[numpy.ndarray], list['torch.Tensor'], NoneType] = Nonetext: str | list[str] | list[list[str]] | None = Nonevideos: typing.Union[list['PIL.Image.Image'], numpy.ndarray, ForwardRef('torch.Tensor'), list[numpy.ndarray], list['torch.Tensor'], list[list['PIL.Image.Image']], list[list[numpy.ndarray]], list[list['torch.Tensor']], transformers.video_utils.URL, list[transformers.video_utils.URL], list[list[transformers.video_utils.URL]], transformers.video_utils.Path, list[transformers.video_utils.Path], list[list[transformers.video_utils.Path]], NoneType] = Noneaudio: typing.Union[numpy.ndarray, ForwardRef('torch.Tensor'), collections.abc.Sequence[numpy.ndarray], collections.abc.Sequence['torch.Tensor'], NoneType] = None**kwargs: *<class 'transformers.processing_utils.ProcessingKwargs'> )

Tham số

  • images (Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor]], tuỳ chọn) — Hình ảnh cần tiền xử lý. Kỳ vọng một hình ảnh đơn lẻ hoặc một lô hình ảnh có giá trị pixel từ 0 đến 255. Nếu truyền vào các hình ảnh có giá trị pixel từ 0 đến 1, hãy đặt do_rescale=False.
  • text (Union[str, list[str], list[list[str]]], tùy chọn) — Chuỗi hoặc lô các chuỗi cần được mã hóa. Mỗi chuỗi có thể là một chuỗi ký tự hoặc một danh sách các chuỗi ký tự (chuỗi đã được tách token trước). Nếu bạn truyền vào dữ liệu đầu vào đã được tách token trước, hãy đặt is_split_into_words=True để tránh nhầm lẫn với các đầu vào dạng lô.
  • videos (Union[list[PIL.Image.Image], numpy.ndarray, torch.Tensor, list[numpy.ndarray], list[torch.Tensor], list[list[PIL.Image.Image]], list[list[numpy.ndarray]], list[list[torch.Tensor]], ~video_utils.URL, list[~video_utils.URL], list[list[~video_utils.URL]], ~video_utils.Path, list[~video_utils.Path], list[list[~video_utils.Path]]], tuỳ chọn) — Video cần tiền xử lý. Kỳ vọng một video đơn hoặc một lô video có giá trị pixel từ 0 đến 255. Nếu truyền vào video có giá trị pixel từ 0 đến 1, hãy đặt do_rescale=False.
  • audio (Union[numpy.ndarray, torch.Tensor, collections.abc.Sequence[numpy.ndarray], collections.abc.Sequence[torch.Tensor]], optional) — Âm thanh hoặc lô âm thanh cần được chuẩn bị. Mỗi âm thanh có thể là một mảng NumPy hoặc tensor PyTorch. Trong trường hợp là mảng NumPy/tensor PyTorch, mỗi âm thanh nên có hình dạng (C, T), trong đó C là số kênh và T là độ dài mẫu của âm thanh.
  • return_tensors (str hoặc TensorType, tùy chọn) — Nếu được đặt, sẽ trả về tensor của một framework cụ thể. Các giá trị chấp nhận được là:
    • 'pt': Trả về các đối tượng torch.Tensor của PyTorch.
    • 'np': Trả về các đối tượng np.ndarray của NumPy.
  • **kwargs (ProcessingKwargs, optional) — Các tùy chọn xử lý bổ sung cho từng modality (text, images, videos, audio). Các tham số cụ thể của model được liệt kê ở trên; xem lớp TypedDict để biết danh sách đầy đủ các đối số được hỗ trợ.

VideoLlavaModel

lớp transformers.VideoLlavaModel

< >

( config: VideoLlavaConfig )

Tham số

  • config (VideoLlavaConfig) — Lớp cấu hình mô hình chứa tất cả các tham số của mô hình. Khởi tạo bằng tệp cấu hình không tải trọng số liên quan đến mô hình, chỉ tải cấu hình. Xem phương thức from_pretrained() để tải trọng số mô hình.

Mô hình VideoLlava bao gồm một bộ khung thị giác và một mô hình ngôn ngữ không có đầu mô hình hóa ngôn ngữ.

Mô hình này kế thừa từ PreTrainedModel. Xem tài liệu của lớp cha để biết các phương thức chung mà thư viện triển khai cho tất cả các mô hình của nó (chẳng hạn như tải xuống hoặc lưu trữ, thay đổi kích thước các nhúng đầu vào, cắt tỉa các đầu, v.v.)

Mô hình này cũng là một lớp con của torch.nn.Module trong PyTorch. Hãy sử dụng nó như một Module PyTorch thông thường và tham khảo tài liệu PyTorch cho mọi vấn đề liên quan đến cách sử dụng và hành vi chung.

forward

< >

( input_ids: typing.Optional[torch.LongTensor] = Nonepixel_values: typing.Optional[torch.Tensor] = Nonepixel_values_videos: typing.Optional[torch.Tensor] = Noneattention_mask: typing.Optional[torch.Tensor] = Noneposition_ids: typing.Optional[torch.LongTensor] = Nonepast_key_values: transformers.cache_utils.Cache | None = Noneinputs_embeds: typing.Optional[torch.Tensor] = Nonevision_feature_layer: int | list[int] | None = Nonevision_feature_select_strategy: str | None = Noneuse_cache: bool | None = Nonemm_encoder_outputs: dict[str, transformers.modeling_outputs.BaseModelOutputWithPooling] | None = None**kwargs: *<class 'transformers.modeling_flash_attention_utils.FlashAttentionKwargs'> ) → VideoLlavaModelOutputWithPast or tuple(torch.Tensor)

Tham số

  • input_ids (torch.LongTensor có dạng (batch_size, sequence_length), tùy chọn) — Chỉ số của các token trong chuỗi đầu vào theo từ điển. Mặc định, padding sẽ bị bỏ qua.

    Các chỉ số có thể được lấy bằng cách sử dụng AutoTokenizer. Xem PreTrainedTokenizer.encode() và PreTrainedTokenizer.call() để biết thêm chi tiết.

    ID đầu vào là gì?

  • pixel_values (torch.Tensor có hình dạng (batch_size, num_channels, image_size, image_size), tùy chọn) — Các tensor tương ứng với các hình ảnh đầu vào. Giá trị pixel có thể được lấy bằng cách sử dụng image_processor_class. Xem image_processor_class.__call__ để biết chi tiết (processor_class sử dụng image_processor_class để xử lý hình ảnh).
  • pixel_values_videos (torch.Tensor có hình dạng (batch_size, num_frames, num_channels, frame_size, frame_size), tùy chọn) — Các tensor tương ứng với video đầu vào. Giá trị pixel cho video có thể được lấy bằng cách sử dụng video_processor_class. Xem video_processor_class.__call__ để biết chi tiết (processor_class sử dụng video_processor_class để xử lý video).
  • attention_mask (torch.Tensor có hình dạng (batch_size, sequence_length), tùy chọn) — Mặt nạ để tránh thực hiện chú ý trên các chỉ số token đệm. Các giá trị mặt nạ được chọn trong [0, 1]:
    • 1 cho các token không bị che,
    • 0 cho các token bị che.

    Mặt nạ chú ý là gì?

  • position_ids (torch.LongTensor có hình dạng (batch_size, sequence_length), tùy chọn) — Chỉ số vị trí của các token trong mỗi chuỗi đầu vào trong các position embeddings. Được chọn trong khoảng [0, config.n_positions - 1].

    ID vị trí là gì?

  • past_key_values (~cache_utils.Cache, tuỳ chọn) — Các hidden-state đã tính trước (key và value trong các khối self-attention và cross-attention) có thể được sử dụng để tăng tốc giải mã tuần tự. Điều này thường bao gồm past_key_values được trả về bởi mô hình ở một giai đoạn giải mã trước đó, khi use_cache=True hoặc config.use_cache=True.

    Chỉ cho phép Cache instance làm đầu vào, xem hướng dẫn kv cache của chúng tôi. Nếu không truyền past_key_values, DynamicCache sẽ được khởi tạo theo mặc định.

    Mô hình sẽ xuất ra cùng định dạng cache được đưa vào làm đầu vào.

    Nếu past_key_values được sử dụng, người dùng được kỳ vọng chỉ nhập input_ids chưa được xử lý (những phần chưa có trạng thái key value quá khứ được cung cấp cho mô hình này) có hình dạng (batch_size, unprocessed_length) thay vì toàn bộ input_ids có hình dạng (batch_size, sequence_length).

  • inputs_embeds (torch.Tensor có hình dạng (batch_size, sequence_length, hidden_size), tùy chọn) — Tùy chọn, thay vì truyền input_ids, bạn có thể chọn truyền trực tiếp một biểu diễn nhúng. Điều này hữu ích nếu bạn muốn kiểm soát nhiều hơn cách chuyển đổi các chỉ số input_ids thành các vector liên quan so với ma trận tra cứu nhúng nội bộ của mô hình.
  • vision_feature_layer (Union[int, list[int]], tùy chọn) — Chỉ số của lớp để chọn đặc trưng thị giác. Nếu cung cấp nhiều chỉ số, đặc trưng thị giác của các chỉ số tương ứng sẽ được nối lại với nhau để tạo thành các đặc trưng thị giác.
  • vision_feature_select_strategy (str, tùy chọn) — Chiến lược chọn đặc trưng được sử dụng để chọn đặc trưng thị giác từ bộ khung thị giác. Có thể là "default" hoặc "full".
  • use_cache (bool, tùy chọn) — Nếu đặt thành True, các trạng thái key value của past_key_values sẽ được trả về và có thể được sử dụng để tăng tốc quá trình giải mã (xem past_key_values).
  • mm_encoder_outputs (dict[str, ~modeling_outputs.BaseModelOutputWithPooling], tùy chọn) — Dict trong đó các khóa là các chế độ (modality) được hỗ trợ và các giá trị là kết quả mã hóa cho chế độ đó. Mỗi kết quả mã hóa là một tuple gồm (pooler_output, tùy chọn: last_hidden_states, tùy chọn: hidden_states, tùy chọn: attentions) pooler_output có hình dạng (batch_size, sequence_length, hidden_size), tùy chọn) là một chuỗi các đặc trưng đa phương tiện của bộ mã hóa đã được hợp nhất vào các nhúng văn bản.

Trả về

VideoLlavaModelOutputWithPast hoặc tuple(torch.Tensor)

Một VideoLlavaModelOutputWithPast hoặc một tuple của torch.Tensor (nếu return_dict=False được truyền hoặc khi config.return_dict=False) bao gồm các thành phần khác nhau tùy thuộc vào cấu hình (None) và đầu vào.

Phương thức forward của VideoLlavaModel ghi đè lên phương thức đặc biệt __call__.

Mặc dù công thức cho bước truyền tiến cần được định nghĩa bên trong hàm này, người dùng nên gọi instance của Module sau đó thay vì gọi hàm này, vì instance Module sẽ đảm nhận việc thực hiện các bước tiền xử lý và hậu xử lý, trong khi hàm này sẽ lặng lẽ bỏ qua chúng.

  • last_hidden_state (torch.Tensor có hình dạng (batch_size, sequence_length, hidden_size), tùy chọn) — Chuỗi các trạng thái ẩn (hidden-states) tại đầu ra của lớp cuối cùng của mô hình.

  • past_key_values (Cache, tùy chọn, được trả về khi use_cache=True được truyền vào hoặc khi config.use_cache=True) — Đây là một instance của Cache. Để biết thêm chi tiết, hãy xem hướng dẫn về kv cache của chúng tôi.

    Chứa các hidden-states đã được tính trước (key và values trong các khối self-attention) có thể được sử dụng (xem đầu vào past_key_values) để tăng tốc độ giải mã tuần tự.

  • hidden_states (tuple[torch.Tensor], tuỳ chọn, được trả về khi output_hidden_states=True được truyền vào hoặc khi config.output_hidden_states=True) — Tuple của torch.Tensor (một cho đầu ra của embeddings, nếu mô hình có lớp embedding, + một cho đầu ra của mỗi lớp) có hình dạng (batch_size, sequence_length, hidden_size).

    Trạng thái ẩn của mô hình tại đầu ra của mỗi lớp cùng với các đầu ra embedding ban đầu tùy chọn.

  • attentions (tuple[torch.Tensor], tuỳ chọn, được trả về khi output_attentions=True được truyền vào hoặc khi config.output_attentions=True) — Tuple của torch.Tensor (một cho mỗi lớp) có hình dạng (batch_size, num_heads, sequence_length, sequence_length).

    Trọng số chú ý sau softmax của attention, được sử dụng để tính trung bình có trọng số trong các đầu self-attention.

  • image_hidden_states (torch.Tensor, tuỳ chọn) — Một torch.Tensor có kích thước (batch_size, num_images, sequence_length, hidden_size)`. image_hidden_states của mô hình do bộ mã hóa thị giác tạo ra và sau khi chiếu trạng thái ẩn cuối cùng.

  • video_hidden_states (torch.Tensor, tùy chọn) — Một torch.Tensor có kích thước (batch_size * num_frames, num_videos, sequence_length, hidden_size). video_hidden_states của mô hình do bộ mã hóa thị giác tạo ra và sau khi chiếu trạng thái ẩn cuối cùng.

get_image_features

< >

( pixel_values: typing.Optional[torch.Tensor] = Nonepixel_values_images: typing.Optional[torch.Tensor] = Nonevision_feature_layer: int | list[int] | None = Nonevision_feature_select_strategy: str | None = None**kwargs: *<class 'transformers.utils.generic.TransformersKwargs'> ) → BaseModelOutputWithPooling or tuple(torch.Tensor)

Tham số

  • pixel_values (torch.Tensor có hình dạng (batch_size, num_channels, image_size, image_size), tùy chọn) — Các tensor tương ứng với các hình ảnh đầu vào. Giá trị pixel có thể được lấy bằng cách sử dụng image_processor_class. Xem image_processor_class.__call__ để biết chi tiết (processor_class sử dụng image_processor_class để xử lý hình ảnh).
  • pixel_values_images (torch.Tensor có hình dạng (batch_size, channels, height, width)) — Các tensor tương ứng với các hình ảnh đầu vào.
  • vision_feature_select_strategy (str, tùy chọn) — Chiến lược chọn đặc trưng được sử dụng để chọn đặc trưng thị giác từ bộ khung thị giác. Có thể là "default" hoặc "full"
  • vision_feature_layer (Union[int, list[int]], tùy chọn) — Chỉ số của lớp để chọn đặc trưng thị giác. Nếu cung cấp nhiều chỉ số, đặc trưng thị giác của các chỉ số tương ứng sẽ được nối lại với nhau để tạo thành các đặc trưng thị giác.
  • vision_feature_select_strategy (str, tùy chọn) — Chiến lược chọn đặc trưng được sử dụng để chọn đặc trưng thị giác từ bộ khung thị giác. Có thể là "default" hoặc "full".

Trả về

BaseModelOutputWithPooling hoặc tuple(torch.Tensor)

Một BaseModelOutputWithPooling hoặc một tuple của torch.Tensor (nếu return_dict=False được truyền hoặc khi config.return_dict=False) bao gồm các thành phần khác nhau tùy thuộc vào cấu hình (None) và đầu vào.

Lấy trạng thái ẩn cuối cùng của hình ảnh từ tháp thị giác và áp dụng phép chiếu đa phương tiện.

  • last_hidden_state (torch.Tensor có hình dạng (batch_size, sequence_length, hidden_size)) — Chuỗi các hidden-state tại đầu ra của lớp cuối cùng của mô hình.

  • pooler_output (torch.Tensor có hình dạng (batch_size, hidden_size)) — Trạng thái ẩn của lớp cuối cùng của token đầu tiên trong chuỗi (token phân loại) sau khi được xử lý thêm qua các lớp được sử dụng cho tác vụ tiền huấn luyện bổ trợ. Ví dụ, đối với các mô hình thuộc họ BERT, giá trị này trả về token phân loại sau khi được xử lý qua một lớp tuyến tính và một hàm kích hoạt tanh. Trọng số của lớp tuyến tính được huấn luyện từ mục tiêu dự đoán câu tiếp theo (phân loại) trong quá trình tiền huấn luyện.

  • hidden_states (tuple(torch.Tensor), tuỳ chọn, được trả về khi output_hidden_states=True được truyền vào hoặc khi config.output_hidden_states=True) — Bộ tuple của torch.Tensor (một cho đầu ra của embeddings, nếu mô hình có lớp embedding, + một cho đầu ra của mỗi lớp) có hình dạng (batch_size, sequence_length, hidden_size).

    Trạng thái ẩn của mô hình tại đầu ra của mỗi lớp cùng với các đầu ra embedding ban đầu tùy chọn.

  • attentions (tuple(torch.Tensor), tuỳ chọn, được trả về khi output_attentions=True được truyền vào hoặc khi config.output_attentions=True) — Tuple của torch.Tensor (một cho mỗi lớp) có hình dạng (batch_size, num_heads, sequence_length, sequence_length).

    Trọng số chú ý sau softmax của attention, được sử dụng để tính trung bình có trọng số trong các đầu self-attention.

get_placeholder_mask

< >

( input_ids: LongTensorinputs_embeds: Tensorimage_features: typing.Optional[torch.Tensor] = Nonevideo_features: typing.Optional[torch.Tensor] = None )

Lấy mặt nạ placeholder đa phương thức từ input_ids hoặc inputs_embeds, và kiểm tra xem số lượng token placeholder có bằng với độ dài của các đặc trưng đa phương thức hay không. Nếu độ dài khác nhau, một lỗi sẽ được ném ra.

get_video_features

< >

( pixel_values_videos: Tensorvision_feature_layer: int | list[int] | None = None**kwargs: *<class 'transformers.utils.generic.TransformersKwargs'> ) → BaseModelOutputWithPooling or tuple(torch.Tensor)

Tham số

  • pixel_values_videos (torch.Tensor có hình dạng (batch_size, num_frames, num_channels, frame_size, frame_size)) — Các tensor tương ứng với video đầu vào. Giá trị pixel cho video có thể được lấy bằng cách sử dụng VideoLlavaVideoProcessor. Xem VideoLlavaVideoProcessor.call() để biết chi tiết (VideoLlavaProcessor sử dụng VideoLlavaVideoProcessor để xử lý video).
  • vision_feature_layer (Union[int, list[int]], tùy chọn) — Chỉ số của lớp để chọn đặc trưng thị giác. Nếu cung cấp nhiều chỉ số, đặc trưng thị giác của các chỉ số tương ứng sẽ được nối lại với nhau để tạo thành các đặc trưng thị giác.

Trả về

BaseModelOutputWithPooling hoặc tuple(torch.Tensor)

Một BaseModelOutputWithPooling hoặc một tuple của torch.Tensor (nếu return_dict=False được truyền hoặc khi config.return_dict=False) bao gồm các thành phần khác nhau tùy thuộc vào cấu hình (VideoLlavaConfig) và đầu vào.

Lấy trạng thái ẩn cuối cùng của video từ tháp thị giác và áp dụng phép chiếu đa phương tiện.

  • last_hidden_state (torch.Tensor có hình dạng (batch_size, sequence_length, hidden_size)) — Chuỗi các hidden-state tại đầu ra của lớp cuối cùng của mô hình.

  • pooler_output (torch.Tensor có hình dạng (batch_size, hidden_size)) — Trạng thái ẩn của lớp cuối cùng của token đầu tiên trong chuỗi (token phân loại) sau khi được xử lý thêm qua các lớp được sử dụng cho tác vụ tiền huấn luyện bổ trợ. Ví dụ, đối với các mô hình thuộc họ BERT, giá trị này trả về token phân loại sau khi được xử lý qua một lớp tuyến tính và một hàm kích hoạt tanh. Trọng số của lớp tuyến tính được huấn luyện từ mục tiêu dự đoán câu tiếp theo (phân loại) trong quá trình tiền huấn luyện.

  • hidden_states (tuple(torch.Tensor), tuỳ chọn, được trả về khi output_hidden_states=True được truyền vào hoặc khi config.output_hidden_states=True) — Bộ tuple của torch.Tensor (một cho đầu ra của embeddings, nếu mô hình có lớp embedding, + một cho đầu ra của mỗi lớp) có hình dạng (batch_size, sequence_length, hidden_size).

    Trạng thái ẩn của mô hình tại đầu ra của mỗi lớp cùng với các đầu ra embedding ban đầu tùy chọn.

  • attentions (tuple(torch.Tensor), tuỳ chọn, được trả về khi output_attentions=True được truyền vào hoặc khi config.output_attentions=True) — Tuple của torch.Tensor (một cho mỗi lớp) có hình dạng (batch_size, num_heads, sequence_length, sequence_length).

    Trọng số chú ý sau softmax của attention, được sử dụng để tính trung bình có trọng số trong các đầu self-attention.

VideoLlavaForConditionalGeneration

lớp transformers.VideoLlavaForConditionalGeneration

< >

( config: VideoLlavaConfig )

Tham số

  • config (VideoLlavaConfig) — Lớp cấu hình mô hình chứa tất cả các tham số của mô hình. Khởi tạo bằng tệp cấu hình không tải trọng số liên quan đến mô hình, chỉ tải cấu hình. Xem phương thức from_pretrained() để tải trọng số mô hình.

Mô hình VideoLlava bao gồm một bộ khung thị giác và một mô hình ngôn ngữ.

Mô hình này kế thừa từ PreTrainedModel. Xem tài liệu của lớp cha để biết các phương thức chung mà thư viện triển khai cho tất cả các mô hình của nó (chẳng hạn như tải xuống hoặc lưu trữ, thay đổi kích thước các nhúng đầu vào, cắt tỉa các đầu, v.v.)

Mô hình này cũng là một lớp con của torch.nn.Module trong PyTorch. Hãy sử dụng nó như một Module PyTorch thông thường và tham khảo tài liệu PyTorch cho mọi vấn đề liên quan đến cách sử dụng và hành vi chung.

forward

< >

( input_ids: typing.Optional[torch.LongTensor] = Nonepixel_values: typing.Optional[torch.Tensor] = Nonepixel_values_images: typing.Optional[torch.Tensor] = Nonepixel_values_videos: typing.Optional[torch.Tensor] = Noneattention_mask: typing.Optional[torch.Tensor] = Noneposition_ids: typing.Optional[torch.LongTensor] = Nonepast_key_values: transformers.cache_utils.Cache | None = Noneinputs_embeds: typing.Optional[torch.Tensor] = Nonevision_feature_layer: int | list[int] | None = Nonevision_feature_select_strategy: str | None = Nonelabels: typing.Optional[torch.LongTensor] = Noneuse_cache: bool | None = Nonelogits_to_keep: typing.Union[int, torch.Tensor] = 0mm_encoder_outputs: dict[str, transformers.modeling_outputs.BaseModelOutputWithPooling] | None = None**kwargs: *<class 'transformers.utils.generic.TransformersKwargs'> ) → VideoLlavaCausalLMOutputWithPast or tuple(torch.Tensor)

Tham số

  • input_ids (torch.LongTensor có dạng (batch_size, sequence_length), tùy chọn) — Chỉ số của các token trong chuỗi đầu vào theo từ điển. Mặc định, padding sẽ bị bỏ qua.

    Các chỉ số có thể được lấy bằng cách sử dụng AutoTokenizer. Xem PreTrainedTokenizer.encode() và PreTrainedTokenizer.call() để biết thêm chi tiết.

    ID đầu vào là gì?

  • pixel_values (torch.Tensor có hình dạng (batch_size, num_channels, image_size, image_size), tùy chọn) — Các tensor tương ứng với các hình ảnh đầu vào. Giá trị pixel có thể được lấy bằng cách sử dụng image_processor_class. Xem image_processor_class.__call__ để biết chi tiết (processor_class sử dụng image_processor_class để xử lý hình ảnh).
  • pixel_values_images (torch.Tensor of shape (batch_size, num_channels, image_size, image_size)) -- The tensors corresponding to the input images. Pixel values can be obtained using [AutoImageProcessor](/docs/transformers/main/en/model_doc/auto#transformers.AutoImageProcessor). See [VideoLlavaImageProcessor.__call__()](/docs/transformers/main/en/model_doc/molmo2#transformers.Molmo2ImageProcessor.__call__) for details ([]LlavaProcessor`] uses VideoLlavaImageProcessor for processing images).
  • pixel_values_videos (torch.Tensor có hình dạng (batch_size, num_frames, num_channels, frame_size, frame_size), tùy chọn) — Các tensor tương ứng với video đầu vào. Giá trị pixel cho video có thể được lấy bằng cách sử dụng video_processor_class. Xem video_processor_class.__call__ để biết chi tiết (processor_class sử dụng video_processor_class để xử lý video).
  • attention_mask (torch.Tensor có hình dạng (batch_size, sequence_length), tùy chọn) — Mặt nạ để tránh thực hiện chú ý trên các chỉ số token đệm. Các giá trị mặt nạ được chọn trong [0, 1]:
    • 1 cho các token không bị che,
    • 0 cho các token bị che.

    Mặt nạ chú ý là gì?

  • position_ids (torch.LongTensor có hình dạng (batch_size, sequence_length), tùy chọn) — Chỉ số vị trí của các token trong mỗi chuỗi đầu vào trong các position embeddings. Được chọn trong khoảng [0, config.n_positions - 1].

    ID vị trí là gì?

  • past_key_values (~cache_utils.Cache, tuỳ chọn) — Các hidden-state đã tính trước (key và value trong các khối self-attention và cross-attention) có thể được sử dụng để tăng tốc giải mã tuần tự. Điều này thường bao gồm past_key_values được trả về bởi mô hình ở một giai đoạn giải mã trước đó, khi use_cache=True hoặc config.use_cache=True.

    Chỉ cho phép Cache instance làm đầu vào, xem hướng dẫn kv cache của chúng tôi. Nếu không truyền past_key_values, DynamicCache sẽ được khởi tạo theo mặc định.

    Mô hình sẽ xuất ra cùng định dạng cache được đưa vào làm đầu vào.

    Nếu past_key_values được sử dụng, người dùng được kỳ vọng chỉ nhập input_ids chưa được xử lý (những phần chưa có trạng thái key value quá khứ được cung cấp cho mô hình này) có hình dạng (batch_size, unprocessed_length) thay vì toàn bộ input_ids có hình dạng (batch_size, sequence_length).

  • inputs_embeds (torch.Tensor có hình dạng (batch_size, sequence_length, hidden_size), tùy chọn) — Tùy chọn, thay vì truyền input_ids, bạn có thể chọn truyền trực tiếp một biểu diễn nhúng. Điều này hữu ích nếu bạn muốn kiểm soát nhiều hơn cách chuyển đổi các chỉ số input_ids thành các vector liên quan so với ma trận tra cứu nhúng nội bộ của mô hình.
  • vision_feature_layer (Union[int, list[int]], tùy chọn) — Chỉ số của lớp để chọn đặc trưng thị giác. Nếu cung cấp nhiều chỉ số, đặc trưng thị giác của các chỉ số tương ứng sẽ được nối lại với nhau để tạo thành các đặc trưng thị giác.
  • vision_feature_select_strategy (str, tùy chọn) — Chiến lược chọn đặc trưng được sử dụng để chọn đặc trưng thị giác từ bộ khung thị giác. Có thể là "default" hoặc "full".
  • labels (torch.LongTensor có shape (batch_size, sequence_length), tùy chọn) — Nhãn để tính toán tổn thất mô hình hóa ngôn ngữ có che (masked language modeling loss). Chỉ số phải nằm trong [0, ..., config.vocab_size] hoặc -100 (xem docstring của input_ids). Các token có chỉ số được đặt thành -100 sẽ bị bỏ qua (che), tổn thất chỉ được tính cho các token có nhãn nằm trong [0, ..., config.vocab_size].
  • use_cache (bool, tùy chọn) — Nếu đặt thành True, các trạng thái key value của past_key_values sẽ được trả về và có thể được sử dụng để tăng tốc quá trình giải mã (xem past_key_values).
  • logits_to_keep (Union[int, torch.Tensor], tùy chọn, mặc định là 0) — Nếu là int, tính logits cho logits_to_keep token cuối. Nếu là 0, tính logits cho tất cả input_ids (trường hợp đặc biệt). Chỉ cần logits của token cuối cho quá trình sinh, và việc chỉ tính cho token đó có thể tiết kiệm bộ nhớ, điều này trở nên khá đáng kể với các chuỗi dài hoặc kích thước từ vựng lớn. Nếu là torch.Tensor, phải là 1 chiều tương ứng với các chỉ số cần giữ trong chiều độ dài chuỗi. Điều này hữu ích khi sử dụng định dạng tensor đóng gói (một chiều duy nhất cho batch và độ dài chuỗi).
  • mm_encoder_outputs (dict[str, ~modeling_outputs.BaseModelOutputWithPooling], tùy chọn) — Dict trong đó các khóa là các chế độ (modality) được hỗ trợ và các giá trị là kết quả mã hóa cho chế độ đó. Mỗi kết quả mã hóa là một tuple gồm (pooler_output, tùy chọn: last_hidden_states, tùy chọn: hidden_states, tùy chọn: attentions) pooler_output có hình dạng (batch_size, sequence_length, hidden_size), tùy chọn) là một chuỗi các đặc trưng đa phương tiện của bộ mã hóa đã được hợp nhất vào các nhúng văn bản.

Trả về

VideoLlavaCausalLMOutputWithPast hoặc tuple(torch.Tensor)

Một VideoLlavaCausalLMOutputWithPast hoặc một tuple của torch.Tensor (nếu return_dict=False được truyền hoặc khi config.return_dict=False) bao gồm các thành phần khác nhau tùy thuộc vào cấu hình (None) và đầu vào.

Phương thức forward của VideoLlavaForConditionalGeneration ghi đè lên phương thức đặc biệt __call__.

Mặc dù công thức cho bước truyền tiến cần được định nghĩa bên trong hàm này, người dùng nên gọi instance của Module sau đó thay vì gọi hàm này, vì instance Module sẽ đảm nhận việc thực hiện các bước tiền xử lý và hậu xử lý, trong khi hàm này sẽ lặng lẽ bỏ qua chúng.

  • loss (torch.Tensor có shape (1,), tùy chọn, được trả về khi labels được cung cấp) — Loss của language modeling (cho next-token prediction).

  • logits (torch.Tensor có hình dạng (batch_size, sequence_length, config.vocab_size)) — Điểm dự đoán của đầu mô hình hóa ngôn ngữ (điểm cho mỗi token trong từ vựng trước SoftMax).

  • past_key_values (Cache, tùy chọn, được trả về khi use_cache=True được truyền vào hoặc khi config.use_cache=True) — Đây là một instance của Cache. Để biết thêm chi tiết, hãy xem hướng dẫn về kv cache của chúng tôi.

    Chứa các hidden-states đã được tính trước (key và values trong các khối self-attention) có thể được sử dụng (xem đầu vào past_key_values) để tăng tốc độ giải mã tuần tự.

  • hidden_states (tuple[torch.Tensor], tuỳ chọn, được trả về khi output_hidden_states=True được truyền vào hoặc khi config.output_hidden_states=True) — Tuple của torch.Tensor (một cho đầu ra của embeddings, nếu mô hình có lớp embedding, + một cho đầu ra của mỗi lớp) có hình dạng (batch_size, sequence_length, hidden_size).

    Trạng thái ẩn của mô hình tại đầu ra của mỗi lớp cùng với các đầu ra embedding ban đầu tùy chọn.

  • attentions (tuple[torch.Tensor], tuỳ chọn, được trả về khi output_attentions=True được truyền vào hoặc khi config.output_attentions=True) — Tuple của torch.Tensor (một cho mỗi lớp) có hình dạng (batch_size, num_heads, sequence_length, sequence_length).

    Trọng số chú ý sau softmax của attention, được sử dụng để tính trung bình có trọng số trong các đầu self-attention.

  • image_hidden_states (torch.Tensor, tuỳ chọn) — Một torch.Tensor có kích thước (batch_size, num_images, sequence_length, hidden_size)`. image_hidden_states của mô hình do bộ mã hóa thị giác tạo ra và sau khi chiếu trạng thái ẩn cuối cùng.

  • video_hidden_states (torch.Tensor, tùy chọn) — Một torch.Tensor có kích thước (batch_size * num_frames, num_videos, sequence_length, hidden_size). video_hidden_states của mô hình do bộ mã hóa thị giác tạo ra và sau khi chiếu trạng thái ẩn cuối cùng.

Ví dụ:

>>> from PIL import Image
>>> from huggingface_hub.utils import httpx
>>> from io import BytesIO
>>> import numpy as np
>>> import av
>>> from huggingface_hub import hf_hub_download
>>> from transformers import VideoLlavaProcessor, VideoLlavaForConditionalGeneration

>>> def read_video_pyav(container, indices):
...     '''
...     Decode the video with PyAV decoder.
...     Args:
...         container (`av.container.input.InputContainer`): PyAV container.
...         indices (`list[int]`): List of frame indices to decode.
...     Returns:
...         result (np.ndarray): np array of decoded frames of shape (num_frames, height, width, 3).
...     '''
...     frames = []
...     container.seek(0)
...     start_index = indices[0]
...     end_index = indices[-1]
...     for i, frame in enumerate(container.decode(video=0)):
...         if i > end_index:
...             break
...         if i >= start_index and i in indices:
...             frames.append(frame)
...     return np.stack([x.to_ndarray(format="rgb24") for x in frames])

>>> model = VideoLlavaForConditionalGeneration.from_pretrained("LanguageBind/Video-LLaVA-7B-hf")
>>> processor = VideoLlavaProcessor.from_pretrained("LanguageBind/Video-LLaVA-7B-hf")

>>> prompt = "USER: <video>\nWhy is this video funny? ASSISTANT:"
>>> video_path = hf_hub_download(repo_id="raushan-testing-hf/videos-test", filename="sample_demo_1.mp4", repo_type="dataset")
>>> container = av.open(video_path)

>>> # sample uniformly 8 frames from the video
>>> total_frames = container.streams.video[0].frames
>>> indices = np.arange(0, total_frames, total_frames / 8).astype(int)
>>> clip = read_video_pyav(container, indices)

>>> inputs = processor(text=prompt, videos=clip, return_tensors="pt")

>>> # Generate
>>> generate_ids = model.generate(**inputs, max_length=80)
>>> processor.batch_decode(generate_ids, skip_special_tokens=True, clean_up_tokenization_spaces=False)[0]
"USER:  Why is this video funny? ASSISTANT: The video is funny because the baby is playing with a Wii remote while sitting on the floor, and the baby is wearing glasses.Ъ. The baby's actions are amusing because it is a young child trying to interact with a video game, which is not a typical activity for a"

>>> # to generate from image and video mix
>>> url = "http://images.cocodataset.org/val2017/000000039769.jpg"
>>> with httpx.stream("GET", url) as response:
...     image = Image.open(BytesIO(response.read()))
>>> prompt = [
...     "USER: <image>\nHow many cats do you see? ASSISTANT:",
...     "USER: <video>\nWhy is this video funny? ASSISTANT:"
... ]
>>> inputs = processor(text=prompt, images=image, videos=clip, padding=True, return_tensors="pt")

>>> # Generate
>>> generate_ids = model.generate(**inputs, max_length=50)
>>> processor.batch_decode(generate_ids, skip_special_tokens=True, clean_up_tokenization_spaces=True)
['USER:   How many cats do you see? ASSISTANT: There are two cats visible in the image. (or three, if you count the one in the background).', 'USER:  Why is this video funny? ASSISTANT: The video is funny because it shows a baby sitting on a bed and playing with a Wii remote.Ъ. The baby is holding the remote']

get_image_features

< >

( pixel_values: Tensorvision_feature_layer: int | list[int] | None = Nonevision_feature_select_strategy: str | None = None**kwargs: *<class 'transformers.utils.generic.TransformersKwargs'> ) → BaseModelOutputWithPooling or tuple(torch.Tensor)

Tham số

  • pixel_values (torch.Tensor có hình dạng (batch_size, num_channels, image_size, image_size)) — Các tensor tương ứng với các hình ảnh đầu vào. Giá trị pixel có thể được lấy bằng cách sử dụng image_processor_class. Xem image_processor_class.__call__ để biết chi tiết (processor_class sử dụng image_processor_class để xử lý hình ảnh).
  • vision_feature_layer (Union[int, list[int]], tùy chọn) — Chỉ số của lớp để chọn đặc trưng thị giác. Nếu cung cấp nhiều chỉ số, đặc trưng thị giác của các chỉ số tương ứng sẽ được nối lại với nhau để tạo thành các đặc trưng thị giác.
  • vision_feature_select_strategy (str, tùy chọn) — Chiến lược chọn đặc trưng được sử dụng để chọn đặc trưng thị giác từ bộ khung thị giác. Có thể là "default" hoặc "full"

Trả về

BaseModelOutputWithPooling hoặc tuple(torch.Tensor)

Một BaseModelOutputWithPooling hoặc một tuple của torch.Tensor (nếu return_dict=False được truyền hoặc khi config.return_dict=False) bao gồm các thành phần khác nhau tùy thuộc vào cấu hình (None) và đầu vào.

  • last_hidden_state (torch.Tensor có hình dạng (batch_size, sequence_length, hidden_size)) — Chuỗi các hidden-state tại đầu ra của lớp cuối cùng của mô hình.

  • pooler_output (torch.Tensor có hình dạng (batch_size, hidden_size)) — Trạng thái ẩn của lớp cuối cùng của token đầu tiên trong chuỗi (token phân loại) sau khi được xử lý thêm qua các lớp được sử dụng cho tác vụ tiền huấn luyện bổ trợ. Ví dụ, đối với các mô hình thuộc họ BERT, giá trị này trả về token phân loại sau khi được xử lý qua một lớp tuyến tính và một hàm kích hoạt tanh. Trọng số của lớp tuyến tính được huấn luyện từ mục tiêu dự đoán câu tiếp theo (phân loại) trong quá trình tiền huấn luyện.

  • hidden_states (tuple(torch.Tensor), tuỳ chọn, được trả về khi output_hidden_states=True được truyền vào hoặc khi config.output_hidden_states=True) — Bộ tuple của torch.Tensor (một cho đầu ra của embeddings, nếu mô hình có lớp embedding, + một cho đầu ra của mỗi lớp) có hình dạng (batch_size, sequence_length, hidden_size).

    Trạng thái ẩn của mô hình tại đầu ra của mỗi lớp cùng với các đầu ra embedding ban đầu tùy chọn.

  • attentions (tuple(torch.Tensor), tuỳ chọn, được trả về khi output_attentions=True được truyền vào hoặc khi config.output_attentions=True) — Tuple của torch.Tensor (một cho mỗi lớp) có hình dạng (batch_size, num_heads, sequence_length, sequence_length).

    Trọng số chú ý sau softmax của attention, được sử dụng để tính trung bình có trọng số trong các đầu self-attention.

Update on GitHub