跳到正文
北京时间
原文
Hacker News 热门(buzzing.cc 中文翻译)· snyy·· 2026-07-28精选AI 评分71

FeyNoBg 发布:开源自动背景去除模型,在四项基准上达到 SOTA

Show HN: FeyNoBg – 自动背景去除模型及训练库

AI 导读

Feyn Labs 推出 FeyNoBg,一个用于自动背景去除的 SOTA 模型。它在八个基准测试中的四项上取得最佳 S-measure 分数,其余四项与领先者差距在 2% 以内。该模型基于 BiRefNet 架构,参数量从 222M 扩展至 263M,同时开源了训练库 NoBg,模型和代码分别可在 Hugging Face 和 GitHub 获取。

推荐理由

FeyNoBg 在多个背景去除基准上达到或接近最佳,还开源了训练库,做图像处理的产品可以直接集成,是个实在的工具发布。

正文 · AI 翻译

FeyNoBg: A SOTA Model For Background Removal

研究 · 实地笔记

FeyNoBg:背景去除的 SOTA 模型

Three rental bicycles parked on a busy city sidewalk 原图 已去除背景

我们推出 FeyNoBg,一个用于自动背景去除的 SOTA 模型。在八项基准测试中,它在四项上取得了已发表的最佳 S-measure,其余几项也都在领先者 2% 以内。

基准测试UHRSD-TE

FeyNoBg0.981

BiRefNet0.957

Description

在超高分辨率图像中测试显著目标掩码,包括 4K 和 8K 场景。

我们还发布了 NoBg,这是我们用来训练模型的库。使用 NoBg 可以运行 FeyNoBg,或训练你自己的背景去除模型。

两者均为开源。在 Hugging Face 上下载 FeyNoBg,或在 GitHub 上使用 NoBg 构建。

去除需要组合

在计算机中,图像以像素网格的形式存储。背景去除算法的目标是为每个像素预测一个不透明度值,使背景像素变为透明,前景像素保持不透明,而边界像素则呈现半透明。

生成这张不透明度图需要两项技能。首先,模型必须将前景与背景分离。当主体站在纯色背景前时,通过比较颜色就能轻松完成。然而,在低对比度、拥挤或具有伪装效果的图像中,模型必须利用形状、纹理和上下文来识别哪些像素构成了主体。

其次,模型必须勾勒出前景的边界。在简单图像中,颜色或纹理的急剧变化提供了强烈的边缘信号。但真实的边界要困难得多。头发、毛发、细线和运动模糊会将前景与背景元素混合在一起。模型必须测量边缘像素中有多少属于主体,并据此设定其不透明度。这被称为图像抠图。

通常,这两项技能是用不同类型的专项数据来训练的。这就产生了一个失败点。糟糕的训练数据配比可能产生失衡的模型,其中一项技能的提升以另一项技能的退步为代价。输出结果要么遗漏主体的部分区域,要么缺乏干净的边缘。

真实图像是复杂的,需要在前景识别和边界精度两方面都具备娴熟的能力。这是我们在训练 FeyNoBg 时的核心洞察。

创造学习空间

我们选择 BiRefNet 作为 FeyNoBg 的基础,因为它的架构已经与我们的目标相匹配。BiRefNet 让模型的两个部分承担互补的职责。其定位模块负责找到前景,而重建模块则负责勾勒主体的边界。

该模型首先将输入图像送入一个分四个阶段运行的特征提取器。早期阶段捕捉局部细节。后期阶段将收集到的细节组合成更宏观的图像表示,称为特征图。定位模块利用这些特征图来找到主体,而重建模块则利用它们来恢复主体的边界。

特征提取器的第三个阶段承担着最艰巨的任务。它看到的图像信息足以对整个主体进行推理,同时又保留了表示其形状所需的空间细节。定位和边界重建都高度依赖这一阶段生成的特征图。

鉴于这一阶段所持有的丰富图像表示,我们原本预期在此处增加更多深度会有助于模型更好地保留信息,从而提升性能。因此,我们将第三个阶段从 18 个块扩展到 24 个块。这使模型从 222M 参数小幅增长到 263M。

原始BiRefNet222M 参数depths=[2, 2, 18, 2]

扩展后的模型FeyNoBg263M 参数depths=[2, 2, 24, 2]

我们在扩展过程中保留了所有兼容的预训练权重。只有六个新块是从未训练状态开始的。这让 FeyNoBg 获得了额外的容量来学习新技能,而不会遗忘基础模型已经掌握的知识。

既然有了学习更多内容的空间,是时候教一个老模型一些新把戏了。

多样数据的力量

我们的第一次训练使用的是 MaskFactory,这是一个为精确前景分割而创建的合成图像与掩码配对集合。这是该次训练中唯一使用的数据集。

如果我们的直觉是正确的,那么得到的模型会在某些基准上有所提升,而在另一些基准上出现退步。这正是我们在受控评估中看到的结果:模型在 CAMO 基准上有所提升,但在 DIS5K 上出现了退步。

接下来,我们专注于构建一个更加多样化的数据集。我们从 10 个数据集中汇集了 26.1K 张图像,涵盖拥挤场景、伪装、高分辨率主体、人像和动漫,然后训练了 7,000 步。我们的目标是在训练期间让模型接触到尽可能多的场景。

训练混合来自十个来源的 26.1K 个样本

数据集S3OD

What it added

旨在帮助模型超越熟悉图像集合进行泛化的合成场景。

我们在最终运行前修改了最初的混合数据集。我们从 S3OD 中加入了 4,000 张图像,将 Anime 减少到 500 张,并移除了 ThinObject-5K、HIM-2K 和 COIFT。这样我们就保留了那些贡献了最有用、最一致训练样本的来源。

将这些数据集组合起来引入了两个问题。首先,它们的规模差异极大。如果不加限制,最大的来源会在训练中占据主导地位,并导致我们之前看到的同样的专门化问题。因此,我们将每个来源的上限设为 4,000 张图像,然后将它们混合在一起。

其次,这些数据集使用了不同的标注。分割数据集提供前景掩码,而抠图数据集提供 alpha matte。我们将两者都转换为二值前景掩码,这样每张图像都共享相同的训练目标。

因此,抠图数据集贡献的是精确勾勒轮廓的主体,而不是软透明度监督。

这为我们提供了一个一致的训练集,其中的图像刻意保持了多样性。我们的模型现在可以学会在更广泛的场景中识别并勾勒前景。

结果

为了了解性能,我们记录了 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,或训练你自己的模型。

高性能且便捷

一致的接口不应以牺牲性能为代价。我们在 batch size 为 1、2 和 4 的情况下,将 NoBg 的 BiRefNet 与原始实现进行了对比。在每一种 batch size 下,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 下载 FeyNoBg,并用 NoBg 运行该模型。在我们的 Hugging Face Space 中在线试用。

使用 pip install nobg 安装 NoBg。你也可以在 GitHub 上找到它。

FeyNoBg 和 NoBg 由 Feyn 构建。在 X、GitHub 或 LinkedIn 上找到我们。

致谢

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:迈向基于合成数据的可泛化显著目标检测》。

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}
}

来源:Hacker News 热门(buzzing.cc 中文翻译) · usefeyn.com