Show HN: FeyNoBg – 自动背景移除模型及训练库
摘要
FeyNoBg 是一款最先进的自动背景移除模型,在八个基准测试中的四个上取得了最高分,其余四个与领先者差距在2%以内。配套的 NoBg 库是开源的,可用于运行或训练自定义模型。
大家好,我是Feyn的Shreyash。我们帮助公司利用其数据构建定制模型。<p>今天,我们发布了 FeyNoBg,一款自动背景移除模型。同时,我们开源了用于训练和运行该模型的 Python 库 NoBg。<p>在此处试用模型:<a href="https://huggingface.co/spaces/feyninc/feynobg" rel="nofollow">https://huggingface.co/spaces/feyninc/feynobg</a>。在此处查看库:<a href="https://github.com/feyninc/nobg" rel="nofollow">https://github.com/feyninc/nobg</a><p>一些示例输出:<p>(1) 足球任意球:<a href="https://drive.google.com/file/d/1MZkAGLwbhNVOZ0Oi7XvpCfSEu9QPCbwj/view?usp=sharing" rel="nofollow">https://drive.google.com/file/d/1MZkAGLwbhNVOZ0Oi7XvpCfSEu9Q...</a><p>(2) 风中头发:<a href="https://drive.google.com/file/d/1Odc2m0XMVH9uZtvI_KjaRbXzhLLdGK8Z/view?usp=sharing" rel="nofollow">https://drive.google.com/file/d/1Odc2m0XMVH9uZtvI_KjaRbXzhLL...</a><p>(3) 可见辐条的自行车:<a href="https://drive.google.com/file/d/1h99ahjfrtS1MFQJJgiKE2fuM3HZyQ-QJ/view?usp=sharing" rel="nofollow">https://drive.google.com/file/d/1h99ahjfrtS1MFQJJgiKE2fuM3HZ...</a><p>(4) 实时演示视频:<a href="https://youtu.be/b1heHPvY8BM" rel="nofollow">https://youtu.be/b1heHPvY8BM</a><p>背景移除将图像主体从背景中分离出来。我们多数人都尝试过。通常是为了将主体复用到其他作品中。如今,用它制作聊天贴纸很常见。这是人工智能最常见的应用之一,但却常被低估。它其实也出奇地复杂。模型很容易被伪装、运动模糊或头发等精细结构所迷惑。<p>该任务需要两项技能。首先,模型必须识别前景。其次,它必须追踪前景的边界,并估算每个像素的不透明度值。通常,这些技能是通过不同的数据集训练的。这就会造成一个薄弱点。糟糕的训练组合可能会在提升一项技能的同时牺牲另一项。我们在受控评估中发现了这一点。仅使用 MaskFactory 数据集的训练在 CAMO 基准上表现提升,但在 DIS5K 上却退步了。<p>对于 FeyNoBg,我们采用了一种以可解释性为先的训练方法。我们首先研究了 BiRefNet 的各个阶段如何贡献于前景发现和边界重建。我们发现其特征提取器的第三阶段包含了大量信息。定位和边界重建都高度依赖于这里生成的特征图。<p>这促使我们将该阶段从18个块扩展到24个块,同时保留了预训练权重。然后我们在从10个数据集中收集的2.61万个多样化示例上训练了FeyNoBg。目标是同时提升前景识别和边界精度,而不牺牲任何一方。<p>在八个基准测试中,FeyNoBg 在四个上取得了已公布的最佳分数,其余四个与领先者差距在2%以内。<p>构建FeyNoBg也暴露了工具方面的问题。图像抠图模型通常以孤立的仓库形式发布,包含不兼容的预处理、训练和评估代码。我们构建了NoBg来解决这个问题。NoBg将这些工作流程整合到一个Python接口中。目前它支持BiRefNet,未来将支持更多架构。希望你能用它构建出令人兴奋的作品!<p>欢迎提问!
查看缓存全文
缓存时间: 2026/07/27 19:46
# FeyNoBg:一款用于背景移除的SOTA模型 — Feyn
来源:https://usefeyn.com/blog/feynobg/
三辆共享单车停放在繁忙的城市人行道上
原始图像背景移除后
我们推出了 FeyNoBg,一款用于自动背景移除的顶级模型。**在八个基准测试中,它在四个测试上取得了已发表的最佳 S-measure,并在剩余测试中与领先者差距在 2% 以内。**
| 基准测试 | **UHRSD-TE** |
| --- | --- |
| FeyNoBg | **0.981** |
| BiRefNet | **0.957** |
| 描述 | 测试超高分辨率图像(包括 4K 和 8K 场景)中的显著目标掩码。 |
我们还发布了 NoBg,这是我们用来训练模型的库。使用 NoBg 运行 FeyNoBg,或训练你自己的背景移除模型。
两者均为开源。在 Hugging Face (https://huggingface.co/feyninc/FeyNobg) 下载 FeyNoBg,或在 GitHub (https://github.com/feyninc/nobg) 上使用 NoBg 进行构建。
## 移除需要组合能力
在计算机中,图像以像素网格的形式存储。背景移除算法的目标是为每个像素预测一个不透明度值,使背景像素变为透明,前景像素保持不透明,边界像素变为半透明。
生成这种不透明度图需要两种技能。首先,模型必须将前景与背景分开。当主体位于纯色背景下时,通过比较颜色即可轻松完成。然而,在低对比度、拥挤或伪装的图像中,模型必须利用形状、纹理和上下文来识别哪些像素构成主体。
其次,模型必须追踪前景的边界。在简单图像中,颜色或纹理的急剧变化提供了强烈的边缘信号。但真实的边界要复杂得多。头发、毛发、细线和运动模糊会使前景和背景元素混合在一起。模型必须测量边缘像素属于主体的程度,并相应设置其不透明度。这被称为图像抠图。
通常,这些技能是通过不同类型的数据集来训练的。这会造成一个缺陷。训练集的混合不当会产生不平衡的模型,其中一种技能的提升以牺牲另一种技能为代价。输出要么遗漏主体部分,要么缺少干净的边缘。
真实图像是复杂的,需要在前景识别和边界精度上都保持灵巧。这是我们训练 FeyNoBg 时的关键洞察。
## 创造学习空间
我们选择 BiRefNet 作为 FeyNoBg 的基础,因为它的架构已经符合我们的目标。BiRefNet 赋予模型的两个部分互补的责任。其定位模块负责寻找前景,而重建模块负责追踪主体的边界。
模型首先让输入图像通过一个四阶段运行的特征提取器。早期阶段捕获局部细节。后期阶段将收集到的细节组合成更广泛的图像表示,称为特征图。定位模块利用这些图来寻找主体,而重建模块则利用它们来恢复边界。
特征提取器的第三阶段任务最为艰巨。它看到了足够多的图像来推理整个主体,同时保留表示其形状所需的空间细节。定位和边界重建都严重依赖于此阶段生成的特征图。
考虑到这一阶段包含丰富的图像表示,我们预期在这里增加深度将有助于模型更好地保留信息,从而提升性能。因此,我们将第三阶段从 18 个块扩展到 24 个块。这使得模型参数从 2.22 亿适度增加到 2.63 亿。
| 原始模型 | BiRefNet | 2.22 亿参数 |
| --- | --- | --- |
| `depths=[2, 2, 18, 2]` |
| 扩展后模型 | FeyNoBg | 2.63 亿参数 |
| `depths=[2, 2, 24, 2]` |
在扩展过程中,我们保留了所有兼容的预训练权重。只有六个新块是从头开始训练的。这使得 FeyNoBg 在获得额外学习能力的同时,不会忘记基础模型已经掌握的知识。
有了更多的学习空间,是时候教老模型一些新技巧了。
## 多样化数据的力量
我们的第一次训练运行使用了 MaskFactory,这是一个为精确前景分割而创建的合成图像与掩码对集合。这是本次运行使用的唯一数据集。
如果我们的直觉正确,所得到的模型会在某些基准测试上提升,而在另一些上退步。这正是我们在控制评估中看到的情况:模型在 CAMO 基准测试上有所提升,但在 DIS5K 上退步了。
接下来,我们专注于构建一个更多样化的数据集。我们从 10 个数据集中汇集了 26,100 张图像,涵盖拥挤场景、伪装、高分辨率主体、肖像和动漫,然后训练了 7,000 步。我们的目标是让模型在训练过程中接触尽可能多的场景。
| 数据集 | **S3OD** |
| --- | --- |
| 新增内容 | 旨在帮助模型超越熟悉图像集合进行泛化的合成场景。 |
在最终运行之前,我们修订了最初的混合数据集。我们添加了来自 S3OD 的 4,000 张图像,将动漫减少到 500 张,并移除了 ThinObject-5K、HIM-2K 和 COIFT。这使我们保留了那些提供最有用、最一致训练样本的来源。
组合这些数据集引入了两个问题。首先,它们在大小上差异很大。如果没有限制,最大的来源将主导训练,导致我们之前看到的专业分化。因此,我们将每个来源的上限设定为 4,000 张图像,然后将它们混合在一起。
其次,这些数据集使用了不同的标注。分割数据集提供前景掩码,而抠图数据集提供 Alpha 遮罩。我们将两者都转换为二进制前景掩码,以便每张图像共享相同的训练目标。
因此,抠图数据集贡献的是轮廓清晰的主体,而非软透明度监督。
这为我们提供了一个一致的训练集,其中包含了经过精心设计的多样化图像。现在,我们的模型可以在更广泛的场景中学习识别和勾勒前景。
## 结果
为了了解性能,我们记录了 S-measure。S-measure 评分范围从 0 到 1,将预测的前景与正确的掩码进行比较。它奖励完整的主体和忠实于原形的形状。分数越高越好。
我们将 FeyNoBg 的 S-measure 与八个基准测试中已发表的最佳结果进行了比较,这些基准测试涵盖了伪装、低对比度场景、精细结构、高分辨率图像和视频。FeyNoBg 在四个测试上领先,并在其余四个测试中与领先者差距在 2% 以内。
| UHRSD-TE | HRSOD-TE | DIS5K | DAVIS-S |
| --- | --- | --- | --- |
| DUTS-TE | COD10K-TE | DUT-OMRON | CAMO-TE |
值得注意的是,更广泛的训练集将我们在 DIS5K 上的退步转变为了一个领先基准测试的结果。
## NoBg 库
图像抠图模型通常以孤立的代码仓库形式发布。比较模型或微调一个模型需要编写多个适配器,然后才能开始实验。这种设置很快就会变得混乱且令人沮丧,从而难以做好工作。
为了解决这个问题,我们创建了 NoBg。它是一个 Python 库,为运行和训练背景移除模型提供了一致的接口。我们自己也用它来训练 FeyNoBg。
为了鼓励该领域的进一步发展,我们将 NoBg 开源。你可以用它来运行 FeyNoBg,或训练你自己的模型。
### 高性能且便捷
一致的接口不应以牺牲性能为代价。我们分别以批大小 1、2 和 4 将 NoBg 的 BiRefNet 与原始实现进行了比较。NoBg 在每个批大小下都实现了更高的吞吐量、更低的延迟和更低的 GPU 峰值内存。
### 运行 FeyNoBg
NoBg 在推理前会调整图像大小并进行归一化。然后它将模型输出转换为原始尺寸的 Alpha 遮罩,并将抠图保存为透明 PNG。
```
import torch
from loadimg import load_img
from nobg import AutoModel, AutoProcessor
model = AutoModel.from_pretrained("feyninc/FeyNobg").eval()
processor = AutoProcessor.from_pretrained("feyninc/FeyNobg")
image = load_img("input.jpg").convert("RGB")
inputs = processor(image, return_tensors="pt")
with torch.inference_mode():
outputs = model(pixel_values=inputs["pixel_values"])
alpha = processor.post_process_alpha_matting(
outputs,
target_sizes=[(image.height, image.width)],
)[0]
processor.cutout(image, alpha).save("output.png")
```
### 训练你自己的模型
NoBg 提供了训练 BiRefNet 所需的模型、处理器和损失函数,只需使用你自己的图像和掩码对即可。它还能与 Hugging Face 的 `Trainer` 配合使用,后者负责训练循环、检查点和评估。给定一个包含 `image` 和 `mask` 列的数据集,训练过程如下:
```
from nobg import AutoModel, AutoProcessor
from transformers import Trainer, TrainingArguments
model = AutoModel.from_pretrained("feyninc/FeyNobg")
processor = AutoProcessor.from_pretrained("feyninc/FeyNobg")
def collate(examples):
batch = processor(
images=[example["image"] for example in examples],
segmentation_maps=[
example["mask"].convert("L") for example in examples
],
return_tensors="pt",
)
return {
"pixel_values": batch["pixel_values"],
"labels": batch["labels"],
}
trainer = Trainer(
model=model,
args=TrainingArguments(
output_dir="outputs",
learning_rate=2e-5,
),
train_dataset=dataset,
data_collator=collate,
)
trainer.train()
```
## 开始使用
从 Hugging Face (https://huggingface.co/feyninc/FeyNobg) 下载 FeyNoBg,并使用 NoBg 运行该模型。在我们的 Hugging Face Space (https://huggingface.co/spaces/feyninc/feynobg) 中在线尝试。
使用 `pip install nobg` 安装 NoBg。你也可以在 GitHub (https://github.com/feyninc/nobg) 上找到它。
FeyNoBg 和 NoBg 由 Feyn 构建。在 X (https://usefeyn.com/blog/feynobg/x.com/feynai)、GitHub (https://github.com/feyninc) 或 LinkedIn (https://www.linkedin.com/company/107081181/) 上找到我们。
## 致谢
FeyNoBg 建立在 BiRefNet 以及 Peng Zheng、Dehong Gao、Deng-Ping Fan、Li Liu、Jorma Laaksonen、Wanli Ouyang 和 Nicu Sebe 的工作之上。我们还感谢发布本工作中使用的模型、代码和数据集的团队。
参考文献
[1] Zheng 等人. "Bilateral Reference for High-Resolution Dichotomous Image Segmentation." *CAAI Artificial Intelligence Research* 3 (2024). *arXiv:2401.03407*.
[2] Sargsyan 和 Navasardyan. "FlowDIS: Language-Guided Dichotomous Image Segmentation with Flow Matching." *CVPR* 2026. *arXiv:2605.05077*.
[3] Kupyn, Kataoka 和 Rupprecht. "S3OD: Towards Generalizable Salient Object Detection with Synthetic Data." *arXiv:2510.21605* (2025).
引用本文
```
@note{feynobg2026,
title = {FeyNoBg: Better Background Removal Without Forgetting},
author = {Hichri, Hafedh and Nigam, Shreyash and Feyn Research},
year = {2026},
venue = {Feyn Field Notes}
}
```
相似文章
fottoai/remove-bg-2
fottoai/remove-bg-2 是一个开源的背景去除模型,可在 Replicate 上使用,运行在 A100 GPU 上,推理时间约2秒,每次运行费用为$0.0018。
851-labs/background-remover
851-labs/background-remover 是一个开源AI模型,用于移除图像背景。可在Replicate上使用,在Nvidia T4 GPU上推理成本低且速度快。
Show HN: MultiMatte,一个可提示的图像背景移除模型
MultiMatte 是一个可提示的图像背景移除模型,基于 SAM 3 使用 LoRA 进行微调,通过输出 alpha 遮罩来更好地处理模糊边界,在基准测试中实现了更高的准确性。
lucataco/remove-bg
一个用于去除图像背景的AI模型,采用tracer_b7神经网络,可在Replicate上使用,代码开源。
开源背景移除应用及MCP
作者开源了一个基于开源技术的背景移除工具,现在也可作为无头MCP服务供AI代理使用。