Files
BGfilter/docs/methodology.md
lhk229 adbbb9d620 Add cross-model veto of hair-gap background residue (default on)
Colour-drifted background trapped between hair strands defeats every
single-signal defence: the chroma key reads it as foreground (bgc ~0.07),
the segmenter backs it, ViTMatte rates it opaque, and post-hoc removal is
a proven dead end (it shreds the hair volume the same pixels belong to).
A second, trimap-free matting model (BiRefNet_HR-matting) is the only
tested model that separates this residue from the subject, so its opinion
is fused in as a veto: min-fusion that may only LOWER alpha, restricted to
the background-hued bright suspect zone (proj >= 3, L >= 45, feathered)
and gated by primary-alpha confidence (0.70 -> 0.95 ramp) so soft wisps
and dark hair are exempt by construction.

- settings/config/CLI: cross_check block, --cross-check/--no-cross-check
- alpha_post.cross_check_alpha after clean_alpha; second opinion reuses
  BiRefNetSegmenter; saved to debug as cross_check_alpha.png
- chroma.bg_hue_projection extracted and shared with the trimap
- docs: methodology.md (new), hair_gap_artifacts.md (investigation log)

Verified: cross-check ON reproduces the visually-reviewed B1gate
prototype byte-for-byte on TestImage3; --no-cross-check reproduces the
previous baseline byte-for-byte; pink-bg FixImage1 face untouched.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-04 19:52:24 +08:00

9.8 KiB
Raw Permalink Blame History

BgFilter 方法论(Methodology)

面向平色背景 AI 角色图像的离线抠图算法。交叉模型否决(§7)经视觉评审 后已落地,默认开启。

1. 问题设定与总体框架

给定一幅在单一平色背景上生成的角色图像 I \in \mathbb{R}^{H\times W\times 3}, 目标是估计逐像素不透明度 \alpha \in [0,1]^{H\times W} 与前景色 F,输出高质量 RGBA。任务难点集中在发丝、半透明边缘、衣物镂空, 以及与背景色相近的主体区域(白衬衫、浅肤色)。

算法的总体框架是三方分权:

  • 色度先验(chroma) 掌握"什么颜色是背景"——提供连续的背景置信度场, 并锐化平背景边界;
  • 语义分割(segmentation) 掌握"哪里是主体"——决定拓扑(把染色发丝留在 前景、把透视孔洞留在背景);
  • matting 模型(ViTMatte) 掌握"边界处的混合比例"——只在双方都不确定的 未知带内做精细 alpha 推理。

三方通过一张三值 trimap(\{0, 128, 255\},即背景/未知/前景)交换决定权; 连续证据(置信度、模型原始输出)则绕过三值接口,在后处理阶段以软方式继续 参与(§4)。管线存在一个退化形态:关闭分割后成为纯 chroma + ViTMatte 的 两方管线,本文以三方管线为主线。

2. 背景颜色先验与置信度场

2.1 背景色自动探测(带失败闸门)

无人工输入时,从图像边框条带(宽度约 4\% 边长)探测背景色:对边框像素的 Lab 值做粗直方图(bin 宽 6),取众数 bin 的均值为峰中心,再以半径 12 聚出 背景簇。设两道质量闸门:

  1. 簇须占边框像素 \geq 55\%;
  2. 四角(各取 3\% 短边见方)中位色与簇中心距离 \leq 20 的须 \geq 3 角。

任一不满足即抛出异常而非硬算——渐变、双色、主体压角等场景应显式失败, 避免对错误的背景色抠图。探测器与后续算法解耦,仅输出一个颜色。

2.2 背景颜色模型

对样本集合(自动模式取边框簇像素;人工输入 hex 时取 Lab 距目标 \leq 25 的像素,优先边框,不足则回退全图最近 10%)做稳健统计:中位数为中心 c_{\mathrm{lab}}, c_{\mathrm{rgb}},以绝对偏差 75 分位 \times 1.4826 为尺度 $\sigma$(设下限,防止过窄的方差把轻微压缩噪声推出背景)。

2.3 背景置信度场

对每个像素以双空间高斯核取较大者:

$$C = \max!\Big(\exp\big(-\tfrac{1}{2}(d_{\mathrm{lab}}/\sigma_{\mathrm{lab}})^2\big),; 0.85,\exp\big(-\tfrac{1}{2}(d_{\mathrm{rgb}}/2.5)^2\big)\Big)$$

