Hey HN, I’m Shreyash from Feyn. We help companies build custom models from their data.
Today, we’re releasing FeyNoBg, an automatic background removal model. Alongside it, we're open-sourcing NoBg, the Python library we built to train and run it.
Try the model here: https://huggingface.co/spaces/feyninc/feynobg. Check out the library here: https://github.com/feyninc/nobg
Some sample outputs:
(1) Soccer Freekick: https://drive.google.com/file/d/1MZkAGLwbhNVOZ0Oi7XvpCfSEu9Q...
(2) Hair in wind: https://drive.google.com/file/d/1Odc2m0XMVH9uZtvI_KjaRbXzhLL...
(3) Bicycle with visible spokes: https://drive.google.com/file/d/1h99ahjfrtS1MFQJJgiKE2fuM3HZ...
(4) Live Demo video: https://youtu.be/b1heHPvY8BM
Background removal separates an image's subject from its surrounding. We've all tried it at some point. Often it is to reuse the subject in a different artifact. Nowadays, it is common to make chat stickers out of it. It is one of the most common but under-appreciated uses of AI. It is also surprisingly complex. Models can be easily confused by camouflage, motion blur, or fine structures like hair.
The task requires two skills. First, a model has to identify the foreground. Second, it has to trace the foreground’s boundary and estimate an opacity value for each pixel. Generally, these skills are taught with different datasets. That creates a failure point. A poor training mix can improve one skill at the expense of the other. We saw this in our controlled evaluation. A training run with just the MaskFactory dataset improved on the CAMO benchmark but regressed on DIS5K.
For FeyNoBg, we took an interpretability-first approach to training. We first studied how BiRefNet’s stages contribute to finding the foreground and reconstructing its boundary. We discovered that the third stage of it's feature extractor holds a lot of information. Both localization and boundary reconstruction depend heavily on the feature map produced here.
This led us to expand this stage from 18 to 24 blocks while preserving the pre-trained weights. We then trained FeyNoBg on 26.1K diverse examples assembled from 10 datasets. The goal was to improve foreground identification and boundary precision without sacrificing either one.
Across eight benchmarks, FeyNoBg achieves the best published score on four and comes within 2% of the leader on the rest.
Building FeyNoBg also exposed a tooling problem. Image matting models are usually released as isolated repositories with incompatible preprocessing, training, and evaluation code. We built NoBg to solve this. NoBg puts these workflows behind one Python interface. It supports BiRefNet today, with more architectures coming. We hope you build something exciting with it!
Happy to answer any questions!
How does it stack up against Adobe's model? The advantage Adobe has is there are essentially two options: (1) Select Subject (95% of the time will give you the result you want); (2) Select Person (helps in the edge cases).
The issue I have is, what is the subject? For instance, you have a person sat on a couch. You hit Select Subject. Is the subject the person, or the person plus the couch?
With Adobe's when I only want the person, most of the time Select Subject works, and when it doesn't I can pivot to Select Person, but that has its own problem because it won't include props that the subject is holding, only the person and their clothing.
Your question touches on excellent points.
> what is the subject?
FeyNoBg is an "automatic" model. It automatically detects foreground elements and segments the image. Most of the time, this includes all foreground elements. As you can see in the freekick example (https://drive.google.com/file/d/1MZkAGLwbhNVOZ0Oi7XvpCfSEu9Q...), the model output includes the ball, Messi, and the Liverpool defenders. In your example, FeyNoBg will segment around the person plus the couch.
> I only want the person [including props]
The alternative to automatic models are prompt models and those serve the exact use case you're describing. These allow you to specify the foreground element to include. Everything else is removed. That's the next step for FeyNoBg, converting it from an automatic to a prompt model. Now, answering your question:
> How does it stack up against Adobe's model?
We're better on automatic background removal. Support for selecting a subset of foreground elements is coming soon
I'd be very interested in that, too.
Why extend an MIT licensed model's weights (BiRefNet) and release it under a cc-by-nc-4.0 license?
Btw if you do need a permissively licensed model for this task, there are lots out there, e.g.:
https://github.com/KupynOrest/s3od
This pertains to the larger open source licensing discussions that have been happening (as I'm sure you've seen too).
We've released projects under the MIT license before, most notably https://github.com/feyninc/chonkie. While we're not trying to directly monetize on this work, credit goes a long way and helps in other operations.
Recently, attributed usage is shrinking. To be clear, this is not a shrinkage in actual use of our software, just how many people acknowledge that they rely on it.
cc-by-nc is a protection against that. We've been very honest about our work being on top of BiRefNet as we want to extend the original creators the same courtesy. I have no issues if individuals fork/finetune/or otherwise build on top of any open source projects we release, irrespective of license. At minimum, we want acknowledgment if a company chooses to use our software in production.
Yep, nobody wants to adopt models with this license because it opens legal questions most users, whether professional or non-professional, don't want to muddy their work with.
I love seeing this. Background removal is such a core task used in so many systems, I group it in with speech to text in terms of importance.
I love seeing maturity getting pushed in this space. Congratulations to you and the team!
How did you assemble your training dataset, especially since you mention some of the considerations with different training mixes in your controlled eval?
This looks great! What are the resolution limits? From the GitHub readme I saw mention of 1024x1024, but I was able to process an image 1920x2880 just fine. I didn't see any really obvious scaling artefacts, so is there something clever happening behind the scenes?
We resize the opacity mask. That tends to scale better
This is awesome, I just bookmarked your tool. Ive been looking for something simple to use, since Its not easy to use the segment anything tool anymore. Thanks!
Thanks! Feel free to open an issue if you run into any issues with the outputs
I was so impressed with remove.bg in Dec 2018; awesome to see the progress in this area, so cool.
very cool! I've been having a fun time porting non-LLM models to iOS/Android (recently had some success with making Bonsai's image generation model run on Android) - have you attempted to run any of the workflows on a mobile device at all? Mind if I try?
Please do try, I would love nothing more!
All I ask is you make a PR to https://github.com/feyninc/nobg with your results. We'd love to see what you make, contribute in any way we can, and share onwards.
Of course, would be happy to!
[flagged]
Can you please not post AI-generated or AI-edited comments to HN? It's not allowed here - see https://news.ycombinator.com/newsguidelines.html#generated and https://news.ycombinator.com/item?id=47340079.
Of course, it's impossible to know for sure what was LLM processed or not, but some of your posts (like this one) have been getting classified that way.
The 4K cap was a judgement call, we didn't want one source to dominate. The license is cc-by-nc, just added it to the hugging face