Transformers documentation

Depth Anything V2

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

Bu model 2024-06-13 tarihinde HF papers'ta yayımlandı ve 2024-07-05 tarihinde Hugging Face Transformers'a katkıda bulunuldu.

Depth Anything V2

Genel Bakış

Depth Anything V2, Lihe Yang ve diğerleri tarafından aynı adlı makalede tanıtılmıştır. Orijinal Depth Anything modeli ile aynı mimariyi kullanır ancak çok daha ince ve sağlam derinlik tahminleri elde etmek için sentetik veri ve daha büyük kapasiteli bir öğretmen modeli kullanır.

Makalenin özeti aşağıdaki gibidir:

Bu çalışma, Depth Anything V2'yi sunar. Gösterişli teknikler peşinde koşmadan, güçlü bir monoküler derinlik tahmini modeli inşa etme yolunu açacak kritik bulguları ortaya koymayı hedefliyoruz. Özellikle, V1 ile karşılaştırıldığında, bu sürüm üç ana uygulama yoluyla çok daha ince ve sağlam derinlik tahminleri üretmektedir: 1) tüm etiketli gerçek görüntülerin sentetik görüntülerle değiştirilmesi, 2) öğretmen modelimizin kapasitesinin ölçeklendirilmesi ve 3) öğrenci modellerin, büyük ölçekli sahte etiketli gerçek görüntüler köprüsü üzerinden eğitilmesi. Stable Diffusion üzerine inşa edilen en son modellerle karşılaştırıldığında, modellerimiz önemli ölçüde daha verimlidir (10 katından fazla hızlı) ve daha doğrudur. Geniş senaryoları desteklemek için farklı ölçeklerde (25M'den 1,3B parametreye kadar) modeller sunuyoruz. Güçlü genelleme yeteneklerinden faydalanarak, metrik derinlik etiketleriyle ince ayarlarını yapıyoruz ve metrik derinlik modellerimizi elde ediyoruz. Modellerimizin yanı sıra, mevcut test setlerindeki sınırlı çeşitlilik ve sık görülen gürültüyü göz önünde bulundurarak, gelecekteki araştırmaları kolaylaştırmak için hassas etiketlere ve çeşitli sahneler sahip çok yönlü bir değerlendirme kriteri oluşturuyoruz.

drawing Depth Anything overview. Taken from the original paper.

Depth Anything modelleri nielsr tarafından katkı sağlanmıştır. Orijinal kod burada bulunabilir.

Kullanım örneği

Depth Anything V2'yi kullanmanın 2 ana yolu vardır: tüm karmaşıklığı sizin için soyutlayan pipeline API'sini kullanmak veya DepthAnythingForDepthEstimation sınıfını kendiniz kullanmak.

Pipeline API

Pipeline, modeli birkaç satır kodla kullanmanıza olanak tanır:

import requests
from PIL import Image

from transformers import pipeline


# load pipe
pipe = pipeline(task="depth-estimation", model="depth-anything/Depth-Anything-V2-Small-hf")

# load image
url = 'http://images.cocodataset.org/val2017/000000039769.jpg'
image = Image.open(requests.get(url, stream=True).raw)

# inference
depth = pipe(image)["depth"]

Modeli kendiniz kullanma

Ön ve son işlemleri kendiniz yapmak istiyorsanız, bunu nasıl yapacağınız aşağıda gösterilmektedir:

import requests
import torch
from PIL import Image

from transformers import AutoImageProcessor, AutoModelForDepthEstimation


url = "http://images.cocodataset.org/val2017/000000039769.jpg"
image = Image.open(requests.get(url, stream=True).raw)

image_processor = AutoImageProcessor.from_pretrained("depth-anything/Depth-Anything-V2-Small-hf")
model = AutoModelForDepthEstimation.from_pretrained("depth-anything/Depth-Anything-V2-Small-hf", device_map="auto")

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

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

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

