P1
SAM3 只吃短名词短语
短语一长就 0 命中:11 个样本里 2 个直接空结果。归一化目标是最多两个词、head-final 的 NP。
✓ brush head
✗ toothbrush brush head → 0 instances
处理:object.part → "<part-head> <object-head>";空结果丢弃,或走 GPI 出框 → SAM3 框 prompt 兜底,并标记 part_mask_source。
P2
SAM3 不拒答
给一个图里根本没有的概念 lizard,它照样返回 mask,score 0.867。文本 prompt 只回答“哪里最像”,不回答“有没有”。
prompt: "lizard" → mask ✓, score 0.867 # 图中无蜥蜴
处理:不能只看 score 阈值;必须过 verify_part,并保留 Q2 的粒度标签。
P3
GroundingPI 不拒答
4/4 个明确不存在的目标都出了框。the red sports car 给了几乎全图的框——把“指代失败”表达成了“目标很大”。
"the red sports car" → box ≈ 整张图 # 图中无此车
处理:定位只做候选生成,verify_region 必须保留;全图级框直接判退化。
P4
label 里的逗号会被拆成多个 phrase
GroundingPI 把逗号当分隔符:mug, white, left 会变成三个 phrase 分别定位,返回的框数量与语义都对不上。
"mug, white, left" → ["mug", "white", "left"] # 3 次定位
处理:进模型前清洗,只保留 head 名词与必要修饰;属性拆到独立字段。
P5
WeVisOne 的拒答不稳
直接问“这块是不是该部件”,接受/拒绝随措辞波动;单段式 prompt 不能作为唯一闸门。
单段:detect + segment + judge → accept 不稳
处理:两段式——先“检测过闸”,再“box 驱动 matte”;把判断和分割解耦。
P6
正方形图的 mask 转置 bug
用 shape 判断要不要转置,在正方形图上恒成立,mask 被静默转置。100 张 hot3d 里影响 3 张。
# 错:H==W 时恒成立
if a.shape == (W, H): a = a.T
# 对:只有非正方形才可能靠 shape 判断
if a.shape == (W, H) and W != H: a = a.T
处理:正方形图无法靠 shape 判断,必须在读取时显式记录 transposed 标记;修完后重跑受影响的 3 张。