Transformers documentation
Depth Anything V2
Model ini dipublikasikan di HF papers pada 2024-06-13 dan disumbangkan ke Hugging Face Transformers pada 2024-07-05.
Depth Anything V2
Ikhtisar
Depth Anything V2 diperkenalkan dalam makalah dengan nama yang sama oleh Lihe Yang dkk. Model ini menggunakan arsitektur yang sama dengan model Depth Anything asli, tetapi memanfaatkan data sintetis dan model guru dengan kapasitas yang lebih besar untuk mencapai prediksi kedalaman yang jauh lebih halus dan robust.
Abstrak dari makalah tersebut adalah sebagai berikut:
Karya ini memperkenalkan Depth Anything V2. Tanpa mengejar teknik yang rumit, kami bertujuan untuk mengungkapkan temuan-temuan penting guna membuka jalan menuju pembangunan model estimasi kedalaman monokular yang kuat. Secara khusus, dibandingkan dengan V1, versi ini menghasilkan prediksi kedalaman yang jauh lebih halus dan lebih robust melalui tiga praktik utama: 1) mengganti semua gambar nyata berlabel dengan gambar sintetis, 2) memperbesar kapasitas model guru kami, dan 3) melatih model siswa melalui jembatan gambar nyata berlabel pseudo berskala besar. Dibandingkan dengan model-model terbaru yang dibangun di atas Stable Diffusion, model kami jauh lebih efisien (lebih dari 10x lebih cepat) dan lebih akurat. Kami menyediakan model dengan skala yang berbeda (berkisar dari 25M hingga 1,3B parameter) untuk mendukung berbagai skenario. Berkat kemampuan generalisasi yang kuat, kami melakukan fine-tuning dengan label kedalaman metrik untuk mendapatkan model kedalaman metrik kami. Selain model kami, mengingat keterbatasan keragaman dan frekuensi noise dalam set pengujian saat ini, kami membangun benchmark evaluasi yang serbaguna dengan anotasi yang presisi dan adegan yang beragam untuk memfasilitasi penelitian di masa depan.
Depth Anything overview. Taken from the original paper. Model Depth Anything disumbangkan oleh nielsr. Kode aslinya dapat ditemukan di sini.
Contoh penggunaan
Ada 2 cara utama untuk menggunakan Depth Anything V2: yaitu dengan menggunakan API pipeline, yang menyederhanakan semua kompleksitas untuk Anda, atau dengan menggunakan kelas DepthAnythingForDepthEstimation secara langsung.
API Pipeline
Pipeline memungkinkan penggunaan model dalam beberapa baris kode:
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"]Menggunakan model Anda sendiri
Jika Anda ingin melakukan pra-pemrosesan dan pasca-pemrosesan sendiri, berikut cara melakukannya:
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"))Sumber daya
Daftar sumber resmi Hugging Face dan komunitas (ditandai dengan 🌎) untuk membantu Anda memulai dengan Depth Anything.
- Panduan tugas estimasi kedalaman monokular
- Demo Depth Anything V2.
- Notebook yang menampilkan inferensi dengan DepthAnythingForDepthEstimation dapat ditemukan di sini. 🌎
- Konversi Core ML dari varian
smalluntuk digunakan pada Apple Silicon.
Jika Anda tertarik untuk mengirimkan sumber daya agar disertakan di sini, silakan buka Pull Request dan kami akan meninjaunya! Sumber daya tersebut sebaiknya mendemonstrasikan sesuatu yang baru, bukan menduplikasi sumber daya yang sudah ada.
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"))