predicted_depth = post_processed_output[0]["predicted_depth"]
depth = (predicted_depth - predicted_depth.min()) / (predicted_depth.max() - predicted_depth.min())
depth = depth.detach().cpu().numpy() * 255
depth = Image.fromarray(depth.astype("uint8"))

Kaynaklar

Depth Anything ile başlamanıza yardımcı olmak için resmi Hugging Face ve topluluk (🌎 ile belirtilen) kaynaklarının listesi.

Buraya bir kaynak eklemek isterseniz, bir Pull Request açmaktan çekinmeyin; inceleyeceğiz! Kaynağın, mevcut bir kaynağı tekrarlamak yerine ideal olarak yeni bir şeyi göstermesi beklenir.

DepthAnythingConfig

sınıf 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 )

Parametreler

  • backbone_config (Union[dict, ~configuration_utils.PreTrainedConfig], isteğe bağlı) — Backbone modelinin yapılandırması.
  • patch_size (Union[int, list[int], tuple[int, int]], isteğe bağlı, varsayılan 14) — Her yamanın boyutu (çözünürlüğü).
  • initializer_range (float, isteğe bağlı, varsayılan 0.02) — Tüm ağırlık matrislerini başlatmak için kullanılan truncated_normal_initializer'ın standart sapması.
  • reassemble_hidden_size (int, isteğe bağlı, varsayılan 384) — Yeniden birleştirme katmanlarının giriş kanal sayısı.
  • reassemble_factors (list[int], isteğe bağlı, varsayılan [4, 2, 1, 0.5]) — Yeniden birleştirme katmanlarının yukarı/aşağı örneklemeye alma çarpanları.
  • neck_hidden_sizes (list[str], isteğe bağlı, varsayılan [48, 96, 192, 384]) — Omurga (backbone) özellik haritaları için projeksiyon yapılacak gizli katman boyutları.
  • fusion_hidden_size (int, isteğe bağlı, varsayılan 64) — Füzyondan önceki kanal sayısı.
  • head_in_index (int, isteğe bağlı, varsayılan -1) — Derinlik tahmini başlığında kullanılacak özelliklerin indeksi.
  • head_hidden_size (int, isteğe bağlı, varsayılan 32) — Derinlik tahmini başlığının ikinci konvolüsyonundaki çıktı kanalı sayısı.
  • depth_estimation_type (str, isteğe bağlı, varsayılan "relative") — Kullanılacak derinlik tahmini türü. ["relative", "metric"] değerlerinden biri olabilir.
  • max_depth (float, isteğe bağlı) — “metric” derinlik tahmini başlığı için kullanılacak maksimum derinlik. İç mekan modelleri için 20, dış mekan modelleri için 80 kullanılmalıdır. “relative” derinlik tahmininde bu değer yok sayılır.

Bu, bir Depth AnythingModel yapılandırmasını depolamak için kullanılan yapılandırma sınıfıdır. Belirtilen argümanlara göre bir Depth Anything modelini örneklemek ve model mimarisini tanımlamak için kullanılır. Varsayılanlarla bir yapılandırma örneği oluşturmak, LiheYoung/depth-anything-small-hf modelinin yapılandırmasına benzer bir yapılandırma üretir.

Yapılandırma nesneleri PreTrainedConfig sınıfından devralır ve model çıktılarını kontrol etmek için kullanılabilir. Daha fazla bilgi için PreTrainedConfig belgesini okuyun.

Örnek:

>>> 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

sınıf transformers.DepthAnythingForDepthEstimation

< >

( config: DepthAnythingConfig )

Parametreler

  • config (DepthAnythingConfig) — Modelin tüm parametrelerini içeren model yapılandırma sınıfı. Bir yapılandırma dosyasıyla başlatmak, modelle ilişkili ağırlıkları yüklemez, yalnızca yapılandırmayı yükler. Model ağırlıklarını yüklemek için from_pretrained() yöntemine bakın.

Üstünde derinlik tahmini kafası (3 konvolüsyonel katmandan oluşan) bulunan Depth Anything Model'i, örneğin KITTI, NYUv2 için.

