Transformers documentation
Процессор видео
Процессор видео
Video Processor — это утилита, отвечающая за подготовку входных признаков для видеомоделей, а также за постобработку их результатов. Она обеспечивает такие преобразования, как изменение размера, нормализация и конвертация в PyTorch. Помимо преобразований, класс VideoProcessor выполняет декодирование видео из локальных путей или URL (требуется torchcodec) и выборку кадров в соответствии со специфичными для модели стратегиями.
Видео-процессор расширяет функциональность процессоров изображений, позволяя мультимодальным языковым моделям (VLM) обрабатывать видео с набором аргументов, отличным от используемого для изображений. Он выступает связующим звеном между сырыми видеоданными и моделью, обеспечивая оптимизацию входных признаков для VLM.
Настройки видеопроцессора сохраняются в video_preprocessor_config.json. В более старых контрольных точках они могут храниться в preprocessor_config.json. См. Сохранение и перезагрузка для регистрации пользовательского бэкенда при перезагрузке.
Пример использования
Приведён пример загрузки видео-процессора для модели llava-hf/llava-onevision-qwen2-0.5b-ov-hf:
from transformers import AutoVideoProcessor
processor = AutoVideoProcessor.from_pretrained("llava-hf/llava-onevision-qwen2-0.5b-ov-hf")Предобработка выполняется на устройстве входного тензора или на CPU для других типов входных данных. Укажите device, чтобы переместить видео на другое устройство перед предобработкой; это не меняет бэкенд. Также можно скомпилировать предобработку torchvision с помощью torch.compile при использовании ускорителя.
import torch
from transformers.video_utils import load_video
from transformers import AutoVideoProcessor
device = torch.accelerator.current_accelerator().type if torch.accelerator.is_available() else "cpu"
video = load_video("video.mp4")
processor = AutoVideoProcessor.from_pretrained("llava-hf/llava-onevision-qwen2-0.5b-ov-hf", device=device)
processor = torch.compile(processor)
processed_video = processor(video, return_tensors="pt")Бэкенды процессора видео
Встроенные видео-процессоры используют torchvision для пакетного изменения размера, масштабирования и нормализации. Для их использования установите PyTorch и torchvision. В отличие от процессоров изображений, встроенные видео-процессоры не предоставляют бэкенд PIL.
AutoVideoProcessor по умолчанию выбирает бэкенд torchvision. Вы также можете запросить его явно и проверить атрибут backend загруженного процессора.
from transformers import AutoVideoProcessor
model_id = "llava-hf/llava-onevision-qwen2-0.5b-ov-hf"
video_processor = AutoVideoProcessor.from_pretrained(model_id, backend="torchvision")
print(video_processor.backend)
# torchvisionАргумент backend определяет реализацию предобработки, а не декодер видео. См. Поведение при выборке для информации о декодировании и выборке кадров.
Пользовательские backends
BaseVideoProcessor обеспечивает предобработку на базе torchvision. Для реализации, не использующей torchvision, можно создать подкласс VideoProcessorMixin и переопределить preprocess так, чтобы он возвращал BatchFeature с входными данными, ожидаемыми моделью.
Регистрируйте пользовательские классы с помощью AutoVideoProcessor.register() и используйте video_processor_classes для сопоставления имён бэкендов с классами. В примере ниже предполагается, что NewCustomVideoProcessor определён с предобработкой, необходимой для чекпоинта LLaVA-OneVision.
from transformers import LlavaOnevisionConfig
AutoVideoProcessor.register(
LlavaOnevisionConfig,
video_processor_classes={"custom": NewCustomVideoProcessor},
exist_ok=True,
)
custom_processor = AutoVideoProcessor.from_pretrained(model_id, backend="custom")Используйте exist_ok=True, так как LlavaOnevisionConfig уже зарегистрирован. Переданные записи объединяются с его backend-маппингом, при этом совпадающие по имени записи заменяются, а записи, которые не были переданы, например torchvision, сохраняются.
Сохранение и загрузка
save_pretrained() сохраняет конфигурацию предобработки, а не сопоставления бэкендов, добавленные с помощью AutoVideoProcessor.register(). В том же процессе Python перезагрузите сохранённый процессор с backend="custom":
custom_processor.save_pretrained("./saved-video-processor")
custom_processor = AutoVideoProcessor.from_pretrained("./saved-video-processor", backend="custom")Пользовательские регистрации действуют только в текущем процессе Python. В новом процессе необходимо определить или импортировать пользовательский класс и зарегистрировать его повторно перед загрузкой.
Поведение при выборке
Видео-процессор также может извлекать кадры видео, используя технику, наиболее подходящую для данной модели. Поведение выборки управляется аргументом do_sample_frames и может настраиваться с помощью параметров, специфичных для модели, таких как num_frames или fps (частота выборки кадров из видео). Если входное видео задано в виде локального пути или URL (str), процессор декодирует его автоматически. Чтобы получить метаданные о декодированном видео, такие как индексы выбранных кадров, исходные размеры, длительность и fps, передайте в процессор return_metadata=True.
Указание
num_framesне гарантирует, что в выводе будет ровно такое количество кадров. В зависимости от модели, сэмплер может применять минимальные или максимальные ограничения по числу кадров.По умолчанию используется декодер
torchcodec, который необходимо установить.
import torch
from transformers import AutoVideoProcessor
device = torch.accelerator.current_accelerator().type if torch.accelerator.is_available() else "cpu"
processor = AutoVideoProcessor.from_pretrained("llava-hf/llava-onevision-qwen2-0.5b-ov-hf", device=device)
processed_video_inputs = processor(videos=["video_path.mp4"], return_metadata=True, do_sample_frames=True, return_tensors="pt")
video_metadata = processed_video_inputs["video_metadata"]
# See how many frames the original video had and what was the original FPS
print(video_metadata.total_num_frames, video_metadata.fps)Если вы передаёте уже декодированный массив видео, но хотите включить выборку кадров, специфичную для модели, настоятельно рекомендуется указать video_metadata. Это позволяет сэмплеру знать длительность и FPS исходного видео. Метаданные можно передать в виде объекта VideoMetadata или обычного словаря.
import torch
from transformers import AutoVideoProcessor
from transformers.video_utils import VideoMetadata
device = torch.accelerator.current_accelerator().type if torch.accelerator.is_available() else "cpu"
processor = AutoVideoProcessor.from_pretrained("llava-hf/llava-onevision-qwen2-0.5b-ov-hf", device=device)
decoded_video = torch.randint(0, 255, size=(100, 3, 1280, 1280)) # short video of 100 frames
video_metadata = VideoMetadata(
total_num_frames=100,
fps=24,
duration=4.1, # in seconds
)
processed_video_inputs = processor(videos=[decoded_video], video_metadata=video_metadata, do_sample_frames=True, num_frames=10, return_tensors="pt")
print(processed_video_inputs.pixel_values_videos.shape)
[10, 3, 384, 384]VideoProcessorMixin
класс transformers.VideoProcessorMixin
< source >( **kwargs: *<class 'transformers.processing_utils.VideosKwargs'> )
fetch_videos
< source >( video_url_or_urls: str | list[str] | list[list[str]]sample_indices_fn = None )
Преобразовать один URL или список URL в соответствующие объекты np.array.
Если передан один url, возвращаемое значение будет одним объектом. Если передан список, возвращается список объектов.
from_dict
< source >( video_processor_dict: dict**kwargs ) → ~video_processing_utils.VideoProcessorBase
Параметры
- video_processor_dict (
dict[str, Any]) — Словарь, который будет использован для создания объекта video processor. Такой словарь можно получить из предобученной контрольной точки, используя метод~video_processing_utils.VideoProcessorBase.to_dict. - kwargs (
dict[str, Any]) — Дополнительные параметры для инициализации объекта видео-процессора.
Возвращает
~video_processing_utils.VideoProcessorBase
Объект видеопроцессора, созданный из этих параметров.
Создаёт экземпляр типа ~video_processing_utils.VideoProcessorBase из словаря параметров на Python.
from_json_file
< source >( json_file: str | os.PathLike ) → A video processor of type ~video_processing_utils.VideoProcessorBase
Создаёт экземпляр видеопроцессора типа ~video_processing_utils.VideoProcessorBase на основе пути к JSON-файлу с параметрами.
from_pretrained
< source >( pretrained_model_name_or_path: str | os.PathLikecache_dir: str | os.PathLike | None = Noneforce_download: bool = Falselocal_files_only: bool = Falsetoken: str | bool | None = Nonerevision: str = 'main'**kwargs )
Параметры
- pretrained_model_name_or_path (
strилиos.PathLike) — Это может быть:- строка, model id предобученного видео, размещённого в репозитории моделей на huggingface.co.
- путь к каталогу, содержащему файл видео-процессора, сохранённый с помощью метода
~video_processing_utils.VideoProcessorBase.save_pretrained, например,./my_model_directory/. - путь к сохранённому JSON-файлу видео-процессора, например,
./my_model_directory/video_preprocessor_config.json.
- cache_dir (
stroros.PathLike, необязательный) — Путь к каталогу, в котором следует кэшировать загруженный предобученный видеопроцессор модели, если стандартный кэш не используется. - force_download (
bool, необязательный, по умолчаниюFalse) — Указывает, следует ли принудительно (пере)загружать файлы видео-процессора и заменять кэшированные версии, если они уже существуют. - proxies (
dict[str, str], необязательный) — Словарь прокси-серверов, используемых по протоколу или конечной точке, например,{'http': 'foo.bar:3128', 'http://hostname': 'foo.bar:4012'}.Прокси применяются при каждом запросе. - token (
strилиbool, необязательный) — Токен, используемый в качестве HTTP bearer-авторизации для удалённых файлов. Если указаноTrueили параметр не задан, будет использован токен, сгенерированный при выполненииhf auth login(хранится в~/.huggingface). - revision (
str, необязательный, по умолчанию"main") — Конкретная версия модели, которую следует использовать. Это может быть имя ветки, имя тега или идентификатор коммита, поскольку для хранения моделей и других артефактов на huggingface.co используется система на базе git, поэтомуrevisionможет быть любым идентификатором, разрешённым git.
Создайте экземпляр типа ~video_processing_utils.VideoProcessorBase из видео-процессора.
Примеры:
# We can't instantiate directly the base class *VideoProcessorBase* so let's show the examples on a
# derived class: *LlavaOnevisionVideoProcessor*
video_processor = LlavaOnevisionVideoProcessor.from_pretrained(
"llava-hf/llava-onevision-qwen2-0.5b-ov-hf"
) # Download video_processing_config from huggingface.co and cache.
video_processor = LlavaOnevisionVideoProcessor.from_pretrained(
"./test/saved_model/"
) # E.g. video processor (or model) was saved using *save_pretrained('./test/saved_model/')*
video_processor = LlavaOnevisionVideoProcessor.from_pretrained("./test/saved_model/video_preprocessor_config.json")
video_processor = LlavaOnevisionVideoProcessor.from_pretrained(
"llava-hf/llava-onevision-qwen2-0.5b-ov-hf", do_normalize=False, foo=False
)
assert video_processor.do_normalize is False
video_processor, unused_kwargs = LlavaOnevisionVideoProcessor.from_pretrained(
"llava-hf/llava-onevision-qwen2-0.5b-ov-hf", do_normalize=False, foo=False, return_unused_kwargs=True
)
assert video_processor.do_normalize is False
assert unused_kwargs == {"foo": False}get_video_processor_dict
< source >( pretrained_model_name_or_path: str | os.PathLike**kwargs ) → tuple[Dict, Dict]
Параметры
- pretrained_model_name_or_path (
strилиos.PathLike) — Идентификатор предобученной контрольной точки, из которой мы хотим получить словарь параметров. - subfolder (
str, необязательный, по умолчанию"") — Если нужные файлы находятся в подпапке репозитория модели на huggingface.co, укажите здесь имя папки.
Возвращает
tuple[Dict, Dict]
Словарь(и), который(е) будет использован для создания объекта видео-процессора.
По pretrained_model_name_or_path определяется словарь параметров, используемый для создания экземпляра видео-процессора типа ~video_processing_utils.VideoProcessorBase с помощью from_dict.
preprocess
< source >( videos: 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]]]**kwargs: *<class 'transformers.processing_utils.VideosKwargs'> ) → ~image_processing_base.BatchFeature
Параметры
- 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]]]) — Видео для предобработки. Ожидается одно видео или батч видео со значениями пикселей в диапазоне от 0 до 255. Если передаются видео со значениями пикселей в диапазоне от 0 до 1, установитеdo_rescale=False. - do_convert_rgb (
bool, kwargs, optional) — Следует ли преобразовать изображение в RGB. - do_resize (
bool, kwargs, optional) — Указывает, нужно ли изменить размер изображения. - size (
Annotated[int | list[int] | tuple[int, ...] | dict[str, int] | None, None], kwargs) — Описывает максимальные размеры входных данных для модели. - default_to_square (
bool, kwargs, optional) — Определяет, следует ли по умолчанию использовать квадратное изображение при изменении размера, если size является целым числом. - resample (
Annotated[Union[int, PILImageResampling, NoneType], None], kwargs) — Фильтр ресемплинга, используемый при изменении размера изображения. Может быть одним из значений перечисленияPILImageResampling. Влияет только в том случае, еслиdo_resizeустановлено вTrue. - do_rescale (
bool, kwargs, optional) — Нужно ли перемасштабировать изображение. - rescale_factor (
float, kwargs, optional) — Коэффициент масштабирования, применяемый к изображению, еслиdo_rescaleустановлен вTrue. - do_normalize (
bool, kwargs, optional) — Нужно ли нормализовать изображение. - image_mean (
Union[float, list[float], tuple[float, ...]], kwargs, optional) — Среднее значение изображения, используемое для нормализации. Влияет только в том случае, еслиdo_normalizeустановлено вTrue. - image_std (
Union[float, list[float], tuple[float, ...]], kwargs, optional) — Стандартное отклонение изображения, используемое для нормализации. Влияет только в том случае, еслиdo_normalizeустановлено вTrue. - do_center_crop (
bool, kwargs, optional) — Выполнять ли центрированную обрезку изображения. - do_pad (
bool, kwargs, optional) — Определяет, нужно ли выравнивать изображение. Выравнивание выполняется либо до максимального размера в батче, либо до фиксированного квадратного размера для каждого изображения. Точная стратегия выравнивания зависит от модели. - crop_size (
Annotated[int | list[int] | tuple[int, ...] | dict[str, int] | None, None], kwargs) — Размер выходного изображения после примененияcenter_crop. - data_format (
Union[str, ~image_utils.ChannelDimension], kwargs, optional) — Поддерживается толькоChannelDimension.FIRST. Добавлено для совместимости с медленными процессорами. - input_data_format (
Union[str, ~image_utils.ChannelDimension], kwargs, необязательный) — Формат размерности каналов для входного изображения. Если не задан, формат размерности каналов выводится из входного изображения. Может быть одним из:"channels_first"илиChannelDimension.FIRST: изображение в формате (num_channels, height, width)."channels_last"илиChannelDimension.LAST: изображение в формате (высота, ширина, число каналов)."none"илиChannelDimension.NONE: изображение в формате (height, width).
- device (
Annotated[Union[str, torch.device, NoneType], None], kwargs) — Устройство, на котором будут обрабатываться видео. Если не задано, устройство определяется на основе входных видео. - do_sample_frames (
bool, kwargs, optional) — Следует ли извлекать кадры из видео перед обработкой или обрабатывать видео целиком. - video_metadata (
Annotated[~video_utils.VideoMetadata | dict | list[dict | ~video_utils.VideoMetadata] | list[list[dict | ~video_utils.VideoMetadata]] | None, None], kwargs) — Метаданные видео, содержащие информацию о общей длительности, fps и общем количестве кадров. Будут использоваться для выборки кадров из видео или вычисления временных меток. Не передавайте метаданные, если не пытаетесь декодировать видео вручную перед обработкой - fps (
Annotated[int | float | None, None], kwargs) — Целевое количество кадров для выборки в секунду приdo_sample_frames=True. - num_frames (
Annotated[int | None, None], kwargs) — Максимальное количество кадров для выборки приdo_sample_frames=True. - return_metadata (
bool, kwargs, optional) — Указывает, следует ли возвращать метаданные видео. Метаданные видео — это объект, содержащий информацию о длительности видео, частоте кадров (fps), используемом бэкенде декодирования и т. д. - return_tensors (
Annotated[str | ~utils.generic.TensorType | None, None], kwargs) — Возвращает стопку тензоров, если установлено значение'pt', иначе возвращает список тензоров.
Возвращает
~image_processing_base.BatchFeature
- data (
dict) — Словарь списков/массивов/тензоров, возвращаемый методом call (‘pixel_values’ и т. д.). - tensor_type (
Union[None, str, TensorType], необязательный) — Здесь можно указать tensor_type, чтобы при инициализации преобразовать списки целых чисел в тензоры PyTorch/Numpy.
register_for_auto_class
< source >( auto_class = 'AutoVideoProcessor' )
Зарегистрируйте этот класс с указанным автоклассом. Это следует использовать только для пользовательских видеообработчиков, так как те, что входят в библиотеку, уже сопоставлены с AutoVideoProcessor.
Этот API является экспериментальным и может содержать некоторые незначительные изменения, нарушающие обратную совместимость, в следующих версиях.
save_pretrained
< source >( save_directory: str | os.PathLikepush_to_hub: bool = False**kwargs )
Параметры
- save_directory (
strилиos.PathLike) — Каталог, в котором будет сохранён JSON-файл видеопроцессора (будет создан, если не существует). - push_to_hub (
bool, необязательный, по умолчаниюFalse) — Указывает, следует ли после сохранения отправить вашу модель в Hugging Face model hub. С помощьюrepo_idможно указать репозиторий, в который нужно отправить модель (по умолчанию используется имяsave_directoryв вашем пространстве имён). - kwargs (
dict[str, Any], необязательный) — Дополнительные именованные аргументы, передаваемые в метод push_to_hub().
Сохраните объект видеопроцессора в каталог save_directory, чтобы его можно было загрузить с помощью метода класса ~video_processing_utils.VideoProcessorBase.from_pretrained.
to_dict
< source >( ) → dict[str, Any]
Возвращает
dict[str, Any]
Словарь всех атрибутов, из которых состоит этот экземпляр видео-процессора.
Сериализует этот экземпляр в словарь Python.
BaseVideoProcessor
класс transformers.BaseVideoProcessor
< source >( **kwargs: *<class 'transformers.processing_utils.VideosKwargs'> )
convert_to_rgb
< source >( video: torch.Tensor ) → torch.Tensor
Преобразует видео в формат RGB.
sample_frames
< source >( metadata: VideoMetadatanum_frames: int | None = Nonefps: int | float | None = None**kwargs ) → np.ndarray
Параметры
- metadata (
VideoMetadata) — Метаданные видео, содержащие информацию о общей длительности, частоте кадров (fps) и общем количестве кадров. - num_frames (
int, необязательный) — Максимальное количество кадров для выборки. По умолчаниюself.num_frames. - fps (
intилиfloat, необязательный) — Целевое количество кадров для выборки в секунду. По умолчаниюself.fps.
Возвращает
np.ndarray
Индексы для выборки кадров видео.
Функция выборки по умолчанию, которая равномерно выбирает требуемое количество кадров в диапазоне от 0 до общего числа кадров.
Если вместе с метаданными передан параметр fps, то равномерно выбирается fps кадров в секунду. Аргументы num_frames и fps взаимоисключающие.