Transformers documentation
Depth Anything V2
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.
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.
- Monoküler derinlik tahmini görevi kılavuzu
- Depth Anything V2 demosu.
- DepthAnythingForDepthEstimation ile çıkarımın sergilendiği bir defter burada bulunabilir. 🌎
- Apple Silicon üzerinde kullanım için
smallvaryantının Core ML dönüşümü.
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
< 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"))