Transformers documentation

Depth Anything

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

Эта модель была опубликована в HF papers 19.01.2024 и добавлена в Hugging Face Transformers 25.01.2024.

Depth Anything

Depth Anything разработан как базовая модель для монокулярной оценки глубины (MDE). Он обучается совместно на размеченных и ~62 млн неразмеченных изображений для расширения датасета. В качестве кодировщика изображений используется предобученная модель DINOv2, чтобы унаследовать её богатые семантические априорные знания, а в качестве декодера — DPT. Модель-учитель обучается на неразмеченных изображениях для создания псевдометок. Модель-ученик обучается на комбинации псевдометок и размеченных изображений. Для повышения качества модели-ученика к неразмеченным изображениям добавляются сильные возмущения, чтобы заставить модель-ученика извлекать из изображений больше визуальных знаний.

Все исходные чекпоинты Depth Anything можно найти в коллекции Depth Anything.

Нажмите на модели Depth Anything в боковой панели справа, чтобы увидеть больше примеров применения Depth Anything к различным задачам компьютерного зрения.

Приведённый ниже пример показывает, как получить карту глубины с помощью Pipeline или класса AutoModel.

Пайплайн
AutoModel
from transformers import pipeline


pipe = pipeline(task="depth-estimation", model="LiheYoung/depth-anything-base-hf", device=0)
pipe("http://images.cocodataset.org/val2017/000000039769.jpg")["depth"]

Примечания

  • DepthAnythingV2, выпущенный в июне 2024 года, использует ту же архитектуру, что и Depth Anything, и совместим со всеми примерами кода и существующими рабочими процессами. Он использует синтетические данные и teacher-модель с большей ёмкостью для получения значительно более точных и устойчивых предсказаний глубины.

DepthAnythingConfig

класс transformers.DepthAnythingConfig

< >

( 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 = Nonebackbone_config: dict | transformers.configuration_utils.PreTrainedConfig | None = Nonepatch_size: int | list[int] | tuple[int, int] = 14initializer_range: float = 0.02reassemble_hidden_size: int = 384reassemble_factors: list[int | float] | tuple[int | float, ...] = (4, 2, 1, 0.5)neck_hidden_sizes: list[int] | tuple[int, ...] = (48, 96, 192, 384)fusion_hidden_size: int = 64head_in_index: int = -1head_hidden_size: int = 32depth_estimation_type: str = 'relative'max_depth: int | None = 1 )

Параметры

  • backbone_config (Union[dict, ~configuration_utils.PreTrainedConfig], необязательный) — Конфигурация модели-бэкбона.
  • patch_size (Union[int, list[int], tuple[int, int]], необязательный, по умолчанию 14) — Размер (разрешение) каждого патча.
  • initializer_range (float, необязательный, по умолчанию 0.02) — Стандартное отклонение truncated_normal_initializer, используемое для инициализации всех матриц весов.
  • reassemble_hidden_size (int, необязательный, по умолчанию 384) — Количество входных каналов в слоях reassemble.
  • reassemble_factors (list[int], необязательный, по умолчанию [4, 2, 1, 0.5]) — Коэффициенты увеличения/уменьшения разрешения в слоях reassemble.
  • neck_hidden_sizes (list[str], необязательный, по умолчанию [48, 96, 192, 384]) — Размеры скрытых слоёв, к которым проецируются карты признаков бэкбона.
  • fusion_hidden_size (int, необязательный, по умолчанию 64) — Число каналов до слияния.
  • head_in_index (int, необязательный, по умолчанию -1) — Индекс признаков, используемых в голове оценки глубины.
  • head_hidden_size (int, необязательный, по умолчанию 32) — Количество выходных каналов во втором свёрточном слое головы оценки глубины.
  • depth_estimation_type (str, необязательный, по умолчанию "relative") — Тип оценки глубины. Может быть одним из ["relative", "metric"].
  • max_depth (float, необязательный) — Максимальная глубина, используемая для головы оценки глубины «metric». Для внутренних моделей следует использовать значение 20, а для внешних — 80. При оценке «relative» глубины это значение игнорируется.

Это класс конфигурации для хранения настроек модели Depth AnythingModel. Он используется для создания модели Depth Anything в соответствии с указанными аргументами, определяя архитектуру модели. Создание конфигурации с параметрами по умолчанию даст конфигурацию, аналогичную конфигурации LiheYoung/depth-anything-small-hf

Объекты конфигурации наследуются от PreTrainedConfig и могут использоваться для управления выводами модели. Подробнее читайте в документации PreTrainedConfig.

Пример:

>>> from transformers import DepthAnythingConfig, DepthAnythingForDepthEstimation

>>> # Initializing a DepthAnything small style configuration
>>> configuration = DepthAnythingConfig()

>>> # Initializing a model from the DepthAnything small style configuration
>>> model = DepthAnythingForDepthEstimation(configuration)

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

DepthAnythingForDepthEstimation

класс transformers.DepthAnythingForDepthEstimation

< >

( config: DepthAnythingConfig )

