Transformers documentation
Depth Anything
Model ini dipublikasikan di HF papers pada 2024-01-19 dan disumbangkan ke Hugging Face Transformers pada 2024-01-25.
Depth Anything
Depth Anything dirancang sebagai model fondasi untuk estimasi kedalaman monokular (MDE). Model ini dilatih secara bersama pada data berlabel dan sekitar 62 juta gambar tanpa label untuk meningkatkan dataset. Model ini menggunakan model DINOv2 yang telah dilatih sebelumnya sebagai encoder gambar untuk mewarisi prior semantik yang kaya, serta DPT sebagai decoder. Model guru dilatih pada gambar tanpa label untuk membuat pseudo-label. Model siswa dilatih pada kombinasi pseudo-label dan gambar berlabel. Untuk meningkatkan kinerja model siswa, perturbasi kuat ditambahkan pada gambar tanpa label untuk menantang model siswa agar belajar lebih banyak pengetahuan visual dari gambar tersebut.
Anda dapat menemukan semua checkpoint asli Depth Anything di bawah koleksi Depth Anything.
Klik pada model Depth Anything di bilah sisi kanan untuk melihat lebih banyak contoh cara menerapkan Depth Anything ke berbagai tugas visi.
Contoh di bawah ini menunjukkan cara mendapatkan peta kedalaman dengan Pipeline atau kelas 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"]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"))Catatan
- DepthAnythingV2, yang dirilis pada Juni 2024, menggunakan arsitektur yang sama dengan Depth Anything dan kompatibel dengan semua contoh kode serta alur kerja yang ada. Model ini menggunakan data sintetis dan model guru dengan kapasitas yang lebih besar untuk mencapai prediksi kedalaman yang jauh lebih halus dan robust.
DepthAnythingConfig
kelas 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 )
Parameter
- backbone_config (
Union[dict, ~configuration_utils.PreTrainedConfig], opsional) — Konfigurasi dari model backbone. - patch_size (
Union[int, list[int], tuple[int, int]], opsional, defaultnya14) — Ukuran (resolusi) dari setiap patch. - initializer_range (
float, opsional, defaultnya0.02) — Standar deviasi dari truncated_normal_initializer untuk menginisialisasi semua matriks bobot. - reassemble_hidden_size (
int, opsional, defaultnya 384) — Jumlah saluran input dari lapisan reassemble. - reassemble_factors (
list[int], opsional, default[4, 2, 1, 0.5]) — Faktor up/downsampling dari lapisan reassemble. - neck_hidden_sizes (
list[str], opsional, default[48, 96, 192, 384]) — Ukuran tersembunyi untuk diproyeksikan ke peta fitur dari backbone. - fusion_hidden_size (
int, opsional, defaultnya 64) — Jumlah saluran sebelum fusi. - head_in_index (
int, opsional, defaultnya -1) — Indeks fitur yang akan digunakan di head estimasi kedalaman. - head_hidden_size (
int, opsional, default 32) — Jumlah kanal output pada konvolusi kedua dari head estimasi kedalaman. - depth_estimation_type (
str, opsional, defaultnya"relative") — Jenis estimasi kedalaman yang akan digunakan. Bisa berupa salah satu dari["relative", "metric"]. - max_depth (
float, opsional) — Kedalaman maksimum yang digunakan untuk kepala estimasi kedalaman “metric”. Gunakan 20 untuk model indoor dan 80 untuk model outdoor. Untuk estimasi kedalaman “relative”, nilai ini diabaikan.
Ini adalah kelas konfigurasi untuk menyimpan konfigurasi dari Depth AnythingModel. Kelas ini digunakan untuk membuat instans model Depth Anything sesuai dengan argumen yang ditentukan, yang mendefinisikan arsitektur model. Membuat instans konfigurasi dengan nilai bawaan akan menghasilkan konfigurasi yang serupa dengan konfigurasi dari LiheYoung/depth-anything-small-hf
Objek konfigurasi mewarisi dari PreTrainedConfig dan dapat digunakan untuk mengontrol output model. Baca dokumentasi dari PreTrainedConfig untuk informasi lebih lanjut.
Contoh:
>>> 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
kelas transformers.DepthAnythingForDepthEstimation
< source >( config: DepthAnythingConfig )
Parameter
- config (DepthAnythingConfig) — Kelas konfigurasi model dengan semua parameter model. Inisialisasi dengan file konfigurasi tidak memuat bobot yang terkait dengan model, hanya konfigurasinya. Lihat metode from_pretrained() untuk memuat bobot model.
Model Depth Anything dengan kepala estimasi kedalaman di atasnya (terdiri dari 3 lapisan konvolusional) misalnya untuk KITTI, NYUv2.
Model ini mewarisi dari PreTrainedModel. Periksa dokumentasi kelas induk untuk metode generik yang diimplementasikan oleh pustaka untuk semua model (seperti mengunduh atau menyimpan, mengubah ukuran embedding input, memangkas kepala, dll.)
Model ini juga merupakan subclass dari torch.nn.Module PyTorch. Gunakan sebagai PyTorch Module biasa dan merujuk ke dokumentasi PyTorch untuk semua hal yang berkaitan dengan penggunaan dan perilaku umum.
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)
Parameter
- pixel_values (
torch.Tensordengan bentuk(batch_size, num_channels, image_size, image_size)) — Tensor yang sesuai dengan gambar input. Nilai piksel dapat diperoleh menggunakan DPTImageProcessor. Lihat DPTImageProcessor.call() untuk detailnya (processor_classmenggunakan DPTImageProcessor untuk memproses gambar). - labels (
torch.LongTensordengan bentuk(batch_size, height, width), opsional) — Peta estimasi kedalaman ground truth untuk menghitung loss. - output_attentions (
bool, opsional) — Apakah akan mengembalikan tensor attentions dari semua lapisan attention. Lihatattentionsdi bawah tensor yang dikembalikan untuk detail lebih lanjut. - output_hidden_states (
bool, opsional) — Apakah akan mengembalikan hidden states dari semua lapisan. Lihathidden_statesdi bawah tensor yang dikembalikan untuk detail lebih lanjut. - return_dict (
bool, opsional) — Apakah akan mengembalikan ModelOutput alih-alih tuple biasa.
Mengembalikan
DepthEstimatorOutput atau tuple(torch.Tensor)
A DepthEstimatorOutput atau tuple dari
torch.Tensor (jika return_dict=False dilewatkan atau ketika config.return_dict=False) yang terdiri dari berbagai
elemen tergantung pada konfigurasi (DepthAnythingConfig) dan input.
Metode forward DepthAnythingForDepthEstimation menimpa metode khusus __call__.
Meskipun resep untuk forward pass perlu didefinisikan di dalam fungsi ini, sebaiknya panggil instance
Modulesetelahnya alih-alih fungsi ini, karena yang pertama menangani langkah-langkah pra-pemrosesan dan pasca-pemrosesan, sedangkan yang kedua mengabaikannya secara diam-diam.
loss (
torch.Tensordengan bentuk(1,), opsional, dikembalikan saatlabelsdisediakan) — Loss klasifikasi (atau regresi jika config.num_labels==1).predicted_depth (
torch.Tensordengan bentuk(batch_size, height, width)) — Kedalaman yang diprediksi untuk setiap piksel.hidden_states (
tuple(torch.Tensor), opsional, dikembalikan saatoutput_hidden_states=Truedilewatkan atau saatconfig.output_hidden_states=True) — Tuple daritorch.Tensor(satu untuk output dari embeddings, jika model memiliki lapisan embedding, + satu untuk output dari setiap lapisan) dengan bentuk(batch_size, num_channels, height, width).Hidden-states model pada output setiap layer ditambah output embedding awal yang opsional.
attentions (
tuple(torch.Tensor), opsional, dikembalikan saatoutput_attentions=Truedilewatkan atau saatconfig.output_attentions=True) — Tuple daritorch.Tensor(satu untuk setiap layer) dengan bentuk(batch_size, num_heads, patch_size, sequence_length).Bobot perhatian setelah softmax perhatian, digunakan untuk menghitung rata-rata berbobot di kepala perhatian diri (self-attention).
Contoh:
>>> 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"))