Estimasi kedalaman

Estimasi kedalaman memprediksi seberapa jauh setiap piksel dari kamera menggunakan satu gambar. LibreYOLO mengeksposnya sebagai task kedalaman, yang mengembalikan peta kedalaman invers relatif yang padat di kanvas gambar asli.

Definisi

depth task memprediksi satu nilai per piksel dari satu gambar RGB. LibreYOLO mendefinisikan nilai itu sebagai kedalaman terbalik relatif: lebih tinggi berarti lebih dekat ke kamera, dan angka tersebut tidak memiliki satuan metrik dan tidak memiliki skala yang berlaku di antara dua gambar. Membandingkan kedalaman antara dua piksel dari prediksi yang sama adalah bermakna; membandingkan suatu nilai dengan nilai dari gambar lain tidak demikian.

Sebuah prediksi mengisi result.depth_map, sebuah muatan DepthMap yang memegang array (H, W) pada kanvas gambar asli. .min, .max dan .mean membaca nilai terbatas, dan .normalized() mengubah skala peta ke [0, 1] untuk ditampilkan. result.boxes tetap kosong, sehingga conf, iou dan max_det tidak berpengaruh, dan save=True menulis gambar berpeta-warna dari peta tersebut alih-alih foto yang diberi anotasi. foto.

Model

Family berikut mendukung depth.

Depth Anything V2 memadukan encoder DINOv2 dengan adalah decoder DPT dan merupakan default serba guna di sini. Lisensi menentukan ukuran sama seperti akurasi: checkpoint Kecil adalah Apache-2.0 sedangkan Base dan Besar bersifat non-komersial, jadi periksa tabel checkpoint di halamannya sebelum memilih salah satu.

Depth Anything 3 mengadaptasi DA3MONO-LARGE checkpoint, sebuah transformer biasa tanpa spesialisasi arsitektur untuk kedalaman.

ZipDepth adalah tingkatan kompak: CNN yang dapat direparameterisasi yang didistilasi dari Depth Anything V2 Large, dengan checkpoint kedua yang decodernya menghindari operasi gather dan unfold untuk compiler NPU yang tidak memilikinya.

MiDaS adalah lini penelitian yang menetapkan protokol kedalaman relatif zero-shot untuk mengukur family lain. Checkpoint s dan l diunduh dari mirror LibreYOLO dengan izin MIT dari penerbit.

LibreMODUS mencapai kedalaman sebagai satu target dari model apa pun ke apa pun daripada sebagai head khusus. Ini membutuhkan modus tambahan dan akun Hugging Face Anda yang terautentikasi, dan tidak menawarkan val() maupun export().

SenseNova-Vision menghasilkan peta kedalaman sebagai gambar melalui dekode difusi, dari checkpoint 7B yang sama yang melayani enam tugas lainnya. Ini membutuhkan sensenova tambahan, dan bobotnya dibatasi untuk penggunaan non-komersial; lisensinya ada di halamannya.

Marigold V2 menambahkan adaptor kedalaman berbasis difusi dengan encoding kedalaman eksplisit.

GTR memprediksi kedalaman metrik dan mengembalikannya sebagai kedalaman invers relatif, sehingga 1 / result.depth_map.data menghasilkan kembali jarak dalam meter untuk adegan yang mirip dengan data pelatihannya. Model ini berjalan dengan paket dasar, mendukung pelatihan, dan dapat diekspor ke ONNX serta TorchScript.

Prediksi

Bobot diunduh saat pertama kali dipakai dan disimpan dalam cache lokal. Halaman model menjelaskan persyaratan autentikasi dan runtime.

Memprediksi peta kedalaman
from libreyolo import LibreYOLO, SAMPLE_IMAGE model = LibreYOLO("LibreDepthAnythingV2s-depth.pt")result = model(SAMPLE_IMAGE, save=True) depth = result.depth_mapprint(depth.data.shape)              # (H, W) di kanvas asliprint(depth.min, depth.max, depth.mean)
Bekerja dengan nilai-nilai tersebut
from libreyolo import LibreYOLO, SAMPLE_IMAGE model = LibreYOLO("LibreDepthAnythingV2s-depth.pt")result = model(SAMPLE_IMAGE) depth = result.depth_mapraw = depth.data          # semakin tinggi semakin dekat; tidak ada satuan metrik, tidak ada skalagray = depth.normalized() # diubah skala ke [0, 1] untuk visualisasiprint(raw.shape, float(gray.max()))
Alternatif yang ringkas
from libreyolo import LibreYOLO, SAMPLE_IMAGE # Kontrak task yang sama, jaringan yang jauh lebih kecil dibangun untuk runtime edge.model = LibreYOLO("LibreZipDepthb-depth.pt")result = model(SAMPLE_IMAGE) print(result.depth_map.data.shape)