Параметры

  • config (DepthAnythingConfig) — Класс конфигурации модели, содержащий все параметры модели. Инициализация по файлу конфигурации не загружает веса, связанные с моделью, только конфигурацию. Используйте метод from_pretrained() для загрузки весов модели.

Depth Anything Model с головой для оценки глубины (состоящей из 3 свёрточных слоёв), например, для KITTI, NYUv2.

Эта модель наследуется от PreTrainedModel. См. документацию родительского класса для общих методов, которые библиотека реализует для всех своих моделей (например, загрузка или сохранение, изменение размера входных эмбеддингов, обрезка голов и т. д.)

Эта модель также является подклассом torch.nn.Module в PyTorch. Используйте её как обычный модуль PyTorch и обращайтесь к документации PyTorch по всем вопросам, связанным с общим использованием и поведением.

forward

< >

( pixel_values: Tensorlabels: typing.Optional[torch.LongTensor] = Noneoutput_attentions: bool | None = Noneoutput_hidden_states: bool | None = Nonereturn_dict: bool | None = None**kwargs ) → DepthEstimatorOutput or tuple(torch.Tensor)

Параметры

  • pixel_values (torch.Tensor формы (batch_size, num_channels, image_size, image_size)) — Тензоры, соответствующие входным изображениям. Значения пикселей можно получить с помощью DPTImageProcessor. Подробности см. в DPTImageProcessor.call() (processor_class использует DPTImageProcessor для обработки изображений).
  • labels (torch.LongTensor формы (batch_size, height, width), необязательный) — Истинные карты оценки глубины для вычисления функции потерь.
  • output_attentions (bool, необязательный) — Указывает, следует ли возвращать тензоры внимания всех слоев внимания. Подробности см. в описании attentions в разделе возвращаемых тензоров.
  • output_hidden_states (bool, необязательный) — Указывает, следует ли возвращать скрытые состояния всех слоев. Подробности см. в описании hidden_states среди возвращаемых тензоров.
  • return_dict (bool, необязательный) — Указывает, следует ли возвращать ModelOutput вместо обычного кортежа.

Возвращает

DepthEstimatorOutput или tuple(torch.Tensor)

Объект DepthEstimatorOutput или кортеж torch.Tensor (если передано return_dict=False или если config.return_dict=False), содержащий различные элементы в зависимости от конфигурации (DepthAnythingConfig) и входных данных.

Метод forward класса DepthAnythingForDepthEstimation переопределяет специальный метод __call__.

Хотя рецепт для прямого прохода должен быть определён внутри этой функции, после этого следует вызывать экземпляр Module, а не эту функцию, поскольку первый вариант обеспечивает выполнение шагов предварительной и последующей обработки, тогда как второй молча их игнорирует.

  • loss (torch.Tensor формы (1,), необязательный, возвращается, если задан labels) — Потери классификации (или регрессии, если config.num_labels==1).

  • predicted_depth (torch.Tensor формы (batch_size, height, width)) — Предсказанная глубина для каждого пикселя.

  • hidden_states (tuple(torch.Tensor), необязательный, возвращается, если передано output_hidden_states=True или если config.output_hidden_states=True) — Кортеж из torch.Tensor (один для вывода слоя встраиваний, если модель имеет слой встраиваний, + один для вывода каждого слоя) формы (batch_size, num_channels, height, width).

    Скрытые состояния модели на выходе каждого слоя, а также необязательные выходные значения начального слоя встраивания.

  • attentions (tuple(torch.Tensor), необязательный, возвращается при передаче output_attentions=True или при config.output_attentions=True) — Кортеж torch.Tensor (по одному на каждый слой) формы (batch_size, num_heads, patch_size, sequence_length).

    Веса внимания после softmax в механизме внимания, используемые для вычисления взвешенного среднего в головах само-внимания.

Примеры:

>>> from transformers import AutoImageProcessor, AutoModelForDepthEstimation
>>> import torch
>>> import numpy as np
>>> from PIL import Image
>>> from huggingface_hub.utils import httpx
>>> from io import BytesIO

>>> url = "http://images.cocodataset.org/val2017/000000039769.jpg"
>>> with httpx.stream("GET", url) as response:
...     image = Image.open(BytesIO(response.read()))

>>> image_processor = AutoImageProcessor.from_pretrained("LiheYoung/depth-anything-small-hf")
>>> model = AutoModelForDepthEstimation.from_pretrained("LiheYoung/depth-anything-small-hf")

>>> # prepare image for the model
>>> inputs = image_processor(images=image, return_tensors="pt")

>>> with torch.no_grad():
...     outputs = model(**inputs)

>>> # interpolate to original size
>>> post_processed_output = image_processor.post_process_depth_estimation(
...     outputs,
...     target_sizes=[(image.height, image.width)],
... )

>>> # visualize the prediction
>>> predicted_depth = post_processed_output[0]["predicted_depth"]
>>> depth = predicted_depth * 255 / predicted_depth.max()
>>> depth = depth.detach().cpu().numpy()
>>> depth = Image.fromarray(depth.astype("uint8"))
Update on GitHub