Transformers documentation
Depth Anything
Bu model 2024-01-19 tarihinde HF papers'ta yayımlandı ve 2024-01-25 tarihinde Hugging Face Transformers'a katkıda bulunuldu.
Depth Anything
Depth Anything, monoküler derinlik tahmini (MDE) için bir temel model olarak tasarlanmıştır. Veri setini geliştirmek amacıyla etiketli ve ~62M etiketsiz görüntü üzerinde birlikte eğitilir. Mevcut zengin anlamsal önceliklerini devralmak için bir görüntü kodlayıcı olarak önceden eğitilmiş bir DINOv2 modeli ve çözücü olarak DPT kullanır. Sahte etiketler oluşturmak için etiketsiz görüntüler üzerinde bir öğretmen modeli eğitilir. Öğrenci modeli, sahte etiketlerin ve etiketli görüntülerin bir kombinasyonunda eğitilir. Öğrenci modelinin performansını artırmak için, öğrenci modelinin görüntüden daha fazla görsel bilgi öğrenmesini sağlamak amacıyla etiketsiz görüntülere güçlü bozulmalar eklenir.
Tüm orijinal Depth Anything checkpoint'lerini Depth Anything koleksiyonunda bulabilirsiniz.
Farklı görü görevlerine Depth Anything uygulamanın daha fazla örneği için sağ kenar çubuğundaki Depth Anything modellerine tıklayın.
Aşağıdaki örnek, Pipeline veya AutoModel sınıfı ile derinlik haritası elde etmenin nasıl yapılacağını göstermektedir.
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"]import requests
import torch
from PIL import Image
from transformers import AutoImageProcessor, AutoModelForDepthEstimation
image_processor = AutoImageProcessor.from_pretrained("LiheYoung/depth-anything-base-hf")
model = AutoModelForDepthEstimation.from_pretrained("LiheYoung/depth-anything-base-hf", device_map="auto")
url = "http://images.cocodataset.org/val2017/000000039769.jpg"
image = Image.open(requests.get(url, stream=True).raw)
inputs = image_processor(images=image, return_tensors="pt").to(model.device)
with torch.no_grad():
outputs = model(**inputs)
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
Image.fromarray(depth.astype("uint8"))Notlar
- DepthAnythingV2, Haziran 2024'te yayımlanmıştır, Depth Anything ile aynı mimariyi kullanır ve tüm kod örnekleri ile mevcut iş akışlarıyla uyumludur. Ç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.
DepthAnythingConfig
sınıf transformers.DepthAnythingConfig
< source >( 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ılan14) — Her yamanın boyutu (çözünürlüğü). - initializer_range (
float, isteğe bağlı, varsayılan0.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.configDepthAnythingForDepthEstimation
sınıf transformers.DepthAnythingForDepthEstimation
< source >( 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
< source >( 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ındakiattentionsbö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ındakihidden_statesbö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ı,labelssağ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=Truegeçirildiğinde veyaconfig.output_hidden_states=Trueolduğ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=Truegeçirildiğinde veyaconfig.output_attentions=Trueolduğ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"))