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.
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]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)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.pngMelewati 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:
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.
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 baikmetrics/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.
from libreyolo import LibreYOLO model = LibreYOLO("LibreBiRefNetl-matte.pt")model.export(format="torchscript")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.