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
Dua keluarga melayani matte, dan mereka berbagi jalur maju.
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.
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)Kedua keluarga berjalan pada kanvas asli tetap 1024x1024 dan mengubah ukuran matte kembali
ke gambar asli. Resolusi yang berbeda tidak didukung, karena Swin
Tabel posisi relatif backbone terikat pada ukuran itu, dan ketidaksesuaian
menginterpolasinya dengan buruk daripada meningkatkan. Results.save() didefinisikan untuk
hanya matte results dan membutuhkan gambar sumber, yang dimuat ulang darinya
Results.path kecuali Anda melewati satu. Lihat prediksi untuk sumber,
streaming dan penanganan hasil.
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-dataset
val_images: images
val_mattes: mattes
nc: 1
names: {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
Tidak ada matte family yang memiliki implementasi pelatihan: train() memunculkan
NotImplementedError di kedua-duanya, dan dukungan matte mencakup prediksi, validasi
dan hanya ekspor. Setiap halaman model menyebutkan proyek hulu yang mengirimkan pelatihan
kode dan skrip konversi yang mengembalikan checkpoint.
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.