Penghapusan latar belakang

Penghapusan latar belakang memisahkan subjek dari segala sesuatu di belakangnya. LibreYOLO menampilkannya sebagai matte task, yang mengembalikan nilai alpha lembut per piksel daripada mask depan keras.

Definisi

matte task memprediksi satu nilai alpha per piksel dari satu gambar RGB: 1 sepenuhnya latar depan dan 0 sepenuhnya latar belakang. Nilainya bersifat kontinu daripada daripada biner, yang merupakan inti dari task. Sebuah mask keras hanya satu ambang saja, pada 0,5, sementara matte lembut selain itu juga memberikan coverage parsial pada rambut, bulu dan tepi yang buram karena gerakan yang dibuang oleh topeng biner.

Sebuah prediksi mengisi result.matte, sebuah payload Matte yang memuat (H, W) array float32 di [0, 1] pada kanvas gambar asli, dapat diakses sebagai NumPy melalui .array. result.cutout() menyusun gambar sumber dengan itu alpha menjadi array RGBA uint8 (H, W, 4), dan result.save(path) menulis hal yang sama ke PNG dengan latar belakang transparan. result.boxes tetap kosong, jadi conf, iou dan max_det tidak berpengaruh.

Model

BiRefNet dan FeyNobg memakai jalur forward yang sama.

BiRefNet adalah jaringan referensi bilateral task adalah] dibangun di sekitar, dipublikasikan di sini sebagai satu tingkat Swin-L checkpoint.

FeyNobg adalah varian yang diperdalam dari Feyn Inc.: BiRefNet's] arsitektur dengan tahap Swin ketiga yang dikembangkan dari 18 menjadi 24 blok, kemudian dilatih ulang. LibreYOLO menggunakan kembali jalur maju BiRefNet, pra-pemrosesan dan output single-logit untuk itu, jadi prediksi, validasi dan penanganan checkpoint berperilaku identik; bobot dan identitas family adalah milik FeyNobg sendiri.

Keduanya memiliki lisensi dengan bobot yang berbeda. Keduanya tercantum di halaman model, dan lisensi di repositori Hugging Face dari checkpoint tertentu adalah yang berwibawa.

BEN2 menambahkan penghapusan latar belakang dengan ukuran tetap 1024. ViTMatte menerima gambar dan trimap= tiga tingkat yang menandai piksel latar belakang, tidak diketahui, dan latar depan.

WeVisOne-VL diberi prompt teks: LibreVLM("wevisone-vl", names=["person"], task="matte") mengembalikan gabungan alpha matte dari setiap instance yang cocok dengan frasa itu. Model ini adalah model vision-language yang memerlukan extra vlm, dan val() serta export()-nya memunculkan error.

Prediksi

Bobot diunduh dari Hugging Face saat penggunaan pertama dan disimpan secara lokal.

Prediksi matte
from libreyolo import LibreYOLO, SAMPLE_IMAGE model = LibreYOLO("LibreBiRefNetl-matte.pt")result = model(SAMPLE_IMAGE) matte = result.matteprint(matte.array.shape, matte.array.dtype)   # (H, W) float32 di [0, 1]
Tulis PNG transparan
from libreyolo import LibreYOLO, SAMPLE_IMAGE model = LibreYOLO("LibreBiRefNetl-matte.pt")result = model(SAMPLE_IMAGE) # save() mengkomposit sumber dengan matte sebagai saluran alpha.result.save("subject.png") rgba = result.cutout()   # array uint8 (H, W, 4) yang sama di memoriprint(rgba.shape)
Gabungkan ke latar belakang baru
import numpy as npfrom libreyolo import LibreYOLO, SAMPLE_IMAGE model = LibreYOLO("LibreBiRefNetl-matte.pt")result = model(SAMPLE_IMAGE) rgba = result.cutout()alpha = rgba[..., 3:4].astype(np.float32) / 255.0backdrop = np.full_like(rgba[..., :3], 255)          # putihcomposited = (rgba[..., :3] * alpha + backdrop * (1 - alpha)).astype(np.uint8)print(composited.shape)

