问题
抠图会在角色内部打洞:alpha=0 的区域出现在四周被主体包围的位置,合成到画布上时洞里透出背景色,角色看起来像被漂白。
证据
生产 task 391「像素程序员法师角色」,256×256,auto_pixelate=true,32 帧。判据是纯拓扑的——从画布四边泛洪找真背景,剩下的透明区即内部洞:
| 帧 |
主体面积 |
内部洞 |
占主体 |
| f00 |
11479px |
2620px |
22.8% |
| f08 |
11354px |
2326px |
20.5% |
| f16 |
8843px |
2825px |
31.9% |
即五分之一到三分之一的角色被打穿,集中在黑头发、深色卫衣、裤子。同任务的参考首帧半透明像素占 16.5%,动作帧升到 23.9%~35.5%,沿时间轴单调上升。
已排除的原因(逐条做了对照,勿重复走一遍)
- 不是缺少填洞逻辑。
providers/matte.py 的 cutout() 里已有 _fill_enclosed_holes(alpha, rgb),判据是连通性 + 颜色两条,且已处理「迈步时两靴交叠封死腿间空隙」那种情况。生产镜像里这段代码在。
- 不是精修被关掉。 生产
WINDUP_MATTE_REFINE=1,u2netp 与 u2net 两个权重都在 /root/.cache/windup/,取逐像素较大 alpha。
- 不是像素化那一步造的。 用生产同一份
cutout() + to_pixel_art() 跑真实 i2v 帧,全分辨率 2.2% → 像素化到 195 是 2.2% → 到 160 是 2.1%,各步不增。
- 不是底色识别失败。 同一帧上
_bg_key 返回 [128,128,126],填洞那步没有被跳过。
尚未定位的部分(说明现状,不假装已知)
在我手上的 i2v 帧(银发法师,主体 562px)上,生产 cutout() 只留 2.2% 内部洞;task 391 的交付帧却是 20%~32%。两者差别可能在角色本身(391 是深色小体量 chibi,肢体细)或在它那条视频。task 391 的源视频没有持久化,只存了帧,因此无法直接复跑那一条。
要往下定位需要其中之一:
- 用同一角色母版重新生成一次动作,并保留源视频;
- 或在管线里把 i2v 源视频(或抽出的原始帧)也存一份,供事后归因。
顺带发现(另一个问题,不在本 Issue 修)
#686 已合入 BiRefNetMatteProvider,但没有任何调用点实例化它:bootstrap/worker.py:133、orchestrator/executor.py:865、executor.py:1197、view_sheet_executor.py:343 四处仍硬编码 OnnxU2NetMatteProvider(),也无配置开关。代码在仓里,生产跑的仍是 u2net。且不能直接切换:BiRefNet 单帧峰值实测 6.85GB,生产 worker 容器内存上限 5GiB(宿主 4 核 7GB)。
验收标准
相关
问题
抠图会在角色内部打洞:alpha=0 的区域出现在四周被主体包围的位置,合成到画布上时洞里透出背景色,角色看起来像被漂白。
证据
生产 task 391「像素程序员法师角色」,256×256,
auto_pixelate=true,32 帧。判据是纯拓扑的——从画布四边泛洪找真背景,剩下的透明区即内部洞:即五分之一到三分之一的角色被打穿,集中在黑头发、深色卫衣、裤子。同任务的参考首帧半透明像素占 16.5%,动作帧升到 23.9%~35.5%,沿时间轴单调上升。
已排除的原因(逐条做了对照,勿重复走一遍)
providers/matte.py的cutout()里已有_fill_enclosed_holes(alpha, rgb),判据是连通性 + 颜色两条,且已处理「迈步时两靴交叠封死腿间空隙」那种情况。生产镜像里这段代码在。WINDUP_MATTE_REFINE=1,u2netp 与 u2net 两个权重都在/root/.cache/windup/,取逐像素较大 alpha。cutout()+to_pixel_art()跑真实 i2v 帧,全分辨率 2.2% → 像素化到 195 是 2.2% → 到 160 是 2.1%,各步不增。_bg_key返回[128,128,126],填洞那步没有被跳过。尚未定位的部分(说明现状,不假装已知)
在我手上的 i2v 帧(银发法师,主体 562px)上,生产
cutout()只留 2.2% 内部洞;task 391 的交付帧却是 20%~32%。两者差别可能在角色本身(391 是深色小体量 chibi,肢体细)或在它那条视频。task 391 的源视频没有持久化,只存了帧,因此无法直接复跑那一条。要往下定位需要其中之一:
顺带发现(另一个问题,不在本 Issue 修)
#686 已合入
BiRefNetMatteProvider,但没有任何调用点实例化它:bootstrap/worker.py:133、orchestrator/executor.py:865、executor.py:1197、view_sheet_executor.py:343四处仍硬编码OnnxU2NetMatteProvider(),也无配置开关。代码在仓里,生产跑的仍是 u2net。且不能直接切换:BiRefNet 单帧峰值实测 6.85GB,生产 worker 容器内存上限 5GiB(宿主 4 核 7GB)。验收标准
相关