其中 d_{\mathrm{rgb}} 为按通道 \sigma 归一的欧氏距离。C 是全管线的 色度主证据:参与 trimap、alpha 压制与前景估计。

3. 语义–色度三信号三值 Trimap

3.1 三个信号

  • C:背景置信度(§2.3),阈值 $\tau_{bg}=0.92$、\tau_{fg}=0.12 把像素分为 chroma-背景 / chroma-前景 / chroma-未知三档;
  • s:分割软掩码(BiRefNet,1024 输入;可切换 anime-seg), 阈值 $\tau_{low}=0.15$、\tau_{core}=0.60;
  • \rho:色调方向投影。设背景 Lab 色度向量为 (a_c, b_c),则
\rho(p) = \frac{a_p a_c + b_p b_c}{\lVert (a_c, b_c) \rVert}

\rho \geq 4.0 记为"偏背景色调"(bg-hued)。\rhoC 互补:$C$ 度量 到背景色的距离,$\rho$ 度量色偏的方向——白衬衫距背景不远但方向中性, 发间蓝残留距背景也不近但方向朝蓝,二者由 \rho 分开。

3.2 融合规则(directional 模式,默认)

\mathrm{BG}: \quad C \geq \tau_{bg} \;\lor\; (s < \tau_{low} \land C > \tau_{fg}) \mathrm{FG}: \quad C \leq \tau_{fg} \land s \geq \tau_{low} \text{Rule 3}: \quad \underbrace{\tau_{fg} < C < \tau_{bg}}_{\text{chroma-未知}} \land\; s \geq \tau_{core} \land \rho < 4.0 \;\Rightarrow\; \mathrm{FG}

其余像素保持未知。规则体现证据分级原则:规则 2 中分割仅需 s \geq 0.15,因为它有 chroma 的独立佐证;规则 3 中分割单独作证 (chroma 弃权),故门槛提高到 0.60,且被 \rho 一票否决——偏背景色调的 高置信像素(发丝间的背景残留)留在未知带,交由 §4 的压制处理,而非 硬定前景。变体 seg(无色调切分)与 directional-hard-bg(bg-hued 直接 判背景,激进,可能误伤冷色阴影下的白布)按参数选用。

最后沿分割轮廓(loose 掩码 s \geq 0.08 的膨胀−腐蚀差)保留一圈细未知带 (不覆盖 chroma-背景),供 matting 模型抗锯齿;带宽刻意小,以保住指缝等 小孔洞。

4. Trimap 引导的 Alpha 推理与后验修正

4.1 推理与硬钳制

ViTMatte(base,Composition-1K 权重)以 RGB + trimap 为输入输出原始 alpha $\alpha_{raw}$。随后 enforce_trimap 施加硬保证:

\alpha[\mathrm{BG}] \equiv 0, \qquad \alpha[\mathrm{FG}] \equiv 1

这使"确定背景恒透明"成为结构性质而非统计性质——模型幻觉无法漏入 已判定的背景。ViTMatte 不可用时可回退 chroma 种子 $\alpha = \mathrm{clip}(1 - C)$(按参数启用)。

4.2 带 matte 置信门的色度压制

未知带内残存的背景色(发丝缝隙、孔洞死角)由色度证据压除。记 S(x; e_0, e_1) 为 smoothstep,压制系数为

\lambda = S(C;\, 0.35,\, 0.80)\; \cdot\; \big(1 - S(\alpha_{raw};\, 0.85,\, 0.98)\big) \alpha' = \alpha \cdot (1 - k\,\lambda), \quad k=1, \quad \text{仅作用于未知带}

第二个因子是 matte 置信门:ViTMatte 自信不透明(\alpha_{raw} \to 1)的 像素豁免压制。设计原则为"色度证据只在模型不确定处拥有否决权"—— 背景色残留处模型原始输出低(实测中位 \approx 0.28),仍可压除;而背景色 的主体(浅蓝底上的白衬衫、粉底上的腮红)模型原始输出高(实测 \approx 0.97),被门保护。该门同时修复了纯 chroma 管线长期存在的 白衬衫/浅肤穿洞问题。

4.3 形态学清理

clean_alpha 移除未知带内面积 < 10^{-5} HW 的孤立前景连通域;并将完全 落在 trimap-前景内部、面积 \leq 2\times10^{-5} HW 且不触及图像边缘的 非实心区域填实(消除模型在确定前景内部的针孔)。

5. 前景颜色恢复与定向去溢色

5.1 前景色估计

