100 图实测 · H200 · 2026-10-30

蒙版填充 vs 描边

同一批图、同一个分割器、同一套提示词。唯一改动:蒙版从「整块填红」变成「只画一圈轮廓」。

物体导出100 图 · 物体管线
834→928
+94 行+11.3%
export_100_v2_obj_fix → export_100_v2_obj_outline · dataset.jsonl
部件导出100 图 · 部件管线
77→97
+20 行+26.0%
export_part_only_27b_fix → export_part_only_27b_outline · dataset.jsonl

结论只改了画法(填充 → 描边),物体管线多 94 行,部件管线多 20 行。

01 · 对照

同一张图,两种画法

三组图都从 H200 跑批目录原样取出:同一张图、同一个 mask、同一个区域索引,只换渲染。每张图右上角是从同一文件裁出的细节放大,方便看边界。绿框是管线的候选框,红线才是这轮要对比的蒙版渲染。

01

白杯,蓝桌

物体管线 区域 000

white mug, center of blue table

fill · 填充45% 红覆盖
填充版:白杯被整块红色覆盖,杯身和杯把的白色完全消失 填充版细节:杯子变成一块没有明暗的红色2× 细节
白瓷、杯把、杯口高光全被盖住,只剩一个红色剪影。
outline · 描边2px 轮廓
描边版:白杯保持原色,杯沿有一圈红色轮廓 描边版细节:白杯的材质与高光都在,只有边缘一圈红线2× 细节
白瓷、蓝桌、阴影都留着,只在杯沿多一圈红线。

看点fill 让「白杯子」在视觉上变成「红杯子」——这正是后面题目里冒出 red 的源头;outline 下它仍然是白的。

图源:runs_100_v2_obj_{fix,outline}/out_region_refine_partafford_10350/accepted_regions/000_*.png

02

红杯子

物体管线 区域 004

mug, red, left side of desk

fill · 填充45% 红覆盖
填充版:桌上的红杯子与红色蒙版完全融在一起,看不出边界 填充版细节:整个杯子是一团饱和的红,杯口和杯把只剩微弱轮廓3× 细节
杯子本来就是红的:蒙版与物体同色,边界信息趋近于零。
outline · 描边2px 轮廓
描边版:红杯子保持原色,杯沿有一圈更亮的红色轮廓 描边版细节:能看到杯口、杯把和杯身的明暗3× 细节
同样的红色,但杯口、杯把、明暗都还在,轮廓另画一圈。

看点红物体是 fill 的最坏情况:蒙版和物体同色,模型只能看到「一团红」,没有第二层信息可判断。

图源:runs_100_v2_obj_{fix,outline}/out_region_refine_roboafford_76/accepted_regions/004_*.png

03

笔记本电脑盖

部件管线 part 002

laptop lid

fill · 填充65% 红覆盖
部件填充版:银色笔记本盖子被整块红色覆盖,只剩很淡的苹果标 部件填充版细节:盖子成为一块红板,苹果标几乎不可见3× 细节
部件 fill 用 65% 红:银色盖子变红板,材质与反光消失(白边是旧实现自带的 2px 描边)。
outline · 描边2px 轮廓
部件描边版:银色笔记本盖子保持金属色,外沿有一圈红色轮廓 部件描边版细节:金属反光和苹果标都在,红线贴着盖子外沿3× 细节
金属色、反光、苹果标都在,红线贴着盖子外沿。

看点部件 fill 的覆盖比例更高(65%):金属、反光、logo 一起被洗掉;描边只改写 mask 内 4.9% 的像素,其余原样保留。

图源:runs_part_only_27b_{v2,outline}/out_region_roboafford_57/accepted_parts/overlays/part_002.png

02 · 机制

为什么导出会变多

同一张 overlay,既给「验区」看,也给「验题」看。fill 把它不认识的东西涂成红色,模型就没有颜色和材质可依据。

fill45% 填充
部件 65%
  1. 同一个 mask分割结果完全一致
  2. 整块涂红颜色、材质、高光被覆盖
  3. 模型看到一团红认不出是白杯还是红瓶
  4. 判错 → 误拒区域或题目被丢掉
outline2–3px
轮廓
  1. 同一个 mask分割结果完全一致
  2. 只画边界mask 内 4.9% 像素改写(fill 100%)
  3. 原色保留白瓷仍是白瓷,金属仍有反光
  4. 认得出 → 接受区域和题目留下来