BiRefNet dan FeyNobg berjalan pada kanvas asli tetap 1024x1024 dan mengubah ukuran matte kembali ke gambar asli. Resolusi lain tidak didukung, karena tabel posisi relatif backbone Swin terikat pada ukuran tersebut; ketidakcocokan menyebabkan interpolasi yang buruk, bukan galat. Results.save() memakai gambar sumber untuk potongan matte, yang dimuat ulang dari Results.path kecuali Anda memberikan gambar. Lihat prediksi untuk sumber, streaming, dan penanganan hasil.

Results.save() menulis potongan matte sebagai RGBA. plot() merender gambar untuk diperiksa. BEN2 mendukung prediksi native dalam batch; ViTMatte memerlukan panduan untuk satu gambar.

Format dataset

Validasi matte memadankan setiap gambar RGB dengan alpha ground-truth satu saluran matte yang memiliki stem yang sama, dimana 0 adalah latar belakang dan 255 adalah latar depan.

my-matte-dataset/  images/    subject.jpg  mattes/    subject.png

Melewati root itu sebagai data= sudah cukup: direktori matte terdeteksi secara otomatis di antara mattes/, matte/, gt/, masks/, mask/ dan alpha/. dataset YAML adalah alternatifnya, dengan path plus penamaan val_images dan val_mattes direktori relatif terhadapnya:

yaml
path: my-matte-datasetval_images: imagesval_mattes: mattesnc: 1names: {0: matte}

nc dan names adalah placeholder skema; model matte mengembalikan Results.matte, bukan deteksi. Nilai matte dibaca sebagai alpha di [0, 1] dengan membagi dengan 255, dan sebuah matte yang bentuknya berbeda dari kanvas prediksi diubah ukurannya secara bilinear untuk mencocokkan. Lihat dataset formats untuk selengkapnya kontrak.

Kereta

Family matte ini tidak memiliki implementasi pelatihan. Dukungan ekspor berbeda menurut family; ViTMatte tidak mendukung ekspor. Setiap halaman model menyebut proyek upstream yang menyediakan kode pelatihan dan skrip konversi untuk membawa checkpoint kembali.

Validasi

val() menggerakkan predict milik model itu sendiri, jadi validasi menggunakan family yang sama persis pra-pemrosesan, dan kedua metrik dihitung pada kanvas gambar asli.

Validasi dan baca kunci metrik
from libreyolo import LibreYOLO model = LibreYOLO("LibreBiRefNetl-matte.pt") # Sebuah direktori yang memuat direktori gambar/ dan matte dapat digunakan sebagai pengganti# sebuah dataset YAML.metrics = model.val(data="my-matte-dataset/") print(metrics["metrics/MAE"])        # lebih rendah lebih baikprint(metrics["metrics/Smeasure"])   # kebugaran, lebih tinggi lebih baik

metrics/MAE adalah kesalahan absolut rata-rata terhadap alpha yang sebenarnya, dalam [0, 1], dan semakin rendah semakin baik. metrics/Smeasure adalah S-measure dari Fan et al. (ICCV 2017), sebuah kesamaan struktural yang menilai ketepatan bentuk subjek dan lubangnya, yang tidak bisa hanya dinilai dengan rata-rata per-piksel; semakin tinggi semakin baik. S-measure juga fitness, jumlah pembacaan terbaik-checkpoint. Tidak ada metrik yang bergantung pada resolusi.

Ekspor

Model matte yang diekspor dapat dimuat kembali melalui LibreYOLO() berdasarkan akhiran filenya, sehingga artefak berperilaku seperti checkpoint dan mengembalikan Results yang sama.

Ekspor
from libreyolo import LibreYOLO model = LibreYOLO("LibreBiRefNetl-matte.pt")model.export(format="torchscript")
Jalankan berkas yang diekspor
from libreyolo import LibreYOLO, SAMPLE_IMAGE # Pabrik menentukan rute berdasarkan akhiran berkas, sehingga artefak yang diekspor dapat dimuat# seperti checkpoint lainnya dan mengembalikan objek Results yang sama.model = LibreYOLO("LibreBiRefNetl-matte.torchscript")result = model(SAMPLE_IMAGE) print(result.matte.array.shape)

TorchScript adalah jalur yang tervalidasi untuk task ini. Konversi ONNX berjalan tetapi memiliki belum melewati batang paritas yang sama, dan format yang tersisa tidak tersedia. Cakupan per format ada di BiRefNet dan halaman FeyNobg dan di matriks ekspor penuh.

Diverifikasi dengan LibreYOLO v1.6.0.