Bu model PreTrainedModel sınıfından devralır. Kütüphanenin tüm modelleri için uyguladığı genel yöntemler (indirme veya kaydetme, giriş gömme boyutlarını yeniden boyutlandırma, başları budama vb.) için üst sınıf belgelendirmesine bakın.

Bu model aynı zamanda bir PyTorch torch.nn.Module alt sınıfıdır. Bunu standart bir PyTorch Module olarak kullanın ve genel kullanım ve davranışla ilgili tüm konular için PyTorch dokümantasyonuna başvurun.

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)

Parametreler

  • pixel_values (torch.Tensor, şekli (batch_size, num_channels, image_size, image_size)) — Girdi görüntülerine karşılık gelen tensörler. Piksel değerleri DPTImageProcessor kullanılarak elde edilebilir. Ayrıntılar için DPTImageProcessor.call() bölümüne bakın (processor_class, görüntüleri işlemek için DPTImageProcessor kullanır).
  • labels (torch.LongTensor, şekli (batch_size, height, width), isteğe bağlı) — Kayıp (loss) hesaplamak için kullanılan doğru derinlik tahmin haritaları.
  • output_attentions (bool, isteğe bağlı) — Tüm dikkat katmanlarının dikkat tensörlerinin döndürülüp döndürülmeyeceğini belirtir. Daha fazla ayrıntı için döndürülen tensörler altındaki attentions bölümüne bakın.
  • output_hidden_states (bool, isteğe bağlı) — Tüm katmanların gizli durumlarının (hidden states) döndürülüp döndürülmeyeceğini belirtir. Daha fazla ayrıntı için döndürülen tensörler altındaki hidden_states bölümüne bakın.
  • return_dict (bool, isteğe bağlı) — Düz bir tuple yerine ModelOutput döndürülecek mi?

Dönüş değeri

DepthEstimatorOutput veya tuple(torch.Tensor)

DepthEstimatorOutput veya bir torch.Tensor demeti (eğer return_dict=False geçirildiyse veya config.return_dict=False ise), yapılandırmaya (DepthAnythingConfig) ve girdilere bağlı olarak çeşitli öğelerden oluşur.

DepthAnythingForDepthEstimation forward metodu, __call__ özel metodunu geçersiz kılar.

İleri geçiş tarifi bu fonksiyon içinde tanımlanmalı olsa da, sonrasında bunun yerine Module örneğini çağırmak gerekir; çünkü önceki, ön ve son işleme adımlarını çalıştırmaktan sorumluyken ikincisi bunları sessizce yok sayar.

  • loss (torch.Tensor, şekli (1,), isteğe bağlı, labels sağlandığında döndürülür) — Sınıflandırma (config.num_labels==1 ise regresyon) kaybı.

  • predicted_depth (torch.Tensor, şekli (batch_size, height, width)) — Her piksel için tahmin edilen derinlik.

  • hidden_states (tuple(torch.Tensor), isteğe bağlı, output_hidden_states=True geçirildiğinde veya config.output_hidden_states=True olduğunda döndürülür) — torch.Tensor (modelin bir gömme katmanı varsa gömme katmanının çıktısı için bir tane + her katmanın çıktısı için birer tane) içeren, (batch_size, num_channels, height, width) biçiminde bir demet.

    Her katmanın çıktısında modelin gizli durumları ve isteğe bağlı başlangıç gömme çıktıları.

  • attentions (tuple(torch.Tensor), isteğe bağlı, output_attentions=True geçirildiğinde veya config.output_attentions=True olduğunda döndürülür) — torch.Tensor (katman başına bir tane) içeren bir tuple, şekli (batch_size, num_heads, patch_size, sequence_length).

    Dikkat softmax'ı sonrası dikkat ağırlıkları, öz-dikkat başlıklarında ağırlıklı ortalamanın hesaplanmasında kullanılır.

Örnekler:

>>> 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