以 pymatting 的多级前景估计(正则 10^{-5})从 I = \alpha F + (1-\alpha)B 中解出 F,使半透明像素的颜色摆脱背景污染;不可用时回退启发式反混合。

5.2 定向去溢色(despill)

以背景 Lab 色度方向 \hat d = (a_c, b_c)/\lVert\cdot\rVert 为轴,对前景带 (含向外扩张 2 px)中沿该轴超出边距 m = 4.0 的色度分量按权回拉:

$$\mathrm{excess} = \max(\rho - m,, 0), \qquad (a, b) \leftarrow (a, b) - w \cdot \mathrm{excess} \cdot \hat d$$

权重 w 由 alpha 权(不透明区全力,近透明区按下限 0.35 缓和)与色度权 (excess 归一)相乘。只动 $a^b^$、保留亮度 L,故发丝纹理与明暗不受损。 该式对任意平色背景成立:饱和绿幕退化为经典通道抑制,低饱和 pastel 背景(无主导 RGB 通道)由同一投影统一处理。

6. 设计原则小结

  1. 分权与制衡:拓扑归分割、颜色归色度、混合比例归 matting 模型; 任何一方不得越界(如色度不得推翻分割的拓扑判断)。
  2. 证据分级:证据越孤立,启用门槛越高(规则 2 的 0.15 对规则 3 的 0.60)。
  3. 弱者才可被否决:后验修正(压制)只作用于上游不确定的区域—— trimap 限定作用域(未知带),matte 置信门限定作用强度。
  4. 硬保证优先:三值接口 + 硬钳制换来"确定区零泄漏"的结构保证; 连续证据经旁路(压制、置信门、alpha 种子)参与,不稀释保证。
  5. 显式失败:背景探测不达标即报错,拒绝在错误先验上静默产出。

7. 局限与评估中的扩展

已知局限:发丝间隙中颜色已漂移的背景残留(bgc \approx 0.07,偏离 \tau_{fg} 之下)同时骗过三方——chroma 视其为前景、分割置信度高、 ViTMatte 判其为发丝高光(\alpha_{raw} 中位 0.989),四个模型族 (ViTMatte Com-1K / D646、BiRefNet_HR-matting、SEMat-SAM2)对其中约四成 像素一致判不透明。详见 docs/hair_gap_artifacts.md。

交叉模型置信否决(已落地,默认开启):引入一个 trimap-free matting 模型(BiRefNet_HR-matting, 2048)作第二意见 \alpha_{2nd},仅在色度定义 的可疑区(\rho \geq 3L \geq 45 且非确定背景,边界高斯羽化)内、 且主结果假自信的像素上行使否决,采用保守的 min 融合(视觉评审否决了 更激进的意见锐化变体):

$$\alpha' = \mathrm{lerp}\big(\alpha,; \min(\alpha,, \alpha_{2nd}),; g\big), \qquad g = \mathrm{zone} \times S(\alpha;, 0.70,, 0.95)$$

该设计延续原则 3:第二意见的发言范围由色度划定,可否决对象由置信门限定, 且只许压低、不许抬高——确定背景的零 alpha 结构上不可能被扰动;软发丝 (本就半透明,门控豁免)与暗发丝(亮度豁免)不受影响。可疑区内它有意 凌驾于 trimap-FG 硬钳制之上:待清除的残留多数恰是 trimap-FG。

附录:关键默认参数

模块 参数 默认值
背景探测 簇半径 / 边框占比门限 / 角容差 12 / 0.55 / 20
置信度场 \sigma_{\mathrm{lab}} 下限 / \sigma_{\mathrm{rgb}} 下限 10 / 0.08
Trimap \tau_{bg} / \tau_{fg} / \tau_{low} / \tau_{core} / \rho 门限 0.92 / 0.12 / 0.15 / 0.60 / 4.0
压制 bgc 斜坡 / matte 门斜坡 / 强度 0.350.80 / 0.850.98 / 1.0
清理 最小连通域 / 填孔面积比 10^{-5} / 2\times10^{-5}
去溢色 边距 m / 强度 / alpha 权下限 4.0 / 0.92 / 0.35
交叉否决 \rho 门限 / L 门限 / 羽化 \sigma / 置信门 lohi 3.0 / 45 / 2.0 / 0.700.95
模型 分割 / matting / 第二意见 / 设备 BiRefNet@1024 / ViTMatte-base / BiRefNet_HR-matting@2048 / cpu