Resolusi input dibatasi menurut family. Depth Anything V2 dan Depth Anything 3 memakai grid patch DINOv2, sehingga imgsz harus habis dibagi 14, yang diperiksa LibreYOLO sebelum berjalan. Results.plot() merender hasil kedalaman. Lihat prediksi untuk sumber, streaming, dan penanganan hasil.

DepthMap.encoding secara default adalah inverse_depth dan dapat berupa depth atau log_depth. Validasi menafsirkan encoding sebelum penyelarasan affine. Encoding tidak memberikan skala metrik pada prediksi relatif.

Format dataset

Validasi kedalaman memasangkan setiap gambar dengan peta kedalaman saluran tunggal yang padat yang memiliki resolusi yang sama, ditemukan dengan menggantikan direktori kedalaman ke dalam gambar jalur.

dataset/  data.yaml  images/    val/room.jpg  depths/    val/room.png
yaml
path: datasetval: images/valdepths_dir: depthsnc: 1names: {0: depth}

Peta adalah PNG atau TIF saluran tunggal, atau .npy. Nilai adalah kedalaman biasa dalam suatu satuan dataset tetap konsisten, dan 0, negatif, NaN dan piksel tak hingga ditandai sampel tidak valid yang dikecualikan dari metrik. Peta bilangan bulat dibagi oleh depth_scale, yang default ke 256.0, konvensi PNG 16-bit; float Peta .npy digunakan apa adanya. depth_stem_suffix dan depth_mask_suffix menutupi dataset yang menamai berkas kedalaman atau mask validitas mereka dengan cara yang berbeda. Lihat dataset memformat untuk kontrak penuh.

Latih

GTR adalah satu-satunya family kedalaman yang mendukung pelatihan: train() pada checkpoint -depth menjalankan resep upstream-nya, yang dijelaskan di halaman modelnya. Pada family lain, train() menimbulkan NotImplementedError. Setiap halaman model menyebut skrip konversi untuk mengubah checkpoint yang dilatih upstream menjadi format yang dapat dimuat LibreYOLO.

Validasi

val() menjalankan validator kedalaman bersama. Kedalaman relatif tidak memiliki skala absolut, jadi setiap prediksi pertama-tama disesuaikan dengan invers dari ground truth-nya dengan skala dan pergeseran kuadrat terkecil per gambar, kemudian dibalik kembali ke kedalaman. Setiap metrik di bawah dihitung per gambar pada peta yang selaras itu dan dirata-rata di seluruh dataset, menghitung hanya piksel yang ditandai dataset sebagai valid.

Validasi dan baca kunci metrik
from libreyolo import LibreYOLO model = LibreYOLO("LibreDepthAnythingV2s-depth.pt")metrics = model.val(data="my-dataset.yaml") print(metrics["metrics/abs_rel"])print(metrics["metrics/rmse"])print(metrics["metrics/delta1"])   # kebugaranprint(metrics["metrics/delta2"], metrics["metrics/delta3"])

metrics/abs_rel adalah kesalahan relatif absolut rata-rata, residu dibagi dengan kedalaman ground-truth, dan nilai yang lebih rendah lebih baik. metrics/rmse adalah akar rata-rata kuadrat kesalahan dalam satuan kedalaman dataset itu sendiri, juga lebih rendah lebih baik. metrics/delta1, metrics/delta2 dan metrics/delta3 adalah akurasi ambang: fraksi piksel valid yang rasio terhadap ground truth, diambil dalam arah manapun yang lebih besar, berada di bawah 1,25, 1,25 kuadrat dan 1,25 pangkat tiga, sehingga nilai yang lebih tinggi lebih baik. metrics/delta1 juga fitness, jumlah bacaan pemilihan best-checkpoint.

Ekspor

Model kedalaman yang diekspor dimuat kembali melalui LibreYOLO() berdasarkan akhiran berkas-nya, sehingga berkas .onnx atau .engine berperilaku seperti checkpoint dan mengembalikan .onnx yang sama, dengan depth_map menggantikan kotak.

Ekspor
from libreyolo import LibreYOLO model = LibreYOLO("LibreDepthAnythingV2s-depth.pt")model.export(format="onnx")
Jalankan berkas yang diekspor
from libreyolo import LibreYOLO, SAMPLE_IMAGE # Pabrik mengarahkan berdasarkan sufiks berkas, sehingga artefak yang diekspor dimuat# seperti checkpoint apa pun dan mengembalikan objek Results yang sama.model = LibreYOLO("LibreDepthAnythingV2s-depth.onnx")result = model(SAMPLE_IMAGE) print(result.depth_map.data.shape)

Cakupan berbeda per family, dan Depth Anything 3 menolak format apa pun di luar set yang divalidasi alih-alih mencoba konversi yang tidak divalidasi. Periksa halaman model dan matriks ekspor penuh sebelum berkomitmen ke target. LibreMODUS dan SenseNova-Vision tidak mengekspor sama sekali. Ekspor mencantumkan argumen yang diterima setiap format.

Diverifikasi dengan LibreYOLO v1.6.0.