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
Enam keluarga melayani 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 kerja yang menetapkan zero-shot yang digunakan untuk mengukur keluarga lain. Ini adalah satu kedalaman family LibreYOLO tidak memublikasikan ulang: permintaan checkpoint mengunduh aset resmi dari rilis GitHub penulisnya dan memeriksa SHA-256 yang dipin.
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.
Prediksi
Bobot diunduh dari Hugging Face pada penggunaan pertama dan disimpan secara lokal dalam cache, kecuali untuk dua keluarga yang disebutkan di atas.
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)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()))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 sesuai family. Depth Anything V2 dan Depth Anything
3 dibangun di atas grid patch DINOv2, jadi imgsz harus dapat dibagi habis dengan 14, yang
LibreYOLO periksa sebelum dijalankan. Results.plot() tidak mencakup task ini; ini
didefinisikan hanya untuk normal permukaan dan tepi. Lihat prediksi
untuk sumber, streaming, dan penanganan hasil.
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.pngpath: dataset
val: images/val
depths_dir: depths
nc: 1
names: {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
Tidak ada kedalaman family di LibreYOLO yang memiliki implementasi pelatihan: train() meningkatkan
NotImplementedError pada keenamnya. Setiap halaman model menamai skrip konversi
yang mengubah checkpoint yang dilatih di hulu menjadi satu LibreYOLO dapat memuat.
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.
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.
from libreyolo import LibreYOLO model = LibreYOLO("LibreDepthAnythingV2s-depth.pt")model.export(format="onnx")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.