Tóm tắt
Feyn giới thiệu FeyNoBg, một model tách nền tự động dựa trên BiRefNet, cùng NoBg, thư viện Python dùng để chạy và train model này. Điểm chính không chỉ là ảnh demo đẹp: nhóm công bố FeyNoBg dẫn đầu S-measure trên 4 trong 8 benchmark và nằm trong khoảng 2% so với model dẫn đầu ở 4 benchmark còn lại.
Dev nên quan tâm vì tách nền không chỉ là hiệu ứng UI. Nó nằm trong pipeline ảnh sản phẩm, moderation, tạo asset marketing, công cụ thiết kế, và bất kỳ workflow nào cần biến ảnh thật thành PNG nền trong suốt.
Vì sao tách nền khó
Một thuật toán tách nền phải dự đoán opacity cho từng pixel: nền thành trong suốt, chủ thể giữ nguyên, phần biên có thể bán trong suốt. Bài toán này cần hai kỹ năng khác nhau.
- Nhận diện foreground trong ảnh có nền rối, độ tương phản thấp hoặc vật thể bị ngụy trang.
- Vẽ biên chính xác cho tóc, lông, dây mảnh, motion blur và các vùng chuyển tiếp mềm.
Nếu data train lệch về một kỹ năng, model dễ tách được chủ thể nhưng biên xấu, hoặc giữ biên tốt nhưng bỏ sót một phần vật thể. Đây là lý do nhóm Feyn tập trung vào việc tránh “quên” kỹ năng cũ khi cải thiện model.
Cách FeyNoBg được train
Feyn chọn BiRefNet làm nền vì kiến trúc của nó tách tương đối rõ hai vai trò: localization module tìm foreground, reconstruction module phục hồi biên. Họ mở rộng stage thứ ba từ 18 lên 24 blocks, tăng kích thước model từ 222M lên 263M parameters, đồng thời giữ lại các pretrained weight tương thích.
Sau một lần train chỉ với MaskFactory, model cải thiện trên CAMO nhưng tụt trên DIS5K. Nhóm sau đó xây dataset đa dạng hơn gồm 26,1K ảnh từ 10 nguồn, bao phủ ảnh đông vật thể, camouflage, high resolution, portrait và anime, rồi train 7.000 steps.
Để tránh dataset lớn nuốt hết quá trình train, mỗi nguồn bị giới hạn tối đa 4.000 ảnh trước khi shuffle. Các annotation khác nhau cũng được quy về binary foreground mask để model học cùng một target ổn định.
Kết quả benchmark
Feyn đo bằng S-measure, thang 0 đến 1, dùng để so sánh foreground dự đoán với mask đúng. FeyNoBg dẫn đầu trên 4 benchmark và nằm trong khoảng 2% so với kết quả tốt nhất đã công bố ở 4 benchmark còn lại.
Phần đáng giá về mặt kỹ thuật là regression trên DIS5K ở lần train đầu đã chuyển thành kết quả dẫn đầu sau khi nhóm đổi mix dữ liệu. Đây là ví dụ khá gọn về chuyện model quality nhiều khi đến từ data curriculum hơn là chỉ tăng size.
NoBg Library
NoBg là Python library cung cấp interface thống nhất để chạy và train các model background removal. Thay vì mỗi model có một repo và adapter riêng, NoBg gom model, processor và loss vào cùng một flow.
Chạy FeyNoBg có thể đơn giản như sau:
from PIL import Image
from transformers import AutoModel, AutoProcessor
image = Image.open("input.png")
model = AutoModel.from_pretrained("feyninc/FeyNobg").eval()
processor = AutoProcessor.from_pretrained("feyninc/FeyNobg")
inputs = processor(images=image, return_tensors="pt")
outputs = model(pixel_values=inputs["pixel_values"])
alpha = processor.post_process_alpha_matting(outputs, target_sizes=[image.size[::-1]])[0]
alpha.save("cutout.png")
NoBg cũng hỗ trợ Hugging Face Trainer cho fine-tuning với dataset có cột image và mask. Nếu bạn đã có bộ ảnh riêng từ sản phẩm, marketplace hoặc app chỉnh ảnh, hướng này thực tế hơn nhiều so với chỉ dùng model public rồi cầu mong nó match domain.
Kết luận
FeyNoBg không làm tách nền thành bài toán đã xong vĩnh viễn. Nó cho thấy một hướng release tốt: model mở, benchmark cụ thể, giải thích rõ data mix, và có library để dev chạy hoặc train lại. Với team cần xử lý ảnh ở quy mô lớn, đây là candidate nên benchmark nội bộ sớm.