误拒变少,导出自然涨。

这是减少假阴性,不是放宽标准:mask 没变、阈值没变、提示词也没变。

457 → 462accepted 区域,只多 5 个
65.3% → 68.7%验题通过率,+3.4pt
834 → 928最终导出,+94 行

区域接受只多 5 个,导出却多 94 行:增量主要发生在「验题」环节——模型认得出图里的东西之后,同一批题目更容易被判为成立。来源:runs_100_v2_obj_*/{entities,spatial,affordances,relations,physics}/summary.json。

单图核验(partafford_10350,同一批 mask 各渲染一次):mask 内被改写的像素 100% → 4.9%,mask 内平均色差 71.7 → 8.4。来源:REPORT_OUTLINE_100.md §2。

03 · 全部指标

100 图,两条管线

下表是这一轮的全部核心数字。物体与部件是两条配置不同的管线,各自只和自己的基线比,不能横向比较。

指标filloutline变化
物体导出export_100_v2_obj_* · dataset.jsonl 行数 834 928 +94 · +11.3%
部件导出export_part_only_27b_* · dataset.jsonl 行数 77 97 +20 · +26.0%
物体题数runs_100_v2_obj_* · 5 类题的题目总数 1486 1349 −137 · −9.2%
物体提「红/高亮」题目命中 \bred\b|highlight|red-tinted|red mask 4.8% 3.4% −1.4pt
部件提「红/高亮」runs_part_only_27b_* · 177 条题 1.3% 2.3% +1.0pt · 样本小
含 end effectoraccepted_parts/parts.json · part_name 0 0 持平

口径:100 图、2 shard × 6 并发整轮跑完;导出为 dataset.jsonl 的实际行数。物体:R1.5 + GroundingPI + SAM3;部件:27B + SAM3。

提红:对每张图 5 类题的全部题目跑同一正则,按题目条数计数;4.8% → 3.4% 是 −1.4 个百分点。部件侧 177 条里 1 条约等于 0.56pt。

题数下降:物体题数少了 137 条,导出反而多 94 行——增量不是靠多出题堆出来的。

04 · 顺带修复

题目不再把红色当物体颜色

4.8%fill · 题目提红
→
3.4%outline · 题目提红
明确泄漏(red mask / red-tinted)人工复核 3–5 条→3 条
部件题里的 end effector 0→0

fill 里真实生成的题

Segment the object inside the red mask and green box

Identify the red mask covering the bowl

Segment the red-tinted area on the gray surface surrounding the blue mat.

→ 模型把「蒙版」本身当成了场景里的物体

outline 仍有 3 条,没清零

Segment the brown chip bag with a red mask

→ 剩下的更像个别措辞,而不是系统性地把白物体描述成红的;这轮没有专门清洗。

部件侧 177 条题里,这类泄漏 0 条。

「明确泄漏」是人工复核口径:只数把蒙版本身当作物体来描述的题;自动正则会连「red mask 左边的东西」这类关系型表述一起算进去,所以上表的 4.8% / 3.4% 更高。

05 · 边界

这页没证明什么

三个限制,先说清楚再下结论。

01

部件侧样本太小

「提红」从 1.3% 升到 2.3%,也就是 4 条 / 177 条。177 条里 1 条约 0.56pt,1 ↔ 4 条的差异在抽样噪声内(n=177),不构成退化证据。

02

线宽没调过

描边厚度是 2–3px 按图尺寸缩放(640×480 上是 2px,≥900px 才 3px),这轮没有扫厚度。本页所有图都是这个默认值。

03

只改了渲染

提示词、模型、分割器、阈值、并发都没动,所以是干净的对照。但物体与部件用的不是同一个模型,两组数字不能互相横比。

来源:4 条 / 177 条与 1.3% / 2.3% 见上表;线宽实现见 REPORT_OUTLINE_100.md §1(_overlay_width / _mask_edge),本页未做厚度扫描。

06 · 回滚

一行回到旧画法

outline 已是默认;任何一轮想复现旧结果,加一个参数即可。

shell
python dataengine/run.py ... --overlay-style fill

# 或全局环境变量
export DE_OVERLAY_STYLE=fill
复现本页统计
python3 /root/converseg-data/analyze_outline.py \
  /root/converseg-data/runs_100_v2_obj_outline \
  /root/converseg-data/export_100_v2_obj_outline obj_outline